Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров - C (СИ)
Формулировка задачи:
Багаж пассажира характеризуется количеством вещей и общим весом вещей. Сведения о багаже каждого пассажира представляют собой запись Фамилия инициалы, вес, количество вещей.
Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров и по числу вещей, и по весу.
помогите с программкой.
получилось что-то такое как проверку сделать один это и тот же человек или нет?
#include <stdio.h> #include <stdlib.h> #include <windows.h> #define FAMILY 80 #define BUFSIZE 100 #define FILENAME "data.txt" struct phone { char family[FAMILY]; char io[5]; /* 2 буквы, 2 точки, 1 null-символ*/ int number; float mass; }; int main() { int n = 0; /* число записей в файле данных */ int i,max1=0; float max2=0; struct phone * m; /* массив структур */ char family[FAMILY], init[5]; char tmp[BUFSIZE]; FILE *in; /* указатель на файл данных */ SetConsoleOutputCP(1251); SetConsoleCP(1251); in = fopen(FILENAME, "r"); /* открываем файл на чтение */ if (in != NULL) { do{ fgets(tmp, BUFSIZE, in); n++; }while (!feof( in )); printf("Считано %d строк\n", n); m = (struct phone*)calloc(n, sizeof(struct phone)); if (m == NULL) { printf("Ошибка выделения памяти\n"); fclose( in ); /* закрытие файла */ } else { fseek(in, 0, SEEK_SET); /* переместиться в начало файла */ for(i=0; i<n ;i++) fscanf(in, "%s%s%d%f", m[i].family, m[i].io, &m[i].number, &m[i].mass); printf("Список багажа:\n"); for(i=0; i<n ;i++) printf("%d.\t%s %s\n", i+1, m[i].family, m[i].io); for(i=0; i<n ;i++) { if (m[i].number>max1) max1=(m[i].number); if (m[i].mass>max2) max2=(m[i].mass); } printf("max: %d %.2f\n", max1, max2); fclose( in ); /* закрытие файла */ free( m ); /* освободить динамическую память */ } } else printf("Файл %s не найден\n", FILENAME); return 0; }
Решение задачи: «Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров»
textual
Листинг программы
#include <stdio.h> #define MAX_PASSENGERS 2 typedef struct Passenger { char* name; double weight; int things; } passenger; passenger passengers[MAX_PASSENGERS]; int find_bad_passenger(double max_weight, int max_things) { for( int i = 0; i < MAX_PASSENGERS; ++i ) { if( passengers[i].weight > max_weight || passengers[i].things > max_things ) return i; } return -1; }
Объяснение кода листинга программы
В данном коде на языке C реализована функция find_bad_passenger, которая выполняет следующие действия:
- Функция получает на вход три аргумента:
- double max_weight - максимальный вес багажа,
- int max_things - максимальное количество вещей,
- passenger passengers[MAX_PASSENGERS] - массив структур, содержащих информацию о пассажирах.
- Функция начинает перебор всех пассажиров в массиве, начиная с первого.
- Для каждого пассажира функция проверяет, превышает ли его вес или количество вещей заданные максимальные значения.
- Если вес или количество вещей какого-либо пассажира превышает заданные максимальные значения, функция возвращает индекс этого пассажира в массиве.
- Если ни у одного пассажира не было найдено превышение максимальных значений, функция возвращает -1. Таким образом, функция find_bad_passenger позволяет найти индекс пассажира, багаж которого превышает багаж каждого из остальных пассажиров.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д