Паскаль

Аватар пользователя
Soul
Сообщений: 2475
Зарегистрирован: 09 апр 2006, 21:00

Паскаль

Сообщение Soul » 09 июн 2008, 20:57

Я не смеялся, я удивился. И если вам говорят такие вещи, то я право же советовал бы, не все сразу брать на веру, что вам говорят :(.

ЗЫ Без обид, ничего личного, просто похоже, что преподаватель мог бы быть несколько более компетентным :(.
Последний раз редактировалось Soul 30 ноя 2019, 12:13, всего редактировалось 1 раз.
Причина: test

fynt
Сообщений: 915
Зарегистрирован: 07 фев 2007, 21:00

Паскаль

Сообщение fynt » 09 июн 2008, 21:20

Задача на строки в лоб решиться отказалась.. Пришлось думать :acute:

Я написал самое сложное. Для начала идёт определение последнего слова...... (Хотя я вот подумал что это слово тоже надо обрабатывать или нет?!)
Затем в цикле пробегаем по всей строке. Пока бежим ищем слова.
Как только слово найдено производится его обработка и вывод на экран.
Я просто вывожу на экран, не делая сравнения c последним.

S - Исходная строка.
Spr - слово которое было найдено в строке.
Sen - слово после обработки.
PoslSlovo - последнее слово строки.
Flag - служит для определения начала и конца слова.
Empty - множество куда заносятся и проверяются все вхождения.

Код: Выбрать все

Var i, k : Integer;
 S, Spr, Sen, PoslSlovo : String;
 Empty : set of Char;
 Flag : Boolean;

Begin
Write('Spr:'); Readln(S);

{Определяем последнее слово}
For i := Length(S) DownTo 1 Do
 Begin
 If S[i] = ' ' Then Break;
 PoslSlovo :=S[i] + PoslSlovo;
 End;

{Выставляем флаг в True если строка не начинается c пробела}
If S[1] <> ' ' Then Flag := True;

{Начинаем идти по всей строке}
For k := 1 To Length(S) Do
 Begin
 {Находим в строке слово}
 If S[k] = ' ' Then Flag := False Else Flag := True;
 If Flag = True Then
 Begin
 Spr := Spr + S[k];
 If k <> Length(S) Then Continue;
 End;

{Производим необходимую обработку найденного слова}
For i := 1 To Length(Spr) Do
 Begin
 If Spr[i] in Empty Then Continue
 Else
 Begin
 Empty := Empty + [Spr[i]];
 Sen := Sen + Spr[i];
 End;
 End;
If Length(Sen) Mod 2 = 1 Then Delete(Sen, (((Length(Sen) + 1) Div 2)), 1);

{Выводим обработаное слово}
Write(Sen, ' ');

{Обнуляем нужные переменые}
Spr := ''; Sen := ''; Flag := False; Empty := Empty - Empty;
End;

Readln;
End.


Суда осталось только добавить:
1. Сравнение c последним словом.
2. Проверка не пуста ли строка.

ЗЫ: Сыроват конечно код.... Тут наверняка можно чтото упростить...
Последний раз редактировалось fynt 30 ноя 2019, 12:13, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Паскаль

Сообщение Arven » 10 июн 2008, 13:29

fynt писал(а):Source of the post
Задача на строки в лоб решиться отказалась.. Пришлось думать :acute:

Co строками всегда так.. противные они.
Я написал самое сложное. Для начала идёт определение последнего слова...... (Хотя я вот подумал что это слово тоже надо обрабатывать или нет?!)
Нет, там типа условие, что "все слова, отличные от последнего слова".
S - Исходная строка.
Spr - слово которое было найдено в строке.
Sen - слово после обработки.
PoslSlovo - последнее слово строки.
Flag - служит для определения начала и конца слова.
Empty - множество куда заносятся и проверяются все вхождения.
За это отдельное спасибо. Нет ничего хуже, чем разбираться c переменными, написанными другим человеком...:)
Этот цикл:

Код: Выбрать все

Var i, k : Integer;
 S, Spr, Sen, PoslSlovo : String;
 Empty : set of Char;
 Flag : Boolean;

Begin
Write('Spr:'); Readln(S);
{Определяем последнее слово}
For i := Length(S) DownTo 1 Do
 Begin
 If S[i] = ' ' Then Break;
 PoslSlovo :=S[i] + PoslSlovo;
 End;
у меня аналогично...
Только я очень хочу уже давно спросить: что есть Set of Char? Как оно задаётся?
Я б тут задала

Код: Выбрать все

Const
Empty: Set of Char =['a', 'b', 'c'... ] -- etc.
, a то откуда программа знает из какого Set of char_a ей брать сравниваемые переменные..
Сразу скажу, что в учебнике моей преподавательницы не написано про это ну ничччего...
Суда осталось только добавить:
1. Сравнение c последним словом.
A зачем? Мы же его нашли уже, потом только процедуру Delete сделать, удалить это слово -- a потом оперирование идёт уже co всеми остальными?
ох, ну и написала же я тут... Теперь поняла, что за проверка, слово то мы как раз и не удаляем... A проверка:
If (Vrem_Wd <> Pl_Wd) then
Begin...
Последний раз редактировалось Arven 30 ноя 2019, 12:13, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
qwertylol
Сообщений: 3761
Зарегистрирован: 01 ноя 2007, 21:00

Паскаль

Сообщение qwertylol » 10 июн 2008, 14:47

Только я очень хочу уже давно спросить: что есть Set of Char? Как оно задаётся?

Множество из символов. задать можно так так:

Код: Выбрать все

<название переменной>:Set of <тип множества>;

Присвоить так:

Код: Выбрать все

<название переменной>:=[<первый компонент множества>,<втрой>,<третий>,...];

A вообще раздел "множества" есть во всех без исключения учебниках(в этом например).
Кстати, вот про то, что множества обрабатываются очень медленно вам должны были сказать на лекции, a не про сопроцессор(хотя сам лекции по программированию не посещаю, поэтому по себе судить не могу).
Последний раз редактировалось qwertylol 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Паскаль

Сообщение Arven » 10 июн 2008, 14:58

qwertylol писал(а):Source of the post
Кстати, вот про то, что множества обрабатываются очень медленно вам должны были сказать на лекции, a не про сопроцессор(хотя сам лекции по программированию не посещаю, поэтому по себе судить не могу).
:lool: Я тоже лекции по программированию не посещаю. И ни по чём вообще. Их у меня нет и быть не должно :).
Пару раз сходила, пообщалась c преподавательницей, кот. будет лабораторные принимать (собственно, это она и заявила про Extended и Comp)... He говорит НИЧЕГО, хотя может.
Про то, что множества обрабатываются очень медленно, наверняка, ещё найду в своём учебнике, там вообще, ресурсам памяти уделено крайне много внимания...
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Паскаль

Сообщение Arven » 10 июн 2008, 18:11

M-дя.. Есть у меня кусок текста.. Там надо вычеркнуть все глассные буквы, если строка, в кот. убираем глассные буквы, окажется пустой ==> т.e. все глассные, то надо вывести сообщение, что строка пустая.
Я написала так:

Код: Выбрать все

For i:= to Length (Temp) do
 Begin
 If (Temp <> Char_set) then
 Begin
 If not (Temp[i] in Char_set) then
 Begin
 S1:= S1 + Temp[i];
 End;
 End;
 Else Writeln (Строка пуста);
Если мы c множествами пишем, так возможно?
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
qwertylol
Сообщений: 3761
Зарегистрирован: 01 ноя 2007, 21:00

Паскаль

Сообщение qwertylol » 10 июн 2008, 18:14

нет, строку и множество сравнивать нельзя.
For i:= to Length (Temp) do

это тоже не заработает, i надо что-то присвоить и если там один, a строка пустая- то цикл не пройдёт ни разу.
Последний раз редактировалось qwertylol 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Паскаль

Сообщение Arven » 10 июн 2008, 18:24

qwertylol писал(а):Source of the post нет, строку и множество сравнивать нельзя.
Вот тут я как раз и сомневалась... Как лучше тут вставить проверку, чтобы не оказались все глассные в слове?
For i:= to Length (Temp) do

это тоже не заработает, i надо что-то присвоить и если там один, a строка пустая- то цикл не пройдёт ни разу.
Это очепятка :). Да, там вот так:

Код: Выбрать все

For i:= 1 to Length (Temp) do

и если там один, a строка пустая- то цикл не пройдёт ни разу.
B таком случае просто можно после этого цикла написать ещё один, т.e. так:

Код: Выбрать все

For i:= 1 to Length (Temp) do
 Begin
 If not (Temp[i] in Char_set) then
 Begin
 S1:= S1 + Temp[i];
 End;
 End;
 If (Temp in Char_set) then Writeln ('Строка пуста');
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
qwertylol
Сообщений: 3761
Зарегистрирован: 01 ноя 2007, 21:00

Паскаль

Сообщение qwertylol » 10 июн 2008, 18:59

темп- это строка и она не может принадлежать множеству из символов. Вам вроде надо просто проверить на пустоту результат. if Length(S1)=0 then.. или if S1[0]=#0 then..
Я так понял, что в set_char содержатся гласные буквы?
Последний раз редактировалось qwertylol 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Паскаль

Сообщение Arven » 10 июн 2008, 19:03

qwertylol писал(а):Source of the post
Я так понял, что в set_char содержатся гласные буквы?
Да, Char_set : set of char, которое содержит все глассные буквы.
if Length(S1)=0 then.. или if S1[0]=#0 then..
Действительно :sorry:)
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test


Вернуться в «Computer Science»

Кто сейчас на форуме

Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 4 гостей