- •2.2. Основные элементы и конструкции языка
- •2.2.2. Алфавит, слова, комментарии
- •Данные
- •Целочисленные типы
- •Логические типы
- •Вещественные типы
- •Массивы
- •Совместимость типов
- •Арифметические выражения и операции
- •Поразрядные операции
- •Логические операции и выражения
- •Операции со строками
- •Приоритеты операций
- •Выражения и операции
- •Операторы
- •Простые операторы
- •Операторы ввода и вывода.
- •Структурные операторы
- •Условные операторы
- •Операторы цикла
- •Структура Паскаль программы
- •Функции и процедуры
- •Процедуры
- •Функции
- •Параметры процедур и функций
- •Модули
- •Общая структура модуля
- •Компиляция и использование модулей
- •Стандартные модули
- •Работа с файлами
- •Общие правила работы с файлами.
- •Текстовые файлы
- •Примеры задач
var
Myfile: text; st : string; begin
assign (Myfile,'primer.txt');
reset (Myfile); {открывает файл для чтения, устанавливает указатель файла на первую запись}
while not eof(Myfile) do
{функция EOF вырабатывает значение 'истина' при достижении конца файла}
begin
Readln(Myfile,st); { чтение из файла } Writeln(st) { и вывод на экран }
end;
close (file); end.
Эта программа устанавливает связь с файлом primer.txt, открывает его, считывает строка за строкой содержащийся в нем текст, до достижения признака "конец файла", и каждый раз (при каждом повторении цикла) записывает этот текст в строковую переменную с именем st. Затем текст выводится на экран оператором writeln(st). В результате работы этой программы на экране будет отображен текст, который содержится в файле primer.txt.
Необходимо обратить внимание на то, что программа fileex2 работала с файлом, который был создан на диске программой (fileex1).
Примеры задач
Пример №1. Даны три неравных числа a, b, c. Вычислить и отпечатать значение z равное квадрату большего из них .
program Prim1; var
A,B,C,Z: Real; begin
Writeln(‘ Исходные данные ’); Write(‘A = ‘); ReadLn(A); Write(‘B = ‘); ReadLn(B); Write(‘C = ‘); ReadLn(C);
if A>B then Z := A else Z := B;
if C>Z then Z:=C; Z := Sqrt(Z);
Writeln(‘Z= ’,Z:8:3) end.
Пример №2. Найти остаток от деления значения целого выражения С=K*(A+B) на 4 и вывести сообщение о величине остатка.
program Prim2; const
Del = 4; var
A, B, C, K, Ost: Integer; begin
Writeln(‘ Исходные данные ’);
70
Write(‘A = ‘); ReadLn(A); Write(‘B = ‘); ReadLn(B); Write(‘K = ‘); ReadLn(K); C := K*(A+B);
Ost := C mod Del; case Ost of
0: begin
Writeln(‘Остаток равен 0’); Writeln(‘число ’,C,’ кратно 4’);
end;
1..3 : Writeln(‘Остаток равен ‘,Ost); end;{case}
end.
Пример №3. Написать программу вычисления функции
|
4.5 |
tg(x),2 |
≤ x ≤ 4; |
||
x |
|
|
|||
y = |
|
a +b x |
,x < 2. |
||
|
|
|
|
||
|
c +d x |
||||
|
|
|
|
||
program Prim3; var
A, B, C, D, X, Y : Real;
IsExit, IsError : Boolean; ExitChar : Char;
begin
Writeln(‘Ввести коэффициенты’); Write(‘ A = ‘); ReadLn(A); Write(‘ B = ‘); ReadLn(B); Write(‘ D = ‘); ReadLn(D); IsExit := False;
repeat
Write(‘ X = ‘); ReadLn(X); if X<=4 then begin
IsError := False;
if (2<=X) and (X<=4) then begin
if Cos(X) <> 0 then Y := Exp(4.5*Ln(X))*Sin(X)/Cos(X) else IsError := True;
end else begin
if (C+D*X)<>0 then Y := (A+B*X)/(C+D*X) else IsError := True;
end;
if not(IsError) then Writeln(‘X=’,X:10:3,‘ Y=’,Y:10)
else
Writeln(‘Сбойная ситуация’); end else begin
Writeln(‘Y не вычислялся, X >4 ’); end;
Write(‘Продолжить (Y)/(N)’); ReadLn(ExitChar);
if ExitChar in [‘N’,’n’,’Н’,’н’] then IsExit := True; until IsExit;
end.
71
Пример №4. Вычислить степень y = an действительного числа a с натуральным
n
показателем n (для вычисления воспользоваться формулой an = a a a Ka = ∏a ).
1
progrram Prim4; var
A, Y : Real;
I, N : Integer; begin
Write(‘ A = ’); Readln(A); Write(‘ N = ’); Readln(N); Y:=1;
for I := 1 to N do
Y := Y*A;
Writeln(A,‘ в степени ’,N,‘ равно ’,Y); end.
Пример 5.
Пример №5. Написать программу приближенного вычисления суммы ряда
|
x |
|
x2 |
|
s = 1+ |
|
+ |
|
+K с точность до eps. Примечание: значения членов ряда будем вычис- |
1! |
2! |
|||
лять по рекуррентной формуле: Ri = R i−1 x i
program Prim5; uses CRT;
var
X, Eps, Y, S : Real; I : Integer; ExitChar : Char;
begin repeat
Write(‘ X = ’); Readln(X); Write(‘Eps = ’); Readln(Eps); S := 0;
Y := 1;
I := 0;
while Abs(Y) > Eps do begin
S:= S + Y;
I := I + 1;
Y := Y * X/I end;
Writeln(‘При X = ’X:8:3,’ S =’,S:8:4,’вычислено за ‘,I, ‘ итераций’);
Write(‘Продолжить (Y)/(N)’); ReadLn(ExitChar);
until (ExitChar=’N’)or(ExitChar=’n’); end.
Пример №6. Найти сумму положительных элементов массива А, состоящего из N элементов.
72
program Prim6; const
Nmax = 20; var
A : array[1..Nmax] of Real; I, N: Integer;
S : Real; begin
repeat
Write(‘N = ‘); Readln(N);
if N>Nmax then WriteLn(‘Размер массива не должен быть больше’,Nmax);
until N<=Nmax;
for I := 1 to N do {Ввод значений массива А} begin
Write(‘A[‘,I,’]=’);
Readln(A[I]); end;
S := 0;
for I := 1 to N do
if A[I] > 0 then S := S+A[I]; Writeln(‘S=’,S:10:2);
end.
Пример №7. Найти минимальный элемент в массиве A и поменять его местами с максимальным элементом массива B. Массив А имеет N значений; массив В имеет M значений.
program Prim7; const
ArrMax = 100; var
A, B :array[1..ArrMax] of Real; I,J,K,N,M : Integer;
MinA, MaxB: Real; begin
repeat
Write(‘Размерность массива A N = ‘); Readln(N); Write(‘Размерность массива B M = ‘); Readln(M); if (N>ArrMax)or(M>ArrMax) then
WriteLn(‘Размер массива не должен быть больше’,ArrMax); until (N<=ArrMax)and(M<=ArrMax);
for I:=1 to N do {Ввод значений массива А} begin
Write(‘A[‘,I,’]=’);
Readln(A[I]); end;
for I:=1 to M do {Ввод значений массива B} begin
Write(‘B[‘,I,’]=’);
Readln(B[I]); end;
MinA:=A[1];
for I:=1 to N do
if MinA>A[I] then
73
begin |
A[I]; |
|
MinA := |
|
|
J := I; |
|
|
end; |
|
|
MaxΒ:=B[1]; |
|
|
for I:=1 to M do |
|
|
if MaxB<B[I] then |
|
|
begin |
B[I]; |
|
MaxB := |
|
|
K := I; |
|
|
end; |
|
|
A[J] := MaxB; |
|
|
B[K] := MinA; |
= ’,Mina:7:2,’ MaxB = ’,Maxb:7:2); |
|
Writeln(‘MinA |
’ ); |
|
for I := 1 to |
N do Write(‘A[‘,I,’]=’,A[I]:7:2,’; |
|
{Вывод Значений |
Массива А} |
’ ); |
for I := 1 to |
M do Write(‘B[‘,I,’]=’,B[I]:7:2,’; |
|
{Вывод Значений |
Массива B} |
|
end. |
|
|
Пример №8. Написать программу для вычисления значений массива Y по выра-
жению: yi = ai + bi xi , где массивы A и B имеют по десять значений, а xi = xi−1 +∆x . Результаты вывести в табличной форме.
program Prim8; var
A, B, X, Y: array[1..10] of Real; I , N : Integer;
Xn, dX : Real; begin
Write(‘X[1] = ’); Readln(Xn); Write(‘dX = ’); Readln(dX);
Writeln(‘Ввод значений коэффициентов’); for I := 1 to 10 do
begin
Write(‘A[‘,I,’] = ’); Readln(A[I]); Write(‘B[‘,I,’] = ’); Readln(B[I]);
end;
for I := 1 to 10 do begin
X[I] := Xn + dX*(I-1); Y[I] := A[I] + B[I] * X[I];
end;
{Вывод значений в таблице}
Writeln(‘ Таблица’)’ Writeln(‘---------------------------------------------’); Writeln(‘| A | B | X | Y |’); Writeln(‘---------------------------------------------‘); for I := 1 to 10 do
begin
Writeln(‘| ’,A[I]:8:3,’ | ’, B[I]:8:3, ’ | ’, X:8:3, ’ | ’,Y[I]:8:3,’ |’);
74
end; |
‘); |
Writeln(‘--------------------------------------------- |
|
end. |
|
Пример №9. Найти количество и сумму положительных элементов матрицы A(n,n) лежащих выше главной диагонали.
program Prim9; const
Nmax = 25; var
A : array[1.. Nmax,1.. Nmax] of Real; I, J, N, K : Integer;
S :Real; begin
repeat
Write(‘N = ‘); Readln(N);
if N>Nmax then WriteLn(‘Размер матрицы не должен быть
until |
N<=Nmax; |
больше ’,Nmax,’Х’,Nmax); |
|
||
for I |
:= 1 to N do {Ввод значений матрицы А} |
|
for J := 1 to N do |
|
|
begin |
|
|
|
Write(‘A[‘,I:2,’,’,J:2,’] = ’); |
|
|
Readln(A[I,J]); |
|
end; |
|
|
S:=0; |
K:= 0; |
|
for I:=1 to N-1 do |
|
|
for J:=I+1 to N do |
|
|
if A[I,J]>0 then |
|
|
|
begin |
|
|
S := S + A[I, J]; |
|
|
K := K + 1; |
|
|
end; |
S = ’,S); |
Writeln(‘Сумма |
||
Writeln(‘Количество |
K = ’,K); |
|
end.
75
