Сортировка структуры - определить ракету с меньшим расстоянием полета - C (СИ)
Формулировка задачи:
задача сама гласит: даны две структуры. структура ракет и структура целей.
требуется чтобы я ввел номер цели и мне вывело ракету с наименьшим расстоянием.
прошлые темы остались без ответа. . . код С
осталось только сортировку. я остановился на том, что у меня ракеты на функцию не передаются или передаются не правельно
тоесть: Sort(s,GG,Sraketa,n,CG,c);
на сортировку
Sort(int s, t1*masr, Sort_c*mas, int Qt, t2*masc,int Qc) (31 строчка кода)
при проверке у меня цели нормально складывает
а ракеты в НОЛЬ. как это исправить?
//lab2.14 #include <stdio.h> #include <conio.h> #include <string.h> #include <windows.h> #include <dos.h> #include <math.h> typedef struct Raketa { int No[20]; char X[40]; char Y[40]; } t1; typedef struct Cel { int No[20]; char X[40]; char Y[40]; } t2; typedef struct sort_c { int cs; int rs; t1 R; t2 C; } Sort_c; Sort(int s, t1*masr, Sort_c*mas, int Qt, t2*masc,int Qc) ///(номер ракеты, структура ракета, структура координат, /// размер ракеты, структура целей, размер целей { int i; int temp; for(i=0;i<Qt;i++) { //mas[s-1].cs = sqrt((atoi(masc[s-1].X))*(atoi(masc[s-1].X))+(atoi(masc[s-1].Y))*(atoi(masc[s-1].Y))); mas[i].rs = sqrt((atoi(masr[i].X))*(atoi(masr[i].X))+(atoi(masr[i].Y))*(atoi(masr[i].Y))); //mas[i+1].rs = (atoi(masr[i+1].X))*(atoi(masr[i+1].X)); printf("%d^^%d\n",i,mas[i].rs); printf("%d^^%d\n",i,atoi(masr[1].X)); printf("%d\n",mas[s-1].cs); if(atoi(masr[i].X)+atoi(masr[i].Y) > atoi(masr[i].X)+atoi(masr[i].Y)) ///mas[c-1] = const { temp = mas[i].rs; mas[i].rs = mas[i+1].rs; mas[i+1].rs = temp; } } return mas; } void inputc(FILE*cf) { char ch; int i=1; cf=fopen("filec.dat","wb"); // открытие бинарного файла для записи t2 mas; printf("\n Ввод\n"); do { printf("Номер цели %d:\n",i); //gets(mas.No); printf("координата по Х:"); gets(mas.X); printf("координата по У"); gets(mas.Y); fwrite(&mas,sizeof(mas),1,cf); //функция для записи в файл printf("\n Закончить? y/n\n"); ch=getch(); i++; } while (ch != 'y'); fclose(cf); } void inputr(FILE*rf) //новый файл dat ракеты { char ch; int i=1; rf=fopen("filer.dat","wb"); // открытие бинарного файла для записи t1 mas; printf("\n Ввод\n"); do { printf("ракета под номером %d\n:",i); //gets(mas.No); printf("координата по Х: "); gets(mas.X); printf("коорлината по У: "); gets(mas.Y); fwrite(&mas,sizeof(mas),1,rf); //функция для записи в файл printf("\n Закончить? y/n\n"); ch=getch(); i++; } while (ch != 'y'); fclose(rf); } void appr(FILE *rf) //добавление в файл { t1 mas; char ch; int i; rf=fopen("filer.dat","ab"); // открытие бинарного файла для добавления fseek(rf,0,SEEK_END); i=ftell(rf)/sizeof(t1); fseek(rf,0,SEEK_SET); i=i+1; printf("\n Ввод\n"); do { printf("номер ракеты %d\n:",i); //gets(mas.No); printf("координата по У:"); gets(mas.X); printf("координата по Х:"); gets(mas.Y); fwrite(&mas,sizeof(mas),1,rf); printf(" Закончить? y\n\n "); ch=getch(); i++; } while (ch != 'y'); printf("\n"); fclose(rf); } void appc(FILE *cf) //добавление в файл { t2 mas; char ch; int i; cf=fopen("filec.dat","ab");// открытие бинарного файла для добавления fseek(cf,0,SEEK_END); i=ftell(cf)/sizeof(t2); fseek(cf,0,SEEK_SET); i=i+1; printf("\n Ввод\n"); do { printf("номер цели %d:\n",i); //gets(mas.No); printf("координата по У:"); gets(mas.X); printf("координата по Х:"); gets(mas.Y); fwrite(&mas,sizeof(mas),1,cf); printf(" Закончить? y\n\n "); ch=getch(); i++; } while (ch != 'y'); printf("\n"); fclose(cf); } void printc(FILE *cf, FILE *f1, int*Qtc) //чтение из бин.файла, вывод на экран и запись в текст.файл { int i; t2 m; (*Qtc)=0; cf=fopen("filec.dat","rb"); // открытие бинарного файла для чтения f1=fopen("file4.txt","w"); fread(&m,sizeof(m),1,cf); // чтение из файла одной структуры t1 for (i=0;!feof(cf);i++) { (*Qtc)++; printf("\nЦель под № %d [%s:%s]",i+1, m.X, m.Y); fprintf(f1,"Цель под № %d [%s:%s]",i+1, m.X, m.Y); fread(&m,sizeof(m),1,cf); } printf("\n"); fclose(cf); fclose(f1); } void printr(FILE *rf, FILE *f, int*Qtr) //только для ракет { int i; t1 m; (*Qtr)=0; rf=fopen("filer.dat","rb"); // открытие бинарного файла для чтения f=fopen("file3.txt","w"); fread(&m,sizeof(m),1,rf); // чтение из файла одной структуры t1 for (i=0;!feof(rf);i++) { (*Qtr)++; printf("\nПусковая установка № %d [%s:%s]", i+1, m.X, m.Y); fprintf(f,"Пусковая установка № %d [%s:%s]", i+1, m.X, m.Y); fread(&m,sizeof(m),1,rf); } printf("\n"); fclose(rf); fclose(f); } void outstud(t1* GG, int Qts) //вывод на экран { int i; for (i=0;i<Qts;i++) //цикл вывода на экрана { printf("\nномер:%d\n",i); printf("икс:%s\n",GG[i].X); printf("игрик:%s\n",GG[i].Y); } } void main() { SetConsoleCP(1251); SetConsoleOutputCP(1251); char c,t; int s; char n; int Qts,Qtc,i; FILE *rf; FILE *cf; FILE *f; FILE *f1; while (1) { puts(" 1 – новый бин.файл"); puts(" 2 – просмотр бин.файла и запись в текст файл"); puts(" 3 – добавление в бин.файл"); puts(" 4 – поиск ближайшей ракеты"); puts(" 5 – !@#$%"); puts(" 8 - выход"); printf("\n"); c=getch(); switch(c) { case '1': /// новый файл { do { // system ("CLS"); puts("1 - ядерная боеголовка"); Sleep(300); puts("2 - ЦЕЛЬ"); Sleep(300); puts("9 - в предыдущее меню"); t=getch(); switch(t) { case '1': inputr(rf);break; case '2': inputc(cf);break; } } while (t!='9'); break; } case '2': /// просмотр { puts("-----ракеты-----"); printr(rf,f,&Qts); //вывод puts("-----цели-----"); printc(cf,f1,&Qtc); printf(" Итого: %d\n\n",Qts); break; } case '3': /// добавление { do { // system ("CLS"); puts("1 - ядерная боеголовка"); Sleep(300); puts("2 - ЦЕЛЬ"); Sleep(300); puts("9 - в предыдущее меню"); t=getch(); switch(t) { case '1': appr(rf);break; case '2': appc(cf);break; } } while (t!='9'); break; } case '4': /// сама лаба { FILE*f=fopen("filer.dat","rb"); FILE*f1=fopen("filec.dat","rb"); //FILE*f2=fopen("filerc.dat","ab"); fseek(f,0,SEEK_END); n=ftell(f)/sizeof(t1); fseek(f,0,SEEK_SET); t1*GG=(t1*)malloc(sizeof(GG)*Qts); fseek(f1,0,SEEK_END); c=ftell(f1)/sizeof(t2); fseek(f1,0,SEEK_SET); t2*CG=(t2*)malloc(sizeof(CG)*Qtc); Sort_c* Sraketa = (Sort_c*)malloc(sizeof(Sort_c)*Qts); fread(Sraketa,sizeof(t1),n,f); fread(GG,sizeof(t1),n,f); fread(CG,sizeof(t2),c,f1); puts("нажмите любую клавишу . . ."); puts("номер цели:"); scanf("%d",&s); Sort(s,GG,Sraketa,n,CG,c); ///(номер ракеты(), структура ракета, структура координат, /// размер ракеты, структура целей, размер целей printf("Для выхода нажмите любую клавишу.....\n"); getch(); break; } case '8':return 0; default : puts(" неверный режим"); } } }
{ FILE*f=fopen("filer.dat","rb"); FILE*f1=fopen("filec.dat","rb"); //FILE*f2=fopen("filerc.dat","ab"); fseek(f,0,SEEK_END); n=ftell(f)/sizeof(t1); fseek(f,0,SEEK_SET); t1*GG=(t1*)malloc(sizeof(GG)*Qts); fseek(f1,0,SEEK_END); c=ftell(f1)/sizeof(t2); fseek(f1,0,SEEK_SET); t2*CG=(t2*)malloc(sizeof(CG)*Qtc); Sort_c* Sraketa = (Sort_c*)malloc(sizeof(Sort_c)*Qts); fread(Sraketa,sizeof(t1),n,f); fread(GG,sizeof(t1),n,f); fread(CG,sizeof(t2),c,f1); puts("нажмите любую клавишу . . ."); puts("номер цели:"); scanf("%d",&s); Sort(s,GG,Sraketa,n,CG,c); ///(номер ракеты(), структура ракета, структура координат, /// размер ракеты, структура целей, размер целей printf("Для выхода нажмите любую клавишу.....\n"); getch(); break; }
Решение задачи: «Сортировка структуры - определить ракету с меньшим расстоянием полета»
textual
Листинг программы
mas[i].rs = sqrt((atoi(masr[i].X))*(atoi(masr[i].X))+(atoi(masr[i].Y))*(atoi(masr[i].Y)));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д