Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <ctype.h>
- struct Voyage {
- int id;
- int hrs;
- int mins;
- char dest[21];
- };
- char *strToUpper(char *s) {
- int i = 0;
- while (*s) {
- *s = toupper(*s);
- s++;
- i++;
- }
- return s - i;
- }
- int time(int m1, int h1, int m2, int h2) {
- int sum = (m2 - m1) + (h2 - h1) * 60;
- return sum;
- }
- void read(FILE *fr, struct Voyage *voyages, int N) {
- for (int i = 0; i < N; i++) {
- fscanf(fr, "%d %d:%d %s",
- &voyages[i].id, &voyages[i].hrs, &voyages[i].mins, voyages[i].dest);
- strToUpper(voyages[i].dest);
- }
- }
- void sort(struct Voyage *voyages, int N) {
- for (int i = 0; i < N; i++) {
- for (int j = 0; j < N - 1 - i; j++) {
- int flag = 1;
- if (voyages[j].hrs > voyages[j + 1].hrs) {
- flag = 0;
- } else if (voyages[j].hrs == voyages[j + 1].hrs && \
- voyages[j].mins > voyages[j + 1].mins) {
- flag = 0;
- } else if (voyages[j].hrs == voyages[j + 1].hrs && \
- voyages[j].mins == voyages[j + 1].mins && \
- strcmp(voyages[j].dest, voyages[j + 1].dest) > 0) {
- flag = 0;
- } else if (voyages[j].hrs == voyages[j + 1].hrs && \
- voyages[j].mins == voyages[j + 1].mins && \
- strcmp(voyages[j].dest, voyages[j + 1].dest) == 0 && \
- voyages[j].id > voyages[j + 1].id) {
- flag = 0;
- }
- if (!flag) {
- struct Voyage tmp = voyages[j];
- voyages[j] = voyages[j + 1];
- voyages[j + 1] = tmp;
- }
- }
- }
- }
- void write(FILE *fw, struct Voyage *voyages, int K) {
- fprintf(fw, "%03d %02d:%02d %s %d\n",
- voyages[0].id, voyages[0].hrs, voyages[0].mins, voyages[0].dest, time(0, 0, voyages[0].mins, voyages[0].hrs));
- for (int i = 1; i < K; i++) {
- fprintf(fw, "%03d %02d:%02d %s %d\n",
- 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));
- }
- }
- int main() {
- FILE *fr = fopen("D:/Projects/CLionProjects/Lab_6/input.txt", "rt");
- FILE *fw = fopen("D:/Projects/CLionProjects/Lab_6/output.txt", "wt");
- int K, N;
- fscanf(fr, "%d", &K);
- fscanf(fr, "%d", &N);
- struct Voyage *voyages = (struct Voyage *) malloc(N * sizeof(struct Voyage));
- read(fr, voyages, N);
- sort(voyages, N);
- write(fw, voyages, K);
- fclose(fw);
- fclose(fr);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement