Основы алгоритмизации и программирования
Вариант № 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();
}
Результат работы программы: