Определить результативного охотника — по количеству животных и по весу животных - C (СИ)

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

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

как определяющий результативного охотника - по количеству животных и по весу животных.
#include <stdio.h>
 
struct dannie {
   char familia[30];
   int kolizestvo;
   int ves;
};
 
void main() {
   int i, n;
   FILE *f;
   struct dannie mas[10];
   
   printf("kolihestvo ohotnikov");
   scanf("%d",&n);
   f=fopen("func.txt","w");
 
   for (i=0;i<n;i++){
      printf("vvedite familiy oxotnika ");
      scanf("%s", mas[i].familia);
      printf("vvedite kolizestvo zhuvotnux ");
      scanf("%d", &mas[i].kolizestvo);
      printf("vvedite  ves zhuvotnux ");
      scanf("%d", &mas[i].ves);
      fprintf(f, "%s %d %d\n", mas[i].familia, mas[i].kolizestvo, mas[i].ves); // <- запись в файл
   }
   fclose(f);
}
Создать файл содержащий сведения о результатах охоты. Данные должны быть представлены в виде следующей структуры: фамилия охотника; количество добытых животных; общий вес всех животных. Написать программу определяющий результативного охотника - по количеству животных и по весу животных. Каждую из функций разместить в отдельном заголовочном файле.

Решение задачи: «Определить результативного охотника — по количеству животных и по весу животных»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef struct 
{
    char familia[32];
    int  chislo;
    double  ves;
}ohotnik;
 
int InitStruct(ohotnik *pst)
{
    int ret = 0;
    printf("Vvedite familiu : ");
    ret = scanf("%s",pst->familia);
    if(ret)
    {
        printf("Vvedite chislo : ");
        ret = scanf("%d",&pst->chislo);
    }
    if(ret)
    {
        printf("Vvedite ves    : ");
        ret = scanf("%lf",&pst->ves);
    }
    return ret;
}
 
int ShowStruct(ohotnik pst)
{
    int ret = 0;
    if(ret = printf("Familia %s\n",pst.familia))
    if(ret = printf("chislo  %d\n",pst.chislo))
        ret = printf("ves     %.3f\n",pst.ves);
    return ret;
}
 
int main()
{
    int i, ichislo, ives, n = -1;
    while(n < 0)//так избегаем ввода отриц значения кол-ва оотников
    {
        printf("Vvedite chislo ohotnikov : ");
        scanf("%d",&n);
        getchar();
    }
    FILE * f       = NULL;
    ohotnik * list = NULL;
    if(!(f = fopen("results.txt","w")))
        printf("Oshibka otkritia faila\n");
    else
    if(!(list = (ohotnik *)malloc(n*sizeof(ohotnik))))
        printf("Oshibka vidilenia pamati\n");
    else
    {
        fprintf(f,"%s\t%s\t%s\n","familia","chislo","ves");
        for(i = 0; i < n; i++)
        {
            printf("Ohotnik #%d\n",i + 1);
            if(InitStruct(&list[i]))
                fprintf(f,"%s\t%d\t%.3f\n",list[i].familia,list[i].chislo,list[i].ves);
            else
                break;
        }
        fclose(f);
        if(i != n)
            printf("Oshibka vvoda\n");
        else
        {
            //Теперь ищем охотника с макс числом и охотника с макс весом добытых животных
            ichislo = 0;//Полагаем что макс число добычи у 1-го охотника
            ives    = 0;//Полагаем что макс вес добычи у 1-го охотника
            for(i = 1; i < n; i++)
            {
                //Будем искать используя индекс
                //Одновременно ищем лучшего охотника и по числу и по весу
                if(list[ichislo].chislo < list[i].chislo)
                    ichislo = i;
                if(list[ives].ves < list[i].chislo)
                    ives = i;
            }
        }
        printf("# Ohotnika s max chislom zhivotnih - %d\n",ichislo + 1);
        ShowStruct(list[ichislo]);
        printf("# Ohotnika s max vesom   zhivotnih - %d\n",ives + 1);
        ShowStruct(list[ives]);
        free((void *)list);//Чистим память
    }
    system("pause");//Стоп-точка в программе
    return 0;
}

Объяснение кода листинга программы

  1. Ввод данных о охотнике:
    • Переменная familia типа char, в которую считывается фамилия охотника.
    • Переменная chislo типа int, в которую считывается количество добытых животных.
    • Переменная ves типа double, в которую считывается суммарный вес добытых животных.
  2. Вывод данных о охотнике:
    • Переменная familia типа char, в которую считывается фамилия охотника.
    • Переменная chislo типа int, в которую считывается количество добытых животных.
    • Переменная ves типа double, в которую считывается суммарный вес добытых животных.
  3. Создание файла results.txt для записи данных охотников:
    • Если файл не может быть открыт, выводится сообщение об ошибке.
  4. Запись заголовков столбцов в файл results.txt:
    • Файл results.txt содержит столбцы familia, chislo и ves.
  5. Цикл для ввода данных охотников:
    • Переменная i итерируется от 0 до n-1, где n - количество охотников.
    • Для каждого охотника выполняется функция InitStruct, которая считывает данные охотника и записывает их в соответствующую структуру.
    • Если ввод данных охотника был успешным, его данные записываются в файл results.txt.
  6. Поиск охотника с максимальным количеством добычи и охотника с максимальным весом добытых животных:
    • Переменные ichislo и ives итерируются от 0 до n-1, где n - количество охотников.
    • Переменная ichislo ищет охотника с максимальным количеством добычи, а переменная ives ищет охотника с максимальным весом добытых животных.
    • Если у охотника с индексом i количество добычи больше, чем у охотника с индексом ichislo, то ichislo присваивается значение i.
    • Если у охотника с индексом i вес добычи больше, чем у охотника с индексом ives, то ives присваивается значение i.
  7. Вывод данных охотников с максимальным количеством добычи и максимальным весом добытых животных:
    • Выводится сообщение о том, что охотник с максимальным количеством добычи - это охотник с индексом ichislo.
    • Выводится сообщение о том, что охотник с максимальным весом добытых животных - это охотник с индексом ives.
    • Вызывается функция ShowStruct для вывода данных охотника с индексом ichislo.
    • Вызывается функция ShowStruct для вывода данных охотника с индексом ives.
  8. Освобождение памяти, выделенной под список охотников:
    • Выполняется функция free для освобождения памяти, выделенной под список охотников.

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

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