Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль-конспект ИНФОРМАТИКА.doc
Скачиваний:
59
Добавлен:
09.04.2015
Размер:
639.49 Кб
Скачать

4.7. Предварительное описание (ссылки вперед)

Объявления констант и переменных в любом блоке располагаются перед скобками begin...end(в этих скобках заключены сами операторы). Поэтому компилятору никогда не приходится иметь дело с оператором, содержащим константы и переменные, которых он не знает, это вызовет во время компиляции сообщение об ошибке. Все это справедливо и в отношении подпрограмм (т.е. функций и процедур). Программист обязан следить за правильным порядком следования определений (описаний).

Пример :

Program Demo;

Var a, b ,c : real ;

Procedure Ring (var s , l : real ; d : real);

BeginL:=3.14 *d; {длина окружности }

S:=cir(d) ; {компилятор еще не знает о функцииcir}

End;

Function Cir (d: real): real; {площадь круга }

Begin cir:= 3.14* sqr(d) / 4;

End;

………………………………………………………………………

Очевидный выход – поменять порядок строк так, чтобы функция Cir была определена перед процедурой Ring(…) .Однако можно и иначе.

Действия:

1. Оставить подпрограмму (функцию cir) на своем месте, вычеркнув из ее заголовка все параметры:Functioncir;

2. Вставить полный заголовок там, где ему надлежит бытью, т.е. перед подпрограммой, которая его вызывает.

Function cir (d: real): real;

  1. После полного заголовка добавить слово Forward.

5. Регулярные типы

5.1. Одномерный массив, или переменные с индексами

Массив– это упорядоченный набор однотипных элементов. Под массивом понимается конечная совокупность данных одного типа, упорядоченных по значениям индекса. Каждый элемент массив обозначается именем массива и индексом. Индекс заключается в квадратные скобки.

Если в программе используется массив, он должен быть описан в разделе типов или в разделе переменных.

Описание в разделе переменных:

Varимя массива:Array[тип индекса]ofтип элемента;

Тип индекса может быть любым простым типом, кроме RealиInteger(Boolean,Char, перечислимый, ограниченный).

Тип элементов массива – это базовый тип, из которого составлен массив. Это может быть любой простой или сложный тип – вообще любой допустимый в языке программирования Паскаль.

Var A: Array [1..5] of Real;

Это массив из пяти действительных чисел: А[1], А[2], А[3], А[4], А[5].

Обычно нумерация начинается с единицы и заканчивается каким-нибудь положительным числом. Однако это совсем не обязательно.

Пример: VarB:Array[1582..1994]ofInteger;

Var C: Array [-754..-1] of Integer;

(это, например, население за какие-то годы нашей эры и до нашей эры).

Массив латинских букв: (можно посчитать частоту появления в тексте):

Var Lat: Array [‘A’..’Z’] of Integer;

Массив t0Cвоздуха на островах:

Type Остров = (Gaiti, Sumatra, Taimir);

Var T: Array [Остров] of Real;

Поскольку тип индекса не может быть стандартным целым или действительным типом, нельзяделать следующие описания массива:

Var А: Array [5] of Real;

Var А: Array[Integer] of Real;

Пример:

Var

Massiv: Array [1..N] of Real;

Year: Array [янв..дек] of Integer;

Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то допускается в описание объединять массивы в список:

Var А, В, С: Array[1..50] of Real;

Здесь объявлено списком три массива действительных чисел, каждый из которых содержит по 50 элементов:

А[1], A[2],…A[50].

B[1],B[2],…B[50].

C[1],C[2],…C[50].

В качестве индекса может использоваться. выражение, частным случаем которого является константа или переменная. Элемент массива можно называть переменной с индексом. В отличие от нее переменная без индекса называется простой переменной.

Элементы массива записываются в разделе операторов как идентификатор с индексом в квадратных скобках.

B[5]:=B[3]-1;

Sum:=Sum-C[K];

P1:=A[2*3+1];

Для ввода и вывода числовых значений элементов массива используются циклы.

Пример:

For I:=1 to 9 do

Read(A[I]);

Это ввод 9-ти значений элементов массива А.

For I:=1 to 9 do

Writeln(A[I]);

Это их вывод.

Пример: Вычислить сумму 15-ти целых чисел.

Program Sum;

Var X: Array [1..15] of Integer;

I: 1..15;

Sum: Integer;

Begin

Sum:=0;

For I:=1 to 15 do

Begin

Read(X[I]);

Sum:=Sum+X[I];

End;

End.

В языке программирования Паскаль помимо явного описания массивов в разделе переменных есть другая форма описания, состоящая из двух этапов. Сначала в разделе описания типов Typeуказывается тип массива, затем в разделе описания переменныхVarперечисляются массивы, относящиеся к донному типу.

Typeимя типа =Array[тип индекса]ofтип элементов массива;

Varимя массива: имя типа;

Пример:Программа с двумя процедурами: одна – для ввода элементов массива, другая для вычисления суммы и произведения элементов.

Program TI4;

Type Massiv = Array [1..20] of Real;

Var A, B: Massiv;

Sum, Pr: Real;

Procedure Vvod (N:Integer; Var X:Massiv);

Var I: Integer;

Begin

Writeln(‘Ввод’);

For I:=1 to N do Read(X[I]);

End;

Procedure Summa (N:Integer; Var X:Massiv; Var Sum, Pr: Real);

Var I: Integer;

Begin

Sum:= 0;

Pr:=1;

For I:=1 to N do

Begin

Sum:=Sum+X[I];

Pr:=Pr*X[I];

End;

End;

Begin

Vvod(8,A); (*вызов процедуры*)

Summa(8,A,Sum,Pr); (*вызов процедуры*)

Writeln (‘Sum=’,Sum:7:2,’ ’:3,’Pr=’,Pr);

Writeln;

Vvod(15,B);

Summa(15,B,Sum,Pr);

Writeln (‘Sum=’,Sum:7:2,’ ’:3,’Pr=’,Pr);

End.

В основной программе описан тип массива длинной 20 элементов, а реально используются массивы А (8 элементов) и В(15 элементов).

Пример: Расположить элементы заданного действительного массива в порядке убывания: 1 2 3 44 3 2 1

Program Rangir;

Const N=10;

Var A: Array [1..N] of Real;

I, K: Integer; R: Real;

Begin

Writeln(‘Ввод’);

For I:=1 to N do Read (A[I]);

For K:=1 to N do

For I:=1 to N-K do

If A[I]<A[I+1] then

Begin

R:= A[I];

A[I]:= A[I+1];

A[I+1]:=R;

End;

For I:=1 to N do Write (A[I]);

End.

K- номер просмотра строки (всегоN-1 просмотров)

I - номер сравнение элементов в просмотре (N-K сравнений).

Пример: МассивRсостоит из 10-ти элементов действительного типа.

Type Mas = Array [1..10] of Real;

VarR:Mas;

Если в программе несколько таких массивов, то изменится лишь раздел описания переменных:

Var R, A, B, C: Mas;

В разделе операторов программы используются массивы R, A, B, C. Тип массива Masвведен формально только в разделе описаний инигдев программе не указывается и не обрабатывается.

Пример: Найти наибольшее из 10-ти заданных целых чисел.

Program Max;

Const N=10;

Type Massiv = Array [1..N] of Integer;

Var K: Massiv;

Max, I: Integer;

Begin

Writeln(‘Ввод’);

For I:=1 to N do Read (K[I]);

Max:=K[1];

For I:=2 to N do

If K[I]>Max then Max:=K[I];

Writeln;

Write (‘Max=’, Max:4);

End.

Здесь 2 независимых цикла:

1-ый – для ввода значений массива;

2-ой – для нахождения максимального элемента.

Сначала первый элемент массива K[1] обозначается именем Мах. Затем каждый последующий элемент сравнивается со значением Мах, и если он оказывается больше, то получает имя Мах.

Пример: Составить программу определения минимального и максимального элементов заданного массива.

Program Minmax;

Const N=9; (*число элементов*)

Type Massiv = Array [1..N] of Real;

Var A: Massiv; (*массив элементов*)

I: Integer; (*параметр цикла*)

Max,Min:Real; (*максимальный и минимальный элементы*)

Procedure Maxmin (K: Integer; Var X: Massiv; Var Max, Min: Real);

Var J: Integer;

Begin

Max:=X[1];

Min:=X[1];

For J:=2 to K do

Begin

If X[J] > Max then Max:= X[J];

If X[J] < Min then Min:= X[J];

End;

End;

Begin

Writeln (‘Ввод массива’);

For I:=1 to N do Read (A[I]);

Maxmin (N, A, Max, Min); (*вызов процедуры*)

Writeln(‘макс. элемент=’,Max:4:1);

Writeln(‘мин. элемент=’,Min:4:1);

End.

В процедуре Maxminопределяются максимальный и минимальный элементы массива. ПеременнаяJи формальные параметры процедурыK,X,Max,Minявляются локальными. В основной программе происходит ввод значений массива, вызов процедуры и вывод результатов. КонстантаN, типMassiv, а также переменныеA,I,MaxиMinявляются глобальными.

Пример: Дан массив действительных чисел {Ai}, гдеi=1,2,3,4,..M. ПустьM= 15. Вычислить сумму элементов с 1-го по 12-ый и сумму элементов с 8-го по 15-ый. Затем найти произведение этих сумм.

ProgramPr2;

ConstM=15;

VarA:Array[1..M]ofReal;

P:Real; (*произведение сумм*)

J: Integer; (*параметр цикла*)

Function Summa (N, K: Integer): Real;

Var I: Integer;

S: Real;

Begin

S:=0;

For I:=N to K do S:=S+A[I];

Summa:=S;

End;

Begin

Writeln (‘Ввод массива’);

For J:=1 to M do Read (A[J]);

P:=Summa (1,12)* Summa(8,15);

Writeln(‘произведение=’,P:6:3);

End.

Пример: Дан массив (Х12,…Х100). Записать отдельно положительные и отрицательные элементы.

Program Sort;

Const Nmax=100;

Var X,Pol,Otr: Array [1..Nmax] of Real;

I,N,K: Integer;

Begin

N:=0; K:=0;

For I:=1 to Nmax do

Begin

Read (X[I]);

If X[I] >0 then

Begin

K:=K+1;

Pol[K]:=X[I];

End

Else

Begin

N:=N+1;

Otr[N]:=X[I];

End;

End;

For I:=1 to K do Write (Pol[I]);

Writeln;

For I:=1 to N do Write (Otr[I]);

End.

Пример: Вычислить среднее арифметическое массиваDиз N элементов (N500).

Program Sred;

Const NM=500;

Var D: Array [1..NM] of Real;

I,N,Nvar: Integer;

Sum, Srd: Real;

Begin

Sum:=0;

Writeln (‘Nvar=?’);

Readln(Nvar);

Writeln (‘Ввод массива’);

For I:= 1 to Nvar do

Begin

Read (D[I]);

Sum:= Sum + D[I];

End;

Srd:=Sum/Nvar;

Writeln(‘Srd=’,srd);

End.

Пример: Вычислить n!

Program Nfact;

Var NF, K, N:Integer;

Begin

Writeln(‘N=?’);

Readln (N);

NF:=1;

For K:=1 to N do NF:=NF*K;

Writeln(‘NF=’,NF);

End.

Пример: Найти наибольший элемент массива (b1,b2,…b100) и его №.

Program Max;

Const NMax=100;

Var B: Array [1..NMax] of Real;

I,Imax: Integer;

Bmax: Real;

Begin

Writeln (‘Ввод массива’);

For I:=1 to NMax do Read (B[I]);

Bmax:=b[1]; Imax:=1;

For I:=2 to NMax do

If B[I]>Bmax then

Begin

Bmax:=B[I];

Imax:=I;

End;

Writeln (‘Bmax=’, Bmax, ’Imax=’, Imax);

End.

Пример: Найти скалярное произведение двух векторов:

X=(x1,x2,…xn) n

Y=(y1,y2,…yn) (X,Y)= xiyi

i=1

Program Scal;

Const N=3;

Type Vektor = Array [1..N] of Real;

Var X, Y: Vektor;

I: Integer;

S: Real;

Begin

S:=0;

Writeln (‘Ввести X,Y’);

For I:=1 to N do

Begin

Read(X[I],Y[I]);

S:= S+ X[I]*Y[I];

End;

Writeln(‘Scal=’,S);

End.

Пример: Перемножить два вектора:

X=(x1,x2,x3) _ _ _

Y=(y1,y2,y3) Z = X * Y

Program V;

Type Vektor = Array [1..3] of Real;

Var X, Y, Z: Vektor;

I: Integer;

Begin

Writeln (‘Ввести X,Y’);

For I:=1 to 3 do

Begin

Read (X[I],Y[I]);

Z[I]:= X[I]*Y[I];

End;

Writeln (‘Вектор Z’);

For I:=1 to 3 do Write (Z[I]);

End.

(x1, x2, x3) * (y1, y2, y3) = (x1y1, x2y2, x3y3)