[C] Statistiche elementari su file testuale

di il
1 risposte

[C] Statistiche elementari su file testuale

Salve, stavo provando a fare un algoritmo per l'università che era stato dato come tema d'esame, il testo è questo:

Scrivere un programma per il calcolo di statistiche sui caratteri presenti in un file di testo il cui nome è specificato come primo
parametro sulla riga di comando. Il file contiene un testo, suddiviso in una o più linee di lunghezza pari al più a 100 caratteri
cadauna. Ogni linea e' terminata da un carattere 'a capo'.
Nel calcolo delle statistiche, il programma considera i caratteri letti dal file AD ECCEZIONE DEGLI SPAZI E DEGLI 'A CAPO'.
Esso fornisce in uscita:
- il numero di linee presenti nel file;
- il numero totale di caratteri;
- il numero massimo e il numero medio di caratteri per linea;
- il testo completo della linea più lunga presente nel file.
Ad esempio, dato il file contenente il seguente testo:
Prova di contenuto di file
per avere un esempio.
Non e' importante quello che c'e' scritto
presente.

il programma visualizza:
Linee: 4
Car: 84
Max, Med: 35, 21
Linea max: Non e' importante quello che c'e' scritto

Per creare l'algoritmo ho creato una matrice di i caratteri (caratteri di ogni riga) e j righe (numero di righe lette a schermo):
#include <stdio.h>
#define MAX 100
int main()
{
	int med, max, nrighe, ncaratteri[MAX], media, i, j, k, cartotali, rigamax;
	typedef char Parole[MAX];
	typedef Parole Righe[MAX];
	i = 0;
	j = 0;
	k = 0;
	nrighe = 0;
	cartotali = 0;
	max = 0;
	med = 0;
	rigamax = 0;
	while ((i < 100) && (Parole[j][i] != '\0'))
	{
		i = 0;
		while ((i < 100) && (Parole[j][i] != '\n'))
		{
			scanf("%c", &Parole[j][i]);
			if ((Parole[j][i] != ' ') || (Parole[j][i] != '\n'))
			{
				ncaratteri[k]++;
			}
			i++;
			cartotali = cartotali + ncaratteri[k];
			if (ncaratteri[k] > max)
			{
				max = ncaratteri[k];
			}
			rigamax = k;
		}
		j++;
		k++;
		nrighe = j - 1;		
	}
	med = cartotali / nrighe;
	printf("Linee=%d", nrighe);
	printf("Caratteri totali=%d", cartotali);
	printf("Caratteri massimi per riga=%d", max);
	printf("Caratteri medi per riga=%d", med);
	printf("Linea massima=%s", Righe[rigamax]);
	return 0;
}

in università ci hanno detto che per indicare un certo elemento della matrice bisogna dire NomeMatrice[j]. Solo che quando compilo il programma ogni volta che scrivo cosi mi dice "expected primary-expression before '[' token". Sapete cosa ho sbagliato? Come lo avreste scritto voi l'algoritmo? Il mio funziona?
Grazie mille a chi risponderà.

1 Risposte

  • Re: [C] Statistiche elementari su file testuale

    Ma la matrice a che ti serve?
    Io sarei partito dallo scrivere una funzione che dato in input una stringa mi ritorna il numero di caratteri presenti.
    Fatto questo, e verificato che la funzione sia corretta, sarei passato a buttare giù un ciclo con feof()/fgets() per leggere una alla volta tutte le righe, in un buffer/stringa temporaneo (magari userei un'altra costante, es MAXDIMSTR impostandolo almeno a MAX+1, ma mettendola anche a 200, tanto mica si paga la memoria ).
    A questo punto basta mettere insieme i pezzi: ad ogni fgets() richiamo la funzione di conta caratteri.
    - il numero di linee presenti nel file;
    - il numero totale di caratteri;
    - il numero massimo e il numero medio di caratteri per linea;
    - il testo completo della linea più lunga presente nel file.
    Tutto questo si determina facilmente inserendo un contatore di righe, un contatore di caratteri totali (la media la calcolo alla fine), una variabile per il massimo numero di caratteri su una riga e una stringa per farci uno strcpy() della stringa con più caratteri
Devi accedere o registrarti per scrivere nel forum
1 risposte