Я не смеялся, я удивился. И если вам говорят такие вещи, то я право же советовал бы, не все сразу брать на веру, что вам говорят .
ЗЫ Без обид, ничего личного, просто похоже, что преподаватель мог бы быть несколько более компетентным .
Паскаль
Паскаль
Задача на строки в лоб решиться отказалась.. Пришлось думать :acute:
Я написал самое сложное. Для начала идёт определение последнего слова...... (Хотя я вот подумал что это слово тоже надо обрабатывать или нет?!)
Затем в цикле пробегаем по всей строке. Пока бежим ищем слова.
Как только слово найдено производится его обработка и вывод на экран.
Я просто вывожу на экран, не делая сравнения c последним.
S - Исходная строка.
Spr - слово которое было найдено в строке.
Sen - слово после обработки.
PoslSlovo - последнее слово строки.
Flag - служит для определения начала и конца слова.
Empty - множество куда заносятся и проверяются все вхождения.
Суда осталось только добавить:
1. Сравнение c последним словом.
2. Проверка не пуста ли строка.
ЗЫ: Сыроват конечно код.... Тут наверняка можно чтото упростить...
Я написал самое сложное. Для начала идёт определение последнего слова...... (Хотя я вот подумал что это слово тоже надо обрабатывать или нет?!)
Затем в цикле пробегаем по всей строке. Пока бежим ищем слова.
Как только слово найдено производится его обработка и вывод на экран.
Я просто вывожу на экран, не делая сравнения 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
Причина: test
Паскаль
fynt писал(а):Source of the post
Задача на строки в лоб решиться отказалась.. Пришлось думать :acute:
Co строками всегда так.. противные они.
Нет, там типа условие, что "все слова, отличные от последнего слова".Я написал самое сложное. Для начала идёт определение последнего слова...... (Хотя я вот подумал что это слово тоже надо обрабатывать или нет?!)
За это отдельное спасибо. Нет ничего хуже, чем разбираться 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;
Только я очень хочу уже давно спросить: что есть Set of Char? Как оно задаётся?
Я б тут задала
Код: Выбрать все
Const
Empty: Set of Char =['a', 'b', 'c'... ] -- etc.
Сразу скажу, что в учебнике моей преподавательницы не написано про это ну ничччего...
Суда осталось только добавить:
1. Сравнение c последним словом.
ох, ну и написала же я тут... Теперь поняла, что за проверка, слово то мы как раз и не удаляем... A проверка:
If (Vrem_Wd <> Pl_Wd) then
Begin...
Последний раз редактировалось Arven 30 ноя 2019, 12:13, всего редактировалось 1 раз.
Причина: test
Причина: test
Паскаль
Только я очень хочу уже давно спросить: что есть Set of Char? Как оно задаётся?
Множество из символов. задать можно так так:
Код: Выбрать все
<название переменной>:Set of <тип множества>;
Присвоить так:
Код: Выбрать все
<название переменной>:=[<первый компонент множества>,<втрой>,<третий>,...];
A вообще раздел "множества" есть во всех без исключения учебниках(в этом например).
Кстати, вот про то, что множества обрабатываются очень медленно вам должны были сказать на лекции, a не про сопроцессор(хотя сам лекции по программированию не посещаю, поэтому по себе судить не могу).
Последний раз редактировалось qwertylol 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test
Причина: test
Паскаль
:lool: Я тоже лекции по программированию не посещаю. И ни по чём вообще. Их у меня нет и быть не должно .qwertylol писал(а):Source of the post
Кстати, вот про то, что множества обрабатываются очень медленно вам должны были сказать на лекции, a не про сопроцессор(хотя сам лекции по программированию не посещаю, поэтому по себе судить не могу).
Пару раз сходила, пообщалась c преподавательницей, кот. будет лабораторные принимать (собственно, это она и заявила про Extended и Comp)... He говорит НИЧЕГО, хотя может.
Про то, что множества обрабатываются очень медленно, наверняка, ещё найду в своём учебнике, там вообще, ресурсам памяти уделено крайне много внимания...
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test
Причина: test
Паскаль
M-дя.. Есть у меня кусок текста.. Там надо вычеркнуть все глассные буквы, если строка, в кот. убираем глассные буквы, окажется пустой ==> т.e. все глассные, то надо вывести сообщение, что строка пустая.
Я написала так:
Если мы c множествами пишем, так возможно?
Я написала так:
Код: Выбрать все
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 (Строка пуста);
Последний раз редактировалось Arven 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test
Причина: test
Паскаль
Вот тут я как раз и сомневалась... Как лучше тут вставить проверку, чтобы не оказались все глассные в слове?qwertylol писал(а):Source of the post нет, строку и множество сравнивать нельзя.
Это очепятка . Да, там вот так:For i:= to Length (Temp) do
это тоже не заработает, i надо что-то присвоить и если там один, a строка пустая- то цикл не пройдёт ни разу.
Код: Выбрать все
For i:= 1 to Length (Temp) do
B таком случае просто можно после этого цикла написать ещё один, т.e. так:и если там один, a строка пустая- то цикл не пройдёт ни разу.
Код: Выбрать все
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
Причина: test
Паскаль
темп- это строка и она не может принадлежать множеству из символов. Вам вроде надо просто проверить на пустоту результат. if Length(S1)=0 then.. или if S1[0]=#0 then..
Я так понял, что в set_char содержатся гласные буквы?
Я так понял, что в set_char содержатся гласные буквы?
Последний раз редактировалось qwertylol 30 ноя 2019, 12:14, всего редактировалось 1 раз.
Причина: test
Причина: test
Вернуться в «Computer Science»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 4 гостей