Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <fcntl.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- #include <limits.h>
- double ObliczSrednia(const char *fname, int*min, int*max, char mode)
- {
- FILE* plik = fopen(fname, "r+" );
- rewind(plik);
- int n;
- int suma = 0;
- double iloczyn = 1;
- double sumaHarmoniczna = 0;
- int i = 0;
- int j = 0;
- *min = INT_MAX;
- *max = 0; //bo operujemy tylko na dodatnich
- int napotkanoEOF = 0;
- while(!napotkanoEOF)
- {
- fscanf(plik, "%d\n", &n);
- if(feof(plik) != 0)
- {
- napotkanoEOF = 1;
- }
- if(*min > n) *min = n;
- if(*max < n) *max = n;
- if(mode == 'A') suma += n;
- else if(mode == 'G') iloczyn *= n;
- else if(mode == 'H') sumaHarmoniczna += 1.0/n;
- i++;
- }
- fclose(plik);
- if(mode == 'A') return ((double)suma)/i;
- else if(mode == 'G') return pow(iloczyn, 1.0/i);
- else if(mode == 'H') return i/sumaHarmoniczna;
- }
- int exists(const char *fname)
- {
- FILE *file;
- if ((file = fopen(fname, "r")))
- {
- fclose(file);
- return 1;
- }
- return 0;
- }
- const char* fpName = "liczby.txt";
- int main()
- {
- printf("Wybierz opcje:\n a - napisz 5 liter do pliku\n b- modyfikuj wprowadzone\n");
- char chooseOption;
- scanf(" %c", &chooseOption);
- int i = 0;
- int liczbaDoZapisu;
- FILE* plik;
- plik = fopen(fpName,"w+r");
- switch (chooseOption)
- {
- case 'a':
- for(i = 0; i<5; i++)
- {
- scanf(" %d", &liczbaDoZapisu);
- fprintf(plik, "%d\n", liczbaDoZapisu);
- }
- break;
- case 'b':
- if(!exists(fpName))
- {
- printf("Plik nie istnieje! Najpierw dopisz!\n");
- return 1;
- }
- break;
- default:
- printf("Bledne polecenie, elo\n");
- return 1;
- }
- fclose(plik);
- printf("Wpisz A, G lub H\n");
- scanf(" %c", &chooseOption);
- double srednia;
- int min,max;
- FILE *wynik;
- FILE *maxFp;
- FILE *minFp;
- wynik = fopen("wynik.txt", "w+");
- switch (chooseOption)
- {
- case 'A':
- srednia = ObliczSrednia(fpName, &min, &max, 'A');
- fprintf(wynik, "Srednia Arytmetyczna: %f", srednia);
- //printf("%f\n", srednia);
- break;
- case 'G':
- srednia = ObliczSrednia(fpName, &min, &max, 'G');
- fprintf(wynik, "Srednia Geometryczna: %f", srednia);
- //printf("%f\n", srednia);
- break;
- case 'H':
- srednia = ObliczSrednia(fpName, &min, &max, 'H');
- fprintf(wynik, "Srednia Harmoniczna: %f", srednia);
- //printf("%f\n", srednia);
- break;
- }
- minFp = fopen("najmniejsza.txt", "w+");
- maxFp = fopen("najwieksza.txt", "w+");
- fprintf(minFp, "%d", min);
- fprintf(maxFp, "%d", max);
- fclose(minFp);
- fclose(maxFp);
- fclose(wynik);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement