Вычислительная практика

Автор работы: Пользователь скрыл имя, 01 Мая 2013 в 03:20, отчет по практике

Описание работы

Задание 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.jpg');

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.jpg');

DrawPicture (pic, 220, CenterH+20);

SetFontSize(30);

TextOut(260,500,' ');

 

pic := LoadPicture ('e:\семестр4\вычислительная практика\лешкевич\результат задания №6\Zd_6\Z6_pictures\ребус15_3.jpg');

DrawPicture (pic, 450, CenterH+20);

SetFontSize(40);

TextOut(490,500,'31');

 

 

SetPenColor(clBlue );

Line(10,CenterH,WindowWidth,CenterH);

//даполнительные буквы ребуса

  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,600-(i+140));

        Rectangle(20,600-(i+50),60,600-(i+80));

        Rectangle(20,600-(i+110),60,600-(i+140));

        Rectangle(90,600-(i+50),180,600-(i+80));

         Rectangle(90,600-(i+110),180,600-(i+140));

           Floodfill(30,600-(i+90),clblue);

         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,600-(i+190));

        Rectangle(220,600-(i+100),260,600-(i+130));

        Rectangle(220,600-(i+160),260,600-(i+190));

        Rectangle(290,600-(i+100),380,600-(i+130));

        Rectangle(290,600-(i+160),380,600-(i+190));

        Floodfill(225,600-(i+110),clblue);

        Floodfill(225,600-(i+150),clYellow);

        Floodfill(225,600-(i+180),clBlue);

        floodfill(350,600-(i+180),clblue);

        floodfill(350,600-(i+110),clblue);

 

           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-(i+90));

        line(470,600-i,470,600-(i+90));

        line(525,600-i,525,600-(i+90));

        FloodFill(430,600-(i+80),clBlue);

        FloodFill(480,600-(i+80),clWhite);

        FloodFill(550,600-(i+80),clRed);

        TextOut(470,600-i,'Колумбия');

        sleep(70);

end;

 

var i,j,r,n: integer;

begin

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

    SetWindowSize(600,610);

    CenterWindow;

    SetWindowCaption(' Победитель - Гвинея');

 

{Подключение звукового  файла}

    n:=LoadSound('e:\семестр4\вычислительная практика\лешкевич\результат задания №7\Zd_7\Guinea.wav');

    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);         //[-3pi /2; 2 pi].

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,j,b:integer;

    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;

     {}

                {вычисление коэффициента масштабирования  по оси OY}

Информация о работе Вычислительная практика