Определить результативного охотника — по количеству животных и по весу животных - 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; }
Объяснение кода листинга программы
- Ввод данных о охотнике:
- Переменная
familia
типа char, в которую считывается фамилия охотника. - Переменная
chislo
типа int, в которую считывается количество добытых животных. - Переменная
ves
типа double, в которую считывается суммарный вес добытых животных.
- Переменная
- Вывод данных о охотнике:
- Переменная
familia
типа char, в которую считывается фамилия охотника. - Переменная
chislo
типа int, в которую считывается количество добытых животных. - Переменная
ves
типа double, в которую считывается суммарный вес добытых животных.
- Переменная
- Создание файла
results.txt
для записи данных охотников:- Если файл не может быть открыт, выводится сообщение об ошибке.
- Запись заголовков столбцов в файл
results.txt
:- Файл
results.txt
содержит столбцыfamilia
,chislo
иves
.
- Файл
- Цикл для ввода данных охотников:
- Переменная
i
итерируется от 0 до n-1, где n - количество охотников. - Для каждого охотника выполняется функция InitStruct, которая считывает данные охотника и записывает их в соответствующую структуру.
- Если ввод данных охотника был успешным, его данные записываются в файл
results.txt
.
- Переменная
- Поиск охотника с максимальным количеством добычи и охотника с максимальным весом добытых животных:
- Переменные
ichislo
иives
итерируются от 0 до n-1, где n - количество охотников. - Переменная
ichislo
ищет охотника с максимальным количеством добычи, а переменнаяives
ищет охотника с максимальным весом добытых животных. - Если у охотника с индексом i количество добычи больше, чем у охотника с индексом
ichislo
, тоichislo
присваивается значение i. - Если у охотника с индексом i вес добычи больше, чем у охотника с индексом
ives
, тоives
присваивается значение i.
- Переменные
- Вывод данных охотников с максимальным количеством добычи и максимальным весом добытых животных:
- Выводится сообщение о том, что охотник с максимальным количеством добычи - это охотник с индексом
ichislo
. - Выводится сообщение о том, что охотник с максимальным весом добытых животных - это охотник с индексом
ives
. - Вызывается функция ShowStruct для вывода данных охотника с индексом
ichislo
. - Вызывается функция ShowStruct для вывода данных охотника с индексом
ives
.
- Выводится сообщение о том, что охотник с максимальным количеством добычи - это охотник с индексом
- Освобождение памяти, выделенной под список охотников:
- Выполняется функция free для освобождения памяти, выделенной под список охотников.