Advertisement
Guest User

Untitled

a guest
May 5th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.39 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct node {
  6.     char naziv[20];
  7.     int kapacitet;
  8.     int godinaOsnivanja;
  9.     char tip[20];
  10.     int pretrazen;
  11.     struct node *sl;
  12. } cvor;
  13.  
  14. cvor *maxKapacitet(cvor *gl) {
  15.     int max = 0;
  16.     cvor *maxc = NULL;
  17.     while(gl != NULL){
  18.         if(gl->kapacitet>max && gl->pretrazen == 0){
  19.             max = gl->kapacitet;
  20.             maxc = gl;
  21.         }
  22.         gl = gl->sl;
  23.     }
  24.  
  25.     if(maxc != NULL)
  26.         maxc->pretrazen = 1;
  27.  
  28.  
  29.     return maxc;
  30. }
  31.  
  32. void dodaj(char *naziv, char *tip, int kapacitet, int godinaOsnivanja, cvor **gl){
  33.     cvor *novi = (cvor*)malloc(sizeof(cvor));
  34.     strcpy(novi->naziv, naziv);
  35.     strcpy(novi->tip, tip);
  36.     novi->godinaOsnivanja = godinaOsnivanja;
  37.     novi->kapacitet = kapacitet;
  38.     novi->pretrazen = 0;
  39.     novi->sl = *gl;
  40.     *gl = novi;
  41. }
  42.  
  43. void deleteList(cvor **gl){
  44.     cvor *pr, *tek = *gl;
  45.     while(tek != NULL){
  46.         pr = tek->sl;
  47.         tek = tek->sl;
  48.         free(pr);
  49.     }
  50.     *gl = NULL;
  51. }
  52.  
  53. void ucitavanje(FILE *ulaz, cvor **gl){
  54.     char naziv[20], tip[20];
  55.     int kapacitet, godinaOsnivanja;
  56.     cvor *novi;
  57.     while(fscanf(ulaz, "%s %d %d %s", naziv, &kapacitet, &godinaOsnivanja, tip) != EOF)
  58.         dodaj(naziv, tip, kapacitet, godinaOsnivanja, gl);
  59. }
  60.  
  61. void ispisPodataka(cvor *a, char *pref){
  62.     printf("%s\"%s\"(%s), kapacitet: %d, osnovan %d\n", pref, a->naziv, a->tip, a->kapacitet, a->godinaOsnivanja);
  63. }
  64.  
  65. void prVrKap(cvor *gl, char *tip){
  66.     if(gl == NULL)
  67.         return printf("Lista je prazna.\n");
  68.     int ukObj = 0, ukKap = 0;
  69.     while(gl != NULL) {
  70.         if(strcmp(gl->tip, tip) == 0) {
  71.             ukObj++;
  72.             ukKap += gl->kapacitet;
  73.         }
  74.         gl = gl->sl;
  75.     }
  76.  
  77.     char s[50];
  78.     strcpy(s, "");
  79.     strcat(s, "kapacitet_");
  80.     strcat(s, tip);
  81.     strcat(s, ".txt");
  82.     FILE *f;
  83.     f = fopen(s, "w");
  84.     fprintf(f, "Prosecna vrednost kapaciteta za tip %s iznosi %.2f", tip, (float)ukKap/ukObj);
  85.     fclose(f);
  86. }
  87.  
  88. void proslava(cvor *gl, int brojLjudi){
  89.     int n;
  90.     cvor *max;
  91.     FILE *proslava = fopen("proslava.txt", "w");
  92.     while(brojLjudi>0 && ((max=maxKapacitet(gl)) != NULL)){
  93.         n = (max->kapacitet > brojLjudi) ? brojLjudi : max->kapacitet;
  94.         brojLjudi -= n;
  95.         fprintf(proslava, "\"%s\"(%s), ljudi: %d\n", max->naziv, max->tip, n);
  96.     }
  97.     fclose(proslava);
  98. }
  99.  
  100. void najstarijiNajmladji(cvor *gl){
  101.     if(gl == NULL)
  102.         return printf("Lista je prazna.\n");
  103.     int minGodOsn = 3000, maxGodOsn = 0;
  104.     cvor *min = NULL, *max = NULL;
  105.     while(gl != NULL){
  106.         if(gl->godinaOsnivanja < minGodOsn){
  107.             minGodOsn = gl->godinaOsnivanja;
  108.             min = gl;
  109.         }
  110.         if(gl->godinaOsnivanja > maxGodOsn){
  111.             maxGodOsn = gl->godinaOsnivanja;
  112.             max = gl;
  113.         }
  114.         gl = gl->sl;
  115.     }
  116.  
  117.     ispisPodataka(max, "Najmladji objekat: ");
  118.     ispisPodataka(min, "Najstariji objekat: ");
  119. }
  120.  
  121. cvor *glava = NULL;
  122.  
  123. int main()
  124. {
  125.     FILE *ulaz;
  126.     if((ulaz = fopen("namirnice.txt", "r")) == NULL)
  127.         return printf("Fajl namirnice.txt ne postoji!");
  128.     ucitavanje(ulaz, &glava);
  129.     fclose(ulaz);
  130.  
  131.     /* a) */ najstarijiNajmladji(glava);
  132.     /* b) */ prVrKap(glava, "restoran");
  133.     /* c) */ proslava(glava, 1000);
  134.  
  135.     // KRAJ PROGRAMA
  136.     deleteList(&glava);
  137.     return 0;
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement