Matrice da file

di il
3 risposte

Matrice da file

Salve a tutti, io dovrei riuscire a costruire una matrice da file,in fase di compilazione qualche warning, ma in esecuzione mi da segmentation fault.... facendo varie prove ho visto ke il problema è nella funzione inserisci matrice
#include <stdlib.h>
#include <stdio.h>

int conta_righe(void);
void inserisci_in_matrice(int**, int);
void stampa_matrice(int**, int);

int main (void){
	int **matrice;
	int n;
	int i,
	    j;
	

	n=conta_righe();
	printf("il numero di righe è %d",n);	

	/*allocazione array di puntatori alle righe*/
	matrice = (int **)malloc(sizeof (int *)*(n));

	/*allocazione riga per ogni puntatore dell'array*/
	for (i = 0; i < n; i++)	
	    matrice[i] = (int *) malloc (sizeof(int)*(n));
	

	inserisci_in_matrice(matrice, n);
	stampa_matrice(matrice, n);
	
	return(0);
}
/*definizione della funzione per inserire i valori da file nella lista*/
int conta_righe(void)
{
	/*dichiarazione delle variabili locali alla funzione*/
	int		contatore,
			carattere;	
	FILE		*file_citta;	/*lavoro: puntatore al file di input*/
		
	/*aprire il file*/
	file_citta = fopen("citta.txt",
			       "r");

	/*verificare esistenza file matricole.txt*/
	if (file_citta == NULL)
		printf("\nFile inesistente\n");
	
	else
	/*il file esiste, quindi prendere dati in input da file*/
	{
		/*assegnare al contatore il valore '0' come inizio per l'iterazione*/
		contatore = 0;
		
		/*contare le righe della della matrice da file*/
		while ((carattere = getc (file_citta)) != ',')		
			if (carattere == '\n')
				contatore++;
		
		/*chiudere il file*/
		fclose(file_citta);

	return(contatore);
	}
}
void inserisci_in_matrice(int **matrice, int numero_righe){
		
	FILE	*file_citta;
	int	h = 0,		/*variabile contatore*/
		i=0,
		carattere,
		b;
	
		/*aprire il file*/
		file_citta = fopen("citta.txt",
				       "r");
	
		/*acquisire valori triple matricola da file*/
		while ((carattere = getc (file_citta)) != EOF)	{	
		
			fscanf(file_citta,
			       "%d",&b);
			matrice[h][i]=b;
			i++;
			if(i== numero_righe -1){
			i=0;
			h++;
			}		
	}
		fclose(file_citta);
}
void stampa_matrice(int **matrice, int numero_righe){
	
	int k,
	    v;

	for(k = 0; k < numero_righe; k++)
		for(v = 0; v < numero_righe; v++)
			printf("%d",matrice [k][v]);
}
e il file di testo è questo
roma roma 00 genova 15 salento 89 padova 55 milano 87
genova roma 15 genova 00 salento 32 padova -1 milano 45
salento roma 89 genova 32 salento 00 padova 22 milano -1
padova roma 55 genova -1 salento 22 padova 00 milano 99
milano roma 87 genova 45 salento -1 padova 99 milano 00
,
lo scopo sarebbe creare un grafo da matrice e calcolare il percorso minimo.. io pensavo di fare qst matrice, poi fare la matrice cn gli 0 e 1 e qujalla dei padri per poi passare il tutto alla funzione di floyd warshall.. va bn o mi è sfuggito qualcosa?? grazie anticipatamente

3 Risposte

  • Re: Matrice da file

    Ho provato a fare la funizone mett in lista in questo modo ma mi da valori ke io non presenti nel file e molti zeri
    void inserisci_in_matrice(int **matrice, int numero_righe){
    		
    	FILE	*file_citta;
    	int	h,		/*variabile contatore*/
    		i,
    		carattere;
    	
    		/*aprire il file*/
    		file_citta = fopen("citta.txt",
    				       "r");
    	
    			for(i=0;(i<numero_righe) && (!feof(file_citta));i++){
    				for(h=0;(h<numero_righe) && (!feof(file_citta));h++)
    					fscanf(file_citta,"%d",&matrice[i][h]);
    		}
    		fclose(file_citta);
    }
    vi prego aiutatemiiiiiii e ditemi se per creare un grafo con matrice di adiacenza sto operando bene, altrimenti accetto suggerimenti moooooolto volentieri
  • Re: Matrice da file

    Non ho capito bene cosa vuoi fare. prova a spiegare meglio, almeno così proverò ad aiutarti.
  • Re: Matrice da file

    Ok.. io dovrei costruire un grafo da matrice di adiacenza per poi calcolare il percorso minimo cn la funzione di floyd warshall.... io volevo mettere nella mia matrice tutte le distanze (numeri) presenti nel file di testo senza prendere le stringhe, ho provato a fare un file di testo cn soli numeri e cn questo metodo funziona , ma siccome nel mio file ci sono anke parole non funziona anke se gli dico di prendere solo gli interi....se riesco a fare qst matrice di conseguenza creerò qll dei padri e qll cn gli 0 e gli 1 poi passerò il tutto alla funzione di floyd... può andare bn così x creare un grafo cn matrice di adiacenza e calcolare la distanza minima o sono fuori strada??
Devi accedere o registrarti per scrivere nel forum
3 risposte