Вычислительная практика
Отчет по практике, 01 Мая 2013, автор: пользователь скрыл имя
Описание работы
Задание 1. Фото-мозаика.
Условие задачи. В архиве находятся несколько файлов. В них - фрагменты одной фотографии. Написать программу, составляющую из фрагментов целую фотографию.
Требования:
подобрать размеры графического окна в соответствии с параметрами фотографии (размер и ориентация книжная или альбомная);
полученное фото расположить в указанной части графического окна;
Содержание работы
ЗАДАЧА 1. 2
ЛИСТИНГ К ЗАДАЧЕ 1. 3
РИСУНОК К ЗАДАЧЕ 4
ЗАДАЧА 2. 4
ЛИСТИНГ К ЗАДАЧЕ 2. 4
РИСУНОК К ЗАДАЧЕ 5
ЗАДАЧА 3. 5
ЛИСТИНГ К ЗАДАЧЕ 3. 5
РИСУНОК К ЗАДАЧЕ 6
ЗАДАЧА 4. 6
ЛИСТИНГ К ЗАДАЧЕ 4. 6
РИСУНОК К ЗАДАЧЕ 9
ЗАДАЧА 5. 9
ЛИСТИНГ К ЗАДАЧЕ 5. 9
РИСУНОК К ЗАДАЧЕ 10
ЗАДАЧА 6. 10
ЛИСТИНГ К ЗАДАЧЕ 6. 10
РИСУНОК К ЗАДАЧЕ 11
ЗАДАЧА 7. 11
ЛИСТИНГ К ЗАДАЧЕ 7. 12
РИСУНОК К ЗАДАЧЕ 13
ЗАДАЧА 8. 14
ЛИСТИНГ К ЗАДАЧЕ 8. 14
РИСУНОК К ЗАДАЧЕ 17
ЗАДАЧА 9 17
ЛИСТИНГ К ЗАДАЧЕ 9. 17
РИСУНОК К ЗАДАЧЕ 20
Файлы: 1 файл
отчет Лешкевич Марии Николаевны.docx
— 639.91 Кб (Скачать файл)Требования:
- подобрать размеры графического окна и разделить его на две части: нижнюю часть окна отвести для отображения ребуса, а верхнюю - для ввода отгадки пользователем;
- создать изображение ребуса в нижней половине графического окна, используя образец задания; вставить в ребус недостающие текстовые фрагменты там, где это требуется;
- организовать над ребусом ввод и проверку отгадки.
ЛИСТИНГ К ЗАДАЧЕ 6.
Program zd_6;
uses CRT,GraphABC;
var pic,CenterW,CenterH:integer;
a:string;
begin
hideCursor;
TextSize(26);
SetWindowSize(1100,760);
CenterWindow;
SetWindowCaption('Разгадать ребус!');
CenterW:= trunc(WindowWidth/2); //Определяет половину ширины окна
CenterH := trunc(WindowHeight/2);//
SetFontSize(50);
SetFontStyle(fsBold);
setFontName('Times');
pic := LoadPicture ('e:\семестр4\вычислительная
практика\лешкевич\результат задания
№6\Zd_6\Z6_pictures\ребус15_1.
DrawPicture (pic, 60, CenterH+20);
//SetFontSize(40);
setfontcolor(clRed); //Устанавливает цвет шрифта.
TextOut(70,500,'321');
SetFontSize(40);
TextOut(200,360,',');
pic := LoadPicture ('e:\семестр4\вычислительная
практика\лешкевич\результат задания
№6\Zd_6\Z6_pictures\ребус15_2.
DrawPicture (pic, 220, CenterH+20);
SetFontSize(30);
TextOut(260,500,' ');
pic := LoadPicture ('e:\семестр4\вычислительная
практика\лешкевич\результат задания
№6\Zd_6\Z6_pictures\ребус15_3.
DrawPicture (pic, 450, CenterH+20);
SetFontSize(40);
TextOut(490,500,'31');
SetPenColor(clBlue );
Line(10,CenterH,WindowWidth,
//даполнительные буквы ребуса
SetFontSize(65);
setfontcolor(clBlue );
//SetFontColor(RGB(123,79,35))
TextOut(370,CenterH+40,'И');
SetFontStyle(fsNormal);
SetFontName('Arial');
SetFontSize(30);
Writeln;
Writeln('Введите слово-отгадку':45);
writeln;
writeln;
SetFontStyle(fsBold);
SetFontSize(24);
Write ('':20);
Read(a);//ввод слова отгадку
SetFontSize(12);
SetFontStyle(fsNormal);
Writeln;
if LowerCase(a)='алгоритм'
then
Begin
SetFontSize(20);
TextColor(2);
Writeln(' ':20,'Это правильно!');
end
else
begin
SetFontSize(20);
TextColor(12);
Writeln(' ':15,'Не верно...');
writeln;
TextColor(2);
Writeln(' ':15,'Правильный ответ - АЛГОРИТМ');
end;
end.
Результат выполнение программы
ЗАДАЧА 7.
Задание 7. Олимпийские игры.
Условие задачи. Написать программу для поднятия флагов трех государств на церемонии награждения в спортивном соревновании со звучанием гимна страны, занявшей первое место.
Требования:
- предусмотреть процедуры для рисования флагов государств;
- расположить флаги соответственно: по центру 1-место, слева - 2-е место, справа - 3-е место;
- флаги должны подниматься на динамических креплениях;
- под каждым флагом вывести название государства;
- гимн должен звучать полностью (от первого до последнего такта);
- в заголовке окна вывести название страны-победительницы.
ЛИСТИНГ К ЗАДАЧЕ 7.
program z7;
uses
GraphABC, Sounds;
Procedure Perva9(i:integer);
begin
SetBrushColor(clWhite);
FillRect(0,600-(i+140) ,210,500-i+90 );
Line(50,600-(i+140),50,0);
Line(150,600-(i+140),150,0);
Rectangle(20,600-(i+50),180,
Rectangle(20,600-(i+50),60,
Rectangle(20,600-(i+110),60,
Rectangle(90,600-(i+50),180,
Rectangle(90,600-(i+110),180,
Floodfill(30,600-(i+90),
TextOut(70,600-(i+40),'Латвия'
sleep(70);
end;
Procedure Btora9(i:integer);
begin
SetBrushColor(clwhite);
FillRect(200,600-(i+100) ,410,500-i+90 );
Line(250,600-(i+190),250,0);
Line(350,600-( i+190),350,0);
Rectangle(220,600-(i+100),380,
Rectangle(220,600-(i+100),260,
Rectangle(220,600-(i+160),260,
Rectangle(290,600-(i+100),380,
Rectangle(290,600-(i+160),380,
Floodfill(225,600-(i+110),
Floodfill(225,600-(i+150),
Floodfill(225,600-(i+180),
floodfill(350,600-(i+180),
floodfill(350,600-(i+110),
TextOut(270,600-(i+90),'
sleep(70);
end;
Procedure Tretb9(i:integer);
begin
SetBrushColor(clWhite);
FillRect(400,600-i+90 ,610,500-i+90);
Line(450,500-i+90,450,0);
Line(550,500-i+90,550,0);
Rectangle(420,600-i,580,600-(
line(470,600-i,470,600-(i+90))
line(525,600-i,525,600-(i+90))
FloodFill(430,600-(i+80),
FloodFill(480,600-(i+80),
FloodFill(550,600-(i+80),
TextOut(470,600-i,'Колумбия');
sleep(70);
end;
var i,j,r,n: integer;
begin
{Рисование графического окна}
SetWindowSize(600,610);
CenterWindow;
SetWindowCaption(' Победитель - Гвинея');
{Подключение звукового файла}
n:=LoadSound('e:\семестр4\
PlaySound(n);
for i:=1 to 390 do
Begin
SetBrushColor(clWhite);
Perva9(i);
Btora9(i);
Tretb9(i);
end;
While soundIsPlaying(n) do
end.
Результат выполнение программы
ЗАДАЧА 8.
ФУНКЦИИ ДЛЯ ПОСТРОЕНИЯ ГРАФИКА
ПО ВАРИАНТАМ
Задание 8. График функции.
Условие задачи. Написать программу для построения графика функции на заданном отрезке.
Требования:
- выбрать подходящий шаг деления отрезка;
- в окне вывода построить таблицу значений аргумента и функции;
- в графическом окне построить координатные оси со стрелками, график функции, подписать оси и начало координат, границы отрезка;
Вариант № 15.
на отрезке [–3p/2; 2p].
ЛИСТИНГ К ЗАДАЧЕ 8.
Program Z8;
Uses CRT, GraphABC;
Var a1, b1, x,y,h:real;
n,a,b,c:integer;
Function F(x:real):real;
Begin
F:=a+b*cos(x)-sin(c*x);
End;
procedure MaxMin(a1, b1, h : real; var ymin, ymax : real);
var x,y:real;
begin
ymin:=F(a); ymax:=ymin;
x:=a1;
while x < b1+h/2 do
begin
y:=F(x);
if y < ymin then
ymin:=y;
if y > ymax then
ymax:=y;
x:=x+h
end
end;
procedure GrFunc(a1, b1 : real; n : integer);
var ymin, ymax, x, y, h, Mx, My : real;
xg, yg, xgp, ygp, ox, oy,
x0, y0, xW, yH, i : integer;
function prx(x : real):integer;
begin
prx:=round(x0+(x-a1)*Mx)
end;
function pry(y : real):integer;
begin
pry:=round(y0+(ymax-y)*My)
end;
begin
h:=(b1-a1)/n; MaxMin(a1,b1,h,ymin,ymax);
x0:=300; xW:=WindowWidth div 2 +150;
y0:=100; yH:=WindowHeight div 2+150;
Mx:=(xW-x0)/(b1-a1);
My:=(yH-y0)/(ymax-ymin);
{ Выводятся оси }
if ymin*ymax < 0 then
begin
oy:=pry(0);
Line(x0,oy,xW,oy);
TextOut( xW-15,oy+10,'Ox')
end;
if a1*b1 < 0 then
begin
ox:=prx(0);
Line(ox,y0,ox,yH);
TextOut( ox+10,y0+15,'Oy')
end;
x:=a1;y:=f(a1);
xgp:=prx(x); ygp:=pry(y);
for i:=1 to n do
begin
x:=x+h; y:=f(x);
xg:=prx(x); yg:=pry(y);
Line(xgp,ygp,xg,yg);
xgp:=xg; ygp:=yg;
end;
end;
begin
writeln('Введите a: '); readln(a);
writeln('Введите b: '); readln(b);
writeln('Введите c: '); readln(c);
n:=50;
a1:=-3*pi/2;
b1:=2*pi;
GrFunc(a1,b1,n);
begin
{--- строим шапку таблицы --- }
writeln('_____________________
writeln('! x ! y !');
writeln('_____________________
{--- находим и выводим значения функции
для рисовния границы используем символы подчеркивания и восклицательного знака --- }
h:=1.0; {--- шаг деления отрезка --- }
x:=a1;
while x <=b1 do
begin
y:=f(x);
writeln('!', x:8:2, ' !', y:8:2, ' !'); {--- --- }
x:=x+h;
end;
writeln('_____________________
end;
TextOut(240,260,'-3*pi/2 ');
Circle(297,240,3);
TextOut(470,260,'2pi');
Circle(470,240,3);
end.
Результат выполнение программы
ЗАДАЧА 9.
Задание 9. Диаграммы.
Условие задачи. Имеется набор числовых данных. Написать программу вычисления по данным некоторых значений и построения диаграмм.
Требования:
- числовые данные хранить в массиве (можно в массиве констант);
- исходные значения и результаты вычислений вывести в окне вывода в виде таблицы;
- в графическом окне вначале отобразить круговую диаграмму, затем пауза, затем построить гистограмму;
- на круговой диаграмме отображать:
1) заголовок диаграммы;
2) разными цветами сектора, соответствующие данным;
3) подписи данных в процентах;
4) названия рядов данных; - на гистограмме отображать:
1) заголовок диаграммы;
2) оси, отрезки делений на осях и подписи к ним;
3) разными цветами прямоугольники, соответствующие данным;
4) легенду.
ЛИСТИНГ К ЗАДАЧЕ 9.
Program Z9;
Uses Crt,GraphABC;
Type mass = array[1..11] of string;
{Создадим массив
из строк с названиями пустынь,
mas = array [1 .. 11] of integer;
Var
a,c, otkl:mas;
{массив номеров цветов для изображения секторов}
v : mass;
{массив из строк для надписи легенды}
p : mass;
{массив
из процентов для каждой
i,n,m,s,x1,sr,x2,max,h,xi,k1,
k:real;
z:string;
Begin
//-------------------круговая диаграмма------------------
{Массив надписей для легенды}
v[1]:='Сахара';
v[2]:= 'Гоби';
v[3]:= 'Калахари ';
v[4]:= 'Большая песчаная';
v[5]:= 'Каракумы';
{Определение массива цветов для построения диаграммы}
SetPixel(100,100,clRed);
c[1]:=GetPixel(100,100);
SetPixel(100,100,clGreen);
c[2]:=GetPixel(100,100);
SetPixel(100,100,clBlue);
c[3]:=GetPixel(100,100);
SetPixel(100,100,clYellow);
c[4]:=GetPixel(100,100);
SetPixel(100,100,clMedGray );
c[5]:=GetPixel(100,100);
{ Массив площадей пустынь }
a[1]:=900;
a[2]:=130;
a[3]:=90;
a[4]:=36;
a[5]:=35;
{a[1]:=35;
a[2]:=36;
a[3]:=90;
a[4]:=130;
a[5]:=900; }
{Сколько градусов круга приходится на 1 тыс.км.кв.}
s:=0;
For i:=1 to 5 do s:=s+a[i];
k:=360/s;
{построение закрашенного прямоугольника,
в котором будет выведена легенда диаграммы}
SetBrushColor(clSkyBlue);
RecTangle(390,200,640,300);
// SetFontStyle(fsNormal);
For i:=1 to 5 do
begin
SetBrushStyle(bsSolid);
SetBrushColor(C[i]);
{Построение сектора}
Pie(435,(i+1)*15+205,20,0,90);
{Перевод процентов количества площадей каждой пустыни в текст}
Str(trunc((A[i]/s)*100),P[i]);
{Вывод чисел и знака % впереди секторов}
TextOut(400,(i+1)*15+187,P[i]+
{Вывод текста обозначающей каждую пустыню}
TextOut(455,217+(i-1)*15,V[i])
end;
{ Построение круговой диаграммы }
x1:=0;
x2:=0;
{Начальное значение угла сектора}
For i:=1 to 5 do
If a[i]<>0 then
begin
{Сколько градусов приходится на одну пустыню}
m:=trunc(k*a[i]);
{Цвет закраски выбираем из созданного нами массива цветов}
SetBrushColor(C[i]);
{Подготавливаем углы для каждой пустыни, х1 - первое значение угла,
х2 - второе значение угла сектора}
x1:=x2;
x2:=x2+m;
If i=5 then
Pie(200,250,100,x1,360)
else
Pie(200,250,100,x1,x2);
{Для последнего сектора пишем второй угол 360, чтобы не было не закрашенного промежутка, который образуется из-за округления чисел}
end;
{ создание таблицы исходных данных }
writeln('_____________________
writeln('|Название | Местонахождение | Площадь | % |');
writeln('_____________________
writeln('|',v[1]:17,' | Африка |',a[1]:3,' |',(a[1]/s)*100:3:2,' |');
writeln('|',v[2]:17,' | Евразия |',a[2]:3,' |',(a[2]/s)*100:3:2,' |');
writeln('|',v[3]:17,' | Африка |',a[3]:3,' |',(a[3]/s)*100:3:2,' |');
writeln('|',v[4]:17,' | Австралия |',a[4]:3,' |',(a[4]/s)*100:3:2,' |');
Writeln('|',v[5]:17,' | Евразия |',a[5]:3,' |',(a[5]/s)*100:3:2,' |');
Writeln('|____________________
//--------------------
readln;
clrscr;
SetWindowSize(800,400);
v[1]:='Симпсон';
v[2]:='Кызылкум';
v[3]:='Сонора';
v[4]:='Мохаве';
v[5]:='Сечура';
V[6]:='Атакама'
{ массив площадей }
a[1]:=170;//000;
a[2]:=300;//000;
a[3]:=311;//000;
a[4]:=57;//000;
a[5]:=188;//000;
a[6]:=181;//000
{ нахождение средней площади }
s:=0;
for i:=1 to 6 do
begin
s:=s+a[i];
end;
sr:=s div 6;
{ оси координат }
SetPenWidth(3);
line(50,200,740,200);
line(50,20,50,380);
{рассчет ширины прямоугольника для каждой пустыни}
h:=100;
{нахождение отклонений }
for i:=1 to 6 do
begin
otkl[i]:=sr-a[i];
end;
{сортировка по возрастанию}
for i:=1 to 6 do
for j:=i+1 to 6 do
if a[i]>a[j] then begin
b:=a[i];
a[i]:=a[j];
a[j]:=b;
z:=v[i];
v[i]:=v[j];
v[j]:=z;
end;
for i:=1 to 6 do
Write(a[i], ' ');
{нахождение отклонений }
for i:=1 to 6 do
begin
otkl[i]:=sr-a[i];
end;
{}
{вычисление коэффициента