- •Основы алгоритмизации и программирования
- •Часть 1
- •Содержание
- •Введение. Цель лабораторного практикума
- •1. Лабораторная работа №1. Простейшие программы
- •1.1. Основные конструкции языка программирования Pascal.
- •1.2. Пример составления программы
- •1.3. Варианты заданий на лабораторную работу №1
- •2. Лабораторная работа №2. Разветвляюшиеся вычислительные процессы
- •2.1. Вычислительные процессы с разветвляющейся структурой
- •2.2. Варианты заданий на лабораторную работу №2
- •3. Лабораторная работа №3. Табулирование функции
- •3.1. Вычислительные процессы с циклами
- •3.2. Варианты заданий на лабораторную работу №3
- •4. Лабораторная работа №4. Обработка одномерного массива
- •4.1. Обработка одномерных массивов
- •4.2. Варианты заданий на лабораторную работу №4
- •5. Лабораторная работа №5. Обработка двумерных массивов
- •5.1. Варианты заданий на лабораторную работу №5
- •6. Лабораторная работа №6. Подпрограммы
- •6.1. Разработка вычислительных процессов сложной структуры
- •6.2. Варианты заданий на лабораторную работу №6
- •7. Лабораторная работа №7. Решение нелинейных алгебраических уравнений
- •7.1. Методы решения нелинейных уравнений
- •7.2. Варианты заданий на лабораторную работу №7
- •8. Рекомендации по выполнению лабораторных работ
- •9. Рекомендации по выполнению контрольной работы
- •Рекомендуемая литература
6. Лабораторная работа №6. Подпрограммы
Цель работы: овладеть практическими навыками разработки и программирования вычислительного процесса сложной структуры, получить навыки по отладке и тестированию подпрограмм.
6.1. Разработка вычислительных процессов сложной структуры
Процедуры и функции. В больших программах всегда можно выделить фрагменты, решающие частные подзадачи. Такое выделение позволяет структурировать программу, организовать поэтапный и многоисполнительский процесс ее разработки. Простейшими средствами для этого в Pascalе служат процедуры и функции – выделенные участки программы и оформленные в виде самостоятельных программ.
Общий синтаксис:
Procedure <имя> (<список формальных параметров>);
Function <имя> (<список формальных параметров>) <тип>;
Список формальных параметров служит для передачи в процедуру или функцию исходных данных и для процедур возврата вычисленных значений. Функция возвращает вычисленное значение непосредственно через свое имя.
Описания процедур и функций помещаются в соответствующем разделе программы (см. лаб. раб.№1).
Обработка символьной информации. Для описания объектов содержащих символьную информацию используется тип string. Например,
var s:string;
Символьную строку можно рассматривать и как одномерный массив отдельных символов array [1..n] of char.
На строках определена операция сцепления (конкатенации). Напрмер,
Пусть s1:=’Студент ‘; s2:=’Иванов’; s:=s1+s2;
Тогда s примет значение ‘Студент Иванов’.
Для работы со строками определены следующие процедуры и функции:
Функция Copy(s,i,k) |
Копирует из стоки s k символов, начиная с позиции i |
Процедура Delete(s,i,k) |
Удаляет k символов из строки s, начиная с позиции i |
Процедура Insert(s1,s2,i) |
Вставляет подстроку s1 в строку s2, с позиции i |
Функция Length(s) |
Возвращает длину строки s |
Функция Pos(s1,s2) |
Находит в строке s2 первое вхождение строки s1 и возвращает номер позиции, с которого она начинается. Иначе вернет 0 |
Процедура Str(x,s) |
Преобразует число x типа integer или real в строку символов s |
Процедура Val(s,x,code) |
Преобразует стрку s в число x. Code=0, если все правильно, иначе code указывает позицию ошибки |
6.2. Варианты заданий на лабораторную работу №6
Составить программу согласно варианту таблицы 5. Алгоритм вычисления оформить в виде подпрограммы Procedure.
Пример 6. В каждой строке все символы «*» заменить на символ «+». Подсчитать число таких замен.
Решение задачи разобъем на 2 подзадачи. Первая – ввод исходных данных и вывод результатов. Вторая(ее оформим в виде процедуры) – собственно замена символа * на +.
program z6;
uses crt;
var i,n: integer;
var mas: array[1..3] of string;
procedure zam(var s:string; var n:integer); {Процедура для обработки s;
n – кол-во замен }
var k:integer;
begin
k:=pos('*',s); {Определение позиции первой *}
while k>0 do
begin
delete(s,k,1);
insert('+',s,k); {Замена * на +}
n:=n+1; {Подсчет числа замен}
k:=pos('*',s); {Определение позиции очередной *}
end;
end;
{Основная программа}
begin
clrscr;
mas[1]:='fgf*jh*';
mas[2]:='trrrrr*';
mas[3]:='hjhj';
n:=0;
for i:=1 to 3 do
begin
zam(mas[i],n);
writeln ('rez=',mas[i],' stroka=',i);
end;
writeln('kol=',n);
readln;
end.
Таблица 5. Варианты заданий
Вариант |
Содержание задания |
|
|
Определить количество слов BEGIN в каждой строке |
|
|
Все слова “враг” заменить на слово “друг” |
|
|
Сжать каждую строку, заменив каждую группу пробелов одним пробелом |
|
|
Сжать каждую строку, удалив все символы “; “. Определить число таких удалений в каждой строке. |
|
|
Преобразовать каждую строку, заменив все фигурные скобки {} на круглые (). |
|
|
Переписать каждую строку в обратной последовательности |
|
|
Преобразовать каждую строку, удалив первое слово. |
|
|
Преобразовать каждую строку, заменив окончания слов “и” на “ы”. Определить число таких замен в каждой строке. |
|
|
Перед каждым словом, начинающемся с буквы М поставить звездочку * |
|
|
После каждого слова, оканчивающегося на “ки” поставить знак + |
|
|
Определить количество слов END в каждой строке |
|
|
Каждое слово “страна” заменить на слово “государство” |
|
|
Сжать каждую строку, заменив все сочетания МММ на М. |
|
|
Преобразовать каждую строку, заменив все квадратные [] и фигурные {} скобки на круглые. |
|
|
Перед каждым словом, начинающемся с цифры поставить знак “$” |
|
|
Преобразовать каждую строку, заменив окончания слов “ов” на “ко ”.. Определить число таких замен в каждой строке. |
|
|
Преобразовать каждую строку, заменив все 3-х символьные слова на “***” |
|
|
Переписать каждое слово в обратной последовательности, т.е. получить слова – анаграммы. |
|
|
Преобразовать каждую строку, заменив все круглые скобки () на квадратные []. |
|
|
Преобразовать каждую строку, удалив последнее слово. |
|
|
Перед каждым словом END вставить слово “конец” |
|
|
Определить самое длинное слово каждой строки. |
|
|
Определить есть ли в тексте хотя бы одно слово-палиндром. Слово-палиндром одинаково читается слева направо и справа налево (тот, шалаш…) |
|
|
Переписать каждое слово в обратной последовательности, т.е. получить слова – анаграммы. |
|
|
Найти все слова-палиндромы. Слово-палиндром одинаково читается слева направо и справа налево (тот, шалаш…) |
