Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*temat 15*/
- #pragma warning (disable: 4996)
- #include <stdio.h>
- #include <stdlib.h>
- #include<stdbool.h>
- #define MAX 4
- FILE *fp; //wyniki
- FILE *fw; //dane
- //pobieranie danych
- void take_data(FILE *, double *, int);
- //alokowanie pamieci
- double *memory_allocation(int);
- //dodawanie wektorow
- void add_vector(double *, double *, int);
- //wypisywanie do pliku
- void write_data(FILE *, double *, int);
- //bledy
- void error(int, char *);
- int main()
- {
- int n, m;
- double *vector,*sum;
- if (!(fw = fopen("dane.txt", "r") )) error(2, "dane");
- if (!(fp = fopen("wyniki.txt", "w"))) error(2, "wyniki");
- long savedoffset = ftell(fw); //pierwszy wskaznik
- fseek(fw, 0, SEEK_END);// wskaznik na koncu pliku
- if (ftell(fw) == 0) //jesli aktualny wskaznik pliku jest zero to znaczy ze plik pusty
- error(2, "dane - plik pusty");
- fseek(fw, savedoffset, SEEK_SET); //powrot na poczatek pliku
- /*SEEK_SET - Przenosi pozycję wskaźnika pliku na początek pliku.
- SEEK_END - Przesuwa pozycję wskaźnika pliku na koniec pliku.*/
- if (!(fscanf(fw, "%d", &n))) error(1, "wymiar wektora"); //wymiar wektora
- //mozna switcha machnac z menu albo sumowanie ilosci wektorow wpisane albo do konca pliku jak jest teraz
- /*if (!(fscanf(fw, "%d", &m))) error(1, "ilosc wektorow do sumowania");*/ // ilosc wektorow
- if (!(vector = memory_allocation(n))) error(3, "vector");
- if (!(sum = memory_allocation(n))) error(3, "sum");
- //printf("dodawanie %d wektorow !!!\n\n",m);
- for (int i = 0; feof(fw)== 0; i++) //sumuje wszystkie wektory bedące w pliku
- {
- take_data(fw, vector, n);
- add_vector(sum, vector, n);
- }
- write_data(fp, sum, n);
- if (vector) {
- free(vector);
- vector == NULL;
- }
- if (sum) {
- free(sum);
- sum == NULL;
- }
- fclose(fw);
- fclose(fp);
- return 0;
- }
- double *memory_allocation(int n) // Alokacja pamięci
- {
- return (double*)calloc((unsigned)n, sizeof(double)); //calloc zeruje tablice
- }
- void take_data(FILE *fd, double *vect, int n)// Czytanie elementów tablicy z pliku
- {
- int k = 0;
- for (k = 0; k < n; k++)
- {
- if (!(fscanf(fd, "%lf", &vect[k]))) error(1, "niepoprawne skladowe wektora");
- }
- }
- void add_vector(double *sum, double *x, int n)//Obliczanie sumy dwóch wektorów
- {
- int k = 0;
- for (k = 0; k < n; k++)
- {
- sum[k] += x[k];
- }
- }
- void write_data(FILE *fg, double *vect, int n)// Pisanie elementów tablicy do pliku
- {
- int k = 0;
- fprintf(fw, "suma Wektorow = [");
- for (k = 0; k < n; k++)
- {
- fprintf(fg, " %lf ", vect[k]);
- if (k != n - 1) fprintf(fw, ",");
- }
- fprintf(fw, "]\n");
- printf("wynik dodawania w pliku wyniki.txt\n");
- }
- void error(int number, char *w) // bledy
- {
- char *problems[] = { ""," zle dane : "," otwarcie pliku : "," blad alokacji pamieci : " };
- int j;
- j = number >= MAX ? MAX : number;
- printf("Wystapil Blad(%d) -- %s %s\n", number, problems[j], w);
- fprintf(fp, "Wystapil Blad(%d)-- %s %s\n", number, problems[j], w);
- fclose(fw);
- fclose(fp);
- exit(number);
- }
Advertisement
Add Comment
Please, Sign In to add comment