Advertisement
Paarzivall

mainzKonsoli

May 16th, 2018
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct daneKW{
  6.     double a, b, c, xf, xl, krok;
  7.     int steps;
  8. };
  9.  
  10. double f(struct daneKW, double);
  11. int ZapisDoBin(char*, struct daneKW);
  12. void czytajDane(struct daneKW *);
  13. double LiczKroki(struct daneKW);
  14. void pokazDane(struct daneKW);
  15. void czytajzBin(char *);
  16. int ZapisDoTxt(char *, struct daneKW);
  17. void czytajzTxt(char *);
  18.  
  19. int main(int argc, char *argv[])
  20. {
  21.     struct daneKW dane;
  22.     char nazwaPliku[256];
  23.     int success;
  24.    
  25.     if(argc == 2)
  26.     {
  27.         if(strstr(argv[1], ".bin")!=NULL)
  28.         {
  29.             czytajzBin(argv[1]);
  30.             success = 0;
  31.         }
  32.         else if(strstr(argv[1], ".txt")!=NULL)
  33.         {
  34.             czytajzTxt(argv[1]);
  35.             success=0;
  36.         }
  37.         else
  38.         {
  39.             printf("Blad!!!");
  40.             success = -1;
  41.         }
  42.     }
  43.     else if(argc == 8)
  44.     {
  45.         dane.a = strtof(argv[1], NULL);
  46.         dane.b = strtof(argv[2], NULL);
  47.         dane.c = strtof(argv[3], NULL);
  48.         dane.xf = strtof(argv[4], NULL);
  49.         dane.xl = strtof(argv[5], NULL);
  50.         dane.steps = (int)strtol(argv[6], NULL, 10);
  51.         strcpy(nazwaPliku, argv[7]);
  52.         printf ("%s\n", nazwaPliku);
  53.         pokazDane(dane);
  54.             if(strstr(argv[7], ".bin")!=NULL)
  55.             {
  56.                 success = ZapisDoBin(argv[7], dane);
  57.             }
  58.             else if(strstr(argv[7], ".txt")!=NULL)
  59.             {
  60.                 success = ZapisDoTxt(argv[7], dane);
  61.             }
  62.             else
  63.             {
  64.                 printf("Blad!!!\nZle rozszerzenie");
  65.                 success = -1;  
  66.             }  
  67.     }
  68.     else if(argc == 1)
  69.     {
  70.         printf("Podaj nazwe pliku do ktorego chcesz zapisac dane(.bin albo .txt)");
  71.         gets(nazwaPliku);
  72.         czytajDane(&dane);
  73.         printf("%s\n", nazwaPliku);
  74.         pokazDane(dane);
  75.             if(strstr(nazwaPliku, ".bin")!=NULL)
  76.             {
  77.                 success = ZapisDoBin(nazwaPliku, dane);
  78.             }
  79.             else if(strstr(nazwaPliku, ".txt")!=NULL)
  80.             {
  81.                 success = ZapisDoTxt(nazwaPliku, dane);
  82.             }
  83.             else
  84.             {
  85.                 printf("Blad!!!\nZle rozszerzenie");
  86.                 success = -1;  
  87.             }  
  88.     }  
  89.     else
  90.     {
  91.         success = 0;
  92.     }
  93. return success;
  94. }
  95.  
  96. double f(struct daneKW daneK, double x)
  97. {
  98.     return (daneK.a*x*x) + (daneK.b*x) + daneK.c;
  99. }
  100.  
  101. int ZapisDoBin(char * nazwaPliku, struct daneKW daneK)
  102. {
  103.     FILE * plik;
  104.     int ile = 1;
  105.     double x, fx, step;
  106.    
  107.     plik = fopen(nazwaPliku, "wb");
  108.     if(ferror(plik))    return 0;
  109.    
  110.     step = LiczKroki(daneK);
  111.        for(x = daneK.xf; daneK.steps-- > 0; x+=step)
  112.        {
  113.             fx = f(daneK, x);
  114.             fwrite(&ile, sizeof(int), 1, plik);
  115.                 if(ferror(plik)) return 0;
  116.             fwrite(&x, sizeof(double), 1, plik);
  117.                 if(ferror(plik)) return 0;
  118.             fwrite(&fx, sizeof(double), 1, plik);
  119.                 if(ferror(plik)) return 0;
  120.             ile++;
  121.         }
  122.     fclose(plik);
  123.     return 1;
  124. }
  125.  
  126. void czytajDane(struct daneKW * daneK)
  127. {
  128.     printf("Podaj a ");
  129.         scanf("%lf", &daneK->a);
  130.     printf("Podaj b ");
  131.         scanf("%lf", &daneK->b);
  132.     printf("Podaj c ");
  133.         scanf("%lf", &daneK->c);
  134.     printf("Podaj x start ");
  135.         scanf("%lf", &daneK->xf);
  136.     printf("Podaj x koniec ");
  137.         scanf("%lf", &daneK->xl);
  138.     printf("Podaj ile krokow ");
  139.         scanf("%d", &daneK->steps);
  140. }
  141.  
  142. double LiczKroki(struct daneKW daneK)
  143. {
  144.     return ((daneK.xl - daneK.xf)/(double)(daneK.steps - 1));
  145. }
  146.  
  147. void pokazDane(struct daneKW daneK)
  148. {
  149.         printf("\nWczytane dane:\na=%f\nb=%f\nc=%f\nxf=%f\nxl=%f\nsteps=%d\n\n", daneK.a, daneK.b, daneK.c, daneK.xf, daneK.xl, daneK.steps);
  150. }
  151.  
  152. void czytajzBin(char * filename) {
  153.     FILE * plik;
  154.     int n;
  155.     double x, fx;
  156.    
  157.     plik = fopen(filename, "rb");
  158.     printf("n\t|\tx\t|\tf(x)\n");
  159.     printf("----------------------------------------\n");
  160.     rewind(plik);
  161.     while(!feof(plik)) {
  162.         fread(&n, sizeof(int), 1, plik);
  163.         if(ferror(plik) || feof(plik)) break;
  164.         fread(&x, sizeof(double), 1, plik);
  165.         fread(&fx, sizeof(double), 1, plik);
  166.         printf("%d\t|%13.6f\t|%13.6f\n", n, x, fx);
  167.     }
  168.     fclose(plik);
  169. }
  170.  
  171. int ZapisDoTxt(char * nazwaPliku, struct daneKW daneK)
  172. {
  173.     double x, step;
  174.     int ile = 1;
  175.     FILE * plikT;
  176.    
  177.     step = LiczKroki(daneK);
  178.    
  179.     plikT = fopen(nazwaPliku,"w");
  180.     if(ferror(plikT)) return 0;
  181.    
  182.     fprintf(plikT, "%d\n", daneK.steps);
  183.     for(x = daneK.xf; daneK.steps-- > 0; x+=step)
  184.     {
  185.         fprintf(plikT, "%d %f %f\n", ile++, x, f(daneK, x));
  186.         if(ferror(plikT))   return 0;
  187.     }    
  188.     if(ferror(plikT)) return 0;
  189.     fclose(plikT);
  190.     return 1;
  191. }
  192.  
  193. void czytajzTxt(char * nazwaPliku) {
  194.     int n, i, ile;
  195.     double x, fx;
  196.     FILE * plik;
  197.    
  198.     plik = fopen(nazwaPliku, "r");
  199.     fscanf(plik, "%d", &n);
  200.     printf("%d\n", n);
  201.     printf("n\t|\tx\t|\tf(x)\n");
  202.     printf("----------------------------------------\n");
  203.     for(i = 0; i < n; i++) {
  204.         fscanf(plik, "%d %lf %lf", &ile, &x, &fx);
  205.         printf("%d\t|%13.6f\t|%13.6f\n", ile, x, fx);
  206.     }
  207.     fclose(plik);    
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement