Автор работы: Пользователь скрыл имя, 10 Июня 2014 в 15:34, курсовая работа
Язык Си - это универсальный язык программирования, для
которого характерны экономичность выражения, современный
набор операторов и типов данных. Язык Си не является ни
языком "очень высокого уровня", ни "большим" языком, и не
предназначается для некоторой специальной области примене-
ния, но отсутствие ограничений и общность языка делают его
для многих задач более удобным и эффективным, чем языки,
предположительно более мощные. Операционная система, компи-
лятор с языка Си и по существу все прикладные программы сис-
темы "ДЕМОС" написаны на Си. Язык Си не связан с какими-
либо определенными аппаратными средствами или системами, и
на нем легко писать программы, которые можно пропускать без
изменений на любой ЭВМ, имеющей Си-компилятор.
ВВЕДЕНИЕ 3
Лист задания 5
1.Обработка двумерных массивов 6
1.1Алгоритм решения задачи 7
1.2 Описание программы 8
2. Построение графических фигур 9
2.1 Алгоритм решения задачи 10
2.2 Описание программы 11
3. Задачи с использованием геометрических данных 12
3.1 Алгоритм решения задачи 13
3.2 Описание программы 14
4. Главное меню курсовой работы 15
5.1 Обработка двумерных массивов 16
5.2 Контрольный запуск программы 19
6.1 Построение графических фигур 20
6.2 Контрольный запуск программы 21
7.1 Задачи с использованием геометрических данных 22
7.2 Контрольный запуск программы 25
8.1 Главное меню 26
8.2 Контрольный запуск программы 28
Заключение 29
Список используемой литературы: 30
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j]=(rand()-16000)%100;
}
void fromfile(int **a , int n , int m)
{
FILE *file;
file = fopen ( "d:\\file.txt", "r" );
for (int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if (feof(file)) a[i][j]=0;
else fscanf(file,"%d",&a[i][j]);
}
fclose(file);
}
void get(int **a , int n , int m)
{
printf("\n\n");
for(int i=0;i<n;i++)
{
printf("\n");
for(int j=0;j<m;j++)
{
printf("%5d",a[i][j]);
}
}
}
float sr_max(int **a , int n , int m , int d)
{
int i,j,max;
float sr=0;
for(i=0;i<n;i++)
{
if(i!=d)
{
max=a[i][0];
for(j=1;j<m;j++)
if(a[i][j]>max)max=a[i][j];
sr+=max;
}
}
return sr/(n-1);
}
int num_min(int **a , int m , int d)
{
int min=a[d][0],del=0;
for(int j=1;j<m;j++)
{
if(a[d][j]<min)
{
min=a[d][j];
del=j;
}
}
return del;
}
void func(int **a , int n , int m)
{
int i,j;
int *b=new int [n];
for(i=0;i<n;i++)
b[i]=sr_max(a,n,m,i);
for(i=0;i<n;i++)
a[i][num_min(a,m,i)]=b[i];
delete []b;
}
void get_file(int **a,int n, int m)
{
FILE *file;
file = fopen ( "d:\\file!.txt", "w" );
for (int i=0;i<n;i++)
{
if(i!=0)fprintf(file,"\n");
for(int j=0;j<m;j++)
{
fprintf(file,"%4d",a[i][j]);
}
}
fclose(file);
}
int task1()
{
setlocale(0,"");
srand(time(0));
int **a,n,m,k;
printf("Введите размеры матрицы :");
scanf("%d %d",&n,&m);
a=new int* [n];
for (int i=0;i<n;i++)
a[i]=new int[m];
printf("\n\nВыберите способ заполнения элементов матрицы :\n1 - c клавиатуры\n2 - рандомно\n3 - из файла");
do{
k=_getch();
}while(k!=49&&k!=50&&k!=51&&k!
switch(k)
{
case 49:key(a,n,m);break;
case 50:random(a,n,m);break;
case 51:fromfile(a,n,m);break;
case 27:return 0;
}
printf("\nМатрица :");
get(a,n,m);
func(a,n,m);
printf("\nОбработанная матрица :");
get(a,n,m);
printf("\n\nМатрица записана в файл (D:\\file!.txt):");
get_file(a,n,m);
_getch();
delete []a;
system("cls");
}
Рис. 5.2.1 Контрольный запуск программы "обработка двумерных массивов". Результат
При контрольном запуске программы использовался способ задания массива при помощи генератора случайных чисел (rand).
Код программы
#include <conio.h>
#include <time.h>
#include "graphics.h"
int task2()
{
cleardevice();
int x,y,r,x1,y1,xc,yc,rc,rx,ry,k,
float i=0;
x1=300;y1=200;
r=200;
rx=20;
ry=20;
rc=20;
while(!kbhit())
{
x=r*cos(i)+400;
y=r*sin(i)+350;
x-=x1/2;
y-=y1/2;
xc=x+40+rx;
yc=y+40+ry;
i+=0.05;
setfillstyle(1,c);
setcolor(cc);
bar(x,y,x+x1,y+y1);
circle(xc,yc,rc);
setfillstyle(1,0);
floodfill(xc,yc,cc);
delay(50);
setcolor(0);
bar(x,y,x+x1,y+y1);
circle(xc,yc,rc);
if(abs(i-6.28)<0.1)
{
x1=rand()%250+100;
y1=rand()%200+100;
rx=rand()%(x1-80);
ry=rand()%(y1-80);
k=abs(xc-x);
if(abs(yc-y)<k)k=abs(yc-y);
if(abs((x1+x)-xc)<k)k=abs((x1+
if(abs((y1+y)-yc)<k)k=abs((y1+
rc=rand()%k;
c=rand()%14+1;
while(cc==c)
cc=rand()%14+1;
i=0;
}
}
return 0;
}
Рис 6.2.1 Начальные цвет, положение, размер фигур
Рис 6.2.3 Изменены цвета, размер, положение фигур
Код программы
#include <stdio.h>
#include <stdlib.h>
#include <locale>
#include <conio.h>
#include <time.h>
#include "graphics.h"
typedef struct
{
float x; float y;
}TPoint;
void set(TPoint &a,TPoint &b,TPoint &c,TPoint &d)
{
printf("\nВведите точки вручную :");
printf("\na(x,y) = ");
scanf("%f %f",&a.x,&a.y);
printf("\nb(x,y) = ");
scanf("%f %f",&b.x,&b.y);
printf("\nc(x,y) = ");
scanf("%f %f",&c.x,&c.y);
printf("\nd(x,y) = ");
scanf("%f %f",&d.x,&d.y);
}
void file(TPoint &a,TPoint &b,TPoint &c,TPoint &d)
{
FILE *file;
file = fopen ( "d:\\file1.txt", "r" );
fscanf(file,"%f %f",&a.x,&a.y);
fscanf(file,"%f %f",&b.x,&b.y);
fscanf(file,"%f %f",&c.x,&c.y);
fscanf(file,"%f %f",&d.x,&d.y);
fclose(file);
}
void rand(TPoint &a,TPoint &b,TPoint &c,TPoint &d)
{
a.x=(rand()-16000)%9;
a.y=(rand()-16000)%9;
b.x=(rand()-16000)%9;
b.y=(rand()-16000)%9;
c.x=(rand()-16000)%9;
c.y=(rand()-16000)%9;
d.x=(rand()-16000)%9;
d.y=(rand()-16000)%9;
}
void line(int j,int w,float m,int sx,int sy,int c,int s,int t)
{
setcolor(c);
setlinestyle(s,0,t);
setfillstyle(1,c);
char text[50];
int n=-10;
for(int i=0;i<=w;i+=j)
{
line((i+sx)*m,sy*m,(i+sx)*m,(w
itoa(n,text,10);
outtextxy((i+1+sx)*m,(sy+w/2+
n++;
}
n=10;
for(int i=0;i<=w;i+=j)
{
line(sx*m,(i+sy)*m,(sx+w)*m,(s
itoa(n,text,10);
outtextxy((sx+w/2+1)*m,(sy+i+
n--;
}
}
TPoint cross(TPoint a,TPoint b,TPoint c,TPoint d)
{
TPoint T;
T.x=-((a.x*b.y-b.x*a.y)*(d.x-c
T.y=((c.y-d.y)*(-T.x)-(c.x*d.
return T;
}
int draw(TPoint a,TPoint b,TPoint c,TPoint d)
{
float m=1;
TPoint p=cross(a,b,c,d);
printf( "\nTочка пересечения [%.3f;%.3f]\n",p.x,p.y);
int t=1,color=15,sy=0,sx=0,s=0,cc=
int i,j,w=800;
cleardevice();
int step=w/(20);
while(1)
{
line(step,w,m,sx,sy,color,s,t)
setlinestyle(0,0,3);
setcolor(cc);
circle((a.x*step+sx+400)*m,(
circle((b.x*step+sx+400)*m,(
circle((c.x*step+sx+400)*m,(
circle((d.x*step+sx+400)*m,(
line((a.x*step+sx+400)*m,(400-
line((c.x*step+sx+400)*m,(400-
circle((p.x*step+sx+400)*m,(
switch (_getch())
{
case 225:color=rand()%15+1;
cc=rand()%15+1;
break;
case 27:return 0;
case 61:m*=1.1;break;
case 45:m/=1.1;break;
case 230:sy+=5;break;
case 228:sx+=5;break;
case 235:sy-=5;break;
case 162:sx-=5;break;
case 13:m=1;sy=0;sx=0;color=15;s=0;
case 172:s++;if(s==4)s=0;break;
case 168:if(t==1)t=3;
else t=1;break;
}
cleardevice();
}
}
int task3()
{
srand(time(0));
setlocale(0,"");
int i;
TPoint a,b,c,d;
printf("\nВвести точки вручную - 1\nИз файла - 2\nрандомно - 3");
switch(_getch())
{
case 49:set(a,b,c,d);break;
case 50:file(a,b,c,d);break;
case 51:rand(a,b,c,d);break;
}
printf("\n%.3f %.3f\n%.3f %.3f\n%.3f
%.3f\n%.3f %.3f",a.x,a.y,b.x,b.y,c.x,c.y,
draw(a,b,c,d);
return 0;
}
Рис 7.2.1 Контрольный запуск программы
Рис 7.2.2 Результат работы программы
Код программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h>
#include <math.h>
#include "graphics.h"
#include "1.cpp"
#include "2.cpp"
#include "3.cpp"
void show()
{
setcolor(4);
setlinestyle(1,0,2);
rectangle(10,500,780,680);
setcolor(14);
rectangle(20,510,770,670);
setcolor(15);
outtextxy(200,530,"Курсовая работа студентки группы КИ-12д");
outtextxy(300,550,"по дисциплине <программирование>.");
_getch();
}
void main()
{
setlocale(0,"");
initwindow(800,800);
char text[5][50]={"Обработка матриц","Построение графических фигур","Геометрические данныe","информация об авторе","завершить работу"};
int x[5],y[5],i=0;
y[0]=50;
setfillstyle(1,6);
for(i;i<5;i++)
{
x[i]=200;
if(i!=0)
{
y[i]=y[i-1]+80;
setfillstyle(1,5);
}
rectangle(x[i],y[i],x[i]+400,
floodfill(x[i]+1,y[i]+1,15);
outtextxy(x[i]+130,y[i]+20,
}
i=0;
while(1)
{
switch(_getch())
{
case 27:exit(1);
case 230:
setfillstyle(1,5);
floodfill(x[i]+1,y[i]+1,15);
outtextxy(x[i]+130,y[i]+20,
i--;
if(i==-1)i=4;
setfillstyle(1,6);
floodfill(x[i]+1,y[i]+1,15);
outtextxy(x[i]+130,y[i]+20,
break;
case 235:
setfillstyle(1,5);
floodfill(x[i]+1,y[i]+1,15);
outtextxy(x[i]+130,y[i]+20,
i++;
if(i==5)i=0;
setfillstyle(1,6);
floodfill(x[i]+1,y[i]+1,15);
outtextxy(x[i]+130,y[i]+20,
break;
case 13:
switch(i)
{
case 0:task1();break;
case 1:task2();break;
case 2:task3();break;
case 3:show();break;
case 4:exit(1);
}
system("cls");
cleardevice();
setcolor(15);
setlinestyle(0,0,1);
setfillstyle(1,5);
for(int j=0;j<5;j++)
{
setfillstyle(1,5);
if(j==i)setfillstyle(1,6);
rectangle(x[j],y[j],x[j]+400,
floodfill(x[j]+1,y[j]+1,15);
outtextxy(x[j]+130,y[j]+20,
}
break;
}
}
_getch();
closegraph();
}
Рис. 8.2.1 Основное меню курсовой работы
В ходе данной курсовой работы было выполнено три задания:
Получены навыки работы с языком программирования СИ при выполнении поставленных задач.