Вопрос № 180408: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, решить задачу: Создать случайным образом двумерный массив целых чисел В каждой строке найти максимум и заменить его на противоположный по знаку элемент. (пользуюсь программо...
Вопрос № 180409: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, решить задачу: Разработать программу, которая для заданной строки s выводит на экран последовательность символов, расположенных после последнего двоеточия. (пользуюсь программо...
Вопрос № 180411: Здравствуйте, уважаемые эксперты! Помогите, пожалуйста, решить задачу: Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Вывести только те слова, которые встречают...
Вопрос № 180408:
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 22.10.2010, 15:48
Номер ответа: 263612 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263612
на номер 1151 (Россия) |
Еще номера »
Смотрите приложение. Программа простая, комментировать особо нечего. Удачи!
Приложение:
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 22.10.2010, 14:58
Номер ответа: 263607 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263607
на номер 1151 (Россия) |
Еще номера »
Ответ поддержали (отметили как правильный):
1 чел.
program p180409; { Программа для заданной строки s выводит на экран последовательность символов, расположенных после последнего двоеточия. } var // раздел переменных
i : integer; len: integer; s : string; begin // раздел операторов write('Строка s='); readln(s); if trim(s)='' then writeln('пустая строка') else begin len := length(s); i:= len; // установили счетчик на конец строки while (i>=0) and (s[i]<>':') do i:= i-1; // и идем влево до первого справа появления двоеточия или до начала строки if i
<0 then writeln('нет двоеточий') else if (i=len) then writeln('после последнего двоеточия пусто') else writeln(copy(s,i+1, len-i)); end end.
Примеры работы
Код:
Строка s=123:456 456 Строка s=123:456:456::456 456 Строка s= пустая строка Строка s=123456 нет двоеточий Строка s=123: после последнего двоеточия пусто
Ответ отправил: lamed (Профессор)
Ответ отправлен: 22.10.2010, 15:03
Номер ответа: 263609
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263609
на номер 1151 (Россия) |
Еще номера »
Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания. Вывести только те слова, которые встречаются в тексте ровно один раз.
(пользуюсь программой ABC)
Отправлен: 22.10.2010, 15:01
Вопрос задал: verona (2-й класс)
Всего ответов: 2 Страница вопроса »
Смотрите приложение. вопросы задавайте в мини-форум. Удачи!
Приложение:
----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч
Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 22.10.2010, 17:52
Номер ответа: 263613 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263613
на номер 1151 (Россия) |
Еще номера »
Ответ поддержали (отметили как правильный):
1 чел.
Отвечает lamed (Профессор) :
Здравствуйте, verona! Функция pos не "знает" о словах, отделенных от других специальными символами-разделителями. Функция PurePos выдает ненулевое значение, если искомое слово в строке есть и не является частью какого-либо слова строки Функция FirstWord возвращает первое найденное слово в строке с разделителями. Если "пусто", значит, в строке нет ничего, кроме разделителей. Pascal ABC.
Код:
type TDelim = set of char;
function FirstWord(s: string; delim: TDelim): string; // Первое (слева) слово в строке с разделителями // var i : integer; rez: string; begin i:= 1; while s[i] in delim do inc(i);
rez :
= ''; while (i<=length(s)) and (not (s[i] in delim)) do begin rez := rez+s[i]; inc(i); end; FirstWord := rez; end;
function PurePos(subs: string; s: string; delim: TDelim): integer; // Позиция первого "чистого" вхождения слова в строку // например, слово <ФОРМА> не входит в строку <ИНФОРМАТИКА> var lenS : integer; // длина строки lenSubs: integer; // длина подстроки i : integer; // счетчик цикла begin
lenS := length(s); lenSubs := length(subs); PurePos := 0;
for i:= 1 to lenS-lenSubs+1 do begin if (copy(s,i,lenSubs)=subs) and ((i=1) or (s[i-1] in delim)) and ((i=lenS-lenSubs+1) or (s[i+lenSubs] in delim)) then begin PurePos := i; exit; end; end; end; { pos }
// Новое var s, wd : string; delim : TDelim; printed:
boolean; begin delim := delim+[',']+[';']+[' ']; printed:= false; write('Enter string:'); readln(s);
s:= trim(s); if s='' then writeln('Sorry, your string is empty') else begin wd := FirstWord(s, delim); // нашли первое слово while (wd <> '') do begin delete(s, PurePos(wd, s, delim), length(wd)); // удалили первое слово if (PurePos(wd,
s, delim) = 0) then // нет других - печатаем удаленное begin if printed then // для красивого вывода write(';') else printed := true; write(wd); end else while (PurePos(wd, s, delim)>0) do // удаляем все дубликаты delete(s, PurePos(wd, s, delim), length(wd)); wd := FirstWord(s, delim); end; if printed then writeln else writeln('there are no unique words'); end; end.
Примеры работы
Код:
Enter string:123 123 Enter
string:123 123 there are no unique words Enter string: Sorry, your string is empty Enter string:123;456;1234 123;456;1234
Ответ отправил: lamed (Профессор)
Ответ отправлен: 22.10.2010, 19:52
Номер ответа: 263617
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 263617
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.