Обработка двумерных массивов (матриц). Построение графических фигур. Задачи с использованием Геометрических данных

Автор работы: Пользователь скрыл имя, 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

Прикрепленные файлы: 1 файл

курсовая работа.docx

— 274.44 Кб (Скачать документ)

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!=27);

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 Контрольный  запуск программы

 

Рис. 5.2.1 Контрольный запуск программы "обработка двумерных массивов". Результат

 

При контрольном запуске программы использовался способ задания массива при помощи генератора случайных чисел (rand).

 

 

 

 

 

 

 

 

 

 

 

6.1 Построение  графических фигур

Код программы

#include <conio.h>

#include <time.h>

#include "graphics.h"

 

int task2()

{

cleardevice();

int x,y,r,x1,y1,xc,yc,rc,rx,ry,k,c=1,cc=2;

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+x)-xc);

if(abs((y1+y)-yc)<k)k=abs((y1+y)-yc);

rc=rand()%k;

c=rand()%14+1;

while(cc==c)

cc=rand()%14+1;

i=0;

}

}

return 0;

}

 

 

 

6.2 Контрольный запуск программы

 

Рис 6.2.1 Начальные цвет, положение, размер фигур

Рис 6.2.3 Изменены цвета, размер, положение фигур

 

 

 

7.1 Задачи с использованием геометрических данных

Код программы

#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+sy)*m);

    itoa(n,text,10);

outtextxy((i+1+sx)*m,(sy+w/2+1)*m,text);

n++;

}

n=10;

for(int i=0;i<=w;i+=j)

{

line(sx*m,(i+sy)*m,(sx+w)*m,(sy+i)*m);

itoa(n,text,10);

outtextxy((sx+w/2+1)*m,(sy+i+1)*m,text);

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.x)-(c.x*d.y-d.x*c.y)*(b.x-a.x))/((a.y-b.y)*(d.x-c.x)-(c.y-d.y)*(b.x-a.x));

    T.y=((c.y-d.y)*(-T.x)-(c.x*d.y-d.x*c.y))/(d.x-c.x);

    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=4;

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,(400-a.y*step+sy)*m,5);

circle((b.x*step+sx+400)*m,(400-b.y*step+sy)*m,5);

circle((c.x*step+sx+400)*m,(400-c.y*step+sy)*m,5);

circle((d.x*step+sx+400)*m,(400-d.y*step+sy)*m,5);

 

line((a.x*step+sx+400)*m,(400-a.y*step+sy)*m,(b.x*step+sx+400)*m,(400-b.y*step+sy)*m);

line((c.x*step+sx+400)*m,(400-c.y*step+sy)*m,(d.x*step+sx+400)*m,(400-d.y*step+sy)*m);

circle((p.x*step+sx+400)*m,(400-p.y*step+sy)*m,5);

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;t=1;cc=4;break;

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,d.x,d.y);

draw(a,b,c,d);

return 0;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7.2 Контрольный  запуск программы

Рис 7.2.1 Контрольный запуск программы

 

Рис 7.2.2 Результат работы программы

 

 

 

 

 

 

 

8.1 Главное  меню

Код программы

#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,y[i]+50);

floodfill(x[i]+1,y[i]+1,15);

outtextxy(x[i]+130,y[i]+20,text[i]);

}

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,text[i]);

i--;

if(i==-1)i=4;

setfillstyle(1,6);

floodfill(x[i]+1,y[i]+1,15);

outtextxy(x[i]+130,y[i]+20,text[i]);

break;

case 235:

setfillstyle(1,5);

floodfill(x[i]+1,y[i]+1,15);

outtextxy(x[i]+130,y[i]+20,text[i]);

i++;

if(i==5)i=0;

setfillstyle(1,6);

floodfill(x[i]+1,y[i]+1,15);

outtextxy(x[i]+130,y[i]+20,text[i]);

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,y[j]+50);

floodfill(x[j]+1,y[j]+1,15);

outtextxy(x[j]+130,y[j]+20,text[j]);

}

break;

}

}

_getch();

closegraph();

}

 

 

 

 

 

 

 

 

 

 

 

 

8.2 Контрольный запуск программы

 

Рис. 8.2.1 Основное меню курсовой работы

 

 

 

 

 

 

 

 

 

 

 

 

 

Заключение

 В ходе данной курсовой  работы было выполнено три  задания:

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

Получены навыки работы с языком программирования СИ при выполнении поставленных задач.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Список используемой литературы:

  • Конспект лекций за первый курс
  • Методические указания к выполнению курсовой работы по курсу «Программирование»

 

 

 


Информация о работе Обработка двумерных массивов (матриц). Построение графических фигур. Задачи с использованием Геометрических данных