Sviluppiamo un algoritmo che calcola il massimo tra numeri letti da un file, usando le funzioni fopen(), fscanf(), fclose() e feof().

Quindi mettiamo in pratica le funzioni che abbiamo studiato nelle precedenti lezioni.

Scrivere quindi un programma in C che apre in lettura un file di testo di nome “numeri.txt” che contiene dei valori numerici. Dopo aver controllato possibili errori di apertura del file, il programma deve calcolare il valore massimo di tutti i numeri presenti nel file.

Innanzitutto apriamo in lettura (r) il file di nome numeri.txt con la funzione fopen. Diamo quindi un messaggio di errore di apertura file se il puntatore restituisce il valore NULL. In questo caso l’errore si può presentare se ad esempio il file che si tenta di aprire non esiste.

Prendiamo il primo elemento del nostro file e lo assegniamo alla variabile max:

if(!feof(fp))
fscanf(fp,”%d\n”, &max);

Banner Pubblicitario

Ricordiamo che fscanf è la funzione che permette di leggere da un file in modo formattato.

Quindi scorriamo tutto il file andando a leggere il valore numerico. Se il valore che leggiamo è maggiore del nostro valore max allora lo sostituisco.

Infine chiudiamo il file con fclose e visualizziamo in output il numero massimo.

Ecco dunque il listato completo del programma per il calcolo del massimo tra numeri letti da un file:

#include <stdio.h>
#include <stdlib.h>
#define N 5

int main() {
	FILE *fp;
	int  max, voto;
	
	if((fp=fopen("numeri.txt", "rt"))==NULL) {
		printf("Errore nell'apertura del file'");
		exit(1);
	}
	
	//prende il primo elemento e lo inserisce in max
	if(!feof(fp))
		fscanf(fp,"%d\n", &max);
	
	//scorre gli altri elementi e li confronta con il massimo	
	while(!feof(fp)){
		fscanf(fp,"%d\n", &voto);
		if (voto>max)
			max=voto;
	}
			printf("voto: %d\n", max);
	fclose(fp);
	
return 0;
	
}

Ecco lo stesso esercizio sviluppato utilizzando la funzione max_file:

#include <stdio.h>
#include <stdlib.h>
#define N 5


int max_file(char *nomefile, int *max) {
	FILE *fp;
	int voto;
	
	if((fp=fopen(nomefile, "r"))==NULL) {
		printf("Errore nell'apertura del file'");
	exit(1);
	}
	
	//prende il primo elemento e lo inserisce in max
	if(!feof(fp))
		fscanf(fp,"%d\n", max);
		
	while(!feof(fp)){
		fscanf(fp,"%d\n", &voto);
		if (voto>*max)
			*max=voto;
	}
	
	fclose(fp);
	
	return 1;
}


void main() {
	int massimo;

	max_file("numeri.txt", &massimo);
	printf("il massimo: %d", massimo);
}

Chiaramente questa è solo una possibile soluzione all’algoritmo per il calcolo del massimo tra numeri letti da un file.

Alcuni link utili

Media per riga e per colonna

Banner pubblicitario

Somma elementi diagonale principale di una matrice

Come sommare gli elementi della cornice esterna

Come sommare due matrici

Sommare dei numeri di una matrice

Matrice trasposta

Prodotto tra matrici

Ricerca elementi in una matrice

Inserire dati in una matrice

Tavola pitagorica in C

Array multidimensionali

Programma sui triangoli in C

Media dei numeri in un array

Array con numeri random

Quick sort in C

Selection sort in C

Merge sort in C

Insertion Sort in C