Задача 4.4

1. Условие

Багаж пассажира характеризуется количеством вещей и их общим весом. Дан массив, содержащий информацию о багаже нескольких пассажиров. Определить, имеются ли два пассажира, багажи которых совпадают по числу вещей и различаются по весу не более чем на 0.5 кг.

2. Решение

Оператор задает количество пассажиров. Программа динамически выделяет блок оперативной памяти под массив структур, в которых хранится информация о пассажирах. В цикле оператор производит инициализацию массива структур. Далее массив обрабатывается: ищутся два пассажира, для которых выполняются заданные условия.

3. Алгоритм решения

4. Текст программы

1 :  #include <stdio.h>
2 :  #include <conio.h>
3 :  #include <math.h>
4 :  #include <alloc.h>
5 :  #define DATA struct tabel
6 :  DATA
7 :  {
8 :      int num;
9 :      int kol;
10:      int kg;
11:      int gr;
12:  }*b;
13:  void main()
14:  {
15:      int i, j, n, s;
16:      clrscr( );
17:      printf( "\n Введите кол-во пассажиров n (n-целое,n>0) " );
18:      scanf( "%d", &n );
19:      b=(DATA*)malloc( n*sizeof(DATA) );
21       for( i=0; i<n; i++ )
20:      {
21:          (b+i)->num=i+1;
22:          printf( "\n Введите кол-во вещей %d-ro пассажира ", i+1 );
23:          scanf( "%d", &(b+i)->kol );
24:          printf( "\n Введите массу вещей %d-ro пассажира: ", i+1 );
25:          printf( "\n \t Kr:" );
26:          scanf( "%d", &(b+i)->kg );
27:          printf( "\n \t гр:" );
28:          scanf("%d",&(b+i)->gr);
29:      }
30:      clrscr();
31:      printf("\n Пассажир ___ Количество вещей ____ Масса вещей \n");
32:      for (i=0; i<n; i++)
33:      printf ("____ %9d ____________ %3d ___________ %10d.%кг _\n", (b+i)->num, 
34:      (b+i)->kol, (b+i)->kg, (b+i)->gr );
35:      printf("\n Совпадают по количеству вещей и различаются по весу вещей не 
36:      более чем на 0,5 кг пассажиры: \n" );
37:      for (i=0; i<n; i++)
38:      for (j=0; j<n; j++)
39:          if (i!=j && (b+i)->kol==(b+j)->kol && 
40:              fabs(((b+i)->kg+.001*(b+i)->gr)-((b+j)->kg+.001*(b+j)->gr))<=0.5)
41:              printf ( "\n \t \t %d %10d", (b+i)->num, (b+j)->num);
42:      printf( "\n \n \n Для завершения программы введите любой символ ");
43:      getch( ); 
44:      free(b);
45:  }

5. Работа программы

Введите количество пассажиров n (n-целое,n>0) 3
Введите количество вещей 1-го пассажира 6
Введите массу вещей 1-го пассжира кг.: 5 гр.: 900
Введите количество вещей 2-го пассажира 6
Введите массу вещей 2-го пассажира кг.: 6 гр.: 0
Введите количество вещей 3-го пассажира 5
Введите массу вещей 3-го пассажира кг.: 6 гр.: 300
Пассажир _____ Количество вещей _____ Масса вещей
___ 1 _______________ 6 ______________ 5,900 кг _
___ 2 _______________ 6 ______________ 6,0 кг ___
___ 3 _______________ 5 ______________ 6,300 кг _
Совпадают по количеству вещей и различаются по весу не более чем на 0,5 кг пассажиры:
1 2
2 1
Для завершения программы введите любой символ

6. Проверка

Программа работает корректно.

Хостинг от uCoz