Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.pdf
Скачиваний:
16
Добавлен:
02.05.2015
Размер:
489.96 Кб
Скачать

Замечание. В функции 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