#include <stdio.h> #include <string.h> typedef struct { int i; char S[30]; } Kirje; int fileExist (char *filename); // kontrollib faili olemasolu int howManyLines(char *failiNimi); // loeb ära mitu rida failis on void kirjedSisse (Kirje **, char *filename); // loeb andmed sisse void sort (Kirje *nimekiri, int T); // sorteerib andmed void valjastus (Kirje *nimekiri, int T); // väljastab sorteeritud andmed int main () { // kontrollib faili olemasolu, kui ei eksisteeri siis lõpetab programm töö if (fileExist ("E1.txt") != 0) { printf ("Faili ei asu programmiga samas kaustas"); return 1; } int T; T = howManyLines ("E1.txt"); // loeb ära read failis Kirje nimekiri[T]; // massiiv andmete hoidmiseks Kirje *kirjeviit = nimekiri; kirjedSisse (&kirjeviit, "E1.txt"); // loeb sisse andmed sort (nimekiri, T); // sorteerib valjastus (nimekiri, T); // väljastab tulemused faili ja ekraanile return 0; } int fileExist (char *filename) { FILE *fp; fp = fopen (filename, "r"); if (fp == NULL) { return 1; } else { fclose (fp); return 0; } } int howManyLines(char *failiNimi) { FILE *data; data = fopen (failiNimi, "r"); int c = 0; int read = 0; while ((c = fgetc(data)) != EOF) { if (c == '\n') read++; } fclose(data); if (read == 0) { printf ("Fail %s on tühi", failiNimi); return 1; } else { return read; } } void kirjedSisse (Kirje **kirjeviit, char *filename) { int i = 0; // loendurid int j; FILE *fp; // avab faili, mille nimi anti kaasa fp = fopen (filename, "r"); // loeb sisse andmed failist while (fscanf (fp, "%d %s", &(*kirjeviit + i)->i, (*kirjeviit +i)->S) != EOF) { i++; } fclose (fp); // väljastab tulemused ekraanile for (j = 0; j < i; j++) { printf ("%d, %s\n", (*kirjeviit + j)->i, (*kirjeviit + j)->S); } printf ("\n"); } void sort (Kirje *nimekiri, int T) { int i, j; Kirje temp; for (i = 0; i < T; i++) { for (j = 1; j < T; j++) { if (nimekiri[j-1].i > nimekiri[j].i) // kui eelnev fail on suurem, vahetab kohad { temp = nimekiri[j]; nimekiri[j] = nimekiri[j-1]; nimekiri[j-1] = temp; } else if (nimekiri[j-1].i == nimekiri[j].i) { // kui arvud on võrdsed kontrollib tähestikulist järjestust ja vajadused vahetab kohad if (strcmp (nimekiri[j-1].S, nimekiri[j].S) > 0) { temp = nimekiri[j]; nimekiri[j] = nimekiri[j-1]; nimekiri[j-1] = temp; } } } } } void valjastus (Kirje *nimekiri, int T) { int i; FILE *output; // loob faili output = fopen ("E2.txt", "w"); for (i = 0; i < T; i++) { fprintf (output, "%d, %s\n", nimekiri[i].i, nimekiri[i].S); printf ("%d, %s\n", nimekiri[i].i, nimekiri[i].S); } }