Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Типизированные и текстовые файлы



 

Под файлом понимается либо именованная область внешней памяти ПК (жесткого диска, гибкой дискеты, и др.), либо логическое устройство – потенциальный источник или приемник информации.

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

Var < имя>: File of < тип>; {для типизированных файлов}

< имя>: Text; {для текстовых файлов}

< имя>: File; {для нетипизированных файлов}

Например:

Var f: File of real;

g: File of integer;

h: Text;

Можно ввести новый тип данных:

Type text80 = File of string[80];

Var t: text80;

Любой программе доступны два предварительно объявленных файла со стандартными файловыми переменными:
Input (для чтения данных с клавиатуры) и Output (для вывода на экран). Стандартный Паскаль требует обязательного упоминания этих файлов в заголовке программы, например, так:

Program NameOfProgram(input, output);

В Турбо Паскале это необязательно, вот почему заголовок программы можно опускать.

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

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре Assign:

Assign(< файловая переменная>, < имя файла или логическое устройство> );

Например:

Assign(f, ’file1.dat’);

Если имя файла задается в виде пустой строки, например, Assign (f, ’’), то в зависимости от направления обмена данными файловая переменная связывается со стандартным файлом Input или Output. Перед именем может указываться так называемый путь к файлу: имя диска и/или имя текущего каталога и имена каталогов вышестоящих уровней. Например:

Assign(f, ’c: \dir\subdir\file1.dat’);

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

 

Типизированные файлы

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

Типизированный файл можно открыть (инициировать) одной из двух стандартных процедур: Reset или Rewrite. Параметр – файловая переменная:

Reset(f);

Rewrite(g);

Файловая переменная здесь должна быть предварительно связана процедурой Assign с уже существующим файлом или логическим устройством – приемником информации.

Использование Reset предполагает, что открываемый файл уже существует, иначе возникает ошибка. При использовании Rewrite, напротив, открываемый файл может не существовать, в этом случае он создается. Если же он уже существовал, то он очищается – т.е. все записанные в нем данные уничтожаются.

При выполнении этих процедур дисковый файл или логическое устройство подготавливается к чтению или записи данных. В результате специальная переменная-указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0.

Чтение из ранее открытого типизированного файла осуществляет процедура Read. Она обеспечивает считывание очередных компонентов типизированного файла, начиная с того, на который указывает указатель файла. Формат обращения:

Read(< файловая переменная>, < список ввода> )

Список ввода может содержать одну или более переменных такого же типа, что и компоненты файла. Файл необходимо открыть процедурой Reset. Если файл исчерпан, обращение к Read вызовет ошибку ввода-вывода. Процедуру ReadLn для типизированных файлов использовать нельзя.

Запись в ранее открытый типизированный файл выполняется с помощью процедуры Write:

Write(< файловая переменная>, < список вывода> )

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

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

– Процедура Seek. Смещает указатель файла к требуемому компоненту файла. Формат обращения:

Seek(< файловая переменная>, < номер компонента> )

Здесь номер компонента – выражение типа Longint. Первый компонент файла имеет номер 0, т.е. вызов Seek(f, 0) перемещает указатель файла в начало файла. Процедуру нельзя применять к текстовым файлам.

– Функция FileSize. Возвращает значение типа Longint, которое содержит количество компонентов файла. Формат обращения:

FileSize(< файловая переменная> )

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

Seek(f, FileSize(f)); { f – файловая переменная }

– Функция FilePos. Возвращает значение типа Longint, содержащее порядковый номер компонента файла, на который указывает указатель файла. Формат обращения:

FilePos(< файловая переменная> )

Для текстовых файловFilePos использовать нельзя.

– Функция EOF. Логическая функция, проверяющая, достигнут ли конец файла (EOF – End Of File). Возвращает True, если достигнут конец файла, т.е. файловый указатель стоит в конце файла. При записи это означает, что очередной компонент будет добавлен в конец файла, при чтении – что файл исчерпан. Может использоваться для файлов любого типа. Например, считывание элементов массива х из файла, если их число заранее неизвестно, можно оформить так:

i: =1;

While not EOF(f) do

Begin

read(f, x[i]); i: =i+1

end;

– Процедура Close. Чтобы внесенные в файл данные сохранились на диске, файл требуется закрыть процедурой Close. Она закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой Assign, сохраняется. Формат обращения:

Close(< файловая переменная> )

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

Текстовые файлы

Текстовые файлы связываются с файловыми переменными, принадлежащими стандартному типу Text. Текстовый файл трактуется в Турбо Паскале как совокупность строк переменной длины. Доступ к каждой строке возможен лишь последовательно, начиная с первой, т.е. для доступа к какой-либо записи необходимо сначала просмотреть все предыдущие. При создании текстового файла в конце каждой записи (строки) ставится специальный признак EOLn (End Of Line – конец строки), а в конце всего файла – признак EOF (End Of File – конец файла). Эти признаки можно протестировать одноименными логическими функциями. При формировании текстовых файлов используются следующие системные соглашения:

EOLn – последовательность кодов ASCII #13 (CR) и #10 (LF);

EOF – код #26 стандарта ASCII.

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

Для текстовых файлов, помимо Reset и Rewrite, имеется еще одна процедура открытия (инициации) файла –
Append. При этом ранее существовавший текстовый файл открывается для добавления (или расширения) – т.е. для записи, но без очистки содержимого. При этом указатель файла устанавливается в его конец. Формат обращения:

Append(< файловая переменная > )

Если текстовый файл ранее уже был открыт с помощью Reset или Rewrite, использование процедуры Append приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.

Для доступа к записям служат процедуры Read, ReadLn, Write, WriteLn. К ним можно обращаться с переменным числом фактических параметров, в качестве которых могут использоваться символы, строки и числа. Первым параметром в любой из этих процедур должна стоять файловая переменная, связанная с файлом или логическим устройством процедурой Assign. Если файловая переменная не указана, происходит обращение к стандартным файлам Input и Оutput, т.е. ввод данных будет происходить с клавиатуры, а вывод – на экран.

Процедура Read обеспечивает ввод символов, строк и чисел. Формат обращения:

Read(< файловая переменная>, < список ввода> )

Read(< список ввода> )

Здесь список ввода – последовательность из одной или более переменных типа Char, String, а также любого целого или вещественного типа.

Процедура ReadLn обеспечивает ввод символов, строк и чисел. Эта процедура идентична процедуре Read за исключением того, что после считывания последней переменной оставшаяся часть строки до маркера EOLn пропускается, поэтому следующее обращение к ReadLn или Read начинается с первого символа новой строки. Кроме того, эту процедуру можно вызвать без списка ввода, что приведет к пропуску всех символов текущей строки вплоть до EOLn.

Процедура Write обеспечивает вывод информации в текстовый файл или передачу ее на логическое устройство. Формат обращения:

Write(< файловая переменная>, < список вывода> )

Write(< список вывода> )

Здесь список вывода – последовательность из одного или более выражений типа Char, String, Boolean, а также любого целого или вещественного типа. Если файловая переменная отсутствует, подразумевается вывод в стандартный файл Output, который обычно связан с экраном ПК.

Любой элемент списка вывода может иметь формат

< выводимое выражение> : N1: N2

Например,

WriteLn(’x=’, x: 12: 9);

Здесь N1, N2 – целые числа (типа Word). Оба они могут отсутствовать. Подпараметр N1, если он есть, указывает минимальную ширину поля, в которое будет записываться символьное представление выводимого значения. Если символьное представление имеет меньшую длину, чем N1, оно будет дополнено слева пробелами, если большую длину, то подпараметр N1 игнорируется и выводится необходимое число символов.

Подпараметр N2 задает количество десятичных знаков в дробной части вещественного числа. Он может использоваться только совместно с N1 и только по отношению к выводимому выражению одного из вещественных типов. Если не указан подпараметр N2, вещественные числа выводятся в экспоненци­альном формате (например, –2.34567890234567Е+0002).

Если ширина поля вывода не указана, то значение выводится вслед за предыдущим без какого-либо их разделения.

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

Процедура WriteLn полностью идентична процедуре Write за исключением того, что выводимая строка символов завершается кодами CR и LF. При вызове WriteLn можно опускать параметр < список вывода> : в этом случае в файл передается маркер EOLn, что при выводе на экран приведет к переводу курсора в начало следующей строки.

Логическая функция EOLn возвращает TRUE, если во входном текстовом файле достигнут маркер конца строки. Формат обращения:

EOLn(< файловая переменная> )

Если параметр < файловая переменная> опущен, функция проверяет стандартный файл Input.

Практические задания

 

1. Дан файл f, компоненты которого являются целыми числами. Получить файл g из компонент файла f делением их на максимальное число среди этих компонент.

 

Program files;

var n, i, x, xmax: integer;

y: real;

f: file of integer; {файловые переменные}

g: file of real;

Begin

assign(f, ’name1.dat’); {связывание файловых пере-}

assign(g, ’name2.dat’); { менных с именами файлов}

rewrite(f); {открытие нового файла }

writeln (’Введите количество чисел ’);

readln(n);

writeln (’Введите целые числа: ’);

for i: =1 to n do{в цикле – ввод числа }

begin{и запись его в файл f }

read(x);

write(f, x);

end;

close(f); {файл f закрыт}

reset(f); {открытие файла f для чтения}

read(f, xmax); {инициализация переменной xmax}

while not EoF(f) do{чтение файла f и поиск максимума}

Begin

read(f, x);

if (xmax < x) then xmax: = x;

end;

seek(f, 0); {установить указатель файла f на 0}

rewrite(g); {открытие файла g для записи}

while not EoF(f) do{в цикле формирование файла g}

Begin

read(f, x);

y: = x/max;

write(g, y);

end;

close(f); close(g); {закрыть файлы}

reset(g); {файл g открыть как существующий}

writeln (’Вывод файла g: ’);

While not EoF(g) n do

Begin

read(g, y);

write(’ ’, y: 7: 3);

end;

close(g);

Readln

End.

 

2. В текстовом файле заданы: в первой строке порядок n квадратной матрицы А, в следующих n строках – элементы матрицы А построчно. Изучить и запустить программу, считывающую матрицу из файла и выполняющую следующие действия: а) поиск максимального и минимального элементов и их позиций, б) транспонирование матрицы, в) сложение матриц А и АТ. Результаты всех действий записать в конец исходного файла.

Указание. Исходный файл можно создать с помощью редактора Турбо Паскаля или программы Блокнот.

Program textfile;

var i, j, n: integer;

a, at: array[1..10, 1..10] of real;

f: text;

fn: string[20];

Begin

write('Имя файла: '); readln(fn);

assign(f, fn);

reset(f);

readln(f, n);

for i: =1 to n do

Begin

j: =1;

While not EoLn(f) do begin

read(f, a[i, j]); j: =j+1 end;

Readln(f)

end;

close(f);

writeln('Матрица A: ');

for i: =1 to n do

Begin

for j: =1 to n do write(' ', a[i, j]: 7: 3);

Writeln

end;

{обработка матрицы}

max: =a[1, 1]; min: =a[1, 1];

i1: =1; j1: =1; i2: =1; j2: =1;

for i: =1 to n do

for j: =1 to n do

Begin

if max< a[i, j] then

begin max: =a[i, j]; i1: =i; j1: =j end;

if max< a[i, j] then

begin max: =a[i, j]; i1: =i; j1: =j end;

at[i, j]: =a[j, i];

s[i, j]: =a[i, j]+at[i, j];

end;

{запись результатов в файл}

append(f);

writeln(f);

writeln(f, 'Максимальный элемент a[', i1, ', ', j1, ']=', max: 7: 3);

writeln(f, 'Минимальный элемент a[', i2, ', ', j2, ']=', min: 7: 3);

writeln(f, 'Транспонированная матрица AT: ');

for i: =1 to n do

Begin

for j: =1 to n do write(f, ' ', at[i, j]: 7: 3);

Writeln(f)

end;

writeln(f, 'Сумма S=A+AT: ');

for i: =1 to n do

Begin

for j: =1 to n do write(f, ' ', s[i, j]: 7: 3);

Writeln(f)

end;

close(f);

Readln

End.

 

Задания для самостоятельной работы

 

1. Дан файл f, компоненты которого являются действительными числами. Найти:

а) сумму компонент файла f;

б) наибольшее и наименьшее значение среди компонент;

в) разность первой и последней компонент.

 

2. Дан файл f, компоненты которого являются целыми числами. Найти:

а) количество четных чисел среди компонент;

б) среднее арифметическое всех компонент, не кратных 3;

в) максимальную сумму, составленную из трех идущих подряд компонент.

 

3. Дан текстовый файл f.

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

б) посчитать количество слов в файле;

в) определить, сколько в файле слов, состоящих из одного, двух и трех символов;

 

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


Лабораторная работа №7

Графика в Турбо Паскале

 

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

Различие между этими режимами заключается в возможностях управления выводом визуальной информации. В текстовом режиме минимальным объектом, отображаемым на экране, является символ, алфавитно-цифровой или какой-либо иной. Обычно экран монитора, работающего в текстовом режиме, позволяет отобразить 80 символов по горизонтали и 25 символов по вертикали, т.е. получаем матрицу 25´ 80 (25 строк, 80 столбцов), что дает всего 2000 визуальных объектов. Нумерация строк и столбцов начинается с 1, т.е. символ, стоящий в верхнем левом углу, имеет координаты (1, 1).

В текстовом режиме имеется возможность управлять только цветом символов, фоновым цветом и включать/отключать режим мерцания. Процедуры и функции для работы в текстовом режиме содержит стандартный модуль CRT. Для работы с изображениями текстовый режим абсолютно не подходит.

В графическом режиме минимальным объектом, отображаемым на экране, является так называемый пиксел – от английского pixel, возникшего в результате объединения слов «рисунок» (picture) и «элемент» (element). Пиксел имеет меньшие размеры по сравнению с символом – на один символ в текстовом режиме отводится площадка размером в несколько пикселов. Его геометрические размеры определяются разрешением монитора, которое обычно задается в виде ´ , где – количество пикселов на экране по горизонтали, а ry – количество пикселов по вертикали. На практике используются не произвольные, а некоторые определенные значения разрешения, например, 320´ 200, 640´ 480, 800´ 600, 1024´ 768, 1280´ 1024 и т.д. Наиболее часто при программировании на Турбо Паскале для DOS используется разрешение 640´ 480 (режим VGA).

Чтобы запрограммировать вывод какого-либо графического объекта, надо научиться задавать его координаты на экране.

Графические координаты задают положение точки на экране дисплея. Поскольку минимальным элементом, к которому имеет доступ программист, является пиксел, естественно в качестве графических координат использовать порядковые номера пикселов. Допустимый диапазон изменения графических координат составляет [0, rx – 1] для координаты x и [0, – 1] для y-координаты. Точкой отсчета является верхний левый угол экрана, его координаты (0, 0). Значения x-координаты отсчитываются слева направо, а y-координаты – сверху вниз. Последнее отличает графические координаты от обычных декартовых координат, принятых в математике, и служит источником ошибок для начинающего программиста.

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

1. Графические координаты принимают только целочисленные значения.

2. Графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения).

3. Графическая координата у отсчитывается сверху вниз.

Таким образом, геометрические декартовы координаты точки (x, у) для отображения ее на экране следует пересчитать в графические (xg, yg) по формулам

xg = [sx ´ х] + dx, yg = ry –[sy´ у] – dy,

где [x] целая часть x; sx и sy – масштабные множители, выбираемые из условия

rx = [sx´ xmax] + 1, ry = [ ´ yтах] + 1.

Здесь хmax и уmax – максимальные значения геометрических координат. Пересчет координаты у по такой же формуле, что и для х, привел бы к выводу перевернутого изображения. Слагаемые dx и dy обеспечивают смещение изображения относительно левого верхнего угла экрана. Изображение будет смещено в центр экрана при

dx = [rx / 2], dy = [ry / 2].

Все процедуры и функции для работы в графическом режиме находятся в стандартном модуле Graph (файл Graph.tpu). Этот модуль должен явно подключаться к программе в разделе Uses. В модуль Graph входит около 80 процедур и функций.

Для отображения графики видеоадаптер ПК должен поддерживать работу дисплея в графическом режиме. Работой видеоадаптера управляет специальная программа, которая называется драйвером. Драйвер хранится в отдельном файле на диске и содержит как исполняемый код, так и необходимые ему для работы данные. Признак файла с драйвером – расширение.bgi имени файла (bgi – Borland Graphics Interface). Имя файла с драйвером соответствует типу видеоадаптера вашего компьютера, так, для подавляющего большинства моделей это файл egavga.bgi (или более современный svga.bgi).

Большинство видеоадаптеров могут работать в нескольких графических режимах. Эти режимы различаются прежде всего разрешением и набором доступных цветов. Итак, программа при переключении в графический режим должна определить тип видеоадаптера. Это можно сделать, явно указав в программе тип видеоадаптера или дав программе возможность самостоятельно определить значение соответствующих параметров. Для этого необходимо ввести переменную целого типа, пусть ее идентификатор будет gd. При явном определении видеоадаптера в программе должен присутствовать оператор присваивания gd: =< значение> , где < значение> – это либо некоторое число, либо встроенная константа (встроенные константы не надо описывать специально, так как их описания содержатся в модулях). Возможные значения приведены в справочной системе.

При автоматическом распознавании видеоадаптера в правой части оператора присваивания используется константа Detect (или нулевое значение).

Второе, что должна сделать программа, – задать определенный графический режим. Для этого следует ввести еще одну переменную целого типа, назовем ее gm, и присвоить ей значение. Допустимые значения также приведены в справочной системе.

Проще всего, однако, вызвать стандартную процедуру DetectGraph(gd, gm), которая автоматически определит номер типа видеоадаптера и номер режима с максимальным разрешением и присвоит эти значения переменным gd, gm.

Переключение в графический режим работы дисплея выполняется вызовом процедуры InitGraph:

InitGraph(gd, gm, ¢ c: \tp\bgi¢ );

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

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

Процедуры RestoreCrtMode и SetGraphMode позволяют переключаться между текстовым и графическим режимами, не закрывая графический режим.

В каждый момент времени в графическом режиме один из пикселов считается текущей позицией (current pointer – CP). Многие процедуры и функции производят вывод соответствующего объекта (линии, прямоугольника, текста, и т.д.), начиная именно с этой текущей позиции. Определить ее можно с помощью функций GetX, GetY, которые возвращают координаты x и y текущей позиции соответственно.

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

 

DetectGraph – автоопределение графического режима и графического драйвера.

InitGraph – переход в графический режим.

CloseGraph – выход из графического режима.

PutPixel – рисует точку (пиксел) указанного цвета в позиции с указанными координатами.

GetPixel – функция, возвращающая цвет пиксела с указанными координатами.

SetColor – устанавливает новый цвет вывода (номера смотрите в справочной системе).

GetColor – функция, возвращающая текущий цвет вывода.

SetLineStyle – устанавливает стиль, шаблон и толщину для выводимых далее линий.

GetLineSettings – возвращает текущие значения стиля, шаблона и толщины линий.

Line – рисует линию от первой точки с указанными координатами (x1, y1) до второй (x2, y2).

LineTo – рисует линию от CP до конечной точки с указанными координатами.

LineRel – рисует линию от CP, смещаясь по x и y на указанные величины.

MoveTo – смещает СР в точку с с указанными координатами.

MoveRel – смещает СР на указанные величины по x и y.

OutText – выводит указанную строку, начиная с CP.

OutTextXY – выводит указанную строку, начиная с указанной позиции.

Rectangle – рисует четырехугольник линиями текущего цвета и стиля.

Ваr – рисует четырехугольник текущим цветом и закрашивает его.

Bar3D – рисует прямоугольный параллелепипед.

Circle – рисует окружность указанного радиуса с центром в указанной точке.

Arc, Ellipse – рисуют соответственно дугу окружности или эллипса.

Sector – рисует и закрашивает эллиптический сектор.

DrawPoly – рисует многоугольник.

SetViewPort – устанавливает окно вывода со своей системой координат.

ClearViewPort – очищает текущее окно вывода.

GetMaxX, GetMaxY – возвращают текущее разрешение экрана по оси x и y соответственно.

FloodFill – закрашивает замкнутую область.

FillPoly – закрашивает многоугольник.

GetImage – сохраняет указанную часть изображения в памяти по указанному адресу.

PutImage – выводит на экран в указанной позиции изображение, сохраненное GetImage.

ImageSize – определяет размер в байтах указанной части изображения.

 

Практические задания

 

1. Изучить и запустить программу вывода на экран графика функции f(x)=sin(3x)/(x2+5) на отрезке [–10, 10]. Изменить программу, добавив вывод графика еще одной функции (по выбору).

 

Program function_graph;

uses graph, crt;

var gd, gm, n, i: integer;

a, b, h, xmas, ymas, max, min, x, y: double;

c: char;

function f(x: double): double;

begin f: =sin(3*x)/(x*x+5) end;

Begin

detectgraph(gd, gm);

initgraph(gd, gm, ''); {Вход в графический режим}

a: =-10; b: =10; n: =500; h: =(b-a)/n;

{Вычисление масштабных коэффициентов}

xmas: =500/(b-a);

max: =f(a); min: =f(a);

for i: =1 to n do

Begin

x: =a+i*h;

if max< f(x) then max: =f(x);

if min> f(x) then min: =f(x)

end;

ymas: =400/(max-min);

setviewport(70, 40, 570, 440, ClipOn);

setcolor(15);

{Рисование осей координат}

y: =max*ymas;

line(0, round(y), 500, round(y));

outtextxy(490, round(y)-10, 'X');

x: =-a*xmas;

line(round(x), 0, round(x), 400);

outtextxy(round(x)-10, 0, 'Y');

{Рисование графика}

setcolor(14);

moveto(0, round(y-f(a)*ymas));

for i: =1 to n do

Begin

x: =a+i*h;

lineto(round((x-a)*xmas), round(y-f(x)*ymas));

end;

c: =readkey;

closegraph{Выход из графического режима}

End.

2. Изучить и запустить программу вывода на экран квадрата, вращающегося относительно одного из углов. Изменить программу, чтобы квадрат вращался вокруг центра симметрии.

 

uses graph, crt;

type arr5=array[1..5] of double;

var a, r: arr5;

t, dt: double;

gd, gm: integer;

procedure rect(r, a: arr5; t: double);

var i, x, y: integer;

Begin

x: =320+round(r[1]*cos(a[1]+t));

y: =240-round(r[1]*sin(a[1]+t));

moveto(x, y);

for i: =2 to 5 do begin

x: =320+round(r[i]*cos(a[i]+t));

y: =240-round(r[i]*sin(a[i]+t));

lineto(x, y);

End

end;

Begin

r[1]: =0; r[2]: =100; r[3]: =100*sqrt(2);

r[4]: =100; r[5]: =0;

a[1]: =0; a[2]: =0; a[3]: =pi/4; a[4]: =pi/2; a[5]: =0;

detectgraph(gd, gm);

initgraph(gd, gm, '');

setlinestyle(0, 0, 3);

t: =0; dt: =pi/180;

Repeat

setcolor(15);

rect(r, a, t);

delay(1000);

setcolor(0);

rect(r, a, t);

t: =t+dt;

until keypressed;

closegraph;

End.

Задания для самостоятельной работы

 

1. Построить:

а) треугольник с вершинами (100, 100), (150, 100), (80, 170);

б) два прямоугольника 300´ 200 в левом верхнем углу и в центре экрана;

в) шестиугольник, вписанный в окружность радиусом 120 в центре экрана.

 

2. Дано натуральное число n( ). Записать его шестью цифрами, используя девятисегментный шаблон (как на почтовых конвертах).

 

3. Вывести на экран графики следующих кривых:

а) астроида x = cos3t, y = sin3t, t Î [0, 2p];

б) кардиоида , , a> 0, .

в) циклоида , , а> 0, ;

г) улитка Паскаля , , a> 0, b> 0, . Рассмотреть случаи, когда , , .

 

4. Изобразить на экране точку, движущуюся по окружности с постоянной угловой скоростью.

 

5. Изобразить на экране две касающиеся окружности радиусов r1 и r2, вращающиеся в плоскости экрана вокруг точки касания, расположенной в центре экрана.

 

6. Изобразить на экране стрелку, вращающуюся в плоскости экрана вокруг тупого конца, который расположен в центре экрана.

 

БИБЛИОГРАФИЧЕСКИЙ СПИСОК

 

1. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. М.: Издательство «ОМД Групп», 2003. – 616 с.

2. Фаронов В.В. Турбо Паскаль 7.0: Учеб. пособие. СПб.: Питер, 2007. – 367 с.

3. Программирование на языке Паскаль: задачник / под ред. Усковой О.Ф. – СПб: Питер, 2003. – 336 с.

4. Немнюгин С.А. Turbo Pascal. – СПб: Питер, 2000. – 496 с.

5. Кострюков С.А., Моисеев С.И., Пантелеев И.Н. Практикум на Паскале. Учеб. пособие. Воронеж: Изд-во ВГТУ, 2000.

 


СОДЕРЖАНИЕ

 

ВВЕДЕНИЕ 1

Знакомство со средой программирования Turbo Pascal 7.0 2

Лабораторная работа №1 3

Лабораторная работа №2 10

Лабораторная работа №3 14

Лабораторная работа №4 20

Лабораторная работа №5 26

Лабораторная работа №6 35

Лабораторная работа №7 46

БИБЛИОГРАФИЧЕСКИЙ СПИСОК 55


 

 

ОСНОВЫ ПРОГРАММИРОВАНИЯ
НА ТУРБО ПАСКАЛЕ

 

 

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

к выполнению лабораторных работ по курсам
«Информатика» и «Специальные главы информатики»
для студентов направлений 150400 «Металлургия»,
140700 «Ядерная энергетика и теплофизика» и
131000 «Нефтегазовое дело» очной формы обучения

 

Составители:

Кострюков Сергей Александрович

Пешков Вадим Вячеславович

Шунин Генадий Евгеньевич

 

В авторской редакции

 

Компьютерный набор В.В. Пешкова

 

 

Подписано к изданию 28.01.2014.
Уч.-изд. л. 3, 4. “С”.

 

ФГБОУ ВПО «Воронежский государственный
технический университет»

 
394026 Воронеж, Московский просп., 14


Поделиться:



Последнее изменение этой страницы: 2017-03-17; Просмотров: 807; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.229 с.)
Главная | Случайная страница | Обратная связь