fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Funzione per scrivere i dati nel file "DatiCompleti.txt"
  5. void write_data_file(int rows) {
  6. FILE *file = fopen("DatiCompleti.txt", "w");
  7. if (!file) {
  8. printf("Errore nell'apertura del file!\n");
  9. return;
  10. }
  11.  
  12. double col1, col2, col3, col4;
  13. printf("Inserisci i dati per %d righe (4 colonne ciascuna):\n", rows);
  14.  
  15. for (int i = 0; i < rows; ++i) {
  16. printf("Riga %d\n", i + 1);
  17. printf("Colonna 1: ");
  18. scanf("%lf", &col1);
  19. printf("Colonna 2: ");
  20. scanf("%lf", &col2);
  21. printf("Colonna 3: ");
  22. scanf("%lf", &col3);
  23. printf("Colonna 4: ");
  24. scanf("%lf", &col4);
  25.  
  26. fprintf(file, "%.2lf\t%.2lf\t%.2lf\t%.2lf\n", col1, col2, col3, col4);
  27. }
  28.  
  29. fclose(file);
  30. printf("Dati salvati in 'DatiCompleti.txt'.\n");
  31. }
  32.  
  33. // Funzione per dividere i dati nei file "Colonne1e3.txt" e "Colonne2e4.txt"
  34. void split_data_files(int rows) {
  35. FILE *file = fopen("DatiCompleti.txt", "r");
  36. FILE *file1 = fopen("Colonne1e3.txt", "w");
  37. FILE *file2 = fopen("Colonne2e4.txt", "w");
  38.  
  39. if (!file || !file1 || !file2) {
  40. printf("Errore nell'apertura dei file!\n");
  41. return;
  42. }
  43.  
  44. double col1, col2, col3, col4;
  45. for (int i = 0; i < rows; ++i) {
  46. fscanf(file, "%lf\t%lf\t%lf\t%lf", &col1, &col2, &col3, &col4);
  47. fprintf(file1, "%.2lf\t%.2lf\n", col1, col3);
  48. fprintf(file2, "%.2lf\t%.2lf\n", col2, col4);
  49. }
  50.  
  51. fclose(file);
  52. fclose(file1);
  53. fclose(file2);
  54. printf("Dati divisi in 'Colonne1e3.txt' e 'Colonne2e4.txt'.\n");
  55. }
  56.  
  57. // Funzione per generare grafici utilizzando gnuplot
  58. void generate_plots() {
  59. FILE *gnuplot = popen("gnuplot", "w");
  60. if (gnuplot == NULL) {
  61. printf("Errore nell'avvio di gnuplot.\n");
  62. return;
  63. }
  64.  
  65. // Comandi per il primo grafico (Colonna 1 e Colonna 3)
  66. fprintf(gnuplot, "set terminal pngcairo size 800,600\n");
  67. fprintf(gnuplot, "set output 'grafico_colonne1e3.png'\n");
  68. fprintf(gnuplot, "set title 'Grafico a punti: Colonna 1 vs Colonna 3'\n");
  69. fprintf(gnuplot, "set xlabel 'Colonna 1'\n");
  70. fprintf(gnuplot, "set ylabel 'Colonna 3'\n");
  71. fprintf(gnuplot, "set grid\n");
  72. fprintf(gnuplot, "plot 'Colonne1e3.txt' using 1:2 with points pointtype 7 title 'Dati (1,3)'\n");
  73.  
  74. // Comandi per il secondo grafico (Colonna 2 e Colonna 4)
  75. fprintf(gnuplot, "set output 'grafico_colonne2e4.png'\n");
  76. fprintf(gnuplot, "set title 'Grafico con punti e linee: Colonna 2 vs Colonna 4'\n");
  77. fprintf(gnuplot, "set xlabel 'Colonna 2'\n");
  78. fprintf(gnuplot, "set ylabel 'Colonna 4'\n");
  79. fprintf(gnuplot, "plot 'Colonne2e4.txt' using 1:2 with linespoints linewidth 2 title 'Dati (2,4)'\n");
  80.  
  81. pclose(gnuplot);
  82. printf("Grafici generati: 'grafico_colonne1e3.png' e 'grafico_colonne2e4.png'.\n");
  83. }
  84.  
  85. // Funzione principale
  86. int main() {
  87. int rows;
  88. printf("Quante righe di dati vuoi inserire? ");
  89. scanf("%d", &rows);
  90.  
  91. if (rows <= 0) {
  92. printf("Il numero di righe deve essere positivo.\n");
  93. return 1;
  94. }
  95.  
  96. write_data_file(rows);
  97. split_data_files(rows);
  98. generate_plots();
  99.  
  100. printf("Operazione completata.\n");
  101. return 0;
  102. }
  103.  
Success #stdin #stdout #stderr 0.01s 5284KB
stdin
Standard input is empty
stdout
Quante righe di dati vuoi inserire? Errore nell'apertura del file!
Errore nell'apertura dei file!
Grafici generati: 'grafico_colonne1e3.png' e 'grafico_colonne2e4.png'.
Operazione completata.
stderr
sh: 1: gnuplot: not found