Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

информатика_книги / Информатика. Теория и практика_Острейковский В.А, Полякова И.В_2008 -608с

.pdf
Скачиваний:
159
Добавлен:
06.06.2015
Размер:
7.43 Mб
Скачать

Month: 1..12; Day: 1..31

End;

Var

X,Y,Z: complex;

Spisok: array [1..100] of Data; Const

Birthday: Data= (Year:1971; Month:12; Day:9);

Доступ к полям записи осуществляется указанием имени переменной (константы) и имени поля через точку, например:

X.Re, Birthday.Day, Spisok[99].Year è ò. ä.

Чтобы упростить доступ к полям записи, используется оператор присоединения With:

With <переменная>DO<оператор>

Множества представляют собой ограниченный набор однотипных логически связанных друг с другом объектов. Характер связей между объектами лишь подразумевается программистом и никак не контролируется языком Турбо Паскаль. Количество элементов, входящих в множество, может меняться в пределах от 0 до 256 (возможно пустое множество). Именно непостоянство количества элементов отличает множества от массивов и записей. Элементами множества могут быть значения скалярных типов byte è char.

Описание типа множество имеет следующий вид:

<имя типа>= SET OF <баз. тип>, где <баз. тип> — базовый тип элементов множества, в качестве которого может использоваться также порядковый тип.

Пример определения и задания множеств:

Type

dg1 = Set of ‘0’.. ‘9’; mn2=Set of Byte;

Var

s1: dg1; s2:mn2;

Begin

s1:= [‘1’, ‘2’, ‘3’]; s2:= [0..3,6];

End.

501

Два множества считаются эквивалентными, когда все их элементы одинаковы, причем порядок следования элементов безразличен. S1 и S2 — эквивалентны, S3 включено в S2, но не эквивалентно ему.

Мощностью множества называется количество неповторяющихся элементов, входящих в него. Над множествами определены следующие операции:

*

Пересечение множеств (рис.7.5, à). Результат содержит элементы,

 

общие для обоих множеств. Математическое обозначение: S1 S2,

 

логическое умножение

 

 

+

Объединение множеств (рис. 7.5, á). Результат содержит все

 

элементы первого множества, дополненные недостающими

 

элементами из второго множества. Математическое обозначение:

 

S1 S2, логическое сложение

 

 

Разность множеств (рис. 7.5, â). Математическое обозначение:

 

S3=S2\S1, дополнение

 

 

=

Проверка эквивалентности. Результат True, если множества

 

эквивалентны

 

 

<>

Проверка неэквивалентности

 

 

<=

Проверка вхождения. Математическое обозначение:

>=

S1 S2, S1содержится в S2

 

 

IN

Проверка принадлежности. Математическое обозначение: P S1,

 

Р является элементом множества S1

 

 

Ввод элементов множества с клавиатуры:

x1:=[ ]; {Задание пустого множества}

For i:=1 to 10 do Begin

Readln (a); x1:= x1+[a];

End;

Вывод множества на экран:

For i:= 1 to N do

If i in x1 then Write(i:4);

Файлы — это средство связи с внешними источниками, приемниками и носителями информации. Традиционно под

502

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ðèñ. 7.5. Графическая интерпретация операций над множествами

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

Ñдвумя файлами INPUT (текстовый файл, вводимый

ñклавиатуры) и OUTPUT (текстовый файл, выводимый на экран монитора и содержащий результаты работы программы) мы уже знакомы. Результаты работы программы можно сохранить и отправить в другие файлы, записанные на диски. В ка- честве источника данных также могут использоваться файлы, записанные заранее на диски. Каждый такой файл должен иметь имя, а его тип должен быть объявлен в разделе VAR. Одновременно могут быть открыты несколько файлов; в ходе выполнения одной программы один и тот же файл может быть открыт для записи и впоследствии установлен на чтение. До начала операции ввода-вывода конкретному внешнему

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

В языке Турбо Паскаль определены три типа файлов: типизированные, нетипизированные и текстовые. В общем слу- чае переменные типа File могут объявляться следующим образом:

Var <Имя файловой переменной >: File [of < Тип данных элемента>];

Если зарезервированное слово of и параметр òèï опущены, объявляемый файл является нетипизированным. Типизирован-

503

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

Формат объявления текстовых файлов, используемых только в режиме последовательного доступа:

Var <Имя файловой переменной >: Text;

Примеры:

Type

FF = Record

Name: string[10]; Tele: word;

End;

Var

Txtfile: text; Spisok: File of FF; Ss1: File;

Стандартные средства обработки файлов. Процедура Assign(F1, ‘ttt.pas’) служит для связи файловой переменной F1 с некоторым файлом ttt.pas, расположенным в текущем каталоге. В общем случае имя типа должно быть написано в соответствии с правилами MS DOS, может включать путь и не должно превышать 79 символов.

Процедура Reset(F1) открывает существующий файл данных, имя которого перед этим было связано c помощью процедуры Assign с некоторой файловой переменной, указанной в процедуре Reset как параметр.

Если возможности открыть файл ttt.pas нет, то возникает ошибочная ситуация, подавить которую при выполнении можно, блокировав директивой компилятора {$I–} проверку ошибок ввода-вывода.

Процедура Rewrite(F1) создает новый пустой файл, присваивает ему имя, заданное процедурой Assign, и открывает его для записи или чтения. Если файл существует, его содержимое стирается, а сам файл открывается заново.

Процедура Append(F1), ãäå F1 имя файловой переменной, позволяет добавлять новые записи: строки в файлы, объявленные в программе как текстовые.

504

Процедура Close(F1) закрывает открытый ранее файл, связанный с указанной в качестве параметра файловой переменной.

Процедуры Rename(F1, New) è Erase(F1) предназначены для того, чтобы переименовывать или стирать существующие файлы с диска.

Функция Eof(F1) позволяет в процессе считывания информации проверять, достигнут ли конец файла, т. е. находится ли указатель файла за последним элементом или нет. Например, цикл While not Eof(F1) Do Read(F1, X) будет выполнять считывание порций данных из файла, связанного файловой переменной F1, до тех пор пока файловый указатель не достигнет конца открытого логического файла. Такая операция необходима при дополнении содержимого типизированных файлов, так как в противном случае данные, которые должны быть приписаны к концу файла, запишутся поверх уже существующих данных.

Функция SeekEof(F1) принимает значение True, если указатель установлен на признак конца файла; во всех остальных случаях возвращается значение False.

Функция IoResult предназначена для поиска ошибок, возникающих при работе с файлами. В следующем фрагменте программы выполняется проверка корректности завершения вводавывода. Для этого блокируются средства контроля компилятора за ошибками ввода-вывода, в противном случае неудачная попытка открытия файла приведет к прекращению работы программы:

{$I-} {Отключение контроля ошибок ввода-вывода}

Reset(F1);

If IoResult <> 0 Then Begin

Rewrite(F1); {Создание нового файла}

If IoResult<>0 Then Write('Ошибка при создании файла’);

End;

Else {Если файл существует}

While not Eof(F1) do Read(F1, X);

{Позиционирование указателя на конец файла} {$I+} {Включение контроля ошибок ввода-вывода}

505

ПРАКТИЧЕСКИЕ РАБОТЫ

Работа ¹ 1. Полный цикл работы с программой

Цель работы: изучить приемы работы в среде Турбо Паскаль.

Задание: вычислить корни квадратного уравнения axx + + bx + c = 0.

Методика выполнения работы:

1. Запустите интегрированную среду Паскаль (двойной щелчок на ярлыке Турбо Паскаль).

2. Смените при необходимости рабочий каталог, установленный по умолчанию:

<File> <Change dir>.

3. Откройте новое окно для записи текста программы: <File> <New>. Наберите в окне редактора следующую исходную программу, написанную на алгоритмическом языке Паскаль, предназначенную для вычисления корней квадратного уравнения.

Program kwur; (*Имя программы*)

Uses Crt; {Использование библиотечного модуля CRT}

Var a, b, c, d, w, z, x1, x2: Real;

{Объявление переменных} otvet: Char;

Begin {Начало основного блока программы} Clrscr; {Очистка экрана}

WriteLn ('Вы работаете с программой вычисления корней '); WriteLn ('Квадратного уравнения общего вида axx+bx+c=0 ');

Repeat {Начало цикла с постусловием}

Write('Введите значение a'); ReadLn (a); {Ввод коэффициента а}

If a = 0 Then Writeln (‘Уравнение не квадратное') Else

Begin

506

Write ('Введите значение b='); ReadLn (b);

Write ('Введите значение c='); ReadLn (c);

D:= b*b — 4*a*c; {Вычисление дискриминанта}

Z:= —b/(2*a);

W:= sqrt(abs(d))/(2*a);

WriteLn ('Ïðè à=',a:5:2,' b=',b:5:2,' c=',c:5:2); If D<0 Then

Begin

WriteLn ('X1= ', Z:6:3, ' + j*',w:5:3); WriteLn ('X2= ', Z:6:3, ' - j*',w:5:3);

End Else

Begin

x1:= z + w; x2:= z — w;

WriteLn ('x1=', x1:5:2,' x2=', x2:5:2); End

End;

WriteLn ('Желаете продолжить работу? (y/n)'); Readln (otvet);

Until otvet <> 'y';{Повторять, пока переменная otvet примет значение, отличное от y}

WriteLn ('Спасибо! До свидания!'); End.

4. Используя команду Save пункта меню File, запишите набранную вами программу на диск под именем kwur1. Расширение указывать необязательно. Откомпилируйте исходную программу: <Alt> + <F9>. Исправьте допущенные ошибки. Запустите программу на выполнение: <Ctrl> + <F9>.

5. Запишите в тетрадь 3 уравнения для тестирования программы. Решите их на калькуляторе и сравните результаты ваших вычислений с результатами решения уравнений на ЭВМ.

6. Окончание работы — выход из среды Турбо Паскаль:

<ALT> + <X>.

507

Работа ¹ 2. Выполнение вычислительных операций

Цель работы: изучить приемы выполнения вычислительных операций в среде Турбо Паскаль.

 

 

2

) + sin

2

z

 

, y =

Задание: вычислить значения p = lg (a + x

 

 

 

 

 

 

 

 

a

 

= a tg3 (a + x2) +

z2

ïðè a = 0,59; z = –4,8; x = 2,1.

 

 

 

 

 

 

a2 x2

 

 

 

 

 

 

Методика выполнения работы:

Program pr_2; Uses Crt;

Const a = 0.59; z = ?4.8; x = 2.1; Var y, p, c, t: real;

Begin Clrscr;

c:= Sin(x*x) /Cos (x*x);

y:= a*c*Sqr(c)+Sqrt(z*z/(a*a+x*x)); p:= (Ln(a+x*x))/Ln(10)+Sqr(Sin(z/a)); t:= Exp(a*Ln(x));

Writeln('Ïðè à=', a:4:2,'z=', z:4:1,' x=', x: 3:1);

Writeln ('p=', p:9:4,'y=', y:9:4,' t=', t: 9:4);

Readln End.

Результаты вычислений: при à = 0.59 z = –4.8; x = 2.1;

p = 1.6217; y = 21.6350; t = 1.5492.

Работа ¹ 3. Пример использования арифметического цикла

Цель работы: изучить правила использования арифметиче- ского цикла в среде Турбо Паскаль.

508

Задание: вывести на экран таблицу вычислений значений y при изменении õ îò a = –5 äî b = +5 с шагом h = 0.5 по соответствующим формулам:

 

 

1

ïðè x < –2

 

 

 

y =

 

x 2

 

 

2 * x3

ïðè –2 x +2

 

 

 

lg (x) + eX ïðè x > 2

Определение числа повторов: N = (b a)/h + 1 = (5 – (–5))/ /0.5 + 1= 21.

Методика выполнения работы:

Program pr_3a;

Uses Crt; {Подключение библиотечного модуля CRT}

Var i: Integer; x,y: Real; {Описание переменных}

Begin Clrscr;

Writeln (' Таблица'); {Вывод на экран шапки таблицы}

Writeln(' x y '); x:= —5;

For i: =1 To 21 Do {Арифметический цикл}

Begin

If x < –2 Then y:= 1/(x+2) Else If (x >= ?2) And (x<=2)

Then y:= 2*Exp(3*Ln (x)) Else y:=Ln(x)/Ln(10)+Exp(x);

Writeln(x:7:2,y:10:4); x:=x+0.5;

End;

Readln;

End.

Работа ¹ 4. Использование оператора цикла while

Цель работы: изучить правила использования оператора цикла while в среде Турбо Паскаль.

509

Задание: вычислить сумму членов бесконечного ряда с заданной точностью eps = 10–4 ïðè x = 5.

S = 1 – lg x + lg 2x lg 3x

2! 4! 6!

+ ... (–1)n lg nx .

2n !

На экран вывести значение суммы, число членов ряда, вошедших в сумму, и последний член ряда, вошедший в сумму. Сравнить полученное на ЭВМ значение суммы членов ряда со значением, вычисленным по аналитическим формулам.

Методика выполнения работы:

Program pr_4; Uses Crt;

Var s, eps, x, Un, Uk, y: Real; i:Integer;

Begin Clrscr;

x:= 5; eps:= 1e–5; s:= 1;

i:= 1; y:= –1*2;

Un:= (Ln(x)/Ln(10))/y; While Abs(Un) > eps Do Begin

s:= s+Un; Uk:= Un; i:= i+1;

y:= -y*(2*i-1)*(2*1); Un:=Ln(i*x)/Ln(10)/y;

End;

Writeln('s=', s:9:6,' n=', i,' U=', Uk: 9: 6); Readln;

End.

Результаты вычислений:

S = 0.724776; n = 6; U = 0.000046.

510

Соседние файлы в папке информатика_книги