- •Реализация алгоритмов в системе программирования turbo pascal 7.0 Учебное пособие
- •Тема 1 Алгоритмы и способы их описания
- •Тема 2 Этапы подготовки и решения задач на эвм
- •Тема 3 Начало работы в системе Turbo Pascal 7.0
- •Начало работы с новой программой
- •Задание 1
- •Сохранение текстового файла программы на диске
- •Задание 2
- •Задание 3
- •Задание 4
- •Тема 4 Ввод исходных данных и вывод результатов вычислений
- •Упражнение 1.
- •Тема 5 Реализация линейных алгоритмов
- •Сложные выражения
- •Задание
- •Тема 6 Программирование разветвляющихся алгоритмов
- •Задание 1
- •Задание 2
- •Тема 7 Циклические алгоритмы с известным числом повторений
- •Задание
- •Тема 8 Циклические алгоритмы с неизвестным числом повторений
- •Задания
- •Задание
- •Тема 10 Работа с массивами
- •Задание
- •Задание
- •Тема 12 Записи
- •Задания
- •Тема 13 Работа с файлами
- •Задания
- •Задания
- •Тема 15 Алгоритмы построения графика аналитически заданной функции
- •Задание
- •Тема 16 Анимация изображений
- •Задание 1
- •Задание 2
- •Тема 17 Численные методы вычисления определённого интеграла
- •1. Метод прямоугольников
- •2. Метод трапеций
- •3. Метод Симпсона
- •Задания
- •Тема 18 Численные методы решения нелинейных уравнений
- •Задания
- •Тема 19 Численные методы решения обыкновенных дифференциальных уравнений
- •Задание
- •Оглавление
- •Литература
Задание
При выполнении заданий следует использовать пример из этой лабораторной работы. Файл сохранить в свою папку под новым именем. Результаты расчетов вывести на экран.
Вариант 1
а) Организовать сортировку массива по возрастанию.
б) Определить сумму отрицательных элементов массива.
Вариант 2
а) Организовать сортировку таким образом, чтобы значение 4-го элемента никогда не изменялось.
б) Определить сумму элементов массива с четными номерами.
Вариант 3
а) Определить максимальный элемент массива и его номер.
б) Организовать обработку (ввод и вывод) строковых элементов, например, фамилий студентов группы.
Вариант 4
а) Организовать ввод и сортировку дробных чисел и подсчет их суммы.
б) Организовать сортировку букв в строковом массиве.
Вариант 5
а) Определить среднее арифметическое из отрицательных чисел массива.
б) Увеличить все элементы массива на 25.
Вариант 6
а) Заполнить массив так, чтобы его элементы содержали арифметическую прогрессию (8, 10, 12, 14 ...).
б) Определить сумму отрицательных элементов массива.
Вариант 7
а) Модифицировать программу так, чтобы элементы массива со значением больше 100 стали равны 100.
б) Найти наименьший из положительных элементов массива.
Вариант 8
а) Модифицировать программу так, чтобы элементы массива меньше 10 стали равны 0.
б) Вычислить среднее арифметическое из положительных элементов массива.
Вариант 9
а) Заполнить массив так, чтобы его элементы содержали геометрическую прогрессию (1, 2, 4, 8...)
б) Определить сумму четных и сумму нечетных элементов массива.
Вариант 10
а) Найти произведение всех элементов массива не равных нулю
б) Вычислить отклонения элементов от среднего арифметического и заполнить ими второй массив.
Тема 11
Процедуры и функции пользователя
Для любых сложных программ, в которых существует много режимов работы (например, ввод исходных данных с клавиатуры или из файла, несколько вариантов расчетов, вывод результатов в виде различных расчетных форм на экран, принтер или в файл и пр.) используется разбиение программы на отдельные программные модули - процедуры и функции, что является одним из главных принципов структурного программирования. Такое построение программ является общепринятым для всех современных систем, имеющих иерархическое меню с большим количеством пунктов, экранные формы с элементами управления типа нажимаемых кнопок, раскрывающихся списков и т. п.
Использование процедур и функций с параметрами позволяет пользоваться ими многократно с заданием различных исходных данных, что имеет особенно большое значение в случае использования библиотек в виде отдельно скомпилированных модулей (*.tpu –файлов), для которых исходный текст программы может быть неизвестен.
Процедуравызывается по имени из любой позиции раздела операторов программы или процедуры, и должна быть предварительно описана. Описание процедуры включает заголовок и тело процедуры.
Заголовок процедуры имеет следующий вид:
Procedure идентификатор [(параметры)];
где идентификатор – имя процедуры, уникальное в пределах программы;параметры- необязательный список формальных параметров (т.е. может отсутствовать).
Список параметров может состоять из нескольких групп параметров, разделенных точкой с запятой (;):
(группа параметров [; группа параметров [; …] ] ).
Группа параметров, которая содержит список параметров одного типа, может быть трех следующих видов:
идентификатор [, идентификатор [,…] ]: type(список параметров-значений - только передают значения в процедуру)
var идентификатор [, идентификатор [,…] ]: type(список параметров-переменных – возвращают значения в вызывающую программу из процедуры)
var идентификатор [, идентификатор [,…] ] (список нетипизированных параметров-переменных)
Тело процедуры представляет собой локальный блок, по структуре аналогичный программе. Для обращения к процедуре используется оператор вызова процедуры, который состоит из имени процедуры и списка фактических параметров, заключенных в круглые скобки и перечисленных через запятую.
Пример. Процедура для вывода текстовой строки в указанную позицию на экране. Описание процедуры:
Procedure WrStr(X, Y: integer; S: string); {заголовок}
var {описание локальных переменных}
SaveX, SaveY: Integer;
begin
SaveX := WhereX; {запоминаем позицию курсора на экране по Х}
SaveY := WhereY; {то же по Y}
GotoXY(X,Y); {перемещаем курсор в заданную позицию X,Y}
Write(S); {выводим с заданной позиции строку текста}
GotoXY(SaveX, SaveY); {перемещаем курсор в исходную позицию}
end;
Обращение к ней из головной программы или другой процедуры может выглядеть следующим образом: WrStr(40, 2, ’Расчет …’):
Процедура может использовать глобальные переменные и переменные вызывающей программы, параметры этой процедуры и свои локальные переменные.
В простейшем случае процедура может не иметь параметров, а пользоваться только переменными вызывающей программы.
Функция, в отличие от процедуры, имеет имя, которое принимает определенное значение после ее выполнения. Описание функции:
{функция, которая преобразует все символы строки в прописные}
Function UpCaseStr(S: string): string; {заголовок}
var i : integer; {раздел описаний локальных переменных}
begin {начало тела функции}
for i := 1 to Length(S) do
if (S[i] >= 'a') and (S[i] <= 'z') then Dec(S[i], 32);
UpCaseStr := S;
end; {конец описания функции}
Вызов этой функции из головной программы или другой процедуры может выглядеть следующим образом: Write(UpCaseStr(’Расчет …’)).
Использование подобных функций пользователя ничем не отличается от использования стандартных функций вроде Sin(x), Exp(a)и проч.
Ниже приведён пример построения программы с разбиением её на отдельные процедуры:
Program Prg_proc;
Uses Crt, Printer;
Var
xn, xk, h : real;
i, j, m, n : word;
x, y : array [1..50] of real;
mnu : array [1..6] of string[15];
vv : char;
Procedure my_mnu;
begin
Window(1, 1, 80, 1); TextColor(0); gotoXY(1,1);
for i:=1 to 5 do
if i=m then
begin
TextBackground(2);Write(' ',mnu[i],' ');
end
else
begin
TextBackground(7); Write(' ',mnu[i],' ');
end;
Window(1, 2, 80, 25);
gotoXY(1,1); TextColor(15);TextBackground(0);
end;
Procedure input_kl;
begin
ClrScr;
Write('x начальное = '); Readln(xn);
Write('x конечное = '); Readln(xk);
Write('количество точек графика (n<50) = '); Readln(n);
m:=2; my_mnu
end;
Procedure calc_dat;
begin
x[1]:=xn;
h:=(xk-xn)/(n-1);
for i:=1 to n do
begin
y[i]:=sin(x[i]); x[i+1]:=x[i]+h;
end;
ClrScr; write('Расчет выполнен!')
end;
Procedure out_dat;
begin
ClrScr;
Writeln('------------------------------');
Writeln(' X Y ');
Writeln('------------------------------');
for i:=1 to n do writeln(x[i]:15:5,Y[i]:15:5);
Writeln('------------------------------');
end;
Procedure out_gr;
begin
Write('здесь нужно описать вывод графика на экран')
end;
begin {головная программа}
TextBackground(0); ClrScr;
mnu[1]:='Исх.данные';
mnu[2]:='Расчет' ;
mnu[3]:='Таблица';
mnu[4]:='График' ;
mnu[5]:='Выход' ;
m:=1;
my_mnu;
repeat
vv:=Readkey;
if ord(vv)=0 then vv:=Readkey;
case ORD(VV) of
13:begin
case m of
1:input_kl;
2:calc_dat;
3:out_dat ;
4:out_gr ;
end;
end;
77:begin if m<5 then m:=m+1 else m:=1; my_mnu end;
75:begin if m>1 then m:=m-1 else m:=5; my_mnu end;
end;
until (vv=chr(13)) and (m=5);
end.