- •Кафедра Естественно-научных дисциплин учебно-методическое пособие по программированию
- •Глава 1. Алгоритмы линейной и разветвляющейся структуры
- •Результаты работы Pascal-программы
- •Система тестов
- •Система тестов
- •Система тестов
- •Результаты работы Pascal-программы:
- •Задачи для самостоятельного решения
- •Глава 2. Алгоритмы, реализуемые с помощью циклов типа для
- •Система тестов
- •Исполнение алгоритма
- •Задачи для самостоятельного решения
- •Глава 3. Алгоритмы, реализуемые с помощью вложенных циклов типа для
- •Пример 3.3. В заданной матрице a(n, m) поменять местами строки с номерами p и
- •Задачи для самостоятельного решения
- •Глава 4. Алгоритмы, реализуемые с помощью циклов типа пока
- •Цикл типа пока с прерыванием
- •Цикл типа пока без прерывания
- •Пример 4.1. Определить, является ли заданная последовательность чисел a1, a2, ..., aN монотонно убывающей. Система тестов
- •Система тестов
- •Результаты работы Pascal-программы
- •Система тестов
- •Задачи для самостоятельного решения
- •Глава 5. Алгоритмы, реализуемые с помощью вложенных циклов типа пока
- •Система тестов
- •Система тестов
- •Система тестов
- •Система тестов
- •Блок-схема (фрагмент)
- •Задачи для самостоятельного решения
- •Глава 6. Алгоритмы, реализуемые с помощью комбинации циклов типа для и пока
- •Система тестов
- •Система тестов
- •Исполнение алгоритма
- •Задачи для самостоятельного решения
- •Глава 7. Алгоритмы обработки символьной информации
- •Типы данных, используемые для обработки символьной информации
- •Функции и команды обработки строк
- •Система тестов
- •Исполнение алгоритма
- •Исполнение алгоритма
- •Система тестов
- •Задачи для самостоятельного решения
Система тестов
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
все
кц
кц
кон