Работа в графическом режиме

Основы алгоритмизации и программирования

Вариант № 27

Студент группы 321 ____________ Р.С. Свириденко

(подпись)

Преподаватель _____________ Н.И. Гуртякова

(подпись)

Томск 2013

Тема:

1. Работа в графическом режиме.

Цель работы:

Освоение методики работы в графическом режиме с использованием библиотечных функций.

Содержание работы:

1. Разработать программу вычисления значения функции Y=f(x) в заданном интервале X с шагом h. Получение значения X и Y занести в таблицу.

2. Вывести таблицу на печать с использованием элементов псевдографики.

3. Построить график функции в двух режимах – текстовом и графическом. При построении графика вывести на экран оси координат с оцифровкой.

4. Оформить отчёт по проделанной работе, в том числе представить:

· Схему алгоритма, оформленную в соответствии с требованиями ГОСТа.

· Листинг программы на языке Си. Текст программы должен содержать комментарии (условие задачи, фамилию, номер группы и другую дополнительную информацию).

· Результаты счёта

Объем работы: 12 часа.

Задачи для программирования

Вариант №22

В рисованных мультфильмах иллюзия движения создается последовательной сменой кадров. Каждый, из которых фиксирует очередное положение движущегося объекта. Используя этот принцип получить мультфильм показывающий велосипед, который катится.


Программа:

#include <conio.h>

#include <graphics.h>

main ()

{

int gd, gm, i, x, y=155, x1=140, x2=140, y1=185;

gd=DETECT;

initgraph (&gd, &gm, " ");

for (x=1; x<400; x++)

{

cleardevice();

circle (x+80, 170, 30);

line (x+80, 200, x+80, 140);

line (x+102, 190, x+60, 150);

line (x+102, 150, x+60, 190);

line (x+110, 170, x+50, 170);

circle (x+200, 170, 30);

line (x+200, 200, x+200, 140);

line (x+222, 190, x+180, 150);

line (x+222, 150, x+180, 190);

line (x+230, 170, x+170, 170);

circle (x+80, 170, 5);

circle (x+140, 170, 10);

circle (x+200, 170, 3);

line (x+80, 165, x+140, 160);

line (x+80, 175, x+140, 180);

line (x+80, 170, x+140, 170);

line (x+110, 130, x+170, 130);

line (x+80, 170, x+110, 130);

line (x+110, 130, x+140, 170);

line (x+140, 170, x+170, 130);

line (x+170, 130, x+200, 170);

line (x+170, 130, x+170, 110);

line (x+170, 110, x+160, 100);

line (x+110, 130, x+110, 120);

line (x+105, 120, x+125, 120);

if (y>=185) y=155;

if (y<=155) y1=185;

line (x+x1-5, y, x+x1+5, y);

line (x+x2-5, y1, x+x2+5, y1);

line (x+x1, y, x+x2, y1);

if (y>=155 && y<=170) x1++;

if (y>170 && y<=185) x1--;

if (y1>=155 && y1<=170) x2++;

if (y1>170 && y1<=185) x2--;

y++;

y1--;

getch();

cleardevice ();

getch();

circle (x+80, 170, 30);

line (x+67, 197, x+93, 143);

line (x+91, 197, x+70, 143);

line (x+52, 182, x+109, 160);

line (x+106, 180, x+54, 157);

circle (x+200, 170, 30);

line (x+210, 142, x+192, 199);

line (x+228, 160, x+172, 178);

line (x+210, 198, x+190, 144);

line (x+228, 180, x+172, 160);

circle (x+80, 170, 5);

circle (x+140, 170, 10);

circle (x+200, 170, 3);

line (x+80, 165, x+140, 160);

line (x+80, 175, x+140, 180);

line (x+80, 170, x+140, 170);

line (x+110, 130, x+170, 130);

line (x+80, 170, x+110, 130);

line (x+110, 130, x+140, 170);

line (x+140, 170, x+170, 130);

line (x+170, 130, x+200, 170);

line (x+170, 130, x+170, 110);

line (x+170, 110, x+160, 100);

line (x+110, 130, x+110, 120);

line (x+105, 120, x+125, 120);

line (x+x1-5, y, x+x1+5, y);

line (x+x2-5, y1, x+x2+5, y1);

line (x+x1, y, x+x2, y1);

if (y>=155 && y<=170) x1++;

if (y>170 && y<=185) x1--;

if (y1>=155 && y1<=170) x2++;

if (y1>170 && y1<=185) x2--;

y++;

y1--;

getch();

}

return 0;

}
Результат работы программы:


Задачи для программирования

Вариант №22

Нарисовать график у=x*4+x*2-x*3 на интервале -1.0≤x≤5.4 с шагом 0.25


Программа:

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <string.h>

#include <stdlib.h>

#include <graphics.h>

void main()

{

char mm[10];

int gm, gd;

float oy;

float xn, xk, h, A, B, nt, maxy, miny, x, my, ox, mx, y, xg, xg1, yg, yg1, xi, i, yi, di, rx;

printf ("Vvedite diapazon a[xn, xk]:\n");

scanf ("%f%f", &xn, &xk);

printf ("Vvedite shag:\n");

scanf ("%f", &h);

printf ("Vvedite A i B:\n");

scanf ("%f%f", &A, &B);

printf ("Vvedite chislo graf v tablice (<=20):\n");

scanf ("%f", &nt);

/* Нахождение минимума и масксимума функции */

miny=999;

maxy=-999;

for(x=xn; x<=xk; x=x+h)

{

y=A+B/x-x/(A+B);

if(y>maxy) maxy=y;

if(y<miny) miny=y;

}

/* Определение маштаба по осм и определение осей */

if(maxy>0 && miny>0)

{

ox=350;

my=300/maxy;

}

else

if(maxy<0 && miny<0)

{

ox=50;

my=300/miny;

}

else

{

ox=50+300*maxy/(maxy-miny);

my=300/(maxy-miny);

}

if(xn<0 && xk<0)

{

oy=450;

mx=400/xn;

}

else

if(xn>0 && xk>0)

{

oy=50;

mx=400/xk;

}

else

{

oy=400*xn/(xk-xn);

if(oy<0)

oy=-oy;

oy=50+oy;

mx=400/(xk-xn);

}

gd=DETECT;

initgraph(&gd, &gm, "\\TC\\BGI\\");

setcolor(2);

settextstyle(1,0,2);

if(my<0) my=-my;

if(mx<0) mx=-mx;

oy+=40;

/*рисовка графика в текстовом режиме*/

outtextxy(400,20,"f(x)=x*4+x*2-x*3");

setcolor(7);

outtextxy(600,ox-14,">X");

line(40,ox,602,ox);

outtextxy(oy-6,4,"Y");

outtextxy(oy-5,25,"^");

line(oy,35,oy,370);

/*рисование графика*/

setcolor(2);

x=xn;

y=x*4+x*2-x*3;

xg1=oy+xn*mx;

yg1=ox-y*my;

for(x=xn+h; x<xk; x+=h)

{

y=x*4+x*2-x*3;

xg=oy+x*mx;

yg=ox-y*my;

circle(xg1,yg1,1);

line(xg1,yg1,xg,yg);

xg1=xg;

yg1=yg;

}

settextstyle(0,0,0);

/*оцифровка оси ОХ*/

setcolor(9);

for(xi=-5;xi<=11;xi++)

{

gcvt(xi,2,mm);

rx=oy+xi*mx;

line(rx,ox-4,rx,ox+4);

outtextxy(rx,ox+5,mm);

}

/*оцифровка оси ОY*/

for(yi=-5;yi<=11;yi++)

{

gcvt(yi,2,mm);

rx=(ox-yi*my);

line(oy-4,rx,oy+4,rx);

if(yi!=0)

outtextxy(oy+5,rx, mm);

}

/*рисовка рамки*/

setcolor(4);

line(2,2,630,2);

line(2,2,2,400);

line(630,2,630,400);

line(2,400,630,400);

/*рисовка верхней, средней, нижней сторон таблицы*/

setcolor(3);

di=550/(nt+1);

line(25,410,25+nt*di+5,410);

line(25,440,25+nt*di+5,440);

line(25,470,25+nt*di+5,470);

line(25,410,25,470);

/*заполнение таблицы*/

i=0;

setcolor(4);

outtextxy(33+i*di,420,"X");

outtextxy(33+i*di,445,"Y");

setcolor(14);

for(i=1,x=xn;i<nt;i++,x+=h)

{

gcvt(x,2,mm);

outtextxy(33+i*di,420, mm);

y=A+B/x-x/(A+B);

gcvt(y,2,mm);

outtextxy(33+i*di,445, mm);

}

setcolor(3);

for(i=0;i<nt;i++)

line(30+(i+1)*di,410,30+(i+1)*di,470);

getch();

closegraph();

}


Результат работы программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: