Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.59 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <fcntl.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <math.h>
  6. #include <limits.h>
  7.  
  8. double ObliczSrednia(const char *fname, int*min, int*max, char mode)
  9. {
  10.     FILE* plik = fopen(fname, "r+" );
  11.     rewind(plik);
  12.     int n;
  13.     int suma = 0;
  14.     double iloczyn = 1;
  15.     double sumaHarmoniczna = 0;
  16.     int i = 0;
  17.     int j = 0;
  18.     *min = INT_MAX;
  19.     *max = 0; //bo operujemy tylko na dodatnich
  20.     int napotkanoEOF = 0;
  21.     while(!napotkanoEOF)
  22.     {
  23.         fscanf(plik, "%d\n", &n);
  24.             if(feof(plik) != 0)
  25.         {
  26.                 napotkanoEOF = 1;  
  27.         }
  28.         if(*min > n) *min = n;
  29.         if(*max < n) *max = n;
  30.        
  31.         if(mode == 'A') suma += n;
  32.         else if(mode == 'G') iloczyn *= n;
  33.         else if(mode == 'H') sumaHarmoniczna += 1.0/n;
  34.         i++;
  35.     }
  36.     fclose(plik);
  37.     if(mode == 'A') return ((double)suma)/i;
  38.     else if(mode == 'G') return pow(iloczyn, 1.0/i);
  39.     else if(mode == 'H') return i/sumaHarmoniczna;
  40. }
  41.  
  42. int exists(const char *fname)
  43. {
  44.     FILE *file;
  45.     if ((file = fopen(fname, "r")))
  46.     {
  47.         fclose(file);
  48.         return 1;
  49.     }
  50.     return 0;
  51. }
  52.  
  53. const char* fpName = "liczby.txt";
  54.  
  55. int main()
  56. {
  57.     printf("Wybierz opcje:\n a - napisz 5 liter do pliku\n b- modyfikuj wprowadzone\n");
  58.     char chooseOption;
  59.     scanf(" %c", &chooseOption);
  60.     int i = 0;
  61.     int liczbaDoZapisu;
  62.     FILE* plik;
  63.     plik = fopen(fpName,"w+r");
  64.     switch (chooseOption)
  65.     {
  66.         case 'a':
  67.            
  68.             for(i = 0; i<5; i++)
  69.             {
  70.                 scanf(" %d", &liczbaDoZapisu);
  71.                 fprintf(plik, "%d\n", liczbaDoZapisu);
  72.             }
  73.            
  74.         break;
  75.         case 'b':
  76.             if(!exists(fpName))
  77.             {
  78.                 printf("Plik nie istnieje! Najpierw dopisz!\n");
  79.                 return 1;
  80.             }
  81.         break;
  82.         default:
  83.             printf("Bledne polecenie, elo\n");
  84.             return 1;
  85.     }
  86.     fclose(plik);
  87.     printf("Wpisz A, G lub H\n");
  88.     scanf(" %c", &chooseOption);
  89.     double srednia;
  90.     int min,max;
  91.     FILE *wynik;
  92.     FILE *maxFp;
  93.     FILE *minFp;
  94.     wynik = fopen("wynik.txt", "w+");
  95.     switch (chooseOption)
  96.     {
  97.         case 'A':
  98.         srednia = ObliczSrednia(fpName, &min, &max, 'A');
  99.         fprintf(wynik, "Srednia Arytmetyczna: %f", srednia);
  100.         //printf("%f\n", srednia);
  101.         break;
  102.         case 'G':
  103.         srednia = ObliczSrednia(fpName, &min, &max, 'G');
  104.         fprintf(wynik, "Srednia Geometryczna: %f", srednia);
  105.         //printf("%f\n", srednia);
  106.         break;
  107.         case 'H':
  108.         srednia = ObliczSrednia(fpName, &min, &max, 'H');
  109.         fprintf(wynik, "Srednia Harmoniczna: %f", srednia);
  110.         //printf("%f\n", srednia);
  111.         break;
  112.     }
  113.     minFp = fopen("najmniejsza.txt", "w+");
  114.     maxFp = fopen("najwieksza.txt", "w+");
  115.     fprintf(minFp, "%d", min);
  116.     fprintf(maxFp, "%d", max);
  117.     fclose(minFp);
  118.     fclose(maxFp);
  119.     fclose(wynik);
  120.  
  121.     return 0;
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement