kacxsku

pro_3_(2)

May 15th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.96 KB | None | 0 0
  1. /*temat 15*/
  2. #pragma warning (disable: 4996)  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include<stdbool.h>
  6. #define MAX 4
  7. FILE *fp; //wyniki
  8. FILE *fw; //dane
  9.  
  10. //pobieranie danych
  11. void take_data(FILE *, double *, int);
  12. //alokowanie pamieci
  13. double *memory_allocation(int);
  14. //dodawanie wektorow
  15. void add_vector(double *, double *, int);
  16.  
  17. //wypisywanie do pliku
  18. void write_data(FILE *, double *, int);
  19. //bledy
  20. void error(int, char *);
  21.  
  22. int main()
  23. {
  24.     int n, m;
  25.     double *vector,*sum;
  26.  
  27.     if (!(fw = fopen("dane.txt", "r") ))    error(2, "dane");
  28.     if (!(fp = fopen("wyniki.txt", "w")))   error(2, "wyniki");
  29.     long savedoffset = ftell(fw); //pierwszy wskaznik
  30.     fseek(fw, 0, SEEK_END);// wskaznik na koncu pliku
  31.     if (ftell(fw) == 0) //jesli aktualny wskaznik pliku jest zero to znaczy ze plik pusty
  32.         error(2, "dane - plik pusty");
  33.     fseek(fw, savedoffset, SEEK_SET);   //powrot na poczatek pliku
  34.  
  35.     /*SEEK_SET - Przenosi pozycję wskaźnika pliku na początek pliku.
  36.     SEEK_END - Przesuwa pozycję wskaźnika pliku na koniec pliku.*/
  37.  
  38.     if (!(fscanf(fw, "%d", &n)))    error(1, "wymiar wektora"); //wymiar wektora
  39.     //mozna switcha machnac z menu albo sumowanie ilosci wektorow wpisane albo do konca pliku jak jest teraz
  40.     /*if (!(fscanf(fw, "%d", &m)))      error(1, "ilosc wektorow do sumowania");*/ // ilosc wektorow
  41.  
  42.     if (!(vector = memory_allocation(n)))   error(3, "vector");
  43.     if (!(sum = memory_allocation(n)))  error(3, "sum");
  44.  
  45.     //printf("dodawanie %d wektorow !!!\n\n",m);
  46.     for (int i = 0; feof(fw)== 0; i++) //sumuje wszystkie wektory bedące w pliku
  47.     {
  48.         take_data(fw, vector, n);
  49.         add_vector(sum, vector, n);
  50.     }
  51.  
  52.     write_data(fp, sum, n);
  53.  
  54.     if (vector) {
  55.         free(vector);
  56.         vector == NULL;
  57.     }
  58.  
  59.     if (sum) {
  60.         free(sum);
  61.         sum == NULL;
  62.     }
  63.  
  64.     fclose(fw);
  65.     fclose(fp);
  66.     return 0;
  67. }
  68.  
  69. double *memory_allocation(int n) // Alokacja pamięci
  70. {
  71.     return (double*)calloc((unsigned)n, sizeof(double));  //calloc zeruje tablice
  72. }
  73. void take_data(FILE *fd, double *vect, int n)// Czytanie elementów tablicy z pliku
  74. {
  75.     int k = 0;
  76.     for (k = 0; k < n; k++)
  77.     {
  78.         if (!(fscanf(fd, "%lf", &vect[k]))) error(1, "niepoprawne skladowe wektora");
  79.        
  80.     }
  81. }
  82. void add_vector(double *sum, double *x, int n)//Obliczanie sumy dwóch wektorów
  83. {
  84.     int k = 0;
  85.     for (k = 0; k < n; k++)
  86.     {
  87.         sum[k] += x[k];
  88.     }
  89. }
  90.  
  91. void write_data(FILE *fg, double *vect, int n)// Pisanie elementów tablicy do pliku
  92. {
  93.     int k = 0;
  94.     fprintf(fw, "suma Wektorow = [");
  95.     for (k = 0; k < n; k++)
  96.     {
  97.         fprintf(fg, "  %lf ", vect[k]);
  98.         if (k != n - 1) fprintf(fw, ",");
  99.     }
  100.     fprintf(fw, "]\n");
  101.     printf("wynik dodawania w pliku wyniki.txt\n");
  102. }
  103.  
  104. void error(int number, char *w) // bledy
  105. {
  106.     char *problems[] = { ""," zle dane : "," otwarcie pliku : "," blad alokacji pamieci : " };
  107.     int j;
  108.     j = number >= MAX ? MAX : number;
  109.     printf("Wystapil Blad(%d) -- %s %s\n", number, problems[j], w);
  110.     fprintf(fp, "Wystapil Blad(%d)­--  %s %s\n", number, problems[j], w);
  111.     fclose(fw);
  112.     fclose(fp);
  113.     exit(number);
  114. }
Advertisement
Add Comment
Please, Sign In to add comment