- •Содержание
- •Предисловие научного редактора
- •Введение
- •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.
9.2. Функции
В математике функция – это зависимость некоторой переменной от других переменных (аргументов). В отличие от математического понятия функции в программировании рассматриваются такие функции,
для которых можно построить алгоритм (а следовательно, и программу) вычислеия значений,
значения которых относятся к простым типам (например, значением функции не может быть вектор, массив ).
Структура функции в определенной мере по форме, также как и структура процедуры, совпадает со структурой программы, но имеет и существенные отличия:
Function имя_функции[(список параметров)] : тип_функции;
{раздел объявления локальных объектов функции: констант,
типов, переменных:}
const…
type…
var…
begin
{операторная часть или тело функции}
end;
Примечание. В отличие от процедуры для функции необходимо выполнять следующие требования
в заголовке всегда указывается тип функции;
в списке параметров записываются только те параметры, значения которых передаются (вводятся) из вызывающей программы, но не возвращаются в программу;
значение функции, возвращаемое вызывающей программе, присваивается имени функции, поэтому операция присваивания имени функции (уже без указания параметров) вычисленного значения – обязательная в операторной части описания функции; эта операция присваивания – последняя в операторной части функции;
обращение к функции из вызывающей программы состоит в написании имени функции и в подстановке фактических значений всех формальных параметров;
порядок задания и типы подставляемых фактических значений должны соответствовать порядку написания и типам формальных параметров функции.
Функция, в отличие от процедуры, не является самостоятельной подпрограммой, поэтому обращение к функции из вызывающей программы будет корректным в одном из двух случаев:
1)имя функции присваивается некоторой переменной или
2)Имя функции входит составной частью (как переменная) в некоторое выражение.
Ниже рассмотрены примеры описания и применения функций.
Пример 15. Даны четыре произвольных числа a,b,c,d. Найти максимальное, используя функцию fmax2 выбора большего из двух чисел.
Program max_4;
Var a,b,c,d:real;
y1,y2,z:real;
Function fmax2(x1,x2:real):real;
Var fm:real;
begin if x1>x2 then fmax2:=x1 else fmax:=x2
end;
begin write(‘Введите 4 числа’);read(a,b,c,d);
y1:=fmax2(a,b); y2:=fmax2(c,d); z:=fmax2(y1,y2);
writeln(‘Максимальное число: ’,z:8:2); readln
end.
Примечание. Для более короткой (компактной ) формы вычисления здесь возможно применение рекурсии: в качестве параметра функции может использоваться имя той же функции. (О рекурсиях более подробно см. в следующем учебном пособии). Тогда формула вычисления максимального из четырех чисел будет выглядеть так:
Z:=fmax2(fmax2(a,b),fmax2(c,d));
Или еще короче – выражение, вычисляющее результат, записывается в качестве параметра процедуры вывода:
writeln(‘Максимальное число: ’,max2(fmax2(a,b),fmax2(c,d) ):8:2);
Пример 16. Функция F_middle вычисляет среднее значение элементов одномерного массива целых чисел {Тип массива А должен быть объявлен в вызывающей программе
Type TA=array[1..30] of integer;}:
Function f_middle (n:integer; A:TA):real;
Var i:integer; s:real;
Begin s:=0;
For i:=1 to n do s:=s+A[i]; s:=s/n;
F_middle:=s
End;
Пример 17. В программе формируется двумерный массив (матрица) целых чисел, получаемых с помощью стандартной функции генерирования случайных чисел в диапазоне (0..50). Применяя функцию, описанную в предыдущем примере, в данной программе вычисляются и выдаются на экран ПК средние значения строк и средние значения столбцов матрицы.
program m_s;
type T1= array[1..10] of integer;
var i,j,n,m:integer;
mas:array[1..10,1..15]; {матрица исходных чисел}
mas1:array[1..15] of real; mas2:array[1..10] of real;{массивы для хранения текущей строки и текущего столбца матрицы}
Function f_middle (n:integer; A:Т1):real;
Var i:integer; s:real;
Begin s:=0;
For i:=1 to n do s:=s+A[i]; s:=s/n;
F_middle:=s
End;{function middle}
Begin writeln(‘Задайте размерность матрицы: ’);
Write(‘Количество строк N= ’);read(n);
Write(‘Количество чисел в строке М=’);read(m);
{Задание значений и печать элементов матрицы}
Writeln(‘Исходная матрица:’) ;
for i:=1 to n do
begin
For j:=1 to m do
Begin mas[i,j]:=random(51); write(mas[i,j])
End; writeln
End;
Writeln;
Writeln(‘Средние значения элементов строк:’);
For i:=1 to n do
Begin
{Элементы i-той строки копируются, образуя массив mas1:}
For j:=1 to m do mas1[j]:=mas[i,j];
{на монитор выдается в форме с фиксированной точкой рассчитанное с помощью функции среднее значение текущей i-той строки:}
write(i,’-й строки: ’,f_middle(m, mas1):8:3);
end;
writeln;
Writeln(‘Средние значения элементов столбцов:’);
For j:=1 to m do
Begin
{Элементы j-того столбца копируются, образуя массив mas2:}
For i:=1 to n do mas2[i]:=mas[i,j];
{на монитор выдается в форме с фиксированной точкой вычисленное с помощью функции среднее значение текущего j-того столбца:}
write(j,’-го столбца: ’,f_middle(n, mas2):8:3);
end;
writeln; writeln(‘Для выхода из программы нажать Enter’);
readln
End.
10. ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ
ПО ДИСЦИПЛИНЕ «ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ»
Задание к лабораторной работе №1.
Тема: Изучение процедур Write, Writeln и оператора цикла с параметром.
Войти в среду ТР и набрать текст программы выдачи списка кодов в диапазоне (0..N) и соответствующих им символов:
{ Начальный текст программы: }
program cod_simv;
var n,i:byte;
sim: char;
begin writeln(‘ Программа выдает список имеющихся в ПК символов’);
writeln(‘ соответствующих кодам из диапазона (0..N, ’);
writeln(‘ где число N вводится с клавиатуры’);
writeln;
writeln(‘Задай целое положительное число N=’);read(n);
for i:=1 to n do write(i,chr(i));
writeln;
writeln(‘для завершения работы нажми Enter ’);
readln;
end.
2. Сохранить файл, присвоив ему имя “cod_sim.pas”. Выполнить программу, задавая последовательно значения N=10, 20, 200. Убедиться, что читать результат практически невозможно из-за слияния значений кодов и символов.
3. Внести изменения в строку оператора цикла for:
For i:=1 to n do write(i, ‘ – ‘,chr(i), ‘; ‘);
Выполнить программу при N=120. Уже лучше? Но еще трудно читать.
Примечание.
Программу придется запускать многократно при различных значениях N. Поэтому рекомендуется всю программу заключить в оператор цикла
repeat…until (povtor=’N’) or (povtor=’n’);
Для этого в программе необходимо объявить переменную povtor и внести соответствующие дополнения
4. Задать выдачу каждого символа в отдельной строке, изменив в for-операторе процедуру write на writeln. Задать N=15, затем 50. Увидим на дисплее только последние коды до 50-го и их символы.
5. Tело цикла записать в виде составного оператора, заключенного в операторные скобки:
For i:=1 to n do
Begin sim:=chr(i); writeln(‘Коду ‘,i,’ соответствует символ ‘,sim,’ ‘);
End;
Выполнить программу при n=15 и 120. Видим последние коды до 120-го.
6. Увеличить число видимых символов, удалив ln в процедуре writeln и задав N=120. Плохо читается? Перейти к п.7.
7. Изменить программу, задавая печать только двух кодов-символов в строке:
Объявить переменную S – счетчик строк.
До начала цикла установить S в 0.
Оператор цикла записать в виде:
For i:=1 to n do
Begin sim:=chr(i); write(i,’: ‘,sim,’ ‘);s:=s+1;
If S=2 then
Begin S:=0;writeln {переход на следующую строку}
end
End;
Выполнить программу при N=15 и 120.
8. Задать в программе условие размещения в строке максимального числа кодов-символов и выполнить программу при N=15, 120, 200. А как задавать произвольное число элементов в строке, вводимое в процессе работы программы? Проведите соответствующие изменения и дополнения в программе и проверьте результат.
9. Включить в программу процедуру clrscr очистки экрана. Для этого подключить модуль CRT, содержащий библиотеку дополнительных функций и процедур, в частности процедуру clrscr:
Program cod_simv;
Uses CRT;
Var ……………
……………
Begin clrscr;……
…………..
End.
Выполнить программу при N=15, 150, 300, 600.
Убедиться, что начиная с кода 256 символы повторяются, то есть всего кодируется в компьютере 256 символов (практически меньше, так как некоторые коды не связываются с символами. Найдите такие коды и подсчитайте их количество).
