Паскаль –
язык структурного программирования
СОДЕРЖАНИЕ
Логические операции
Структура программы
Алфавит языка
Программирование
ветвлений
Типы данных
ПРАКТИЧЕСКАЯ РАБОТА 2
Операторы присваивания,
ввода и вывода
Оператор выбора Case
Арифметические
операции и операции
отношения
ПРАКТИЧЕСКАЯ РАБОТА 3
Программирование цикла
Бинарные операции
ПРАКТИЧЕСКАЯ РАБОТА 4
Стандартные
математические функции
Вложенные циклы
ПРАКТИЧЕСКАЯ РАБОТА 5
ПРАКТИЧЕСКАЯ РАБОТА 1
Символьный тип данных
Итерационные циклы
ПРАКТИЧЕСКАЯ РАБОТА 6
ПРАКТИЧЕСКАЯ РАБОТА 9
Подпрограммы
Строки символов
Массивы
ПРАКТИЧЕСКАЯ РАБОТА 10
ПРАКТИЧЕСКАЯ РАБОТА 7
Комбинированный тип
данных
Организация ввода и
вывода данных с
использованием файлов
ПРАКТИЧЕСКАЯ РАБОТА 11
ПРАКТИЧЕСКАЯ РАБОТА 8
ИТОГОВАЯ
ПРАКТИЧЕСКАЯ РАБОТА
; Uses раздел библиотек ; Label раздел меток ; Const раздел констант ; Type раздел типов ; Var раздел переменных ; Procedure (Function) раздел подпрограмм ; Begin раздел операторов ; End." width="640"
Структура программы
Program имя программы ;
Uses раздел библиотек ;
Label раздел меток ;
Const раздел констант ;
Type раздел типов ;
Var раздел переменных ;
Procedure (Function) раздел подпрограмм ;
Begin
раздел операторов ;
End.
Алфавит языка
Латинские буквы : от A до Z и от а до z
Цифры : 0,1,2,3,4,5,6,7,8,9
Специальные символы: + - * / = . , {} @ $ #
Пробелы
Служебные слова : Program, Var, if и другие
Идентификаторы – Любая последовательность букв и цифр,
начинающаяся с буквы.
Комментарии
{ любой текст, не содержащий символы фигурная скобка }
(любой текст, не содержащий символы звездочка и круглая скобка )
Замечание
Для комментарий можно применять русский алфавит
Система типов данных Паскаля
Порядковые
Типы
Простые
Целочисленные
Логический
Вещественные
Массив
Структурные
Символьный
Строковый
Перечисленные
Ссылочные
Множество
Ограниченные
Запись
Файл
Типы данных
Имя типа
Длина
в
байтах
Целочисленные типы
Диапазон значений
Integer
Десятичных цифр в мантиссе
2
Byte
- 32768..32767
1
Word
Shorting
0..255
2
0..65535
1
Longint
- 128..127
4
-2147483648..2147483647
Типы данных
Имя типа
Вещественные типы
Длина в байтах
Диапазон значений
Real
Десятичных цифр в мантиссе
6
Single
Double
2,9*10-39.. 1,7 * 1038
4
8
11-12
1,5*10-45... 3,4 * 1038
extended
10
5*10-324.. 1,7 * 10308
7-8
Логический тип
15-16
3,4*10-4932... 1,1 * 104932
Boolean
19-20
2
Символьный тип
True, False
Char
1
Все символы 8 разрядной кодировки
.. константа2 Type Numbers = 1..31 Alf = ‘A’..’Z’; Var Data: Numbers; Bukva: Alf; пример" width="640"
Перечисленный тип
Задается непосредственно перечислением всех значений, которые может принимать переменная данного типа
Type = ()
Type Gas = (C, O, N, F);
Metal = ( Fe, Co, Na, Gu, Zn);
Var G1, G2, G3: Gas;
Met1, Met2 : Metal;
Day: (Sun, Mon, Tue, Wed, Thu, Fri, Sat);
пример
if Day=Sun Then Write (‘ Сегодня выходной !’)
Ограниченный тип
Задается как упорядоченное ограниченное подмножество некоторого порядкового типа
константа1 .. константа2
Type Numbers = 1..31
Alf = ‘A’..’Z’;
Var Data: Numbers;
Bukva: Alf;
пример
) Readln ( список ввода ) Вывод данных Write( вывод данных ) Writeln ( вывод данных ) Оператор присваивания Название переменной := значение " width="640"
Ввод данных
Read ( список ввода )
Readln ( список ввода )
Вывод данных
Write( вывод данных )
Writeln ( вывод данных )
Оператор присваивания
Название переменной := значение
больше = больше или равно
Арифметические операции
- унитарный минус
+ сложение
* умножение
/ деление
Операции отношения
= равно
неравно
больше
= больше или равно
Бинарные операции Паскаля
Знак
Выражение
+
-
Типы
операндов
A+B
A-B
*
R,R
I,I
I,R; R,I
Тип
результата
R
I
R
A*B
/
R,R
I,I
I,R; R,I
Операции
R
I
R
A/B
R,R
I,I
I,R; R,I
div
Сложение
A div B
R,R
I,I
I,R; R,I
Вычитание
R
I
R
R
I
R
Умножение
I,I
Вещественное деление
I
Целочисленное деление
Стандартные математические функции Паскаля
Обращение
Тип аргумента
PI
Тип результата
abs(x)
Функция
R
I, R
arctan(x)
cos(x)
Число π=3,1415926536Е+00
I, R
I, R
exp(x)
I, R
Модуль аргумента
R
Арктангенс (в радианах)
R
I, R
frac(x)
Косинус ( в радианах)
R
I, R
int(x)
e x - экспонента
R
I, R
ln(x)
Дробная часть x
R
I, R
Целая часть x
R
Натуральный логарифм
Стандартные математические функции Паскаля
Тип результата
Функция
Тип аргумента
Обращение
Псевдослучайное число в интервале [0, 1)
R
pandom
random(x)
I
I
Псевдослучайное число в интервале [0, x )
I
Округление до ближайшего целого
round(x)
R
sin(x)
I,R
R
Синус (в радианах)
квадрат x
R
I, R
sqr(x)
sqrt(x)
I, R
R
Корень квадратный x
trunc(x)
R
I
Ближайшее целое, не превышающее x по модулю
ЗАДАЧА
Найти радиусы вписанной и описанной окружностей в правильный
треугольник, если известна сторона треугольника
Program radius;
Uses crt;
Var a, ro, rv: real;
Begin
writeln (‘ введите сторону треугольника ’ ) ;
read (a);
ro:= a*sqrt(a)/3;
rv:= a*sqrt(a)/6;
writeln( ‘ радиус описанной окружности равен ’, ro);
writeln( ‘ радиус вписанной окружности равен ’, rv);
readkey
end.
Формализация
Воспользуемся формулами
Задачи для практической работы № 1
Вычислить значение выражения
Program Praktik 1 1 ;
Var x, y, z: real;
Begin
read (x, y);
z:=( abs(x) – abs(y)) /(1+
abs(x*y));
write (z)
end.
Program Praktik1 2 ;
Var x, y, z: real;
Begin
read (x, y);
z:=ln(abs((y-sqrt(abs(x)))*(x-y/ (2 +
sqr(x)-5*x))));
abs(x*y));
write (z)
end.
Логические операции
Конъюнкция ( и) & или AND
Дизъюнкция (или) OR
Отрицание (не) NOT
Исключающее или XOR
A
T
B
T
Not A
T
F
A and B
F
F
F
F
A or B
T
T
F
T
F
A xor B
T
T
F
F
T
F
T
T
F
T
F
Программирование ветвлений
Условный оператор IF
да
Полное ветвление
If
Then
Else
нет
условие
серия 1
серия 2
да
нет
Неполное ветвление
If
Then
условие
серия
0 D=0 D
Задача
Решить квадратное уравнение
Формализация
Ax 2 +Bx+C=0
D=B 2 - 4AC
если D0
D=0
D
0 then begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); writeln (‘ 2 корня ’, x1, x2); end else if d = 0 then begin x1:=-b/(2*a); writeln (‘ корень один ’, x1); end else write (‘ корней нет ’); readkey; end." width="640"
Program kvuravn;
Uses crt;
Var a, b, c, d, x1, x2: real;
Begin
Writeln(‘ Введите коэффициенты квадратного уравнения ’);
Read ( a, b, c ) ;
d:=sqr(b) – 4*a*c;
if d 0 then begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln (‘ 2 корня ’, x1, x2);
end
else if d = 0 then begin
x1:=-b/(2*a);
writeln (‘ корень один ’, x1);
end
else write (‘ корней нет ’);
readkey;
end.
Задача для практической работы № 2
Найти значение следующей функции
Program Praktik2;
Uses crt;
Var x,y: real;
Begin
Write (‘ Введите х ’ ) ;
Read(x);
If x
If x
Write(‘y=‘,y:5:3);
Readkey
End.
Программирование ветвлений
Оператор выбора Case
Case of
:;
…
:;
Else
End
Задача
Составить программу которая сообщает, сдал студент экзамен или не сдал.
Формализация
Если оценка одна из следующих 3, 4, 5, то экзамен сдан; если 2, то не сдан.
Program stydent;
Uses crt;
Var n:integer;
Begin
Writeln (‘ введите оценку ’);
Read (n);
Case n of
3, 4, 5: WriteLn (‘ Экзамен сдан ’) ;
2 : WriteLn (‘ Экзамен не сдан ’) ;
Else WriteLn (‘ Нет такой оценки ’)
End;
Readkey
End.
Задача для практической работы № 3
Program practik3;
Uses crt;
Var Year : Integer;
Begin
WriteLn('Введите номер года ');
ReadLn(Year);
Case (Year mod 12) Of
0: WriteLn('Год Обезьяны');
1: WriteLn('Год Петуха');
2: WriteLn('Год Собаки');
3: WriteLn('Год Свиньи');
4: WriteLn('Год Крысы');
5: WriteLn('Год Коровы');
6: WriteLn('Год Тигра');
7: WriteLn('Год Зайца');
8: WriteLn('Год Дракона');
9: WriteLn('Год Змеи');
10: WriteLn('Год Лошади');
11: WriteLn('Год Овцы')
End;
Readkey
End.
По номеру года определить его название в старо японском календаре
Формализация
Началом цикла будем считать 1996 год — год крысы. Чтобы вывести название нужно анализировать остаток от деления номера года на 12. Название годов - крыса,
корова, тигр, заяц, дракон, змея, лошадь, овца, обезьяна, петух, собака и свинья .
Программирование цикла
Цикл с предусловием (цикл- пока)
While Do ;
нет
условие
да
серия
Цикл с постусловием (цикл- до)
Repeat
Until ;
серия
нет
условие
да
Программирование цикла
Цикл с параметром
For : To Do ;
For : Downto Do ;
Задача
Составить программу проверки знаний учеником таблицы умножения.
Формализация
Компьютер задает ученику 10 вопросов на умножение чисел от 2 до 9. На каждое задание ученик вводит свой ответ, компьютер сообщает верный ответ.
Подсказка: Нужно использовать функцию random(x)
Program test;
Var x,y,i,z: integer;
Begin
for i:=1 to 10 do
begin
x:= random(8) +2;
y:= random(8) +2;
writeln (‘ Сколько будет ’,x,’*’,y,’ ? ’);
read (z);
if z=x*y
then writeln (‘ Правильно! ’)
else writeln (‘ Неправильно! ‘, x,’*’ ,y ,’=‘,x*y);
end;
end.
Задача для практической работы № 4
2 вариант
Составить на Паскале программу для вычисления суммы ряда
1 вариант
Составить на Паскале программу для вычисления суммы ряда:
Program Praktik 4 1;
Uses crt;
Var n ,i :integer;s:real;
Begin
Write('введите значение N');
Read (n);
s:= 1 ;
For i:= 2 to n do
S:=s+(1/sqr(n));
Write('сумма равна 's :8:2 );
Readkey
End.
Program Praktik 4 2;
Uses crt;
Var n ,i :integer;s:real;
Begin
Write('введите значение N');
Read (n);
s:= 1 ;
For i:= 2 to n do
S:=s+(1/sqr t (n));
Write('сумма равна 's :8:2 );
Readkey
End.
Вложенные циклы - если в теле одного цикла имеется другой цикл
Начало
x: = 1 до N
x=1; y=1,2,3, …,N
x=2; y=1,2,3, …,N
…
x=N; y=1,2,3, …,N
y: = 1 до N
Вывод x*y
Конец
Задача
Составить таблицу умножения
Program tablumn;
Uses crt;
Var x, y: 1..9;
Begin
For x:=1 to 9 do
Begin
Writeln;
For y:=1 to 9 do
Write (x*y:3)
End;
Readkey;
End.
Задача для практической работы № 5
Сколько можно купить быков, коров и телят на 100 руб., если в сумме должно быть куплено 100 голов скота, а цена быка – 10 руб., цена коровы – 5 руб., цена теленка – 0,5 руб.?
Program Praktik5;
Uses crt;
Var a, b, c: integer;
Begin
for a:= 1 to 10 do
for b:=1 to 100 do
for c:=1 to 100 do
if (a+b+c = 100) and
(10*a + 5*b + 0.5*c) =100 then
writeln (a,’ быков ’ , b,’ коров ’ , c , ’ телят ’);
Readkey;
end.
формализация
A – количество быков
B – количество коров
C - количество телят
A + B + C =100
10*A + 5*B + 0,5 C = 100
eps do Begin Exp:=exp+an; i:=i+1; an:=(an*x)/i; End; Writeln(‘exp=‘,exp) End. Задача Составить программу которая считает значение e x по формуле В сумму нужно включить только слагаемые, значение которых больше некоторой малой величины ε ( эпсилон)." width="640"
Итерационный цикл – это цикл, для которого число повторений тела цикла заранее неизвестно
Program exponenta;
Var exp, x, an, eps: real; i: integer;
Begin
Write (‘ Введите x=‘); Read (x);
Write (‘eps=‘); Read (eps);
exp:=0; i:=0; an:=1;
While aneps do
Begin
Exp:=exp+an;
i:=i+1;
an:=(an*x)/i;
End;
Writeln(‘exp=‘,exp)
End.
Задача
Составить программу которая считает
значение e x по формуле
В сумму нужно включить только
слагаемые, значение которых больше
некоторой малой величины ε ( эпсилон).
0) do begin Y:= x mod 10; if Y mod 2=0 then chet:=chet+1 else nechet:=nechet+1; x:=x div 10 end; Writeln ('число четных чисел равно ',chet); writeln ('число нечетных чисел равно ',nechet); Readkey End. Составить программу определения количества четных и нечетных цифр в записи данного натурального числа? Подсказка. Сначала нужно отделить последнюю цифру. Потом проверить четная она или нечетная (использовать операцию mod ). Затем отбросить последнюю цифру (использовать операцию div ). Процесс повторить." width="640"
Задача для практической работы № 6
Program Praktik6 ;
Uses crt;
var x,y: Longint; chet,nechet:word;
begin
Write ('Введите целое число ');
Readln (x);
Chet:=0;
Nechet:=0;
While (x0) do
begin
Y:= x mod 10;
if Y mod 2=0 then chet:=chet+1 else nechet:=nechet+1;
x:=x div 10
end;
Writeln ('число четных чисел равно ',chet);
writeln ('число нечетных чисел равно ',nechet);
Readkey
End.
Составить программу определения количества четных и нечетных цифр в записи данного натурального числа?
Подсказка.
Сначала нужно отделить последнюю цифру. Потом проверить четная она или нечетная (использовать операцию mod ).
Затем отбросить последнюю цифру (использовать операцию div ). Процесс повторить.
[ (список формальных параметров ]; блок Описание: Function имя функции [ (список формальных параметров ] : тип функции ; блок Обращение – оператор процедуры Обращение - операнд выражения () {(список фактических параметров)} Параметры подпрограмм Параметры - переменные Параметры - значения Описание : список переменных : тип Описание: Var список переменных : тип Фактические переменные: переменные Фактические переменные: выражения" width="640"
Подпрограммы
Процедуры
Функции
Результат – любое число величин
Результат- одна величина
Описание :
Procedure имя программы [ (список формальных параметров ]; блок
Описание:
Function имя функции [ (список формальных параметров ] : тип функции ; блок
Обращение – оператор процедуры
Обращение - операнд выражения
()
{(список фактических параметров)}
Параметры подпрограмм
Параметры - переменные
Параметры - значения
Описание :
список переменных : тип
Описание:
Var список переменных : тип
Фактические переменные:
переменные
Фактические переменные:
выражения
Задача
По координатам вершин треугольника вычислить его периметр, используя подпрограмму вычисления длины отрезка между двумя точками.
Формализация
Если точка A ( x 1 ;x 2 ) и B(y 1 ;y 2 ) то
Program perimetr1;
Uses crt;
Var a1,a2,b1,b2,c1,c2,p:real;
Procedure dlina (x1,x2,y1,y2: real;var p: real);
begin
p := p+ sqrt(sqr(x1- y 1)+sqr( x2 -y2));
end;
begin
Write(‘Введите координаты точки A ' );
Read (a1,a2);
Write(' Введите координаты точки B ' );
Read (b1,b2);
Write(' Введите координаты точки С ' );
Read (c1,c2);
dlina (a1,a2,b1,b2,p);
dlina (a1,a2,c1,c2,p);
dlina (b1,b2,c1,c2,p);
Write (‘Периметр равен ',p:10:3);
Readkey
End.
Program perimetr 2 ;
Uses crt;
Var a1,a2,b1,b2,c1,c2,p:real;
Function pr (x1,x2,y1,y2: real ) : real;
begin
pr := pr+ sqrt(sqr(x1- y 1)+sqr( x2 -y2));
end;
begin
Write(‘Введите координаты точки A ' );
Read (a1,a2);
Write(' Введите координаты точки B ' );
Read (b1,b2);
Write(' Введите координаты точки С ' );
Read (c1,c2);
pr (a1,a2,b1,b2);
pr (a1,a2,c1,c2);
p:=pr (b1,b2,c1,c2);
Write (‘Периметр равен ',p:10:3);
Readkey
End.
: array [ тип индекса ] of тип компонентов Var T: array [1 ..10] of real # Элемент массива идентифицируется в виде переменной с индексами T[5], T[k], T[i+j], T[p mod r] # Тип индекса может быть любым скалярным порядковым типом, кроме Integer Var cod: array [Char] of 1..100 L: array [Boolean] of Char cod[‘y’]; L[False]; cod[chr(33)];" width="640"
Массивы
Переменная величина представляющая собой совокупность пронумерованных однотипных величин.
Описание массива
Var идентификатор : array [ тип индекса ] of тип компонентов
Var T: array [1 ..10] of real
# Элемент массива идентифицируется в виде переменной с индексами
T[5], T[k], T[i+j], T[p mod r]
# Тип индекса может быть любым скалярным порядковым типом, кроме Integer
Var cod: array [Char] of 1..100
L: array [Boolean] of Char
cod[‘y’]; L[False]; cod[chr(33)];
Описание массива
# В качества индекса можно использовать перечисленный тип
Type Index = (A, B, C, D);
Var class 10: array[ Index ] of Byte;
# Структурному типу присваивается имя в разделе типов, которое затем используется в разделе описания переменных.
Type Mas1 = array [1..100] of Integer;
Mas2 = array [-10..10] of Char;
Var Num: Mas1; Sim: Mas2;
: array [ тип индекса ] of array [ тип индекса ] of тип компонентов Var Tabl: array [1 ..4] of array [1 ..4] of real Var Tabl: array [1 ..4,1 ..4] of real Трехмерный массив Var Tabl: array [1 ..n,1 ..m, 1 ..k] of real Замечание: Не допускается употребление динамических массивов, т. е. таких, размер которых определяется в процессе выполнения." width="640"
Многомерный массив
Двумерный массив представляет собой таблицу
1
2
2
3
3
3
4
3
4
4
5
3
3
4
6
5
Описание массива
Var идентификатор : array [ тип индекса ] of array [ тип индекса ] of тип компонентов
Var Tabl: array [1 ..4] of array [1 ..4] of real
Var Tabl: array [1 ..4,1 ..4] of real
Трехмерный массив
Var Tabl: array [1 ..n,1 ..m, 1 ..k] of real
Замечание: Не допускается употребление динамических массивов, т. е. таких, размер которых определяется в процессе выполнения.
Действия над массивом как единым целым
- Присваивание значений одного массива другому
- Применение к массивам операции «равно» или «не равно»
Замечание : тип индексов и тип элементов должны быть одинаковы
у массивов
Var X, Y: array[1..5, 1..4] of integer;
X:=Y;
Элементы массива X станут равными соответствующим элементам массива Y
Var X, Y: array[1..5, 1..4] of integer;
X[3]:=Y[4];
Элементы 3 строки массива X станут равными соответствующим элементам 4 строки массива Y
Var X, : array[1..4] of integer;
Y: array[1..5, 1..4] of integer;
X:=Y[4];Y[4]:=Y[2]; Y[2]:=X
Элементы 4 строки массива Y поменяны местами с элементами 2 строки массива Y
Ввод и вывод массивов
Одномерный
For I:=1 To 12 Do
Read ( T[i] );
For I:=1 To 12 Do
Write ( T[i]:5:2);
Двумерный
For I:=1 To Imax Do
Begin
For J:=1 To Jmax Do
Write ( T[I,j]:6:2);
Writeln
End;
For I:=1 To Imax Do
For J:=1 To Jmax Do
Readln( T[I,j]);
Значение вводиться с новой стоки
Построчный вывод матрицы
0 then pol:=pol+1 else if t[i] l +1; Writeln ('число положительных элементов ',pol); Writeln ('число отрицательных элементов ‘,otr); Writeln ('число нулевых элементов ',nol); Readkey end." width="640"
Задача
Дан массив из N действительных чисел. Посчитать сколько в нем отрицательных, положительных и нулевых элементов.
Program Masiv1;
Uses crt;
Var t : array [1 ..10] of real; i,pol,otr,nol: integer;
Begin
Write ln ('введите 10 элементов массива');
For I:=1 To 1 0 Do Read ( t [i] );
pol:=0; otr:=0;nol:=0;
for i:= 1 to 10 do
if t[i]0 then pol:=pol+1 else
if t[i] l +1;
Writeln ('число положительных элементов ',pol);
Writeln ('число отрицательных элементов ‘,otr);
Writeln ('число нулевых элементов ',nol);
Readkey
end.
Задача для практической работы № 7
Матрицу размером 5х10 заполните случайными двоичными
цифрами (0 и 1). Вывести матрицу. Определите номер строки с
наибольшим количеством нулей и их количество.
Формализация
Считаем количество нулей в первой строке. Запоминаем это количество.
Берем следующею строку и считаем количество нулей в ней. Если
количество нулей больше , то запоминаем эту строку и количество нулей.
kmax then begin kmax:=k; nmax:=i; end; end; For i:=1 to 5 do Begin for j:=1 to 10 do Write (matrica[i,j]:4); Writeln; End; Writeln (‘Номер строки ',nmax); W rite(‘Количество нулей ',kmax); R eadkey E nd." width="640"
Матрицу размером 5х10 заполните случайными двоичными
цифрами (0 и 1). Вывести матрицу. Определите номер строки с
наибольшим количеством нулей и их количество.
Program Praktik 7 ;
Uses crt;
Var matrica: array[1..5,1..10] of integer;
Var i,j,nmax,k,kmax:integer;
Begin
For i:=1 to 5 do
for j:=1 to 10 do
matrica[i,j]:=random(2);
nmax:=1;kmax:=0;
F or J:=1 to 10 do
if matrica[1,j]=0 then kmax:=kmax+1;
For i:=2 to 5 do
begin
k:=0;
for j:=1 to 10 do
if matrica[i,j]=0 then k:=k+1;
i f kkmax then
begin
kmax:=k;
nmax:=i;
end;
end;
For i:=1 to 5 do
Begin
for j:=1 to 10 do
Write (matrica[i,j]:4);
Writeln;
End;
Writeln (‘Номер строки ',nmax);
W rite(‘Количество нулей ',kmax);
R eadkey
E nd.
, имя файла ) Close ( файловая переменная ) Assign ( файловая переменная , имя файла ) Reset ( файловая переменная )" width="640"
Организация ввода данных с использованием файлов
Read или Readln – чтение из файла
Close – закрытие файла
Assign - назначает файловой переменной имя внешнего файла.
Reset - открывает существующий файл.
Описание
Readln ( файловая переменная , имя файла )
Close ( файловая переменная )
Assign ( файловая переменная , имя файла )
Reset ( файловая переменная )
, список вывода ) Writeln ( файловая переменная , список вывода ) Close ( файловая переменная ) Assign ( файловая переменная , имя файла ) Rewrite ( файловая переменная ) Замечание: 1. При выводе, информация которая была в файле удаляется; 2. Русский алфавит не передается;" width="640"
Организация вывода данных с использованием файлов
Write или Writeln – запись в файл
Close – закрытие файла
Assign - назначает файловой переменной имя внешнего файла.
Rewrite - открывает файл для записи.
Описание
Write ( файловая переменная , список вывода )
Writeln ( файловая переменная , список вывода )
Close ( файловая переменная )
Assign ( файловая переменная , имя файла )
Rewrite ( файловая переменная )
Замечание: 1. При выводе, информация которая была в файле удаляется;
2. Русский алфавит не передается;
Задача
В текстовом файле с именем matrica.txt записана следующая числовая
матрица. Создать массив по правилу: 1 элемент этого массива равен сумме элементов 1 строки матрицы, 2 элемент –
сумме 2 строки и т.д. В файл с именем matrica 2 .txt вывести числовую матрицу и полученный массив.
Формализация
Ввести элементы матрицы в программу из текстового файла .
Посчитать сумму 1 строки и присвоить это значение первому
элементу нового массива, затем также для второй строки и т.д.
Вывести его в текстовой файл персональную матрицу и новый массив.
For i:=1 to 4 do
Begin
s:=0;
For j:=1 to 5 do
s:=s+M1[i,j];{находим сумму
элементов i строки}
M2[i]:=s
End;
Assign (F1,'matrica2.txt'); {Связывание F1 с файлом matrica2.txt}
Rewrite (F1); {открытие файла
для записи}
For i:=1 to 4 do
Begin
For j:=1 to 5 do
Write (F1, M1[i , j] :4 );
Writeln(F1)
End;
WriteLn(F1);
For i:=1 to 4 do Write(F1,M2[i]:4);
Close(F1); {Закрытие файла}
End.
Program Matrica;
Var M1: array [1..4,1..5] of integer;
M2: array [1. . 4] of integer;
i,j: byte; s:integer;
F1: text; {файловая
Переменная}
Begin
Assign (F1,'matrica.txt'); {Связывание
F1 с файлом matrica.txt}
Reset(F1); {Открытие файла
для чтения}
For i:=1 to 4 do
Begin
For j:=1 to 5 do
Read (F1, M1[I , j]); {Последовательное чтение из одной строки}
Readln( F 1) {переход к
следующей строке}
End;
Close(F1); {Закрытие файла}
Задача для практической работы № 8
Написать программу , по которой из текстового файла с именем kvur.txt будут прочитаны три числа a, b, c — коэффициенты квадратного уравнения, затем будут вычислены корни этого уравнения и выведены на экран в текстовой документ korni.txt .
0 then begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a); Assign (G,'korni.txt '); Rewrite (G); W riteln (G,'2 корня ', x1:7:2, x2:7:2); Close(G); W riteln ('2 корня ', x1:7:2, x2:7:2) end" width="640"
else if d = 0 then
begin
x1:=-b/(2*a);
Assign (G,'korni.txt ');
Rewrite (G);
W riteln (G,'1 корень ', x1:7:2);
Close(G);
W riteln ('1 корень ', x1:7:2)
end
else
begin
Assign (G,'korni.txt ');
Rewrite (G);
W riteln (G,‘нет корней');
Close(G);
W rite (‘нет корней')
e nd;
R eadkey
End.
Program Praktik8;
Uses crt;
Var a, b, c, d, x1, x2: real;
G: text;
Begin
Assign (G,'kvur.txt');
Reset(G);
Readln (G,a,b,c);
Close(G);
d:=sqr(b)-4*a*c;
if d 0 then
begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
Assign (G,'korni.txt ');
Rewrite (G);
W riteln (G,'2 корня ', x1:7:2, x2:7:2);
Close(G);
W riteln ('2 корня ', x1:7:2, x2:7:2)
end
Символьный тип данных
Символьная константа записывается между апострофами.
Например ‘T’, ‘-’, ‘5’, ‘{‘.
Символьный тип - CHAR
Var c1, c2 : Char;
Пример:
- Символы - упорядоченное множество;
- У каждого символа в этом множестве есть свой порядковый номер;
- Между символами работает соотношение «следующий – предыдущий».
Функция Ord(X) – функция от аргумента порядкового типа, которая
возвращает порядковый номер значения x в этом типе данных.
Пример:
Ord(‘A’)=65, Ord(‘5’)= 53.
Chr(x) – функция от целочисленного аргумента, результатом которой
является символ с кодом x.
Пример:
Chr(65)=‘A’, Chr(53) =‘5’.
Alfavit[j+1] then begin S:=Alfavit[j]; Alfavit[j]:=Alfavit[j+1]; Alfavit[j+1]:=s end; Writeln('Отсортированный массив'); For i:=1 to 15 do write (Alfavit[i]:3); Readkey End." width="640"
Задача
С помощью датчика случайных чисел заполнить массив alfavit [0..15] прописными латинскими буквами. Затем массив отсортировать в алфавитном порядке.
Program Simvol1;
Uses crt;
Var Alfavit: array[1..15] of char;
s: char; i,j: integer;
Begin
ClrScr;
randomize; { Заполнение массива случайными буквами }
Writeln('Исходный массив');
For i:=1 to 15 do
b egin
Alfavit[i]:= chr(random(26)+ ord('A'));
Write( Alfavit[i]:3)
end;
Writeln;
{ Сортировка метод пузырька }
For i:=1 to 15 do
for j:=1 to 15-i do
if Alfavit[j]Alfavit[j+1] then
begin
S:=Alfavit[j];
Alfavit[j]:=Alfavit[j+1];
Alfavit[j+1]:=s
end;
Writeln('Отсортированный массив');
For i:=1 to 15 do write (Alfavit[i]:3);
Readkey
End.
Задача для практической работы № 9
Вывести на экран символы и их код, согласно таблицы кодировки ASCII , начиная с 33 и заканчивая 100. Результат вывести по 10 записей в строке.
Program Praktik9;
Uses crt;
Var i,k:integer;
Begin
ClrScr;
k:=0;
For i:=33 to 100 do
begin
Write(Chr(i),'-',i:3,' ');
k:=k+1;
if k=10 then
begin
k:=0;
Writeln
end
end;
Readkey
End.
: String ( максимальная длина строки ) Описание Пример Var Name: String (20); Name1: String Символ внутри строки индексируются (нумеруются), начиная с единицы Name[5], Name[j], Name1[i+1] Пример" width="640"
Строки символов
Строка –это последовательность символов.
Каждый символ занимает 1 байт.
Длина строки – количество символов в строке.
Длина может находится от 1 до 256.
Строковые величины могут быть константами и переменными
‘ Информатика – наука об информации ’
’ 23-15-58 ’
Пример
Var Индентификатор : String ( максимальная длина строки )
Описание
Пример
Var Name: String (20);
Name1: String
Символ внутри строки индексируются (нумеруются), начиная с единицы
Name[5], Name[j], Name1[i+1]
Пример
‘cost2’ ‘ pascal’ ‘PASCAL’ ‘ Алина ’ Арина ’ ‘ Ключ ’ ’ Ключ ’ Пример" width="640"
Операции над строковыми данными
Операция сцепления (+)
Пример
‘ Фамилия ’ + ’ Имя ’ + ’ Отчество ’
Фамилия Имя Отчество
Операция отношения
= , , =,
‘ cost1’ ‘cost2’
‘ pascal’ ‘PASCAL’
‘ Алина ’ Арина ’
‘ Ключ ’ ’ Ключ ’
Пример
Функции
Функция Copy (S, Poz, N) выделяет из строки S подстроку длиной N
символов, начиная с позиции Poz. N и Poz – целочисленные выражения. .
Copy(S, 2, 3) - ‘BCD’
Copy(S, 4, 4) – ‘DEFG’
‘ ABCDEFG’
Пример
Функция Concat (S1, S2, … , SN) выполняет сцепление ( конкатенацию)
строк S1, S2, … , SN в одну строку.
Пример
Conca t ( ‘ A’, ‘B’, ‘C’, ) - ‘ABC’
Функция Length (S) определяет текущую длину строки S .
Результат – значение целочисленного типа
‘ Matrica ’ Length (S) - 7
Пример
Функции
Функция Pos(S1, S2) обнаруживает первое появление в строке S2
подстроки S1 . Результат – целое число, равное номеру позиции,
где находится первый символ подстроки S1 .
Если в S2 не обнаружена подстрока S1 , то результат равен 0
Пример
S2 - ‘abcdefg’ Poz( ‘cd’, S2) - 3
Poz( ‘k’, S2) - 0
Процедуры
Процедура Delete ( S, Poz, N) удаляет N символов из строки S , начиная
с позиции Poz .
S - ‘abcd e f g ’ Delete( S, 3, 2) - ‘ab e f g ’
Пример
Процедура Insert (S1, S2, Poz) выполняет вставку строки S1 в строку S2 , начиная с позиции Poz .
Пример
S2 - ‘ ЭВМ PC’ Insert(‘IBM-’, S2, 5) ‘ ЭВМ IBM-PC’
Процедуры
Str( x, st) . Процедура преобразует численное выражение x в его строковое представление и помещает результат в st .
x : арифметическое выражение ; st : string
x:=1234; y:=5678;.
str(x,stroka1);
str(y,stroka2);
stroka:=stroka1+stroka2;
writeln(stroka);
12345678
Пример
Val(st, x, code) Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x, x - может быть как целой, так и действительной переменной.
st : string, x : числовая переменная ; code : integer)
Пример
47
stroka1:='23.02.1965';
stroka2:=copy(stroka1,7,4);
val(stroka2,rog);
let:=2012-rog;
Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании.
Задача
Дана строка, заканчивающая точкой. Подсчитать, сколько в ней слов.
Program Slovo;
uses crt;
Var s: string;
i,k: integer;
Begin
Writeln ('Введите строку');
Read (s);
i:=1; k:=k+1;
While S[i]'.' do
Begin
if s[i]=' ' then k:=k+1;
i:=i+1
End;
k : =k +1;
Write('Количество слов в стоке равно ',k);
Readkey
End.
Задача для практической работы № 10
Program Praktik10;
Uses crt;
Var s:string; i,k,n:integer;
Begin
Write('Введите строку');
write;
Read(S);
n:=Length(S);k:=0;
Writeln('Новая строка');
for i:=1 to n do
begin
if s[i]=':' then
begin
s[i]:=';'; k:=k+1
end;
write(s[i]);
end;
Writeln;
Write('Количество замен', k);
Readkey
End.
В строке заменить все двоеточия ( :) точкой с запятой ( ;).
Посчитать количество замен.
= record имя поля 1 ; тип ; … имя поля N ; тип End Замечание: Поля могут быть любого типа Пример: Type results = record Family: string[15]; { Оценка ученика } Rus: 2..5 ; { Оценка по русскому языку } Alg: 2..5 ; { Оценка по алгебре } Geom: 2..5; { Оценка по геометрии } End; Экзаменационная ведомость Var exzam: results; Величина комбинированного типа называется записью. Элементы записи идентифицируются составными именами следующей структуры: имя переменной , имя поля exzam . family, exzam.rus" width="640"
Комбинированный тип данных
Это структурный тип, состоящий из фиксированного числа компонентов
(полей) разных типов.
Описание
Type имя = record
имя поля 1 ; тип ;
…
имя поля N ; тип
End
Замечание:
Поля могут быть любого типа
Пример:
Type results = record
Family: string[15]; { Оценка ученика }
Rus: 2..5 ; { Оценка по русскому языку }
Alg: 2..5 ; { Оценка по алгебре }
Geom: 2..5; { Оценка по геометрии }
End;
Экзаменационная
ведомость
Var exzam: results;
Величина комбинированного типа называется записью. Элементы записи идентифицируются составными именами следующей структуры:
имя переменной , имя поля
exzam . family, exzam.rus
Задача
На экзаменационном листе содержатся сведения о результатах экзаменов, сданных 30 учениками класса. Ввести эти данные в компьютер и вывести список отличников.
Исходные данные организуются в массив следующей структуры:
Var list:array[1..30] of results;
Конечный фрагмент: вывод списка:
For i:=1 to 30
If (list[i].rus=5) and (list[i].alg=5) and (list[i].g eom =5)
then Writeln (list[i].family) ;
Для ввода списка целесообразно использовать тестовой файл
следующего вида:
Таблица успеваемости 11 класса
Фамилия Русский язык Алгебра Геометрия
Арефьев 4 3 4
Довгалец 5 5 5
Дунаев 5 4 4
…
Program exzam;
Uses crt;
Type results = record
Family: string[15];
Rus: 2..5;
Alg: 2..5 ;
Geom: 2..5;
End;
Var list:array[1..30] of results;
i:integer; F1,F2: text;
Begin
Assign(F1,'vedom.txt');
{ связывание F 1 с файлом
vedom.txt }
Assign(F2,'res.txt'); ’);{ связывание
F2 с файлом res.txt}
Reset(F1); { Открытие файла
F1 для чтения }
Rewrite(F2); { Открытие файла
F 2 для записи }
Readln(F1); Readln(F1); { Пропуск
двух строк }
For i:=1 to 30 do
Readln(F1,list[i]. Family,list[i].Rus,
list[i].Alg, list[i].Geom); { Ввод
таблицы }
Writeln(‘ Отличники ’);
For i:=1 to 30 do
If (list[i].rus=5) and (list[i].alg=5)
and (list[i].geom=5) Then
Begin
Writeln (list[i].family);
{ Вывод фамилии на экран }
Writeln (F2, list[i].family);
{ Запись фамилии в файл }
End;
Close(F1); Close(F2);
Readkey
End.
Дополнение
Для упрощения работы с записями предназначен оператор With
With do
Описание
Один раз указав переменную типа запись в операторе With, можно работать с именами полей как с обычными переменными, т.е. без указания переменной типа запись
Пример:
For i:=1 to 30 do
Readln(F1,list[i]. Family,list[i].Rus,
list[i].Alg, list[i].Geom);
For i:=1 to 30 do
With list[i] do
Readln(F1,Family,Rus,Alg,Geom);
Дополнение
Выше предложенную задачу можно решить без использования массива.
А также выяснить число записей в текстовом редакторе
Var list: results;
Var list:array[1..30] of results;
For i:=1 to 30 do
Readln(F1,list[i].Family,
list[i].Rus,list[i].Alg,list[i].Geom);
i:=0;
While not EOF(F1) do
Begin
Readln(F1,list.Family,list.Rus, list.Alg,
list.Geom);
I:=I+1; { Подсчет количества записей }
End
Стандартная логическая функция EOF( end of file) принимает значение True ,
когда процесс чтения из файла дойдет до его конца.
Задача повышенной трудности
Сведения о результатах сессии содержат следующую информацию: Фамилия, имя студента, номер группы, его оценки по итогам 3 экзаменов. Получить отдельные списки отличников, хорошистов, троечников и двоечников в алфавитном порядке. ( Фамилия, имя студента, номер группы)..
На вход программы подаются сведения о студентах.
В первой строке указывается количество студентов N , каждая из следующих N строк имеет следующий формат:
пробелпробелпробел пробел пробел
PROGRAM Student;
Uses crt;
Type data=record
family:string[20];
name:string[15];
nomer:integer;
exz1,exz2,exz3:2..5
end;
var spisok:array[1..50] of data;
spisok1: data;
n,k,i,j,l:integer; v:integer;
s,s1:string;
begin
writeln(‘Введите количество студентов');
readln(n);
writeln(‘Введите информацию о студенте по форме');
Writeln(‘Фамилия имя номер_группы 1экзамен 2 экзамен 3 экзамен');
{ Ввод данных }
For i:=1 to n do
begin
readln(s);
k:=pos(' ',s); {считаем длину 1 слова до пробела}
spisok[i].family:=copy(s,1,k-1);{копируем из сроки 1слово}
delete(s,1,k);{удаляем из строки 1 слово}
k:=pos(' ',s); spisok[i].name:=copy(s,1,k-1);
delete(s,1,k);
k:=pos(' ',s);
s1:=copy(s,1,k-1);
val(s1,v);{переводим символ s1 в число}
spisok[i].nomer:=v;
delete(s,1,k);
k:=pos(' ',s);
s1:=copy(s,1,k-1);
val(s1,v);
spisok[i].exz1:=v;
delete(s,1,k);
spisok[j+1].family then begin spisok1.family:=spisok[j].family; spisok1.name:=spisok[j].name; spisok1.nomer:=spisok[j].nomer; spisok1.exz1:=spisok[j].exz1; spisok1.exz2:=spisok[j].exz2; spisok1.exz3:=spisok[j].exz3; spisok[j].family:=spisok[j+1].family; spisok[j].name:=spisok[j+1].name; spisok[j].nomer:=spisok[j+1].nomer;" width="640"
spisok[j].exz1:=spisok[j+1].exz1;
spisok[j].exz2:=spisok[j+1].exz2;
spisok[j].exz3:=spisok[j+1].exz3;
spisok[j+1].family:=spisok1.family;
spisok[j+1].name:=spisok1.name;
spisok[j+1].nomer:=spisok1.nomer;
spisok[j+1].exz1:=spisok1.exz1;
spisok[j+1].exz2:=spisok1.exz2;
spisok[j+1].exz3:=spisok1.exz3;
end;
Clrscr;
{ Выбираем отличников }
Writeln(‘Отличники');l:=0;
For i:=1 to n do
With spisok[i] do
if (exz1=5) and (exz2=5) and (exz3=5) then
k:=pos(' ',s);
s1:=copy(s,1,k-1);
val(s1,v);
spisok[i].exz2:=v ;
delete(s,1,k);
val(s,v);
spisok[i].exz3:=v;
end;
{ Сортируем списки по возрастанию }
For i:=1 to n do
for j:=1 to n-i do
if spisok[j].family spisok[j+1].family then
begin
spisok1.family:=spisok[j].family;
spisok1.name:=spisok[j].name;
spisok1.nomer:=spisok[j].nomer;
spisok1.exz1:=spisok[j].exz1;
spisok1.exz2:=spisok[j].exz2;
spisok1.exz3:=spisok[j].exz3;
spisok[j].family:=spisok[j+1].family;
spisok[j].name:=spisok[j+1].name;
spisok[j].nomer:=spisok[j+1].nomer;
=4) and (exz3=4) or (exz1=4) and (exz2=4) and (exz3=4) or (exz1=4) and (exz2=4) and (exz3=4)) then begin Writeln(family,' ',name,' ', nomer);l:=l+1; end; if l=0 then writeln (‘Хорошистов нет'); Writeln; Writeln(‘Троечники');l:=0; { Выбираем троечников } For i:=1 to n do With spisok[i] do if ((exz1=3) and (exz2=3) and (exz3=3) or (exz1=3) and (exz2=3) and (exz3=3) or (exz1=3) and (exz2=3) and (exz3=3)) then begin Writeln(family,' ',name,' ',nomer); l:=l+1; end; if l=0 then writeln (‘Троечников нет'); readkey end." width="640"
begin
Writeln(family,' ',name,' ', nomer);l:=l+1;
end;
if l=0 then writeln (Отличников нет');
Writeln;
Writeln(‘Хорошисты');l:=0;
{ Выбираем хорошистов }
For i:=1 to n do
With spisok[i] do
if ((exz1=4) and (exz2=4) and (exz3=4) or (exz1=4) and (exz2=4) and (exz3=4) or (exz1=4) and (exz2=4) and (exz3=4)) then
begin
Writeln(family,' ',name,' ',
nomer);l:=l+1;
end;
if l=0 then writeln (‘Хорошистов нет');
Writeln;
Writeln(‘Троечники');l:=0;
{ Выбираем троечников }
For i:=1 to n do
With spisok[i] do
if ((exz1=3) and (exz2=3) and (exz3=3) or (exz1=3) and (exz2=3) and (exz3=3) or (exz1=3) and (exz2=3) and (exz3=3)) then
begin
Writeln(family,' ',name,' ',nomer);
l:=l+1;
end;
if l=0 then writeln (‘Троечников нет');
readkey
end.
= sr then sr:=point; For i:=1 to n-1 do With list[i] do If point=sr then Writeln(Family:15,'---',point:8:2); Readkey End." width="640"
Задача для практической работы № 11
Вычислить средний балл учеников класса, если известны оценки
каждого ученика по математике, русскому языку и физике.
Выведите на печать фамилию и средний балл лучшего ученика.
Program Practic11;
Uses crt;
Type Tabl = record
Family: string[15];
Mat: 2..5 ;
Rus: 2..5;
Phiz: 2..5;
Point:real
End;
Var list:array[1..50] of Tabl;
i,n:integer; F1,F2: text;
Sr:real;
Begin
Clrscr;
Assign(F1,'vedomоst.txt');
Reset(F1);
Readln(F1); Readln(F1);
n:=1;
While not EOF(F1) do
Begin
Readln(F1,list[n].Family,list[n].Mat, list[n].Rus,
list[n].Phiz);
list[n].Point:=(list[n].Mat+list[n].Rus+
list[n].Phiz)/3;
n:=n+1
End;
sr:=0;
For i:=1 to n-1 do
With list[i] do
If point= sr then sr:=point;
For i:=1 to n-1 do
With list[i] do
If point=sr then
Writeln(Family:15,'---',point:8:2);
Readkey
End.
Задача для итоговой практической работы
В массиве хранятся данные об учениках класса: школа, фамилия, класс. Вывести список учеников, которые учатся в восьмом классе.
Program itogpraktik ; Uses Crt; Type Uchenik=record Shkola : integer; Fam : string[15]; Klass : integer; end; Var i,n,a,j : integer; Massiv : array[1..100] of Uchenik; End; Begin ClrScr; writeln('Введите число учеников '); read(n); for i:=1 to n do begin writeln('Введите через пробел номер школы и фамилию ученика '); with massiv[i] do
begin readln(Shkola,Fam); write('Введите класс ученика '); read(Klass); end; end; writeln('Ученики 8-ых классов:'); writeln('Школа Фамилия Класс'); writeln('------------------------------------------'); for i:=1 to n do if massiv[i].klass=8 then with massiv[i] do writeln(Shkola:6,' ',Fam:15,' ',
klass); ReadKey; End.