Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.68 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5.  
  6. struct Voyage {
  7.     int id;
  8.     int hrs;
  9.     int mins;
  10.     char dest[21];
  11. };
  12.  
  13. char *strToUpper(char *s) {
  14.     int i = 0;
  15.     while (*s) {
  16.         *s = toupper(*s);
  17.         s++;
  18.         i++;
  19.     }
  20.     return s - i;
  21. }
  22.  
  23. int time(int m1, int h1, int m2, int h2) {
  24.     int sum = (m2 - m1) + (h2 - h1) * 60;
  25.     return sum;
  26. }
  27.  
  28. void read(FILE *fr, struct Voyage *voyages, int N) {
  29.     for (int i = 0; i < N; i++) {
  30.         fscanf(fr, "%d %d:%d %s",
  31.                &voyages[i].id, &voyages[i].hrs, &voyages[i].mins, voyages[i].dest);
  32.  
  33.         strToUpper(voyages[i].dest);
  34.     }
  35. }
  36.  
  37. void sort(struct Voyage *voyages, int N) {
  38.     for (int i = 0; i < N; i++) {
  39.         for (int j = 0; j < N - 1 - i; j++) {
  40.             int flag = 1;
  41.             if (voyages[j].hrs > voyages[j + 1].hrs) {
  42.                 flag = 0;
  43.             } else if (voyages[j].hrs == voyages[j + 1].hrs && \
  44.                     voyages[j].mins > voyages[j + 1].mins) {
  45.                 flag = 0;
  46.             } else if (voyages[j].hrs == voyages[j + 1].hrs && \
  47.                     voyages[j].mins == voyages[j + 1].mins && \
  48.                     strcmp(voyages[j].dest, voyages[j + 1].dest) > 0) {
  49.                 flag = 0;
  50.             } else if (voyages[j].hrs == voyages[j + 1].hrs && \
  51.                     voyages[j].mins == voyages[j + 1].mins && \
  52.                     strcmp(voyages[j].dest, voyages[j + 1].dest) == 0 && \
  53.                     voyages[j].id > voyages[j + 1].id) {
  54.                 flag = 0;
  55.             }
  56.             if (!flag) {
  57.                 struct Voyage tmp = voyages[j];
  58.                 voyages[j] = voyages[j + 1];
  59.                 voyages[j + 1] = tmp;
  60.             }
  61.         }
  62.     }
  63. }
  64.  
  65. void write(FILE *fw, struct Voyage *voyages, int K) {
  66.     fprintf(fw, "%03d %02d:%02d %s %d\n",
  67.             voyages[0].id, voyages[0].hrs, voyages[0].mins, voyages[0].dest, time(0, 0, voyages[0].mins, voyages[0].hrs));
  68.  
  69.     for (int i = 1; i < K; i++) {
  70.         fprintf(fw, "%03d %02d:%02d %s %d\n",
  71.                 voyages[i].id, voyages[i].hrs, voyages[i].mins, voyages[i].dest, time(voyages[i-1].mins, voyages[i-1].hrs, voyages[i].mins, voyages[i].hrs));
  72.     }
  73. }
  74.  
  75. int main() {
  76.     FILE *fr = fopen("D:/Projects/CLionProjects/Lab_6/input.txt", "rt");
  77.     FILE *fw = fopen("D:/Projects/CLionProjects/Lab_6/output.txt", "wt");
  78.  
  79.     int K, N;
  80.     fscanf(fr, "%d", &K);
  81.     fscanf(fr, "%d", &N);
  82.  
  83.     struct Voyage *voyages = (struct Voyage *) malloc(N * sizeof(struct Voyage));
  84.  
  85.     read(fr, voyages, N);
  86.     sort(voyages, N);
  87.  
  88.     write(fw, voyages, K);
  89.  
  90.     fclose(fw);
  91.     fclose(fr);
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement