- •1. Основные приемы программирования
- •1.1 Линейный алгоритм
- •1.2. Алгоритмы разветвляющейся структуры
- •1.3. Простейшие циклы
- •1.3.1. Цикл с параметром
- •1.4.1 Подпрограмма-функция
- •1.3.2. Цикл с постусловием
- •1.3.3. Цикл с предусловием
- •1.3.4. Вложенные циклы
- •1.4. Использование подпрограмм
- •1.4.2 Подпрограмма-процедура
- •1.5. Массивы и файлы
- •2. Указания
- •3. Задания
1.4.2 Подпрограмма-процедура
На Паскале:
procedure <имя процедуры>(<параметры-значения>; var <параметры-переменные>)
Параметры-значения определяют исходные данные для работы подпрограммы.
Параметры-переменные определяют, как правило, выходные данные подпрограммы.
Вызов подпрограммы-процедуры:
<имя процедуры>(<список фактических параметров>)
На Фортране:
subroutine <имя подпрограммы>(<список формальных параметров>)
Вызов подпрограммы-процедуры:
call <имя подпрограммы>(<список фактических параметров>)
Между фактическими и формальными параметрами должно быть соответствие по типу, количеству и порядку следования.
Пример 8. Найти сумму квадратов и кубов чисел от 1 до 10 и от m до n. Нахождение суммы квадратов и кубов чисел оформить в виде процедуры (рис.8).

Рис. 8. Блок-схема решения примера 8
|
Паскаль-программа: var m,n,s1,s2,s3,s4:integer; procedure sum(a,b:integer; var p,q:integer); {a, b – параметры-значения, p, q – параметры-переменные} var i:integer; {локальная переменная} begin p:=0; q:=0; for i:=a to b do begin p:=p+sqr(i); q:=q+i*i*i end; end; begin writeln(‘Введите целые числа m и n ‘); write(‘m=’); readln(m); write(‘n=’); readln(n); sum(1,10,s1,s2); sum(m,n,s3,s4); writeln(‘сумма квадратов чисел от 1 до 10 равна ’, s1); writeln(‘сумма кубов чисел от 1 до 10 равна ’, s2); writeln(‘сумма квадратов чисел от ‘,m,’ до ‘,n,’ равна ’, s3); writeln(‘сумма кубов чисел от ‘,m,’ до ‘,n,’ равна ’, s4); end. |
1.5. Массивы и файлы
Массив – это упорядоченная совокупность однотипных данных, обозначенных одним именем.
Пример 9. Даны действительные числа a1, …, an. Получить an, an-1, …, a1 (рис.9).

Рис. 9. Блок-схема решения примера 9
|
Паскаль-программа: var i, n: integer; t: real; a: array [1..100] of real; f,g: file of real; begin {связываем файловую переменную f с именем файла на диске} assign(f,’myfile.dat’); assign(g,’output.dat’); {открываем файл для чтения} reset(f); {открываем файл для записи} rewrite(g); n:=0; {последовательно заносим значения из файла в массив, пока не будет достигнут конец файла} while not(eof(f)) do begin {подсчитываем количество значений, хранящихся в файле} n:=n+1; read(f,a[n]); end; for i:=1 to int(n/2) do {int – целая часть от деления} begin {меняем местами два элемента массива} t:=a[i]; a[i]:=a[n-i+1]; a[n-i+1]:=t end; for i:=1 to n do {заносим значения элементов массива в файл} write(g,a[i]); close(f); close(g) {закрываем файл} end. |
2. Указания
Каждый вариант курсовой работы включает в себя две задачи, необходимо разработать алгоритм решения одной из задач на языке Паскаль, второй – на языке Фортран (по выбору студента).
Пример решения задачи:
Даны действительные числа x1, y1, x2, y2, …, x10, y10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (x1, y1), (x2, y2), …, (x10, y10).
Нахождение длин сторон прямоугольника оформить в виде подпрограммы (рис.10).
Паскаль-программа:
var
x,y:array [1..10] of real;
i:integer;
p,dl:real;
procedure dlstor(a,b:real; var q:real);
begin
q:=sqrt(sqr(a)+sqr(b));
end;
begin
p:=0;
for i:=1 to 10 do
begin
writeln(‘Введите координаты точки ‘);
write(‘x(‘,i,’)=’);
readln(x[i]);
write(‘y(‘,i,’)=’);
readln(y[i]);
dlstor(x[i],y[i],dl);
p:=p+dl
end;
writeln(‘периметр десятиугольника равен ’, p);
end.

Рис. 10. Блок-схема решения примера
