
- •Содержание
- •Предисловие научного редактора
- •Введение
- •1. Понятие алгоритма. Способы представления алгоритмов
- •В виде компьютерной программы:
- •2. Свойства алгоритмов
- •Язык графического представления алгоритмов
- •4. Общие принципы построения программ
- •5. Структура программы на языке паскаль
- •6. Классификация типов данных, используемых в языке паскаль
- •6.1. Символьный тип
- •6.2. Числовые типы
- •6.2.1. Целые типы
- •6.2.2. Вещественные типы
- •6.3. Логический тип
- •6.4. Типы данных, определяемые программистом
- •7. Основные операторы языка паскаль.
- •7.1. Операторы (процедуры) ввода – вывода
- •7.2. Оператор присваивания
- •7.3. Условный оператор
- •Первый вариант условного оператора:
- •If условие then оператор1 else оператор2;
- •Второй вариант условного оператора (сокращенная форма):
- •If условие then оператор1;
- •If условие1 then
- •If условие2 then оператор21 else
- •If условие3 then оператор31 else
- •7.4. Оператор выбора case
- •7.5. Операторы цикла
- •7.5.1. Оператор цикла с параметром
- •Параметр цикла I меняет свои значения только автоматически, при переходе к следующему шагу цикла. Изменения параметра цикла I в теле цикла запрещены.
- •7.5.2 Оператор цикла с предусловием оператор цикла с предусловием имеет структуру:
- •7.5.3. Оператор цикла с постусловием
- •8. Структурированные типы данных
- •8.1. Массивы
- •8.2. Записи
- •8.3. Файлы
- •2.Связать файловую переменную с именем файла на диске с помощью процедуры Assign(фп, ‘имя_файла_на диске’).
- •3. Открыть файл:
- •4. Выполнить работу с файлом.
- •Закрыть файл при окончании работы: Сlose(фп);
- •9. Процедуры и функции
- •9.1. Процедуры
- •Var I:integer; {I – локальная переменная}
- •9.2. Функции
- •2)Имя функции входит составной частью (как переменная) в некоторое выражение.
- •Задание к лабораторной работе №2.
- •Часть 1. Тема: вычисление по формулам и представление результатов с учетом форматного вывода.
- •Часть 2. Тема: Циклические вычисления с учетом диапазона типа данных и выдача результатов вычислений по шагам.
- •Задание к лабораторной работе №3.
- •Часть 1 .
- •Часть 2.
- •Задание к лабораторной работе №4.
- •Лабораторная работа №5.
Var I:integer; {I – локальная переменная}
begin
for i:=1 to N do write(A[i]:8:3)
end;
Пример 13. Процедура RwColPrnt выдает на экран ПК элементы матрицы вещественных чисел в виде таблицы – N строк, M столбцов (формат выдачи на печать тот же, что и в предыдущем примере, тип массива ТТА объявлен заранее, в вызывающей программе в виде Type TTA=array[1..20,1..10] of real):
procedure RwColPrnt(N,M:integer; A:TTA);
var i,j:integer; {i,j – локальные переменные}
begin
for i:=1 to N do {цикл по строкам}
begin
for j:=1 to M do write(A[i,j]:8:3); {цикл по элементам строки}
writeln {перевод курсора на следующую строку}
end
end;
Замечание. В частности, процедура может не иметь параметров. Например, стандартные процедуры Readln, Writeln, Clrscr или следующая подпрограмма, оформленная в виде процедуры, выдающая на монитор все символы, представляемые в ПК кодами от 0 до 255:
Procedure cod_char;
Var i:byte;
Begin
for i:=1 to 255 do write(i:4,’ :‘,chr(i):2); writeln;
readln
End;
В основной программе эта процедура вызывается на выполнение следующим образом Cod_Char; и результатом ее выполнения будет строка из 255 пар “КОД : СИМВОЛ”.
Пример 14. В этом примере рассматривается применение двух процедур при решении следующей задачи: вычислить частичные суммы гармонического ряда
R (n) = 1 + 1/2 + 1/3 + ... + 1/n
и результат представить в форме рационального числа А/B, то есть в виде отношения числитель/знаменатель, где числитель и знаменатель – целые числа.
В программе предусмотрены две процедуры:
Proc1 – сокращает дробь на наибльший общий делитель;
Proc2 – находит сумму двух дробей с приведением к общему знаменателю.
program Harm_row;
var an,bn,bk,i:integer;
{Объявление и описание проседуры proc1:}
procedure proc1(var a,b:integer);{процедура реализут известный алгоритм поиска наибольшего общего делителя: }
var a1,b1,r:integer;
begin {начало операторной части процедуры}
a1:=a;b1:=b;
while b1<>0 do
begin r:=a1 mod b1; {находится остаток от деления на цело
числителя a1 на знаменатель b1}
a1:=b1;b1:=r {производится замена: знаменатель
становится числителем, остаток - знаменателем}
end;
if a1>1 then
begin a:=a div a1;b:=b div a1 {числитель и знаменатель дроби
сокращаются на наибольший общий делитель}
end
end; { конец proc1}
{Объявление и описание проседуры proc2:}
procedure proc2(var a,b:integer; a1,a2,b1,b2:integer);
{В данном варианте процедуры proc2 формальные переменные
a1,a2,b1,b2 – входные, a,b – выходные: }
begin a:=a1*b2+a2*b1;b:=b1*b2
end; {конец процедуры proc2 - вариант 1 }
{Второй вариант процедуры proc2 отличается меньшим числом формальных параметров: параметры a1, b1 становятся и выходными, а параметры a2,b2 – только входные:}
procedure proc2(var a1,b1:integer; a2,b2:integer);
begin a1:=a1*b2+a2*b1;b1:=b1*b2; {Для проверки корректности хода вычислений часто бывает полезно выдавать на экран ПК значения промежуточных расчетов. Здесь, например, это можно сделать применением процедуры контрольной печати дроби, получающейся прикаждом обращении к процедуре proc2: writeln('контр. печать проц2: ',a1:2,'/',b2:2);}
end; {proc2 – вариант второй}
begin {главная программа Harm_row}
an:=1;bn:=1;{Числитель и знаменатель первого элемента равны 1}
writeln('Задай номер последнего элемента ряда: ');
readln(bk);writeln('Результаты вычисления суммы по шагам:');
for i:=2 to bk do
begin proc2(an,bn,1,i); {выбран второй вариант процедуры proc2}
proc1(an,bn);
writeln('Шаг ',i,'-й: ',an:2,'/',bn:2)
end; writeln('Вычисление закончено. Нажми Enter');readln
end.