PDA

Visualizza la versione completa : [C] Matrici da file in C


ramatto
16-11-2006, 17:08
ciao,
sto programmando in C con lccwin32;
io ho questa matrice in un file:
0 DAT BA CU
DAT 0 12 51
BA 9 0 39
CU 40 31 0


e la devo mettere in una matrice: matrice[righe][colonne];
di che tipo deve essere la matrice?

poi ad esempio, ho una variabile in cui c'è la stringa "DAT"
e ho un'altra variabile dove c'è la stringa "BA",
(la prima variabile si riferisce alla riga e la seconda alla colonna)
come faccio mettere in un altra variabile il valore 12?(intersezione della riga 1 con la colonna 2?)
e di che tipo deve essere questa variabile.
a me serve che 12 sia di tipo int, così riesco a farci delle operazioni,
oppure di tipo char; ma DAT e BA possono essere di tipo char?

Vincent
16-11-2006, 20:32
Mi sembra abbastanza ovvio che la matrice debba essere di char...

Potresti complicarti un pò la vita introducendo una struttura che definisca un nuovo tipo di dato...

In ogni caso il tutto dipende da come vuoi impostare la risoluzione del problema... :ciauz:

ramatto
17-11-2006, 19:56
alla fine l'ho risolto così; può essere fatto meglio?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define lennomefile 50
#define maxrighe 16
#define maxcolonne 16
#define maxstazioni 16

struct stazione{
char stazz[4];
}stazioni[maxstazioni];

int main()
{

FILE *file; /*puntatore al file*/
int i,j;
int matrice[maxrighe][maxcolonne];
char cerca_stazione1[4]; //vettore di caratteri
char cerca_stazione2[4];
char nome_file[lennomefile];
int ind1, ind2, tempo;

printf ("Inserisci il nome del file con la matrice\n");
scanf ("%s",nome_file);

//apre il file e memorizza la matrice in memoria statica
if ((file=fopen(nome_file,"r"))==(NULL))
printf ("Impossibile aprire il file\n");
else{
i=0;
while (!feof(file)){
for (i=0;i<maxrighe;i++)
for (j=0;j<maxcolonne;j++)
fscanf(file,"%d",&matrice[i][j]);
}
fclose(file);
}

/*for (i=0;i<maxrighe;i++)
for (j=0;j<maxcolonne;j++)
printf("\t%d\n",matrice[i][j]); */

printf("Inserisci il nome del file con le stazioni.\n");
scanf ("%s",nome_file);

//apre il file e memorizza la matrice in memoria statica
if ((file=fopen(nome_file,"r"))==(NULL))
printf ("Impossibile aprire il file\n");
else{
i=0;
while (!feof(file)){
for (i=0;i<maxstazioni;i++)
fscanf(file,"%s",stazioni[i].stazz);
}
fclose(file);
}

/*for (i=0; i<maxstazioni; i++)
{
printf("Inserire la stazione: %i\n", i+1);
scanf("%s", stazioni[i].stazz);
}*/
printf("Inserire la 1a stazione da cerca': \n");
scanf("%s", cerca_stazione1);
printf("DEBUG stazione cercata: %s\n", cerca_stazione1);
printf("Inserire la 2a stazione da cerca': \n");
scanf("%s", cerca_stazione2);
printf("DEBUG stazione cercata: %s\n", cerca_stazione2);


for (i=0; i<maxstazioni; i++)
{
if(!strcmp(stazioni[i].stazz, cerca_stazione1)) ind1 = i;
if(!strcmp(stazioni[i].stazz, cerca_stazione2)) ind2 = i;

printf("%d: %s\n",i,stazioni[i].stazz);
}
printf("ind1 = %d, ind2 = %d\n", ind1, ind2);
tempo = matrice[ind1][ind2];
printf("tempo = %d\n", tempo);


return(0);
}

Loading