Кабинет Информатики - Создание графических изображений. Модуль Graph

Кабинет Информатики

Пятница, 19.04.2024, 23:22
Меню сайта
Наш опрос
Занимаетесь ли Вы репетиторством?
Всего ответов: 347
Новости...
Конкурсы
Позитивный контент-2017

Конкурсы для педагогов: Серая цапля
Победитель Общероссийского рейтинга школьных сайтов
Знак качества Просвещения

Фонд 21 века
Рейтинг образовательных сайтов mega-talant.com
Эволюция - бесплатные конкурсы для педагогов и школьников
Фонд 21 века
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Besucherzahler
счетчик посещений
доступность сайта Среднее и дошкольное образование

Проголосуй за наш сайт
Каталог webplus.info
Форма входа

Создание графических изображений

Модуль Graph

Задача 1. Построить различные геометрические фигуры.

Uses Graph, Crt;
VAR
  Gd,Gm : INTEGER;
  Radius, I, Width, K : INTEGER;
  Y0, Y1, Y2, X1, X2 : INTEGER;
  Pattern : FillPatternType;
  Points : ARRAY[1..6] OF PointType;
BEGIN   Gd:=vga; Gm:=1;
 { Инициализация графического режима }
  InitGraph(Gd,Gm,'C:\tp7\bgi');  IF GraphResult<>0 THEN HALT(1);   SetBkColor(0); SetColor(2);   {Цвет фона и изображения}   I:=0;   FOR Radius:=1 TO 5 DO  Begin {Построение окружностей }       SetColor(Radius+4);
      Circle(150,150,Radius*25);
      Inc(I);  IF I=4 THEN I:=0;
  End;
  ReadLn;
  ClearDevice; SetBkColor(1); SetColor(5);  SetLineStyle(0,0,3);
  Ellipse(130,130,0,360,30,50); {эллипс}
  ReadLn;
  ClearDevice; SetColor(4);  Ellipse(130,130,0,180,100,70); { эллиптическая дуга}
  ReadLn;
  ClearDevice;  K:=4;
  FOR Radius:=1 TO 5 DO Begin
     SetColor(K);
     Arc(300,100,0,90,Radius*20); {дуги}
     Inc(K);
  end;
  ReadLn;
  ClearDevice; Width:=20; SetColor(1); SetBkColor(11);
  FOR I:=1 TO 5 DO Begin
      SetFillStyle(7,I+4);                {определение стиля заполнения}
      Bar(I*Width,I*20,Succ(I)*Width,200); {построение прямоугольников}
  end;
  SetFillStyle(5,12);  Bar(150,150,250,250);
  ReadLn;
  {Построение параллелепипеда с верхней плоскостью}
  SetFillStyle(8,4);  ClearDevice;
  Y1:=100; Y2:=200; X1:=230; X2:=300;
   SetLineStyle(3,0,3);   {Определение стиля линии}
   Bar3d(x1,y1,x2,y2,10,topon);
   ReadLn;
   {Построение параллелепипеда без верхней плоскости}
   ClearDevice; 
   SetLineStyle(0,0,1); setfillstyle(11,1);   bar3d(x1,y1,x2,y2,10,topoff);
   ReadLn;
    {Пользовательский шаблон заполнения}
    CleardDevice; SetColor(6);  SetLineStyle(0,0,3); { Стиль линии}
    {заполнение массива}
    Pattern[1]:=31;   Pattern[2]:=62; Pattern[3]:=124; Pattern[4]:=248;
    Pattern[5]:=124; Pattern[6]:=62; Pattern[7]:=31;   Pattern[8]:=0;
    SetFillPattern(pattern,12);     {Задание шаблона пользователя}
    Bar(10,10,GetMaxX Div 2,GetMaxY Div 2);
    Rectangle(10,10,GetMaxX Div 2,GetMaxY Div 2);
    ReadLn;
    {Построение закрашенного сектора эллипса}
    ClearDevice; SetBkColor(3); SetColor(4); SetFillStyle(7,14);
    Sector(100,100,0,90,50,70);
    ReadLn;
    ClearDevice; SetFillStyle(1,14); {Построение закрашенного сектора круга}
    Pieslice(150,150,90,360,100);
    ReadLn;
    {Построение эллипса, заполненного текущим цветом}
    ClearDevice; SetFillStyle(6,13); SetLineStyle(3,0,1);
    FillEllipse(200,200,50,100);
    ReadLn;
    {Построение закрашенного многоугольника}
    ClearDevice;  Randomize; SetLineStyle(0,0,1); SetFillStyle(11,1);
    {Определение случайных координат вершин}
    FOR I:=1 TO 5 DO Begin
       Points[I].X:=Random(GetMaxX); Points[I].Y:=Random(GetMaxY);
    End;
    Points[6].X:=Points[1].Y; Points[6].Y:=Points[1].Y;
    Fillpoly(6,Points);
    ReadLn;
    CloseGraph;
 END.

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

USES Graph, Crt;
VAR
  Dr, Md, M, X, Y, I : INTEGER;  Ch:CHAR;
BEGIN
  Dr:=Detect;
  InitGraph(Dr,Md,'c:\tp7\bgi');  IF GraphResult<>0 then HALT(1);
  REPEAT
     SetBkColor(1); SetColor(6); SetTextStyle(0,0,2);
     ClearDevice;
    { Вывод меню }
    OutTextXY(50,140,'Пробел - Красим экран');
    OutTextXY(50,170,'Стрелка вверх - Столбик поднимается');
    OutTextXY(50,200,'Стрелка вниз - Столбик опускается');
    OutTextXY(50,230,'ESC - Выход');
    REPEAT
       Ch:=ReadKey; {разветвление программы по нажатию клавиши}
            CASE Ch OF
         #32:Begin { Красим экран }
                  ClearDevice;
                  SetBkColor(0); SetFillStyle(1,15);
                  Bar(0,0,GetMaxX div 2,GetMaxY);
                  SetFillStyle(1,0);
                  Bar(GetMaxX div 2,0,GetMaxX,GetMaxY);
                  OutTextXY(70,GetMaxY-25,'Нажмите DEL');
               End;
        #72:Begin { Ртутный столбик поднимается }
                 ClearDevice;  SetLineStyle(0,0,1); SetBkColor(1); SetColor(4);
                 X:=GetMaxX div 2; Y:=GetMaxY div 2;
                 Rectangle(X,Y,X+40,GetMaxY-20);
                 FOR I:=1 TO120 DO Begin
                    SetColor(4); SetLineStyle(0,0,3);
                    Line(X,GetMaxY-20-I,X+40,GetMaxY-20-i);
                    Delay(250);
                 End;
                 OutTextXY(70,GetMaxY-25,'Нажмите DEL');
              End;
       #80:Begin { Ртутный столбик опускается }
                ClearDevice; SetLineStyle(0,0,1); SetBkColor(1); SetColor(4);
                X:=GetMaxX div 2; Y:=GetMaxY div 2;
                Rectangle(x,y,x+40,GetMaxY-20);
                SetFillStyle(1,4);
                Bar(x,GetMaxY-140,x+40,GetMaxY-20);
                FOR I:=1 TO 117 DO Begin
                   SetColor(1);  SetLineStyle(0,0,3);
                   Line(x+1,GetMaxY-140+i,x+39,GetMaxY-140+i);
                   Delay(250);
                End;
                SetColor(4); OutTextXY(70,GetMaxY-25,'Нажмите DEL');
             End;
  End;
  UNTIL (Ch=#83) or (Ch=#27);
  UNTIL (Ch=#27);
  CloseGraph;
END.

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

USES Crt,Graph;
LABEL  Ex,New;
VAR  Gd,Gm : INTEGER;  Av: CHAR;
PROCEDURE DAY; {процедура-солнечное затмение}
VAR  X,Y,X1,Y1 : INTEGER;  U: REAL;
BEGIN
  ClearDevice;  SetFillStyle(1,14);  SetColor(14);
  X:=GetMaxX DIV 2;  Y:=GetMaxY DIV 2;
  FillEllipse(X,Y,50,50); {солнце}
  FOR Gm:=1 TO 150 DO Begin
     U:=Random(359);
     X1:=Trunc(Random (200)*COS(U))+X;   Y1:= Trunc (Random (200)*SIN(U))+Y;
     Line(X,Y,X1,Y1); {солнечные лучи}
  End;
  SetFillStyle(1,8);  SetColor(8);
  FillEllipse(X-15,Y,50,50); {тень луны}
  REPEAT
  UNTIL KeyPressed; {задержка до нажатия любой клавиши}
END;
PROCEDURE NOCH; {процедура - лунная ночь со звездами}
 VAR  R,X,Y,I:INTEGER;
BEGIN
  ClearDevice;  SetFillStyle (1,15); SetColor (15);
  FOR I:=1 TO 50 DO Begin
     R:= Random (2);
     PutPixel(Random (GetMaxX), Random (GetMaxY),15);
     PutPixel(Random (GetMaxX), Random (GetMaxY),15);
     FillEllipse(Random (GetMaxX), Random (GetMaxY),R,R);
  End;
  SetFillStyle (1,15); SetColor (15); FillEllipse (200,100,50,50);
  SetFillStyle (1,0);   SetColor (0);   FillEllipse (180,100,50,50); {луна}
  REPEAT
  UNTIL KeyPressed; {задержка до нажатия любой клавиши}
END;
BEGIN{основная программа}
  Gd:=Detect;  InitGraph(Gd,Gm,'C:\tp7\BGI');
  WHILE true DO Begin
      SetFillStyle (1,1);  FloodFill(10,10,1); SetFillStyle (1,0);
      Bar(215,115,415,365);
      SetColor (5); SetFillStyle (1,5);
      Bar(200,100,400,350);{меню}
      SetTextStyle(7,0,5); SetColor (0);
      OutTextXY(237,117,'MENU'); OutTextXY (237,287,'EXIT');
      SetColor (12); OutTextXY (235,115,'MENU');
      SetColor (4); OutTextXY (235,285,'EXIT');
      SetTextStyle (0,0,3); SetColor (0);
      OutTextXY (227,207,'D:ДЕНЬ'); OutTextXY (227,247,'N:НОЧЬ');
      SetColor (3); OutTextXY (225,205,'D:ДЕНЬ'); OutTextXY (225,245,'N:НОЧЬ');
      SetColor (15); SetTextStyle (0,0,2);
      OutTextXY (100,450,'использовать клавиши D,N,ESC'); 
      Av:=ReadKey;
      CASE Av OF {разветвление программы по нажатию клавиши}
         'D','d' :    DAY;
         'N','n' :    NOCH;
         CHR(27) : GOTO Ex;
      End;
  End;
  Ex: CloseGraph;
END.

Задача 4. Построить график функции.

USES Crt, Graph;
 VAR
  Gd, Gm : INTEGER;   X0, Y0 : INTEGER;   { Начало осей координат }
  X, Y : INTEGER;  Mx, My, I : INTEGER;
  A, B, H, F : REAL;
BEGIN
 WriteLn('Введите интервал и шаг изменения функции');  ReadLn(A,B,H);
 WriteLn('Введите масштаб по X и Y');  ReadLn(Mx,My);
 Gd:=Detect; Gm:=1;
 InitGraph(Gd,Gm,'c:\tp7\bgi');  IF GraphResult<>0 THEN HALT(1);
 { Построение осей координат }
 X0:=GetMaxX div 2; Y0:=GetMaxY div 2;
 Line(10,Y0,GetMaxX,Y0); Line(X0,10,X0,GetMaxY);
 { Построение стрелок }
 Line(X0,10,X0-10,20);  Line(X0,10,X0+10,20);
 Line(GetMaxX,Y0,GetMaxX-10,Y0-10);
 Line(GetMaxX,Y0,GetMaxX-10,Y0+10);
 OutTextXY(X0-25,10,'X');  OutTextXY(GetMaxX-20,Y0+20,'Y');
 { Разметка осей координат }
 I:=X0;
 REPEAT
    I:=I+Mx;
    PutPixel(I,Y0-1,15);   PutPixel(2*X0-I,Y0-1,15);
 UNTIL I>GetMaxX;
 I:=Y0;
 REPEAT
    I:=I+My;
    PutPixel(X0+1,I,15);   PutPixel(X0+1,2*Y0-I,15);
 UNTIL I>GetMaxY;
 { Построение графика функции }
 REPEAT
    F:=A*A; { функция }
    X:=Trunc(X0+A*Mx);    Y:=Trunc(Y0-F*My);
    PutPixel(X,Y,15);    A:=A+H;
 UNTIL A>B;
 ReadLn;
END.

Задача 5. Построить круговую диаграмму.

USES  Сrt,Graph;
VAR
  Gd, Gm : INTEGER;   I,N,S,C: INTEGER;    M : ARRAY[1..10] OF INTEGER;
   Nk, Kk : INTEGER;   P:REAL;
BEGIN
 WriteLn('Введите количество значений');  ReadLn(N);  S:=0;
 FOR I:=1 TO N DO Begin
    Writeln('Введите ',I,' значение');    ReadLn(M[I]);
    S:=S+M[I];
 end;
 P:=360/S; {приходится радиан на 1% }
 Gd:=Detect; Gm:=1;
 InitGraph(Gd,Gm,'c:\tp7\bgi');  IF GraphResult<>0 THEN HALT(1);
 S:=0; C:=1;
 FOR I:=1 TO N DO Begin
    Nk:=Trunc(P*S);   { Начальный угол }
    Kk:=Trunc(P*(S+M[I]));  { Конечный угол }
    SetFillStyle(1,C);     PieSlice(GetMaxX div 2,GetMaxY div 2,nk,kk,100);
    S:=S+m[i];
    C:=C+1;    IF C=14 THEN C:=1; { Изменение цвета } 
  End;
  ReadLn;
  CloseGraph;
END.

Задача 6. Построить  пятиконечную звезду.

USES Crt,Graph;
VAR
 Gd,Gm : INETEGER;  X,Y,Rb,Rm : INETEGER;  Points: ARRAY [1..11] OF PointType; {Массив вершин }
 I, A : REAL;
BEGIN
  Gd:=Detect; Gm:=1;
  InitGraph(Gd,Gm,'c:\tp7\bgi');  IF GraphResult<>0 THEN HALT(1);
  Rb:=150; Rm:=70;
  ClearDevice; SetBkColor(3);  SetColor(4); SetFillStyle(1,4);
  I:=1;  A:=0.94;  { Определение координат вершин звезды }
 WHILE (I<=10) DO Begin
    X:=Trunc(Rb*COS(A))+300;   Points[I].X:=X;
    Y:=Trunc(Rb*SIN(A))+200;    Points[I].Y:=Y;
    Inc(I);    A:=A+0.628;
    X:=Trunc(Rm*COS(A))+300;  Points[I].X:=X;
    Y:=Trunc(RM*SIN(A))+200;   Points[I].Y:=Y;
    Inc(I);    A:=A+0.628;
  End;
  { Связь координат первой и последней вершин }
  Points[11].X:=Points[1].X; Points[11].Y:=Points[1].Y;
  FillPoly(11,Points); { Построение звезды }
  ReadLn;
  CloseGraph; END.

Задача 7. Построить объект, который передвигается с помощью навигационных клавиш.

USES Crt,Graph; VAR   Gd,Gm : INTEGER;  Av : CHAR;   X,Y,I,T,Z,K : INTEGER;  St : STRING[225];
BEGIN
  Gd:=Detect;  InitGraph(Gd,Gm,'C:\tp7\BGI');
  ClearDevice;
  X:=GetMaxX DIV 2;  Y:=GetMaxY DIV 2;
  T:=0;  I:=0;  K:=500;
  REPEAT
    SetColor(15);
    { Построение объекта }
    Line(X,Y-10,X,Y-3); Line (X,Y+10,X,Y+3);     Line (X-10,Y,X-3,Y); Line (X+10,Y,X+3,Y);
    Circle(X,Y,7);
    Av:=ReadDKey;
    { Изменение координат при нажатии клавиши }
    IF CHR(75)=Av THEN T:=-10;   IF CHR(77)=Av THEN T:=10;
    IF CHR(72)=Av THEN I:=-10;    IF CHR(80)=Av THEN I:=10;
    SetColor (0);     Line (X,Y-10,X,Y-3); Line (X,Y+10,X,Y+3);
    Line (X-10,Y,X-3,Y); Line (X+10,Y,X+3,Y);
    Circle(X,Y,7);
    X:=X+T;    Y:=Y+I;    I:=0;    T:=0;
    IF X>(GetMaxX-2) THEN X:=GetMaxX-2;    IF X<2 THEN X:=2;
    IF Y>(GetMaxY-2) THEN Y:=GetMaxY-2;    IF Y<2 THEN Y:=2;
  UNTIL ORD(Av)=27; { Пока не нажата клавиша Esc }
END.
Задача 8. Построить орнамент.
USES Crt, Graph;
VAR
  Gd,Gm : INTEGER;  Av : CHAR;   X1, Y1, X, Y : INTEGER;  U, H : REAL;
BEGIN
  Gd:=Detect;  InitGraph(Gd,Gm,'C:\tp7\BGI');
  SetFillStyle(1,14);  SetBkColor(5);  SetColor(14);   X:=GetMaxX DIV 2;  Y:=GetMaxY DIV 2;
  U:=2*Pi;
  While U>=0 DO Begin
      X1:=Trunc(100*COS(U))+X;   Y1:=Tunc(100*SIN(U))+Y;
      Circle(X1,Y1,3);       Delay(1000);    U:=U-0.1;
  End;
  H:=-5;
  While H<=45 DO Begin
      X:=Trunc(100+H*10);    Y:=Trunc(100-SIN(H)*10);
      Circle(X,Y,2);
      Delay(500);     H:=H+0.5;
  End;
  H:=-5;
  While H<=45 DO Begin
      X:=Trunc(100+H*10);     Y:=Trunc(380-SIN(H)*10);
      Circle(X,Y,2);
      Delay(500);     H:=H+0.5;
  End;
  ReadLn;
END.
.....................................................................................................................................
Практические задания
.....................................................................................................................................

  1. Построить семейство одинаковых окружностей, центры которых лежат на окружности большего диаметра.
  2. По периметру экрана построить семейство разноцветных квадратов, а в середине – множество разноцветных точек.
  3. Построить движущиеся изображения двух прямоугольников и круга, на которых помещены слова из фразы “ КТО СКАЗАЛ МЯУ?”.
  4. Построить движущиеся НЛО на фоне звездного неба.
  5. Написать систему ниспадающего меню, которая в зависимости от выбора пользователя выводит на экран круг, квадрат или треугольник.

uses crt;
var
 i:byte;
 CH:CHAR;
begin
clrscr;
for i:=0 to 255 do write (chr(i):2);
REPEAT
CH:=READKEY;
WRITE(ORD(CH):4);
UNTIL CH='D';
end.

Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930


Социальные сети
Официальная группа в ВК Официальная группа в ОК Официальная группа в Телеграм
Портфолио


Год семьи
Год культурного наследия народов России
Перепись населения-2021
Школьник помнит
Полезные ссылки
  • Учительский портал
  • Педсовет.ORG
  • Дневник.ру
  • ProШколу.ru
  • Pedsovet.su
  • Завуч.инфо
  • Методисты.ру
  • Методсовет
  • УчМет
  • ИнформатикУрок
  • Менеджер образования
  • Сеть творческих учителей
  • Сообщество учителей ИКТ


  • Узнай свой IP адрес
    Перечень олимпиад на 2022-2023 учебный год







    Портал о суевериях, поверьях и приметах народов России