Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
задачник по программированию.doc
Скачиваний:
25
Добавлен:
03.11.2018
Размер:
1.94 Mб
Скачать

Система тестов

N теста

Данные

Результат

1

Slovo = ''казак''

Otvet = ''Перевертыш''

2

Slovo = ''коза''

Otvet = ''Не перевертыш''

Алгоритмический язык

алг Перевертыш (арг лит Slovo, рез лит Otvet)

надо | Otvet = "Перевертыш", если Slovo совпадает с собой после переворачивания

нач цел Dlina, i, лог Flag

Dlina:=длин(Slovo)

i:=1

Flag:=да

нц пока (i<=Dlina/2) и Flag | цикл пока с прерыванием до первой несовпавшей пары букв, если такая имеется в слове

Flag:=(Slovo[i]=Slovo[Dlina-i+1])

i:=i+1

кц

если Flag то Otvet:="Перевертыш"

иначе Otvet:="Не перевертыш"

все

кон

Исполнение алгоритма

Обозначения проверяемых условий:

(i<=Dlina/2) и Flag => (1)

Slovo[i]=Slovo[Dlina-i+1] => (2)

Номер

теста

i

(1)

(1)

Flag

Otvet

1

1

2

3

+

+

-(кц)

+

+

да

да

да

"Перевертыш"

2

1

2

+

-(кц)

-

да

нет

"Не

перевертыш"

Turbo Pascal

Program TurnOver;

Uses Crt;

Var Slovo : String;

Dlina, i : Integer;

Flag : Boolean;

BEGIN ClrScr;

Write('Введите слово : '); ReadLn(Slovo);

Dlina:= Length(Slovo);

{Сравниваются пары букв: первая буква с последней, вторая буква с предпоследней и т.д.}

i:=1; Flag := TRUE;

While (i <= Dlina/2) and Flag do {цикл до первой несовпавшей }

begin {пары букв (если такая есть)}

Flag := (Slovo[i]=Slovo[Dlina-i+1]);

i := i+1;

end;

WriteLn; Write( 'О т в е т : слово ', Slovo);

If Flag then WriteLn(' — перевертыш. ')

else WriteLn(' — не перевертыш');

ReadLn;

END.

Пример 7.3. B заданном тексте одно заданное слово везде заменить на другое заданное слово такой же длины.

Тест

Данные

Результат

Текст

Слово1

Слово2

''2sinx+siny''

''sin''

''cos''

''2cosx+cosy''

Алгоритмический язык

алг Замена (арг рез лит Текст, арг лит Слово1, Слово2)

дано | длины Слово1 и Слово2 совпадают

надо | в строке Текст подстрока Слово1 везде заменена на подстроку Слово2

нач цел i, DS

DS:=длин(Слово1)

нц для i от 1 до длин(Текст)-DS+1

если Текст[i : i+DS-1] = Слово1 | если вырезка равна Слово1,

то Текст[i : i+DS-1] :=Слово2 | то вырезке присваиваем Слово2

i:=i+DS | и продвигаемся на длину слова

все

кц

кон

Исполнение алгоритма

Обозначение проверяемого условия:

Текст[i : i+DS-1] = Слово1 => (1)

Для тестовых данных имеем: DS=3, длин (Текст)-DS+1= 8.

Turbo Pascal

(эта программа, использующая стандартную функцию Pos , не требует, чтобы длины

заменяемого и вставляемого слов были одинаковыми)

Program Replace;

Uses Crt;

Var Text, Slovo1, Slovo2 : String;

i, DlinaSlova, P : Integer;

BEGIN ClrScr;

Write('Введите строку : '); ReadLn(Text);

Write('Какое слово заменить ? '); ReadLn(Slovo1);

Write('На какое слово заменить ? '); ReadLn(Slovo2);

WriteLn; WriteLn('О т в е т : ');

WriteLn('Исходный текст: ', Text); DlinaSlova:=Length(Slovo1);

DlinaSlova:=Length(Slovo1);

P:=Pos(Slovo1,Text); {номер позиции, с которой в строке Text в первый раз встречается подстрока Slovo1}

While P>0 do {цикл продолжается до тех пор,пока подстрока Slovo1 встречается в строке Text}

begin

Delete(Text, P, DlinaSlova); {удаление подстроки Slovo1, начинающейся с позиции P, из строки Text}

Insert(Slovo2, Text, P); {вставка подстроки Slovo2 в строку Text с позиции Р}

P:=Pos(Slovo1, Text); {номер позиции, с которой подстрока Slovo1встречается в строке Text в очередной раз}

end;

WriteLn('Новый текст: ', Text);

ReadLn;

END.

Пример 7.4. Заданную последовательность слов переупорядочить в алфавитном

порядке (то есть выполнить лексикографическое упорядочение).

Тест

Данные

Результат

Words=(''стул'', ''гора'', ''яма'', ''стол'')

Words=("гора", "стол", "стул", "яма")

Алгоритмический язык

(АЯ расширен добавлением типа данных лит таб и операций отношения

для литерных переменных)

алг Расположить по алфавиту(арг цел NWords, арг рез лит таб Words[1:NWords])

надо | Таблица Words упорядочена лексикографически

нач цел i, j, лит Tmp

нц для i от 1 до NWords-1

нц для j от i+1 до NWords

если Words[i]>Words[j] | условие перестановки слов

то Tmp:=Words[i]; Words[i]:=Words[j]; Words[j]:=Tmp

все

кц

кц

кон