Сортировка структуры - определить ракету с меньшим расстоянием полета - C (СИ)

Узнай цену своей работы

Формулировка задачи:

задача сама гласит: даны две структуры. структура ракет и структура целей. требуется чтобы я ввел номер цели и мне вывело ракету с наименьшим расстоянием. прошлые темы остались без ответа. . . код С
//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;
            }
Sort(s,GG,Sraketa,n,CG,c); на сортировку Sort(int s, t1*masr, Sort_c*mas, int Qt, t2*masc,int Qc) (31 строчка кода) при проверке у меня цели нормально складывает а ракеты в НОЛЬ. как это исправить?

Решение задачи: «Сортировка структуры - определить ракету с меньшим расстоянием полета»

textual
Листинг программы
        mas[i].rs = sqrt((atoi(masr[i].X))*(atoi(masr[i].X))+(atoi(masr[i].Y))*(atoi(masr[i].Y)));

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы