/* Nome: Mario Cognome: Montanari Classe: 3AIN Data: 07/05/2025 1) Apre un file binario in modalità di lettura binaria ("rb"), 2) Legge fino a 100 interi dal file e memorizza i valori letti nell'array dati. 3) Successivamente, stampa il numero effettivo di valori letti utilizzando la funzione fread. 4) Testarlo: - sui file dell’es1 - su un file di testo contenente “1234567\n” 5) Dai file "file_70.bin", "file_100.bin" e "file_200.bin” 6) Leggere il 30° valore 7) Leggere il 2° valore 8) Leggere il penultimo 9) Leggerne uno a caso */ #include #include #include #define DIM 100 #define VAL_MIN 0 #define VAL_MAX 100 using namespace std; int main(void) { srand(time(NULL)); FILE * file_70 = fopen("file_70.bin", "rb"); FILE * file_100 = fopen("file_100.bin", "rb"); FILE * file_200 = fopen("file_200.bin", "rb"); FILE * file_7 = fopen("file_7.txt", "rt"); if (file_70 != NULL && file_100 != NULL && file_200 != NULL && file_7 != NULL) { int dati_70[DIM] = {0}; int dati_100[DIM] = {0}; int dati_200[DIM * 2] = {0}; // --- Lettura dei file binari --- int letti_70 = fread(dati_70, sizeof(int), DIM, file_70); int letti_100 = fread(dati_100, sizeof(int), DIM, file_100); int letti_200 = fread(dati_200, sizeof(int), DIM * 2, file_200); cout << "Valori letti da file_70.bin (" << letti_70 << "): "; for (int i = 0; i < letti_70; i++) { cout << dati_70[i] << " "; } cout << endl << endl; cout << "Valori letti da file_100.bin (" << letti_100 << "): "; for (int i = 0; i < letti_100; i++) { cout << dati_100[i] << " "; } cout << endl << endl; cout << "Valori letti da file_200.bin (" << letti_200 << "): "; for (int i = 0; i < letti_200; i++) { cout << dati_200[i] << " "; } cout << endl << endl; // --- Lettura del file di testo --- int x; int i = 0; cout << "Valori letti da file_7.txt: "; while (fscanf(file_7, "%d", &x) == 1 && i < DIM) { cout << x << endl; i++; } cout << "Totale valori letti dal file_7.txt: " << i << endl << endl; // --- Estrazione dei valori specifici --- if (letti_70 >= 30) { cout << "30esimo valore nel file_70.bin: " << dati_70[29] << endl; } if (letti_100 >= 30) { cout << "30esimo valore nel file_100.bin: " << dati_100[29] << endl; } if (letti_200 >= 30) { cout << "30esimo valore nel file_200.bin: " << dati_200[29] << endl; } cout << endl; if (letti_70 >= 2) { cout << "Secondo valore nel file_70.bin: " << dati_70[1] << endl; } if (letti_100 >= 2) { cout << "Secondo valore nel file_100.bin: " << dati_100[1] << endl; } if (letti_200 >= 2) { cout << "Secondo valore nel file_200.bin: " << dati_200[1] << endl; } cout << endl; if (letti_70 >= 2) { cout << "Penultimo valore nel file_70.bin: " << dati_70[letti_70 - 2] << endl; } if (letti_100 >= 2) { cout << "Penultimo valore nel file_100.bin: " << dati_100[letti_100 - 2] << endl; } if (letti_200 >= 2) { cout << "Penultimo valore nel file_200.bin: " << dati_200[letti_200 - 2] << endl; } cout << endl; // --- Valori casuali --- if (letti_70 > 0) { int casual = rand() % letti_70; cout << "Valore letto casualmente da file_70.bin: " << dati_70[casual] << endl; } if (letti_100 > 0) { int casual = rand() % letti_100; cout << "Valore letto casualmente da file_100.bin: " << dati_100[casual] << endl; } if (letti_200 > 0) { int casual = rand() % letti_200; cout << "Valore letto casualmente da file_200.bin: " << dati_200[casual] << endl; } fclose(file_70); fclose(file_100); fclose(file_200); fclose(file_7); } else { perror("Error"); } return 0; }