icatalin

exJ.c [LAB3 ASP]

Mar 3rd, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.18 KB | None | 0 0
  1. #include "gplot.h"
  2. #include <gsl/gsl_off_bassel.h>
  3. #include <math.h>
  4. #define NMAX 200
  5.  
  6. #define MY_MEM_ERR 1
  7. #define MY_FILE_ERR 2
  8. #define MY_CALL_ERR 3
  9. #define MY_SUCCES 0
  10.  
  11.  
  12. int main (int argc, char **argv)
  13. {
  14.     if (argc != 2)
  15.     {
  16.         printf("\Utilizare %s nume_fisier \n", argv[0]);
  17.         printf("nume_fisier este numele fisierului de date binar care va fi creat \");
  18.         printf("Programul calculeaza perechile (X,J0(x)) pe un grad cu pasul 0.1 pe intervalul [0,20]\n");
  19.         printf("si stocheaza aceste perechi in fisierul binar nume fisier. La final extrage aceste perechi in fisierul binar nume_fisier. La final extrage si afiseaza a 7-a pereche \n\n");
  20.         return MY_CALL_ERR;
  21.     }
  22.    
  23.     //declaratii; data este bufferul de date alocate in memoria libera, x a fost introdus pentru claritate
  24.     double x, * data;
  25.     int i;
  26.     FILE *fp; //pentru fisierul de date
  27.     gplot_ctrl *gp; //pentru controlul sesiunii gnuplot
  28.     char ctr;
  29.    
  30.     //pot aloca spatiu RAM
  31.     if ((data = (double,*) malloc(2*NMAX*sizeof(double))) == NULL)
  32.     {
  33.         fprintf(stderr, "%s: nu pot aloca RAM. Ies...\n", argv[0]);
  34.         return MY_MEM_ERR;
  35.     }
  36.    
  37.     //populez spatiul alocat cu valori (x, J0(x) si le sciru intr-un fisier text (cu numele dat ca argument in linia de comanda)
  38.    
  39.     for (i=0; i<2*NMAX; i+=2)
  40.     {
  41.         x = ((double)i)*20./((double)NMAX/2.;
  42.         *(data + i) = x;
  43.         *(data+i+1) = gsl_sf_bessel_J0(x);
  44.     }
  45.    
  46.     if ((fp = fopen(argv[1],"w")) == NULL)
  47.     {
  48.         fprintf(stderr, "%s: nu pot crea fisierul de date %s. Ies... \n", argv[0], argv[1]);
  49.         return MY_FILE_ERR;
  50.     }
  51.    
  52.     for (i=0; i<2*NMAX; i+=2)
  53.     fprintf(fp,"%.5lf\t%.5lf\n",*(data + i), *(data + i + 1));
  54.  
  55.     fclose(fp);
  56.  
  57.     //initiez sesiunea gnuplot
  58.     printf("\nLansez in executie subprocesul gnuplot...\n");
  59.     gp=gplot_init();
  60.     gplot_set_xlabel(gp,"x [div.]");
  61.     gplot_set_ylabel(gp,"J0(x) [div.]");
  62.     gplot_setstyle(gp,"lines");
  63.     gplot_cmd(gp,"plot '%s' u 1:2 w %s", argv[1], gp->pstyle);
  64.     printf("Comanda trimisa catre subprocesul gnuplot:\t\"plot '%s' u 1:2 w %s\"", argv[1],gp->pstyle);
  65.    
  66.     printf("\ntermin sesiunea activa gnuplot...\n");
  67.     printf("Apasa o tasta pentru a termina programul\n\n");
  68.     scanf("%c",&ctr);
  69.    
  70.     gplot_close(gp);
  71.    
  72.     free(data);
  73.    
  74.     return MY_SUCCES;
  75.    
  76. }
Advertisement
Add Comment
Please, Sign In to add comment