Под файлом понимается или именованная область внешней памяти ПК (твёрдого диска, эластичной дискеты, и др.), или логическое устройство – потенциальный источник либо приемник информации.
В программах на Турбо Паскале смогут употребляться три вида файлов: типизированные, текстовые и нетипизированные. Примеры описания переменных файловых типов:
Var : File of ;{для типизированных файлов}
: Text; {для текстовых файлов}
: на данный момент; {для нетипизированных файлов}
К примеру:
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:=направляться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
begin max:=a[i,j]; i1:=i; j1:=j end;
if max
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). Пиксел имеет меньшие размеры если сравнивать с знаком – на один знак в текстовом режиме отводится площадка размером в пара пикселов. Его геометрические размеры определяются разрешением монитора, которое в большинстве случаев задается в виде rх ´ rу, где rх – количество пикселов на экране по горизонтали, а ry – количество пикселов по вертикали. На практике употребляются не произвольные, а кое-какие определенные значения разрешения, к примеру, 320´200, 640´480, 800´600, 1024´768, 1280´1024 и т.д. Чаще всего при программировании на Турбо Паскале для DOS употребляется разрешение 640´480 (режим VGA).
Дабы запрограммировать вывод какого-либо графического объекта, нужно обучиться задавать его координаты на экране.
Графические координаты задают положение точки на экране дисплея. Потому, что минимальным элементом, к которому имеет доступ программист, есть пиксел, конечно в качестве графических координат применять порядковые номера пикселов. Допустимый диапазон трансформации графических координат образовывает [0, rx – 1] для координаты x и [0, rу – 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 = [sу ´ 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);
Begin
x:=a+i*h;
if max
if minf(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 I [0, 2p];
б) кардиоида , ,a0, .
в) циклоида , , а0, ;
г) улитка Паскаля , , a0, b0, . Разглядеть случаи, в то время, когда , , .
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