Постановка задачи и ее математическая модель
Содержание. 1. Задание на курсовую работу……………………………………………… 3 2. Постановка задачи и ее математическая модель……………….…...4 - 5 3. Блок-схема алгоритма…………………………………………………6 - 17 4. Тестирование алгоритма сортировки………………..………………….18 5. Текст программы……………………………………………………...19 - 25 6. Используемые переменные……………………………………………….26 7. Результаты работы программы……………………………………..27 - 28 8. Пример работы программы………………………………………….29 - 33 9. Выводы…………………………………………………………………..…..34 Задание на курсовую работу. Вариант № 5 Разработать программу на языке Си, выполняющую следующие действия: - формирование массива данных; - расчет расстояний между прямой и заданными точками; - расчет периметра и площади фигуры, координаты вершин которой определяются координатами четырех произвольных точек; - расчет координат точки пересечения заданной прямой и произвольной прямой, описываемой уравнением ax+by+c=0. - сортировку и отображение результатов. Исходными данными являются:
В ходе выполнения работы необходимо составить алгоритм и написать программу ,позволяющую: 1. Выбрать из массива точек D все точки, лежащие вне многоугольника В, выше прямой А и поместить полученную информацию (номер точки в массиве D, и ее координаты x,y) в новый массив D1. 2. Вычислить расстояние r от каждой точки, входящей в сформированный массив D1, до прямой А. Информацию обо всех точках, для которых выполняется соотношение r>R (R=2), поместить в новый массив D2, включающий в себя следующие поля: номер точки в исходном массиве D; номер точки в массиве D1; координаты x и y; расстояние от точки до прямой r. 3. Упорядочить полученный массив D2 в порядке убывания r. 4. Вывести результаты расчетов (пп. 1-3) в виде таблиц на экран и в файл с заданным при вводе исходных данных именем. 5. Написать функцию, вычисляющую периметр и площадь фигуры, координаты вершин которой определяются координатами четырех точек вводимых с клавиатуры. 6. Написать функцию, определяющую координаты точки пересечения прямой А и произвольной прямой, описываемой уравнением ax+by+c=0. Коэффициенты прямой a,b,c должны вводиться пользователем с клавиатуры. Разрабатываемая программа должна удовлетворять следующим требованием: 1) ввод исходных данных (массив координат точек) должен осуществляться как из файла с заданным именем, так и с клавиатуры (по выбору пользователя); 2) результаты расчета должны выводиться как в виде таблиц на экран, так и в файл с заданным именем; 3) процедуры расчета расстояний r , выбора точек из массивов, сортировки массива D2 и вывода результатов следует оформить в программе в форме функций пользователя. Постановка задачи и ее математическая модель.
3. Блок – схема алгоритма
#include<stdio.h> #include<stdio.h> #include<conio.h> #include<math.h>
float D[16][2],D1[15][3],D2[15][5]; int num1=0,num2=0;
void vvod() { int flag,i; float x,y; FILE *in; printf("1 - Vvod massiva c klaviatury, 2 - schityvanie massiva iz faila\n"); flag=getch(); if(flag=='1') { for(i=0;i<15;i++) { printf("x%d= ",i+1); scanf("%f",&D[i][0]); printf("y%d= ",i+1); scanf("%f",&D[i][1]); printf("\n");
} printf("Massiv vveden! Dlya prodolzeniya nazat' lubuyu klavishu...");
} else if(flag=='2') { fflush(stdin); if((in=fopen("ishodni.txt","r"))!=NULL); i=0; { while(fscanf(in,"%f %f",&x,&y)!=EOF) { D[i][0]=x; D[i][1]=y; i++; } } printf("\nMassiv vveden! Dlya prodolzeniya nazat' lubuju klavishu..."); fclose(in); }
}
void preobrD() { int i; int temp[4],flag; float r; for(i=0;i<15;i++) { if(((D[i][1]-3.33*D[i][0]-3<=0)&&(D[i][1]+0.2*D[i][0]-13.6<=0)&&(D[i][1]-4*D[i][0]+41>=0)&&(D[i][1]-3>=0))) { D1[num1][0]=D[i][0]; D1[num1][1]=D[i][1]; D1[num1][2]=i+1; num1++; } } for(i=0;i<num1;i++) {
r=fabs(0.65*D[i][0]+D[i][1]-14)/sqrt(1.4225); if(r<=3.8) { D2[num2][0]=i+1; D2[num2][1]=D1[i][0]; D2[num2][2]=D1[i][1]; D2[num2][3]=D1[i][2]; D2[num2][4]=r; num2++; } } do { flag=0; for(i=0;i<num2;i++) { if(D2[i][4]>D2[i-1][4]) { temp[0]=D2[i][0]; temp[1]=D2[i][1]; temp[2]=D2[i][2]; temp[3]=D2[i][3]; temp[4]=D2[i][4]; D2[i][0]=D2[i-1][0]; D2[i][1]=D2[i-1][1]; D2[i][2]=D2[i-1][2]; D2[i][3]=D2[i-1][3]; D2[i][4]=D2[i-1][4]; D2[i-1][0]=temp[0]; D2[i-1][1]=temp[1]; D2[i-1][2]=temp[2]; D2[i-1][3]=temp[3]; D2[i-1][4]=temp[4]; flag=1; } } }while(flag==1); printf("Preobrazovanie massiva zakoncheno uspeshno!\n\n"); printf("Dlya prodolzeniya nazat' lubuyu klavishu..."); }
void SandP() { float S[4][2]; float rst1,rst2,rst3,rst4; float pP=0,pS=0,p1,p2,pt1,pt2,diag; int i,j; char q; do { clrscr(); printf("Ploshad' i perimetr chetyrehugol'nika.\n\n"); printf("Vnimanie! Tochki vvodit' po chasovoy!\n"); printf("Vvedite koordinaty 4 tochek.\n\n"); for(i=0;i<4;i++) { printf("x%d= ",i+1); scanf("%f",&S[i][0]); printf("y%d= ",i+1); scanf("%f",&S[i][1]); printf("\n"); } rst1=sqrt(pow(S[1][0]-S[0][0],2)+pow(S[1][1]-S[0][1],2)); rst2=sqrt(pow(S[2][0]-S[1][0],2)+pow(S[2][1]-S[1][1],2)); rst3=sqrt(pow(S[3][0]-S[2][0],2)+pow(S[3][1]-S[2][1],2)); rst4=sqrt(pow(S[0][0]-S[3][0],2)+pow(S[0][1]-S[3][1],2)); diag=sqrt(pow(S[2][0]-S[0][0],2)+pow(S[2][1]-S[0][1],2)); pP=rst1+rst2+rst3+rst4; p1=(rst1+rst2+diag)/2; p2=(rst3+rst4+diag)/2; pt1=sqrt(fabs(p1*(p1-rst1)*(p1-rst2)*(p1-diag))); pt2=sqrt(fabs(p2*(p2-rst3)*(p2-rst4)*(p2-diag))); pS=pt1+pt2; printf("Perimetr chetyrehugol'nika P= %.2f\n",pP); printf("Ploshad' chetyrehugol'nika S= %.2f\n",pS); printf("\nVyhod v glavnoe menu(Y/N)?\n"); fflush(stdin); q=getch(); }while(q!='y'&&q!='Y'); }
void peres() { float a,b,c,k,x,y; char q; do { clrscr(); printf("Opredelenie tochki perezecheniya pryamyh.\n\n"); printf("Vvedite koeffcienty:\n"); printf("\nKoefficient a= "); scanf("%f",&a); printf("\nKoefficient b= "); scanf("%f",&b); printf("\nKoefficient c= "); scanf("%f",&c); k=-a/b; if(k==-0.65) { printf("\nPryamye parallel'ny!\n"); } else { x=(c+14*b)/(0.65*b-a); y=-0.65*x+14; printf("\nTochka peresecheniya x= %.2f y= %.2f\n",x,y); } printf("\nVyhod v glavnoe menu(Y/N)?"); q=getch(); }while(q!='y'&&q!='Y'); }
void vyvod() { FILE *out; int i; printf("MASSIV D\n\n"); printf("#\tX\tY\n"); for (i=0;i<15;i++) { printf("%d\t%2.2f\t%2.2f\n",(i+1),D[i][0],D[i][1]); } printf("\nDlya prodolzeniya nazat' lubuju klavishu...\n"); getch(); clrscr(); printf("MASSIV D1\n\n"); printf("#\t#D\tX\tY\n"); for(i=0;i<num1;i++) { printf("%d\t%2.2f\t%2.2f\t%2.2f\n",(i+1),D1[i][2],D1[i][0],D1[i][1]); } printf("\nDlya prodolzeniya nazat' lubuju klavishu...\n"); getch(); clrscr(); printf("MASSIV D2\n\n"); printf("#\t#D\t#D1\tr\tX\tY\n"); for(i=0;i<num2;i++) { if(D2[i][4]!=0) { printf("%d\t%2.2f\t%2.2f\t%2.2f\t%2.2f\t%2.2f\n",(i+1),D2[i][3],D2[i][0],D2[i][4],D2[i][1],D2[i][2]); } } printf("\nDlya prodolzeniya nazat' lubuju klavishu...\n");
out=fopen("rezpoints.txt","w"); fprintf(out,"MASSIV D\n\n"); fprintf(out,"#\tX\tY\n"); for (i=0;i<15;i++) { fprintf(out,"%d\t%2.2f\t%2.2f\n",(i+1),D[i][0],D[i][1]); } fprintf(out,"\n\n"); fprintf(out,"MASSIV D1\n\n"); fprintf(out,"#\t#D\tX\tY\n"); for(i=0;i<num1;i++) { fprintf(out,"%d\t%2.2f\t%2.2f\t%2.2f\n",(i+1),D1[i][2],D1[i][0],D1[i][1]); } fprintf(out,"\n\n"); fprintf(out,"MASSIV D2\n\n"); fprintf(out,"#\t#D\t#D1\tr\tX\tY\n"); for(i=0;i<num2;i++) { fprintf(out,"%d\t%2.2f\t%2.2f\t%2.2f\t%2.2f\t%2.2f\n",(i+1),D2[i][3],D2[i][0],D2[i][4],D2[i][1],D2[i][2]); }
fclose(out); }
void massiv() { clrscr(); char key; char zn; do { clrscr(); printf("Rabota s massivami. Vyberete odin iz punktov menu:\n\n"); printf("1 Vvod massiva.\n"); printf("2 Preobrazovanie massiva.\n"); printf("3 Prosmotr rezul'tata.\n"); printf("4 Vozvrat v glavnoe menu.\n"); switch(key=getch()) { case '1': { clrscr(); vvod(); zn='*'; getch(); break; } case '2': { if(zn=='*') { clrscr(); preobrD(); zn='*'; } else { printf("\n\nSnachala vvedite massiv!\n"); } getch(); break; } case '3': { if(zn=='*') { clrscr(); vyvod(); } else { printf("\n\nSnachala vvedite massiv!\n"); } getch(); break; } case '4': { fflush(stdin); break; } default: { printf("\nPozaluysta, vvedite cifru ot 1 do 4\n"); printf("Dlya prodolzeniya nazat' lubuyu klavishu"); getch(); } } }while(key!='4'); }
void main() { clrscr(); char exit='n'; do { clrscr(); printf("Glavnoe menu. Vyberite zadanie: \n\n"); printf("1 Rabota s massivami.\n"); printf("2 Ploshad i perimetr.\n"); printf("3 Peresechenie pryamyh.\n"); printf("4 Vuhod.\n"); switch(getch()) { case '1': { clrscr(); massiv(); break; } case '2': { clrscr(); SandP(); break; } case '3': { clrscr(); peres(); break; } case '4': { printf("\nVyhod(Y/N)?\n"); fflush(stdin); exit=getch(); break; } default: { printf("\nPozaluysta, vvedite cifru ot 1 do 4\n"); printf("Dlya prodolzeniya nazat' lubuyu klavishu"); getch(); break; } } }while(exit!='y'&&exit!='Y'); }
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (464)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |