Turbo Pascal (552849), страница 5
Текст из файла (страница 5)
Все объекты, описанные в вызывающей программе, называются глобальными и являются доступными внутри процедур, вызываемых этой программой.
Общий вид описания процедуры:
Procedure <имя> (список формальных параметров, блок описания);
Const …; ù
… ý блок описания
Var ….; û
begin
<операторы>
end;
Пример 1. Вывести по четырем углам экрана свое имя цветными буквами, можно с эффектом мерцания.
Program names;
Uses crt;
Procedure name(x, y, c: byte, );
Begin
Gotoxy (x, y);
Textcolor(c); {textcolor (c+16);}
Write(‘Имя’);
end;
begin
Clrscr; {очистка экрана}
name (2,2, 14);
name (2, 22, 8);
name (75,2, 3);
name (75, 22, 5);
End.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max;
Uses crt;
Var a, b, c, d, m, p, q:real;
Procedure Bd(x,y:real, var z: real);
Begin
If x>y then z:=x
else z:=y;
end;
begin
Clrscr; {очистка экрана}
Write(‘Введите числа’);
Readln(a,b,c,d);
Bd (a, b, p);
Bd (c, d, q);
Bd (p, q, m);
Writeln(‘наибольший элемент’, m:8:3);
End.
Функции
Подпрограмма-функция обрабатывает данные, переданные ей из главной программы, и затем возвращает полученный результат (в отличие от процедуры). Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово Function, имя, список формальных параметров (заключенный в скобки) и тип возвращаемого функцией значения. Тело функции представляет собой локальный блок, по структуре сходный с программой. Общий вид описания функции:
Function <имя> (<параметры>): <тип результата>;
Const …; ù
… ý блок описания
Var ….; û
begin
<операторы>
end;
В разделе операторов должен находиться, хотя бы один оператор, присваивающий имени функции значение. Обращение к функции осуществляется по имени с указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам и иметь тот же тип.
Пример 1. Найти значение следующего выражения: F(t) – F(c), где F(x)=Öx +2x2 +3x
Program m;
Uses crt;
Var t, c, r : real;
Function F(x: real) : real;
Begin
F:= sqrt(x)+ 2*sqr(x) + 3*x;
End;
Begin
Clrscr;
Write(‘Введите числа’);
Readln (t, c);
r:= F(t) – F(c);
write(‘результат =’, r:8:3); {8 символов на все число, 3 – на дробную часть, см п.1.4.2}
end.
Пример 2. Найти наибольшее из четырех чисел, используя подпрограмму нахождения наибольшего из двух чисел.
Program max;
Uses crt;
Var a, b, c, d, m, p, q:real;
Function Bid(x, y: real) : real;
Begin
If x>y then bid:=x
else bid:=y;
End;
Begin
Clrscr;
Write(‘Введите числа’);
Readln (a, b, c, d);
p:=bid(a, b);
q:= bid(c, d);
m:=bid(p, q);
write(‘наибольший элемент’, m:8:3);
end.
Одномерные массивы
Все простые типы данных, рассматриваемые ранее, имеют два характерных свойства: неделимость и упорядоченность их значений. Составные, или структурированные, типы данных задают множество сложных значений с одним общим именем. Существует несколько методов структурирования, каждый из которых отличается способом обращения к отдельным компонентам. В данном учебном пособии будут рассмотрены только два структурированных типа данных: регулярный тип (массивы) и строковый тип (часть 5).
С понятием «массив» приходится встречаться при решении научно-технических, экономических задач обработки большого количества однотипных значений.
Таким образом, массив – это упорядоченная последовательность данных, состоящая из фиксированного числа элементов, имеющих один и тот же тип, и обозначаемая одним именем.
Название регулярный тип массивы получили за то, что в них объединены однородные элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элементы в массиве.
Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое. Элементы, образующие массив, упорядочены так, что каждому элементу соответствует совокупность номеров (индексов), определяющих его место в общей последовательности. Индексы представляют собой выражения простого типа. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индекса нужного элемента: <имя массива>[<индекс>].
Описание массива определяет его имя, размер массива и тип данных. Общий вид описания массива:
Type <имя нового типа данных>=array[<тип индекса>] of <тип компонентов>;
Далее, в перечне переменных указывается имя массива, и через двоеточие указывается имя нового типа данных. Массив может быть описан и без представления типа в разделе описания типов данных:
Var <имя массива>: array [<тип индекса>] of <тип компонентов>;
Чаще всего в качестве типа индекса используется интервальный целый тип.
Одномерные массивы
Линейный (одномерный) массив – массив, у которого в описании задан только один индекс, если два индекса – то это двумерный массив и т.д. Одномерные массивы часто называют векторами, т.е. они представляют собой конечную последовательность пронумерованных элементов.
Присваивание начальных значений (заполнение массива) заключается в присваивании каждому элементу массива некоторого значения, заданного типа. Наиболее эффективно эта операция осуществляется при помощи оператора for. Ввод данных может осуществляться : с клавиатуры, при помощи различных формул, в том числе и датчика случайных чисел.
Индексированные элементы массива называются индексированными переменными и могут быть использованы так же, как и простые переменные. Например, они могут находиться в выражениях в качестве операндов, им можно присваивать любые значения, соответствующие их типу и т.д.
Алгоритм решения задач с использованием массивов:
Описание массива
Заполнение массива
Вывод (распечатка) массива
Выполнение условий задачи
Вывод результата
Пример 1. Задан одномерный массив В(10), заполненный произвольным образом. Подсчитать количество элементов массива, больших заданного числа k.
Program massiv;
Uses crt;
Var b:array [1..10] of integer;
I, k, s : integer;
Begin
Clrscr; S:=0;
For i:=1 to 10 do
Begin
Write(‘Введите’, i, ‘-й элемент массива ’);
Readln (B[i]);
Write(b[i], ‘ ‘);
End;
Write(‘Введите число k’);
Readln(k);
For i:=1 to 10 do
If b[i]>k then s:=s+1;
Write(‘Количество элементов’, s);
End.
Пример 2. Определить самую высокую температуру и самый теплый день в мае.
Program massiv;
Uses crt;
Var t:array [1..31] of integer;
I, max, n : integer;
Begin
Clrscr;
For i:=1 to 31 do
Begin
t[i]:=random(20);
Write(b[i], ‘ ‘);
End;
Max:=t[1]; n:=1;
For i:=2 to 31 do
Begin
If t[i] > max then max:=t[i]; n:=i ;
End;
Write(‘максимальная температура’, max, ‘в’, n, ‘день’);
End.
Двумерные массивы
Двумерный массив – структура данных, хранящая прямоугольную матрицу. В матрице каждый элемент определяется номером строки и номером столбца, на пересечении которых он расположен. В Паскале двумерный массив представляется массивом, элементами которого являются одномерные массивы. Два следующих описания двумерных массивов тождественны:
Var a: array [1..10] of array [1.. 20] of real;
Var a: array [1..10, 1..20] of real;
Чаще всего при описании двумерного массива используют второй способ. Доступ к каждому отдельному элементу осуществляется обращением к имени массива с указанием индексов (первый индекс – номер строки, второй индекс – номер столбца). Все действия над элементами двумерного массива идентичны действиям над элементами линейного массива. Только для инициализации двумерного массива используется вложенный цикл for.
Например, For i:= 1 to 10 do
For j:= 1 to 20 do
A[i, j] := 0;
При организации вложенных (сложных) циклов необходимо учитывать:
Все правила, присущие простому циклу, должны соблюдаться
Имена параметров для циклов, вложенных один в другой, должны быть различными
Внутренний цикл должен полностью входить в тело внешнего цикла. Пересечение циклов недопустимо
Пример 1. Сформировать таблицу Пифагора (таблица умножения) и вывести ее на экран.
Program Pifagor;
Uses crt;
Var p: array[1..9, 1..9] of integer; i, j:integer;
Begin
Clrscr;
for i:=1 to 9 do
for j:= 1 to 9 do
p[i,j]:= i*j;
for i:=1 to 9 do
begin
for j:=1 to 9 do
write(p[i,j], ‘ ‘);
writeln
end;
end.
Пример 2. Задан двумерный массив В(10, 10), заполненный случайными числами из
[-10,10]. Найти и вывести на экран те элементы массива, которые больше заданного числа k.
Program massiv;
Uses crt;
Var b: array[1..10, 1..10] of integer; i, j, k :integer;
Begin
Clrscr;
for i:=1 to 10 do
begin
for j:= 1 to 10 do
begin
b [i,j]:= random(20)-10;
write(b[i,j], ‘ ‘);
end;
writeln;
end;
write(‘Введите число k’);
readln (k);
For i:=1 to 10 do
For j:=1 to 10 do
If b[i, j] >k then write (b[i, j]);
End.
Символьные величины
Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПК. Каждому символу задается целое число от 0 до 255. В программе значения переменных и констант типа char должны быть заключены в апострофы.
Пример.
Program lit;
Var c, symbol: char;
Begin
C:= ‘A’;
Symbol:=’д’;
Writeln(c);
Write(symbol);
End.
Результат выполнения программы:
А
д
Над данными символьного типа определены операции отношения: =, <>, >,<,<=,>=, вырабатывающие результат логического типа, и следующие стандартные функции:
Chr(x) – преобразует выражение х в символ и возвращает значение символа
Ord(ch) – преобразует символ ch в его код и возвращает значение кода
Pred(ch) – возвращает предыдущий символ
Succ(ch) – возвращает следующий символ
Пример.
Ord(‘:’) =58
Ord(‘A’)=65
Chr(128)=Б
Pred(‘Б’)=А
Succ(‘Г’)=Д
Строковые величины
Строка (строковый тип данных) – это последовательность символов кодовой таблицы ПК. Количество символов в строке (длина строки) может лежать в диапазоне от 0 до 255. Для определения данных строкового типа используется идентификатор string, за которым следует значение максимальной длины строки данного типа (заключается в квадратные скобки).
Строковые данные могут использоваться в качестве констант. Строковая константа – последовательность символов, заключенная в апострофы. Например, ‘237’, ‘это строковая константа’.
Переменную строкового типа можно определить в разделе описания переменных:
Var <имя>: string[<максимальная длина строки>].
Например, var Name: string[20]. В описании строки можно не указывать длину, в этом случае она равна максимальной величине – 255. Элементы строки определяются именем строки с индексом, заключенным в квадратные скобки. Например, N[5]. Первый символ строки имеет номер 1 и т.д. Можно сказать, что строка представляет собой одномерный массив, элементами которого являются символы. Тип string и тип char совместимы, они могут употребляться в одних и тех же выражениях.
Выражения, в которых операндами служат строковые данные, называются строковыми. Они могут состоять из строковых констант, переменных, знаков операций. Над этими данными допустимы операция сцепления (конкатенация) и операции отношения.
Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно и константы, и переменные. Длина результирующей строки не должна превышать 255 символов.
Операции отношения (=, <>, >, <, <=, >=) проводят сравнение двух строк и имеют приоритет более низкий, чем операция конкатенации. Сравнение строк производится слева направо до первого несовпадающего символа. Строка считается больше, если в ней первый несовпадающий символ имеет больший номер в таблице кодов.
Например, ‘MS-DOS’<’MS-Dos’.
Если строки имеют различную длину, но в общей части символы совпадают, то более короткая строка меньше.
Например, ‘Компьютер’<’Компьютер ’.
Строки равны, если они полностью совпадают.
Например, ‘Маска’ = ’Маска’.
Для обработки строковых данных можно использовать специальные процедуры и функции.
Процедура Delete(St, poz, n) – удаление n символов строки St, начиная с позиции Poz.















