freesky

task_sem3_1.16

Nov 22nd, 2013
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.36 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include "spline.h"
  5.  
  6. #define C_M 44.094
  7. #define C_R 0.083144
  8. #define C_T 370
  9.  
  10. int n; // number of nodes
  11. double *dataP, *dataD; // data arrays
  12. double *c; // service array for spline()
  13.  
  14. void readData() {
  15.     FILE *f = fopen("data.dat", "r");
  16.  
  17.     if (!f) {
  18.         printf("Ошибка чтения файла данных data.dat!\n");
  19.         exit(1);
  20.     }
  21.  
  22.     fscanf(f, "%d", &n);
  23.  
  24.     dataP = (double *)malloc(sizeof(double) * n);
  25.     dataD = (double *)malloc(sizeof(double) * n);
  26.     c = (double *)malloc(sizeof(double) * n * 3);
  27.  
  28.     for (int i = 0; i < n; i++) {
  29.         fscanf(f, "%lf", (dataP + i));
  30.         fscanf(f, "%lf", (dataD + i));
  31.     }
  32.  
  33.     fclose(f);
  34. }
  35.  
  36. double f(double p, double d) {
  37.     return p * C_M / (d * C_R * C_T);
  38. }
  39.  
  40. int main(int argc, char *argv[]) {
  41.     double *z;
  42.     FILE *fout;
  43.  
  44.     readData();
  45.  
  46.     // way #1
  47.     spline(n, dataP, dataD, c);
  48.     fout = fopen("way1.dat", "w");
  49.    
  50.     for (double p = 0.1; p <= 0.9; p += 0.1)
  51.         fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
  52.    
  53.     for (double p = 1.0; p < 10.0; p += 1.0)
  54.         fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));  
  55.    
  56.     for (double p = 10.0; p < 100.0; p += 10.0)
  57.         fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
  58.    
  59.     for (double p = 100.0; p <= 600.0; p += 50.0)
  60.         fprintf(fout, "%.10lf\t%.10lf\n", p, f(p, seval(n, p, dataP, dataD, c)));
  61.  
  62.     fclose(fout);
  63.  
  64.     // way #2
  65.     z = (double *)malloc(sizeof(double) * n);
  66.  
  67.     for (int i = 0; i < n; i++)
  68.         *(z + i) = f(*(dataP + i), *(dataD + i));
  69.  
  70.     spline(n, dataP, z, c);
  71.     fout = fopen("way2.dat", "w");
  72.  
  73.     for (double p = 0.1; p <= 0.9; p += 0.1)
  74.         fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
  75.    
  76.     for (double p = 1.0; p < 10.0; p += 1.0)
  77.         fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));  
  78.    
  79.     for (double p = 10.0; p < 100.0; p += 10.0)
  80.         fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
  81.    
  82.     for (double p = 100.0; p <= 600.0; p += 50.0)
  83.         fprintf(fout, "%.10lf\t%.10lf\n", p, seval(n, p, dataP, z, c));
  84.  
  85.     fclose(fout);
  86.  
  87.     free(dataP);
  88.     free(dataD);
  89.     free(c);
  90.     free(z);
  91.  
  92.     return 0;
  93. }
Advertisement
Add Comment
Please, Sign In to add comment