- •Текстовый редактор
- •Прогон и отладка программы
- •Справочная служба Турбо Паскаля
- •Строка
- •Строка
- •Задание 2. Разветвления
- •Простейшие циклы
- •Вложенные циклы
- •Примечания
- •Строка
- •Процедуры и функции
- •Процедуры ввода
- •Обозначение
- •Представим определение языка Показушка в расширенной форме Бэкуса-Наура
- •Предложение
- •Синтаксис Паскаля
- •Задание 14
- •Операторы Паскаля
- •Задание 15
- •Новые типы данных. Определение типа. Диапазоны.
Замечание. В функции add1 параметр x является параметром |
end. |
|
Входные данные |
7 5 |
|
значением, а y – параметром переменной. Поэтому при вызове |
№2. |
|
функции для х выделяется дополнительная ячейка памяти, куда |
program prim4(input,output); |
|
копируется значение соответствующего фактического параметра |
var a,b:integer; |
|
(в данном случае ноль). Параметр у является параметром |
procedure swap(x,y:integer); |
|
переменной, поэтому в процедуре фактический параметр а |
var a:integer; |
|
используется под именем у. По окончании работы функции |
begin |
|
значение переменной b изменилось, в то время как, а нет. |
a:=x; |
|
Поскольку функция возвращает значение, то для ее хранения |
x:=y; |
|
выделяется дополнительная ячейка памяти с именем функции |
y:=a |
|
add1. |
end; |
|
Процедуры и функции |
begin |
|
read(a,b); |
|
|
Задание 8 |
swap(a,b); |
|
writeln(a,b) |
|
|
|
end. |
|
Выполнить трассировку программы для заданных входных |
Входные данные |
3 8 |
данных. Ввести программу в ЭВМ, сравнить результаты |
№3. |
|
трассировки и работы программы |
program prim4(input,output); |
|
№1. |
var a,b:integer; |
|
program prim4(input,output); |
procedure swap(var x:integer:y:integer); |
|
var a,b:integer; |
var a:integer; |
|
procedure swap(var x,y:integer); |
begin |
|
var a:integer; |
a:=x; |
|
begin |
x:=y; |
|
a:=x; |
y:=a |
|
x:=y; |
end; |
|
y:=a |
begin |
|
end; |
read(a,b); |
|
begin |
swap(a,b); |
|
read(a,b); |
writeln(a,b) |
|
swap(a,b); |
end. |
|
writeln(a,b) |
Входные данные |
11 6 |
39
№4. |
|
var a,b:integer; |
|
program prim4(input,output); |
procedure addxy(var x:integer;y:integer); |
||
var a,b:integer; |
|
var a:integer; |
|
procedure addxy(var x,y:integer); |
begin |
|
|
var a:integer; |
|
x:=x+y; |
|
begin |
|
y:=x-y; |
|
x:=x+y; |
|
a:=x+y; |
|
y:=x-y; |
|
end; |
|
a:=x*y |
|
begin |
|
end; |
|
read(a,b); |
|
begin |
|
addxy(a,b); |
|
read(a,b); |
|
writeln(a,b) |
|
addxy(a,b); |
|
end. |
|
writeln(a,b) |
|
Входные данные |
-1 26 |
end. |
|
№7. |
|
Входные данные |
1 -6 |
program prim4(input,output); |
|
№5. |
|
var a,b,r:integer; |
|
program prim4(input,output); |
procedure maxxy(var x,y,z:integer); |
||
var a,b:integer; |
|
var a:integer; |
|
procedure addxy(x,y:integer); |
begin |
|
|
var a:integer; |
|
if x>y then z:=x else z:=y; |
|
begin |
|
x:=x+1; |
|
x:=x+y; |
|
y:=y+2; |
|
y:=x-y; |
|
a:=y; |
|
a:=x*y |
|
end; |
|
end; |
|
begin |
|
begin |
|
read(a,b); |
|
read(a,b); |
|
r:=0; |
|
addxy(a,b); |
|
maxxy(a,b,r); |
|
writeln(a,b) |
|
writeln(a,b,r) |
|
end. |
|
end. |
|
Входные данные |
11 86 |
Входные данные |
2 7 |
№6. |
|
№8. |
|
program prim4(input,output); |
program prim4(input,output); |
40
var a,b,r:integer;
procedure maxxy(x,y,z:integer); var a:integer;
begin
if x>y then z:=x else z:=y x:=x+1;
y:=y+2;
a:=y;
end; begin r:=0; read(a,b);
maxxy(a,b,r);
writeln(a,b,r)
end.
Входные данные 24 5
№9.
program prim4(input,output); var a,b,r:integer;
function maxxy(var x,y:integer):integer; var a:integer;
begin
if x>y then a:=x else a:=y; maxxy:=a;
x:=x+1;
y:=y+2;
a:=y;
end; begin read(a,b);
r:=maxxy(a,b);
writeln(a,b,r)
end.
Входные данные -2 47
№10.
program prim4(input,output); var a,b,r:integer;
function maxxy(x,y:integer):integer; var a:integer;
begin
if x>y then a:=x else a:=y; maxxy:=a;
x:=x+1;
y:=y+2;
a:=y;
end; begin read(a,b);
r:=maxxy(a,b);
writeln(a,b,r)
end.
Входные данные 42 10
№11.
program prim4(input,output); var a,b,r:integer;
function swapmax(var x,y:integer):integer; var a:integer;
begin
if x>y then a:=x else begin
a:=y; y:=x; x:=a end;
swapmaxxy:=a
end; begin read(b,a);
41
r:=swapmax(a,b); |
|
end. |
|
writeln(a,b,r) |
|
Входные данные |
1 2 3 |
end. |
|
№14. |
|
Входные данные |
-32 -67 |
program prim4(input,output); |
|
№12. |
|
var a,b,c:integer; |
|
program prim4(input,output); |
procedure op(x,y,z:integer); |
||
var a,b,r:integer; |
|
var a:integer; |
|
function swapmaxxy(x,y:integer):integer; |
begin |
|
|
var a:integer; |
|
a:=x; |
|
begin |
|
x:=x-y; |
|
if x>y then a:=x else begin a:=y; y:=x; x:=a end; |
z:=x+y; |
|
|
swapmaxxy:=t |
|
y:=a+y |
|
end; |
|
end; |
|
begin |
|
begin |
|
read(a,b); |
|
read(a,b,c); |
|
r:=swapmaxxy(b,a); |
|
op(a,b,c); |
|
writeln(a,b,r) |
|
writeln(a,b,c) |
|
end. |
|
end. |
|
Входные данные |
-32 -67 |
Входные данные |
4 5 6 |
№13. |
|
№15. |
|
program prim4(input,output); |
program prim4(input,output); |
||
var a,b,c:integer; |
|
var a,b,c:integer; |
|
procedure op(var x,y,z:integer); |
procedure op(var x,y:integer;z:integer); |
||
var a:integer; |
|
var a:integer; |
|
begin |
|
begin |
|
a:=x; |
|
a:=x; |
|
x:=x-y; |
|
x:=x-y; |
|
z:=x+y; |
|
z:=x+y; |
|
y:=a+y |
|
y:=a+y |
|
end; |
|
end; |
|
begin |
|
begin |
|
read(a,b,c); |
|
read(a,b,c); |
|
op(a,b,c); |
|
op(a,b,c); |
|
writeln(a,b,c) |
|
writeln(a,b,c) |
|
42
end.
Входные данные 7 8 9
Занятие 11. Разработка программ с процедурами и функциями Задание 9
Составить подробную спецификацию программы с примерами входных и выходных данных. Разработать программу с использованием процедур или функций, используя таблицы разработки. Выполнить трассировку программы. Ввести программу в ЭВМ, сравнить результаты трассировки и работы программы.
¹1.Даны натуральное число n и действительные числа s, t, a0, ..., an. Получить -p(t)+p2(s-t)-p3(1), где p(x)=anxn+an-1xn-1+...+a0
¹2.Составить процедуру, результатом работы которой является истинное значение, если символ, заданный при обращении к процедуре буква, и ложное значение в противном случае
¹3.Составить процедуру, позволяющую определить позицию самого правого вхождения заданного символа в исходную строку. Если строка не содержит символа, результатом работы процедуры должна быть -1.
¹4.Составить процедуру, заменяющую в исходной строке символов все единицы нулями и все нули единицами. Замена должна выполняться, начиная с заданной позиции строки.
¹5.Вычислить z=(signx+signy)sign(x+y), где
|
-1 |
при a<0 |
signa = |
0 |
при a=0 |
1 |
при a>0 |
¹6.По вещественному x вычислить величину sh(x)tg(x+1)- tg2(2+sh(x-1)), где sh(x)=(ex-e-x)/2
¹7.Даны отрезки a, b, c, d. Для каждой тройки, из которых можно построить треугольник, напечатать площадь данного треугольника.
¹8.Даны длины a, b, c сторон треугольника. Найти медианы треугольника, сторонами которого являются медианы исходного треугольника. (Замечание. Длина медианы, приведенная к стороне a, равна 0.5(2b2+2c2-a2)0.5 ).
¹9.Даны действительные числа s,t. Получить f(t,- 2s,1.17)+f(2.2,t,s-t), где f(a,b,c)=(2a-b-sinc)/(5+|c|)
¹10.Даны действительные числа s, t. Получить g(1.2,s)+g(t,s)- g(2s-1,st), где g(a,b)=(a2+b2)/(a2+2ab+3b2+4)
¹11.Даны действительные числа a, b, c. Получить (max(a,a+b)+ max(a,b+c))/(1+max(a+bc,1))
¹12.Даны действительные числа a, b. Получить u=min(a,b), v=min(ab,a+b), min(u+v2,3.14)
¹13.Даны действительные числа s, t. Получить h(s,t)+max(h2(s- t,st),h4(s-t,s+t))+h(1,1), где h(a,b)=a/(1+b2)+b/(1+a2)-(a-b)3
¹14.Даны натуральное число n и действительные числа a0, a1,...,
an. Получить для x=1, 3, 4 значения p(x+1)-p(x), где p(y)=anyn+an- 1yn-1+...+a0
Занятие 12. Процедуры ввода
Элементом информации в операциях простого ввода и вывода является символ. Набор символов компьютера определяется таблицей ASCII, каждый символ в наборе имеет порядковый номер (код). В общем случае набор содержит две группы: отображаемые и управляющие символы. К отображаемым относятся буквы, цифры, пробел, знаки арифметических операций,
43
препинания, скобки и другие знаки, встречающиеся в печатных текстах. Вторую группу составляют управляющие символы, которые используются в основном при передаче данных. Управляющие символы обычно записываются в угловых скобках, как например, <ctrl/z> - конец файла.
Существуют две стандартные функции :
ord(a) - определяет код ASCII символа, хранящегося в переменной а ,
chr(n) - определяет символ ASCII под кодом n.
Информация в компьютере хранится в файлах. Входные и выходные данные для программ Паскаля хранятся обычно в текстовых файлах. Текстовый файл - последовательность, состоящая из нуля или более строк, где каждая строка - последовательность , состоящая из нуля или более символов и заканчивающаяся маркером конца строки. Маркер конца строки представляет из себя два символа - <CR> (возврат каретки) и <LF> (конец строки), которые имеют коды 13 и 10 и не отображаются на экране и в тексте.
Для доступа к файлу в программе на Паскале необходимо, в первую очередь, сделать две вещи:
1)описать файловую переменную. Имя этой переменной в последующем будет использоваться внутри программы как имя файла (который на самом деле существует и хранится на диске);
2)связать эту переменную с конкретным физическим файлом.
Процесс извлечения информации из текстового файла называется вводом или чтением данных. Ввод осуществляется только последовательно (слева - направо и сверху - вниз), с начала файла. Если в программе не указано имени текстового файла с входной информацией, то компьютер в качестве входного текстового файла воспринимает входной файл input - туда попадают те входные данные, которые вы вводите с клавиатуры.
Ввод данных в Паскале осуществляется с помощью двух стандартных процедур - read и readln.
Общий вид: read([f],а1,...,аn); readln(а1,...,аn);
где [f] –переменная типа текстовый файл, задающий файл ввода (является необязательным параметром, если не указан, то в качестве входного файла принимается файл input и ввод осуществляется с клавиатуры), а1,...,an - имена переменных.
Выполнение операторов процедур ввода приводит к считыванию значений из файла в переменные в том порядке, в котором они перечислены в операторах read и readln. Чтобы изобразить состояние файла, из которого происходит ввод, мы будем использовать маленькую направленную вверх стрелку (^), указывающей на текущую позицию в файле. Она всегда будет указывать на первый символ той части файла, которую осталось прочитать. Таким образом, в любой момент времени та часть (возможно пустая), которая находится слева от стрелки, уже прочитана, а ту (возможно, пустую) часть, которая расположена справо от нее, еще остается прочитать. В случае ввода с клавиатуры положение курсора и текущей позиции совпадают.
Оператор readln может использоваться без списка переменных, тогда его выполнение просто приводит к переходу курсора на первую позицию следующей строки. В зависимости от типа переменной считывание значений происходит по разному. Правила работы процедуры ввода удобно рассмотреть на примере работы процедуры ввода read(x) с одним параметром, поскольку действие процедуры ввода с несколькими параметрами эквивалентно работе нескольких процедур ввода с одним параметром, то есть
Read(a1,a2,..,an) эквивалентно Read(a1);read(a2),..,read(an), а Readln(a1,a2,..,an) эквивалентно Read(a1);read(a2),..,read(an);readln
1 x – символьная переменная (char).
44
A.Символ, находящийся в текущей позиции, присваивается переменной, заданной в качестве параметра процедуры (х).
B.Текущая позиция во входном файле передвигается на один символ.
2.Х – переменная целочисленного типа (integer).
A.Все пробелы и маркеры конца строки, предшествующие числу, пропускаются.
B.Читается целое число и процесс ввода завершается, когда очередной символ не может быть частью целого числа.
3.Х – переменная вещественного типа (real).
C.Все пробелы и маркеры конца строки, предшествующие числу, пропускаются.
D.Читается вещественное число и процесс ввода завершается, когда очередной символ не может быть
частью вещественного числа.
Процедура readln без параметров пропускает остаток текущей строки во входном файле, включая маркер конца строки, и текущая позиция устанавливаетсяна первый символ следующей стоки.
Пример:
Переменные a,b,c имеют тип Char, x,y - тип Integer, z - тип real. Входные данные:
_ _ 3_ _45_11<CR><LF> 1561_183_ _5<CR><LF>
_ _ _ 006_001<CR><LF>
(здесь символ _ означает один пробел ).
1.Записать значения этих переменных после выполнения следующих последовательностей операторов (значения символьных переменных заключаются в кавычки):
№1 read(a); read(b); read(x); read(y); readln (c ); read(z); Ответ: a = «_» , b = «_» , x = 3, y = 45, c = «_» , z = 1561.0 №2 read(x); read(y); read(z); read(a); read(b); read(c);
Ответ: x = 3 , y = 45 , z = 11.0 , a = не отображаемый символ с кодом 13 , b = не отображаемый символ с кодом 10 , c = «1».
№3 readln(x,a); read(b); readln; read(y,c,z);
Ответ: x = 3 , a = «_» , b = «1» , y = 6 , c = «_» , z = 1.0
2. Составить программу, использующую эти операторы (для №2). program prim12;
{описание переменной f типа текстовый файл} var f:text;
a,b,c:char;x,y,z:integer; begin
{оператор assign связывает имя переменной f с текстовым файлом textf}
assign(f,'textf');
{оператор reset открывает файл, связанный с f} reset(f);
{чтобы программа считывала данные из файла, связанного с f, имя этой файловой переменной необходимо ставить перед списком вводимых переменных}
read(f,x);
read(f,y);
read(f,z);
read(f,a);
read(f,b);
read(f,c);
{теперь выведем значения переменных на экран} writeln('x=',x);writeln('y=',y);writeln('z=',z); writeln('a=',a); writeln('b=',b);writeln('c=',c);
{значения переменных a и b на экране не отобразятся, однако мы можем вывести
коды ASCII значений этих символьных переменных} writeln(ord(a)); writeln(ord(b));
end.
45