Выяснить, имеется ли пассажир, багаж которого превышает багаж каждого из остальных пассажиров - 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 позволяет найти индекс пассажира, багаж которого превышает багаж каждого из остальных пассажиров.