Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

lamed
Статус: Бакалавр
Рейтинг: 2435
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2203
∙ повысить рейтинг »
_Ayl_
Статус: Практикант
Рейтинг: 1849
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Pascal (Паскаль)

Номер выпуска:1075
Дата выхода:03.05.2010, 11:00
Администратор рассылки:Boriss, Академик
Подписчиков / экспертов:249 / 186
Вопросов / ответов:1 / 1

Вопрос № 178073: Доброго времени суток дорогие эксперты! Необходимо решить парочку задач на тему "Строковый тип" Задание 1: Составить программу, которая использует указанную функцию или процедуру обработки строки. Реализация такой подпрограммы...



Вопрос № 178073:

Доброго времени суток дорогие эксперты!

Необходимо решить парочку задач на тему "Строковый тип"

Задание 1: Составить программу, которая использует указанную функцию или процедуру обработки строки. Реализация такой подпрограммы должна происходить без использования стандартных процедур и функций при работе со строками (length, concat, copy, delete, insert, pos, uppercase, lowercase и др; сравнение строк напрямую недопустимо – допускается лишь посимвольное сравнение).
Причем: необходимо реализовать подпрограмму, реализующую указанную последовательность действий при заданных ограничениях (если таковые имеются).

вот задача 1:
Функция Poz_end(subs,s:string):integer, аналогичная стандартной функции Pascal Pos(subs,s:string):integer, с той лишь разницей, что функция Poz_end находит последнее вхождение в строке s подстроки subs.

Задача 2) 2) Вводится строка. Если она является записью числа в римской системе счисления, то преобразовать ее в целое число.


Писать программы и под программы в TP-7.0 с коментариями для понимания большего!

Отправлен: 28.04.2010, 10:58
Вопрос задал: Юдин Евгений Сергеевич, 1-й класс
Всего ответов: 1
Страница вопроса »


Отвечает amnick, 10-й класс :
Здравствуйте, Юдин Евгений Сергеевич.

Решение первой задачи (я позволил себе назвать требуемую функцию LastPos, поскольку Poz_end — коряво (ни английский, ни русский) и по смыслу неверно — "позиция конца")
Код:
program q178073a;

{ функция находит последнее вхождение в строке s подстроки substr
возвращает найденную позицию или 0, если подстрока substr не найдена в строке s
}
function LastPos( substr: String; s: String): byte;
var nS, nSub, p, i : integer;
ok : boolean;
begin
nS := ord( s[0] ); { длина строки s }
nSub := ord( substr[0] ); { длина искомой подстроки substr }
p := nS - nSub; { отступаем от конца строки s на длину искомой подстроки }
while p >= 0 do begin { пока не проверили всю строку s }
ok := true; { предполагаем совпадение }
for i := 1 to nSub do
if substr[i] <> s[p+i] then begin
ok := false; { нет, не совпало }
break;
end;

if ok then begin { нашли последнее вхождение }
LastPos := p+1; { возвращаем позицию }
exit;
end;
dec( p ); { в данной позиции не совпало, переходим к предыдущей }
end;
LastPos := 0; { подстрока не найдена, возвращаем 0 }
end;

procedure test( substr, str: string );
var n: byte;
begin
n := LastPos( substr, str );

if n > 0 then
writeln( 'Позиция последнего вхождения подстроки "', substr,
'" в строку "', str, '" = ', n )
else
writeln( 'Подстрока "', substr, '" не найдена в строке "', str, '"' );
end;

begin
test( '123', 'asdf123123qwer12312zx' );
test( '123', '123 asfjkafj' );
test( '123', 'asfjkafj123' );
test( '123', 'asfjkafj' );
test( '123', '12' );
end.


Решение второй задачи приведено в приложении.
Программа проверена на табличке примеров со страницы википедии Римские цифры

Обе программы протестированы в среде Borland Pascal 7.0. Чтобы текст смотрелся нормально, установите шаг табуляции = 4.

Успехов!

Приложение:

Ответ отправил: amnick, 10-й класс
Ответ отправлен: 28.04.2010, 21:15
Номер ответа: 261078

Оценка ответа: 5
Комментарий к оценке:
Отличный ответ) все вроверил и все работает) Выражаю огромню благодарность за содеяное вам amnick!

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 261078 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:

  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.14 от 03.03.2010

    В избранное