- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Задания I уровня
- •Задания II уровня
- •Лабораторная работа
- •Лабораторная работа
- •Задания
- •Лабораторная работа
- •Описание процедур начинается со строки:
- •Задания I уровень
- •Задания II уровень:
- •Задания
- •Лабораторная работа
- •Задания
- •II уровень
- •Задания I уровень
- •Задания II уровень
- •Петров л.Л 9 9 9 Барановичи
- •Лабораторная работа
- •Задания I уровень
- •II уровень
- •Самостоятельная работа
- •Литература
Задания I уровень
1.Дана программа ввода данных – своей фамилии – в текстовый файл fio.dat, находящийся в текущем каталоге:
var f:text;
str:string;
begin assign(f,'fio.dat');
rewrite(f); (*)
readln(str); Введите программу в память ЭВМ, исполните ее.
writeln(f,str);
close(f)
end.
2. Для чтения информации из текстового файла fio.dat необходима программа:
var f:text;
str:string;
begin
assign(f,'fio.dat');
reset(f); (**)
readln(f,str);
writeln(str);
close(f)
end.
3. Дополнить программу (*) вводом в текстовый файл имени, отчества и других данных по желанию. Вывести эти данные на экран, используя программу (**).
4. Запишите в текстовый файл числа от 1 до 10 (используя цикл) и выведите их на экран, чтобы удостовериться в правильности работы Вашей программы.
VAR f:text;
i,t:integer;
begin assign(f,'num.dat');
rewrite(f);
for i:=1 to 10 do writeln(f,i);
close(f);
reset(f);
for i:=1 to 10 do begin readln(f,t);
write(t:5);
end;
close(f);
end.
5. Можно создать текстовый файл в любом текстовом редакторе.
Создать текстовый файл можно и таким образом: открываем новое окно редактора NC или Total Commander (клавиша F4), набираем в строку данное, нажимаем клавишу Enter, набираем следующее данное и т.д. (не забудем нажать Enter, записав последнее число). Сохранить этот текстовый файл можно, нажав клавишу F2. Создаем таким образом файл, состоящий из 10 произвольных чисел: отрицательных, положительных и нулевых.
6. Составить программу подсчета количества нулевых, суммы отрицательных, произведения положительных среди 10 чисел, введенных из текстового файла.
II уровень
Составить программу подсчета средней оценки (с округлением) по данным, введенным из текстового файла, причем количество оценок будем считать неизвестным. Для определения конца файла можно использовать функцию EOF(), а ввод данных осуществлять оператором цикла WHILE not EOF() do ...(пока не конец файла...)
Данные из текстового файла переписать в другой файл, причем каждая строка должна в новый файл записаться дважды.
В текстовом файле надо через каждые 5 строк вставить 2 пустые строки.
В текстовом файле слова разделяются пробелами. Зашифровать текст в файле, заменив каждый символ следующим по алфавиту
Самостоятельная работа
В текстовом файле слова разделяются пробелами, запятыми, точками. Подсчитать количество слов (пробелов между словами может быть и несколько).
Разработать программу задачи перекодировки текста, введенного из файла, заменив в нем заглавные буквы строчными.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Как описываются файловые переменные?
Какая максимальная длина строки допустима в текстовом файле?
Какие операции допустимы над текстовыми файлами?
Какие функции и процедуры для работы с текстовыми файлами вы знаете?
Как проверить, достигнут ли конец файла?
ЛАБОРАТОРНАЯ РАБОТА №
ТЕМА: РАБОТА С ГРАФИКОЙ. МОДУЛЬ GRAPH.
ЦЕЛЬ: Учащиеся должны получить практические навыки работы в графическом режиме.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Среда Turbo Pascal, модуль GRAPH.
ТЕОРИЯ:
Для работы в графическом режиме используются свыше 50 стандартных процедур и функций. Все они выделены в отдельный модуль GRAPH. Для его подключения к основному модулю SYSTEM необходимы две переменные целого типа gd, gm. Модуль должен быть проинициализирован.
В целом, заголовок графической программы следующий:
Uses graph;
VAR gd,dm: integer; ( *)
begin gd:=detect;
initgraph(gd,gm,’’); {инициализация графики}
. . . {}
CloseGraph; {завершение работы в графическом режиме
и восстановление текстового режима}
End.
Размер экрана: 640*480 пикселей, т.е. точек. Начало координат– левый верхний угол, ось X направлена слева направо, ось Y–сверху вниз. Цветов –16: от белого до черного (прозрачного). Можно цвета указывать номерами от 0 (черный (прозрачный)) до 15 (белый).
На экране можно рисовать линии, точки, прямоугольники, окружности и эллипсы, делать надписи и т.д. Для этого используются следующие процедуры:
PutPixel(X,Y,Cvet); - процедура, которая выдаёт на экран точку с координатами X,Y и цветом Cvet;
СlearDevice; - процедура, которая очищает экран и устанавливает значения всех графических параметров, предусмотренные по умолчанию;
Line(X1,Y1,X2,Y2);-процедура, которая проводит прямую линию из точки с координатами(X1,Y1) в точку (X2,Y2) текущим цветом. Положение текущего указателя не изменяется;
SetColor(Сolor);-процедура, которая устанавливает цвет видимого изображения, задаваемый параметром Color;
SetBkColor(Сolor);-процедура, которая устанавливает цвет фона, задаваемый параметром Color;
Rectangle(X1,Y1,X2,Y2); - процедура, которая рисует прямоугольник с координатами(X1,Y1) – верхний левый угол и (X2,Y2) – нижний правый угол, используя стандартный цвет закраски;
Circle(X,Y, Radius); - процедура, которая рисует окружность с центром(X,Y) и радиусом Radius;
Для работы нам понадобится процедура модуля CRT:
Процедура DELAY. Обеспечивает задержку выполнения программы на указанное число тактов X; формат обращения DELAY (X);.
Итак, начнем рисование нашей картины с рамки, как и положено. Рисуем прямоугольник:
Uses graph, CRT;
VAR X,Y, N, gd,dm, i,r: integer;
begin gd:=detect;
initgraph(gd,gm,’’); {инициализация графики}
rectangle(0,0,640,480); { прямоугольник максимального размера}
readln; {ждем нажатия клавиши ввода}
CloseGraph; {завершение работы в графическом режиме }
End.
Чтобы рамка была красивой, нужны еще 2 прямоугольника с разницей в координатах в 5 пикселей. Добавляем в программу процедуру рисования прямоугольника: с координатами: rectangle(5,5,635,475);
Координаты третьего прямоугольника меньшего размера Вы подсчитаете сами?
Рисуем линию LINE (0,0,640,480);. Добавляем в основную программу процедуры LINE для рисования следующей основы нашей картины:
Нарисуем окружность с центром в начале координат и радиусом 20: Circle (0,0, 20);
А теперь 5 таких окружностей, но радиус меняется с шагом 20 и с центром в середине экрана (х=320, у=240).
А если надо 10, 15, 20 подобных окружностей с центром в середине экрана, у которых радиус меняется на шаг (10 или 20 или …)?
Попробуем цикл For r:=20 to 100 do
Circle (320,240, r);
И получилось кольцо. Чтобы исправить положение, используем конструкцию
R:=20;
While r<=100 do begin
Circle (0,0, r);
r:=r+20;
End;
Ecли радиус в конце концов увеличится до . . ., то в результате получится нечто вроде паутины. (Не хватает только паучка).
Теперь пусть она исчезнет (сорвало порывом ветра).
Setcolor(0);
While r>=20 do begin
…?
End;
Сделаем ее пульсирующей (появилась, исчезла) и так хотя бы 5 раз. (Добавим цикл For i:=1 to 5 do begin . . . end, внутри которого разместятся наши два цикла). Если процесс происходит очень быстро, в циклы добавим паузу Delay(n), где n – время задержки в миллисекундах.
Изменим цвет паутины с белого (по умолчанию) на серый, например:
For i:=1 to 5 do begin
Setcolor(8); { или Setcolor(9); выберите цвет, какой нравится Вам}
r:=20;
While r<=? do begin
. . .
End;
While r>=? do begin
. . .
End;
End;
Подберем подходящий цвет фона.
Попробуем сделать так, чтобы каждая окружность рисовалась цветом, следующим в палитре.
Если окружностей много, то должен появиться провал, окружность, которую не видно. Это происходит за счет того, что окружность рисуется цветом фона. Как этого избежать, пропустить цвет, если его номер дошел до цвета фона?
Пора создавать свое произведение. Успехов Вам.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Какие процедуры Вам запомнились лучше?
Дайте краткую характеристику модуля Graph.tpu.
Какие рисунки Вы хотите нарисовать?
Что можно нарисовать, используя процедуры и функции Graph.tpu?
ЛАБОРАТОРНАЯ РАБОТА №
ТЕМА: РАБОТА С ГРАФИКОЙ-2. МОДУЛЬ GRAPH.
ЦЕЛЬ: Учащиеся должны получить практические навыки работы в графическом режиме.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Среда Turbo Pascal, модуль GRAPH.
ТЕОРИЯ:
Для работы в графическом режиме используются свыше 50 стандартных процедур и функций.
PutPixel(X,Y,Cvet); - процедура, которая выдаёт на экран точку с координатами X,Y и цветом Cvet;
СlearDevice; - процедура, которая очищает экран и устанавливает значения всех графических параметров, предусмотренные по умолчанию;
Line(X1,Y1,X2,Y2);-процедура, которая проводит прямую линию из точки с координатами(X1,Y1) в точку (X2,Y2) текущим цветом. Положение текущего указателя не изменяется;
SetColor(Сolor);-процедура, которая устанавливает цвет видимого изображения, задаваемый параметром Color;
SetBkColor(Сolor);-процедура, которая устанавливает цвет фона, задаваемый параметром Color;
Rectangle(X1,Y1,X2,Y2); - процедура, которая рисует прямоугольник с координатами(X1,Y1) – верхний левый угол и (X2,Y2) – нижний правый угол, используя стандартный цвет закраски;
Bar(X1,Y1,X2,Y2); - процедура, которая рисует закрашенный прямоугольник с координатами (X1,Y1) – верхний левый угол, и (X2,Y2) – нижний правый угол, используя стандартный цвет закраски;
Circle(X,Y, Radius); - процедура, которая рисует окружность с центром(X,Y) и радиусом Radius;
Ellipse(X,Y, нач.угол,кон.угол,Xradius,Yradius ); - процедура, которая рисует дугу эллипса с центром (X,Y) и с радиусами Xradius (по оси X), Yradius (по оси Y) от начального угла «Нач.угол» до конечного угла «Кон.угол». Значения Нач.угол=0 и Кон.угол=360 приведут к вычерчиванию полного эллипса. Углы задаются в градусах по направлению против часовой стрелки;
SetFillStyle(образец, цвет); - процедура, устанавливающая заданный пользователем образец заполнения (число от 0 до 12) и цвет закраски (число от 0 до 15) .
FloodFill(x,y, граница); - процедура, заполняет ограниченную замкнутую область, начиная с точки х,у до границы указанного цвета.
OutTextxy(x,y,Text) - процедура, которая выдает на экран строку Text, начиная с точки (X,Y). Положение текущего указателя не изменяется;
У компьютера есть специальная функция, которая выдает случайные числа. Ее обозначение - Random и означает оно “случайный“. Еще эту функцию называют генератором случайных чисел. Обращаясь к этой функции, мы получаем случайные действительные числа, равномерно распределенные в интервале [0;1], а если задаем ее как random(n), где n – число типа word, то получаем целые числа, случайно распределенные в интервале от 0 до n.
Пусть (X,Y)- координаты некоторой точки на экране, случайно выбранные компьютером.
Чтобы нарисовать «звездное небо» из n звезд, надо выбрать случайным образом N раз координаты x, y и случайно же задавать цвет рисования. Программа:
Uses graph;
VAR X,Y, N, gd,dm,I,c: integer; ( *)
begin write(‘звезд=’); readln( N);
gd:=detect; {инициализация графики}
initgraph(gd,gm,’’);randomize;
for i:=1 to n do begin {создаются n точек}
X:=RANDOM (640); {случайно распределенные}
Y:= RANDOM(480); {на экране 640*480 точек}
C:=RANDOM(16); { выбор цвета}
PUTPIXEL(X, Y,C) { оператор рисования точки}
end;
end.
Пусть (X,Y)- координаты некоторой точки на экране, случайно выбранные компьютером.
(X+5;Y+10)- координаты точки, находящейся несколько сбоку. Нарисуем КОСОЙ ДОЖДИК.
Uses graph;VAR X,Y, N, gd,dm: integer;
begin write(‘линий=’); readln( N);
gd:=detect;
initgraph(gd,gm,’’);
randomize;
for i:=1 to n do begin
X:=RANDOM (640); {**}
Y:= RANDOM(480);
LINE (X , Y,X+5,Y+10)
end;
end.
В результате выполнения этой программы весь экран покрывается “косыми дождинками”.
Компьютер снова и снова задумывает координаты точки и чертит отрезок-дождинку на экране. Рисование будет продолжаться до тех пор, пока не будет нарисовано ‘n’ линий.
ПОРЯДОК ВЫПОЛНЕНИЯ РАБОТЫ:
Изучить графический режим работы с экраном с использованием средств ТР.
Изучить необходимые сведения, указанные выше
Составить текст программы и выполнить программу
Предъявить преподавателю результаты работы программы.
Оформить отчет по выполненной лабораторной работе, защитить и сдать его преподавателю.
ЗАДАНИЯ:
(оценки, конечно, устанавливаются преподавателем. Здесь проводится приблизительная градация в зависимости от номера задания. 9 либо 10 ставится, если есть развернутые ответы на вопросы)
Нарисовать «звездное небо» (см. программу *). Добавить к нему луну (месяц).
На небе нарисовать N планет (координаты задаются явно или случайным образом )
а). Добавьте к предыдущему рисунку «метеоритный дождь» (см. программу**).
б) Измените программу так, чтобы дождинки стали длиннее.
в) Измените направление дождя.
г) Сделайте дождинки разными. Используйте для этого переменную L – длину дождинки: L= RANDOM(10).
4. Наберите программу, в результате выполнения которой экран покрывается:
а) горизонтальными линиями;
б) вертикальными линиями;
в) и горизонтальными, и вертикальными линиями.
5. Постройте в центре экрана семейство концентрических (с общим центром) окружностей произвольного радиуса.
6. Нарисуйте в центре экрана ЗВЕЗДУ (для выполнения этого задания рисунок лучше предварительно создать на листе бумаги (в масштабе), чтобы правильно определить координаты).
7. Нарисуйте ПРАЗДНИЧНЫЙ САЛЮТ из трех звезд. Окрасьте их
8. Измените программу ЗВЕЗДНОЕ НЕБО. Для изображения звезды используйте окружность с R, равным 1 (либо 2 либо, по желанию, произвольным). Координаты х и у звезд выбирайте случайно (см. программу (*)), цвет окружности тоже можно устанавливать случайно.
9. Напишите программу, выводящую на экран множество разноцветных закрашенных прямоугольников.
10. Объедините все созданные Вами программы в общую демонстрационную программу, используя операторы СLEARDEVICE;(очистка экрана) и READLN;. Подпишите каждый кадр(settextstyle(N,0,r); OutTextxy(x,y,Text). N, r подберите опытным путем. 0-текст располагается горизонтально; 1- вертикально).
САМОСТОЯТЕЛЬНАЯ РАБОТА (оценка определяется номером выполненного задания).
Выполните на экране компьютера следующие графические построения:
1. треугольник с вершинами 1(10,10), 2(300,470), 3(630,10);
2. прямоугольник с вершинами 1(50,50) 2(400,50), 3(400,200), 4(50,20)
3. шестиугольник с вершинами 1(100,100), 2(200,10), 3(300,10), 4(400,100), 5(300,190), 6(200,190).
4. Нарисуйте куб.
5. Нарисуйте 2 куба, со сторонами в 2 раза меньше сторон исходного.
6. Нарисуйте 3 куба, имеющие стороны длиной 10,20 и 30 единиц соответственно.
7. Выведите на экран 5 вложенных квадратов. Попробуйте закрашивать их поочерёдно разными цветами.
8. С помощью команды рисования закрашенного прямоугольника выведите на экран рисунки «ШТАНГА», «ПИРАМИДА» и «РОБОТ».
9. Постройте на экране «ЗАМОК». Воспользуйтесь всеми известными вам возможностями операторов LINE, RECTANGLE, окрашивания.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Почему реальные звездное небо и метеоритный дождь у Вас на экране состоят из меньшего количества звезд либо линий, чем n, заданное в программе (*)?
Сколько параметров в операторе ELLIPSE необходимо для изображения верхнего (нижнего) полуовала? Какие они?
Как нарисовать ?
Как восстановить черный цвет фона после его изменения?
Как окрасить некоторую область? Каковы должны быть требования к ней?
ЛАБОРАТОРНАЯ РАБОТА
ТЕМА: РАБОТА С ГРАФИКОЙ-3. ДВИЖЕНИЕ ОБЪЕКТОВ.
ЦЕЛЬ: Учащиеся должны получить первичные практические навыки работы по созданию движущихся объектов в графическом режиме.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ: Среда Turbo Pascal, модули CRT и GRAPH.TPU
ТЕОРИЯ (некоторые процедуры модуля CRT):
Процедура DELAY. Обеспечивает задержку выполнения программы на указанное число тактов; формат обращения DELAY (X);
Эта процедура используется для обеспечения возможности наблюдения за протеканием процессов в реальном времени, для организации их замедления или ускорения. В играх она активно применяется для того, чтобы приспособить программы к особенностям человека, реализовать варианты игры, ориентированные на новичка или мастера.
Процедура SOUND. Обеспечивает включение звукового сигнала на частоте, указанной в параметре; формат обращения SOUND (X).
Здесь Х — переменная типа WORD, задающая число мегагерц.
Процедура NOSOUND. Обеспечивает выключение звукового сигнала; формат обращения NOSOUND;
Внимание!!! Процедура SOUND без процедуры NOSOUND не используется (иначе компьютер «зависает»).
Ниже приведен пример программы, использующей эти процедуры
{ Пример для Delay, NoSound, and Sound }
Uses Crt;
begin
Sound(220); { Включить звук }
Delay(200); { Для 200 тактов }
NoSound; { Выключить звук! }
end.
Функция KeyPressed(тип ее– boolean)-функция, которая возвращает значение True , если на клавиатуре была нажата какая-либо клавиша, и False в противном случае:
ЗАДАНИЯ:
Изобразите на экране рисование линии, используя точку, пересекающую с постоянной скоростью экран слева направо параллельно его горизонтальной оси от 1 до n-ой позиции (n– задается).
Uses graph; crt;
VAR X,Y,c, N, gd,dm: integer;
begin read( N); {n-dlina linii}
gd:=detect;
initgraph(gd,gm,’’);
y:=20;
c:=2;
for X:=1 to n do begin
PutPixel (X , Y,c) {*}
end;
end.
Изобразите на экране точку, пересекающую с постоянной скоростью экран слева направо параллельно его горизонтальной оси (точка рисуется цветом «С» и стирается цветом «0. Чтобы процесс рисования был более нагляден, делаем паузу с помощью процедуры Delay(количество миллисекунд). Это количество подбираем опытным путем.
Как только точка доходит до правого края, слева появляется и начинает двигаться новая точка в строке, выбранной случайно (y:= random(480)). Цвет может меняться также случайно.
Постройте на экране движение шарика небольшого диаметра по периметру экрана.
Покажите на экране движение шарика небольшого диаметра по диагоналям экрана.
Постройте движущуюся машину (кузов, кабинка, два колеса. Можно нарисовать дорогу и свет от фар треугольником).
Имеем программу движения часовой стрелки по экрану в зависимости от введенного угла в градусах:
uses crt,graph;
var gd,gm,j,k1,K2,x,y,x1,x2,y1,y2:integer;
alfa,i,z:real;
begin
{------------------Ввод значения угла Alfa----------------------------------}
textcolor(14);
writeln('Введите значение угла alfa(в градусах): ');
readln(alfa);
{----------------Начало графического изображения----------------------------}
gd:=detect;
initgraph(gd,gm,'');
setcolor(14);
circle(320,240,200); {циферблат желтого цвета }
{---------------------Движение стрелки--------------------------------------}
i:=270;
z:=0;
while z<>alfa do begin
setcolor(14); {задаем желтый цвет}
i:=(i+0.5); {угол в радианах для вычисления тригонометр. функций}
x:=320+trunc(160*cos(i/180*pi)); { координаты вычисляются}
y:=240+trunc(160*sin(i/180*pi));
line(320,240,x,y); {линия}
delay(100); {паузу делаем по желанию}
setcolor(0); {стираем изображение цветом фона}
line(320,240,x,y);
z:=z+0.5; {изменение параметра цикла}
setcolor(3);
line(320,240,320,0); {вторая стрелка}
end;
{--------------------Окончательный результат--------------------------------}
setcolor(14);
line(320,240,x,y);
setcolor(3);
line(320,240,320,0);
outtextxy(10,10,'Please press Enter');
readln;
end.
Достройте циферблат, деления, цифры, подберите цвета, улучшите стрелки, выведите красиво текст…
Добавьте звуки и заставьте Ваши часы сыграть несколько тактов мелодии.
КОНТРОЛЬНЫЕ ВОПРОСЫ:
Какие процедуры Вам запомнились лучше?
Дайте краткую характеристику модуля Graph.tpu.
Какие программы из рассмотренных Вам больше всего понравились?
Что бы Вы хотели нарисовать? Что Вам для этого нужно?
Что бы Вы хотели создать в качестве своего проекта?
(Оценка ставится в соответствии с номером выполненной работы. Оценка 10 ставится, если есть полные ответы на вопросы. Работа рассчитана на 2 часа напряженной деятельности). Отвечать на вопросы можно дома.
