Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_IME 20
- #define MAX_OBLAST 30
- #define MAX_DATA 100
- //
- // Iz zadate ulazne datoteke učitati niz struktura pri čemu se struktura naucnik_st sastoji od sledećih
- // polja:
- // ime (jedna reč, do 20 karaktera)
- // prezime (jedna reč, do 20 karaktera)
- // broj objavljenih radova (nenegativan ceo broj)
- // oblast u kojoj istražuje (jedna reč, do 30 karaktera)
- // Nakon toga:
- // a) U izlaznu datoteku ispisati podatke o naučnicima koji imaju broj objavljenih radova veći od
- // zadatog.
- // b) Na standardni izlaz ispisati prosečnu dužinu prezima uzimajući u obzir samo osobe sa
- // različitim prezimenima.
- // c) Za zadatu naučnu oblast izračunati ukupan broj objavljenih radova i taj podatak sačuvati u
- // fajlu koji nosi naziv te oblasti sa ekstenzijom .txt
- // Nazivi ulazne i izlazne datoteke kao i broj objavljenih radova se zadaju kao argumenti poziva
- // programa dok naziv oblasti korisnik zadaje tokom izvršavanja programa kroz standardni ulaz.
- // Emmy Noether 123 matematika
- // Andrey Kolmogorov 250 matematika
- // Stefan Noether 222 racunarstvo
- // Petar Lobachevsky 222 racunarstvo
- // Albert Einstein 156 fizika
- // Nicolai Lobachevsky 321 matematika
- // Mileva Einstein 157 fizika
- typedef struct naucnici_st {
- char ime[MAX_IME];
- char prezime[MAX_IME];
- unsigned int brRadova;
- char oblast[MAX_OBLAST];
- } naucnici_st;
- FILE *safeOpen(char *file, char *mode);
- void ucitajPodatke(FILE *ulaz, naucnici_st naucnici[], int *brNaucnika);
- void filterNaucnici(FILE* izlaz, naucnici_st naucnici[], int brNaucnika, int minRadovi);
- void filterPrezime(naucnici_st naucnici[], int brNaucnika);
- void filterOblast(naucnici_st naucnici[], int brNaucnika);
- int main(int argc, char *argv[]) {
- if(argc != 4) {
- printf("Pogresno ste pokrenulis program!");
- printf("Primer poziva: ./zadatak naucnici.txt izlaz.txt 200");
- }
- FILE *ulaz, *izlaz;
- int brNaucnika = 0;
- naucnici_st naucnici[MAX_DATA];
- //
- ulaz = safeOpen(argv[1], "r");
- ucitajPodatke(ulaz, naucnici, &brNaucnika);
- fclose(ulaz);
- //
- izlaz = safeOpen(argv[2], "w");
- filterNaucnici(izlaz, naucnici, brNaucnika, atoi(argv[3]));
- fclose(izlaz);
- // pod B
- filterPrezime(naucnici, brNaucnika);
- // pod C
- filterOblast(naucnici, brNaucnika);
- // char oblast[MAX_OBLAST];
- // printf("Unesite zeljenu oblast\n", );
- }
- FILE *safeOpen(char *file, char *mode) {
- FILE *fp = fopen(file, mode);
- if (fp == NULL){
- printf("Doslo je do greske pri otvaranju fajla : %s\n", file);
- exit(EXIT_FAILURE);
- }
- return fp;
- }
- void ucitajPodatke(FILE *ulaz, naucnici_st naucnici[], int *brNaucnika){
- int i = 0;
- while(!feof(ulaz)){
- fscanf(ulaz, "%s %s %u %s", naucnici[i].ime,
- naucnici[i].prezime,
- &naucnici[i].brRadova,
- naucnici[i].oblast);
- i++;
- }
- *brNaucnika = i - 1; // uvek na ovo obratiti paznju
- }
- void filterOblast(naucnici_st naucnici[], int brNaucnika){
- //char filename[MAX_OBLAST+4];
- char oblast[MAX_OBLAST];
- int i = 0, brRadovaIzOblasti = 0;
- do {
- fprintf(stdout, "Unesite zeljenu oblast (matematika, fizika, racunarstvo):\n");
- scanf("%s", oblast);
- } while (strcmp(oblast, "matematika") != 0
- && strcmp(oblast, "racunarstvo") != 0
- && strcmp(oblast, "fizika") != 0);
- for (i = 0; i < brNaucnika; i++) {
- if (strcmp(naucnici[i].oblast, oblast) == 0) {
- brRadovaIzOblasti += naucnici[i].brRadova;
- }
- }
- //char filename = strcat(oblast, ".txt");
- FILE *oblastf = safeOpen(strcat(oblast, ".txt"), "w");
- fprintf(oblastf, "Broj radova za oblast %s je : %d\n", oblast, brRadovaIzOblasti );
- fclose(oblastf);
- }
- void filterPrezime(naucnici_st naucnici[], int brNaucnika) {
- int i = 0, j = 0;
- int brPonavljanja = 0;
- int brUnikatnih = 0;
- float ukupnaDuzina = 0.0;
- for (i = 0; i < brNaucnika; i++) {
- brPonavljanja = 0;
- for (j = 0; j < i; j++) {
- if (strcmp(naucnici[i].prezime, naucnici[j].prezime) == 0) {
- brPonavljanja++;
- }
- }
- if(brPonavljanja == 0) {
- brUnikatnih++;
- ukupnaDuzina += strlen(naucnici[i].prezime);
- }
- }
- float avgDuzina = ukupnaDuzina / brUnikatnih;
- fprintf(stdout, "\nProsecna duzina prezimena je : %.2f\n", avgDuzina);
- fprintf(stdout, "\nbrUnikatnih : %d, ukupnaDuzina = %f brNaucnika = %d\n", brUnikatnih, ukupnaDuzina, brNaucnika);
- }
- void filterNaucnici(FILE* izlaz, naucnici_st naucnici[], int brNaucnika, int minRadovi) {
- int i = 0;
- for (i = 0; i < brNaucnika; i++) {
- if (naucnici[i].brRadova > minRadovi) {
- fprintf(izlaz, "%s %s %u %s\n", naucnici[i].ime,
- naucnici[i].prezime,
- naucnici[i].brRadova,
- naucnici[i].oblast);
- i++;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement