Advertisement
hocikto19

projekt 2012

Jan 1st, 2014
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.52 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <stdlib.h>
  4. #include <string.h>
  5. #define ROZSAH 200
  6. #define SUBOR "zajazdy.txt"
  7. #define RIADOK fgets(buf, 255, fr)
  8. #define LADENIE
  9.  
  10. int vynuluj(float pole[], int pocet);
  11. int vypis();
  12. int nacitaj(float cena[], int dni[]);
  13. int najlacnejsi(float cena[], int dni[], int zaznamy);
  14. int tabulka_cien(float cena[], int zaznamy);
  15. int histogram(int dni[], int zaznamy);
  16.  
  17. int main(){
  18.     float cena[ROZSAH];
  19.     int dni[ROZSAH], zaznamy=0;
  20.     char volba;
  21.     while ((volba = tolower(getchar())) != 'k'){
  22.         while (getchar() != '\n');
  23.         switch (volba){
  24.             case 'v': vypis(); break;
  25.             case 'n': zaznamy=nacitaj(cena, dni); break;
  26.             case 'l': najlacnejsi(cena, dni, zaznamy); break;
  27.             case 'r': tabulka_cien(cena, zaznamy); break;
  28.             case 'h': histogram(dni, zaznamy); break;
  29.         }
  30.     }
  31.     return 0;
  32. }
  33.  
  34. int vynuluj(float pole[], int pocet){
  35.     int i;
  36.     for (i = 0; i < pocet; i++)
  37.         pole[i] = 0;
  38.     return EXIT_SUCCESS;
  39. }
  40.  
  41. int vypis(){
  42.     FILE *fr;
  43.     char buf[256];
  44.     int i;
  45.     if ((fr = fopen(SUBOR, "r")) == NULL){
  46.         printf("Subor neotvoreny\n");
  47.         return EXIT_FAILURE;
  48.     }
  49.     while (!feof(fr)){
  50.       RIADOK;
  51.       printf("Krajina: %s", buf);
  52.       RIADOK;
  53.       printf("Miesto: %s", buf);
  54.       RIADOK;
  55.       printf("Hotel: %s", buf);
  56.       RIADOK;
  57.       printf("Kategoria: ");
  58.       sscanf(buf, "%d", &i);
  59.       for (; i >= 1; i--)
  60.           putchar('*');
  61.       RIADOK;
  62.       printf("\nCena: %s", buf);
  63.       RIADOK;
  64.       printf("Datum: %s", buf);
  65.       RIADOK;
  66.       printf("Pocet dni: %s\n", buf);
  67.       RIADOK;
  68.     }
  69.     fclose(fr);
  70.     return EXIT_SUCCESS;
  71. }
  72.  
  73. int nacitaj(float cena[], int dni[]){
  74.     int zaznam=0, riadok=1;
  75.     FILE *fr;
  76.     char buf[256];
  77.     vynuluj(cena, ROZSAH); vynuluj(dni, ROZSAH);
  78.     if ((fr = fopen(SUBOR, "r")) == NULL){
  79.         printf("Neotvoreny subor\n");
  80.         return EXIT_FAILURE;
  81.     }
  82.     while (!feof(fr)){
  83.         for (; riadok <= 5 + 8 * zaznam; riadok++)
  84.             RIADOK;
  85.         sscanf(buf, "%f", &cena[zaznam]);
  86.         for (; riadok <= 7 + 8 * zaznam; riadok++)
  87.             RIADOK;
  88.         sscanf(buf, "%d", &dni[zaznam]);
  89.         zaznam++;
  90.     }
  91. #ifdef LADENIE
  92.     for (riadok = 0; riadok < zaznam; riadok++)
  93.         printf("Zaznam cislo: %d cena: %f pocet dni: %d\n", riadok + 1, cena[riadok], dni[riadok]);
  94. #endif
  95.     fclose(fr);
  96.     return zaznam;
  97. }
  98.  
  99. int najlacnejsi(float cena[], int dni[], int zaznamy){
  100.     int i;
  101.     float min;
  102.     if (!zaznamy){
  103.         printf("Polozky nie su nacitane\n");
  104.         return EXIT_FAILURE;
  105.     }
  106.     min = cena[0] / dni[0];
  107.     for (i = 1; i < zaznamy; i++)
  108.         min = (cena[i] / dni[i] < min) ? cena[i] / dni[i] : min;
  109.     printf("%g\n", min);
  110.     return EXIT_SUCCESS;
  111. }
  112.  
  113. int tabulka_cien(float cena[], int zaznamy){
  114.     int max_rad=0, akt_rad, i;
  115.     float max=cena[0], akt;
  116.     if (!zaznamy){
  117.         printf("Polozky nie su nacitane\n");
  118.         return EXIT_FAILURE;
  119.     }
  120.     for (i = 1; i < zaznamy; i++)
  121.         max = (cena[i] > max) ? cena[i] : max;
  122.     while (max>=1){
  123.         max /= 10;
  124.         max_rad++;
  125.     }
  126.     for (i = 0; i < zaznamy; i++){
  127.         akt_rad = 0;
  128.         akt = cena[i];
  129.         while (akt >= 1) {
  130.             akt /= 10;
  131.             akt_rad++;
  132.         }
  133.         for (; akt_rad < max_rad; akt_rad++)
  134.             putchar(' ');
  135.         printf("%.2f\n", cena[i]);
  136.     }
  137.     return EXIT_SUCCESS;
  138. }
  139.  
  140. int histogram(int dni[], int zaznamy){
  141.     int max=dni[0], *histogram, i;
  142.     if (!zaznamy){
  143.         printf("Polozky nie su nacitane\n");
  144.         return EXIT_FAILURE;
  145.     }
  146.     for (i = 1; i < zaznamy; i++)
  147.         max = (dni[i]>max) ? dni[i] : max;
  148.     histogram = (int*)malloc(max+1);
  149.     vynuluj(histogram, max + 1);
  150.     for (i = 0; i < zaznamy; i++)
  151.         histogram[dni[i]]++;
  152.     for (i = 0; i <= max; i++)
  153.         if (histogram[i])
  154.             printf("%2d: %d\n", i, histogram[i]);
  155.     return EXIT_SUCCESS;
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement