Ciao a tutti ragazzi, scusate per l'orario.
Volevo fare un programma che realizzasse la seguente:
si scriva un programma capace prendere in ingresso una matrice 30*30;
Tale matrice contiene in alcune righe il carrattere 'x'. Quando in una riga ci sono delle x queste devono essere di sguito.
Per capirci se la matrice fosse fatta di 6 colonne sarebbe ammessa qualcosa di questo tipo:
serxxx
mentre non sarebbe ammessa qualcosa del tipo:
xdxfx
Il programma deve essere in grado di stampare una matrice, in cui bisogna disporre in ogni riga, nella cella in cui c'era la prima x letta dal file in ingresso, la lettera O seguita dal numero di x che si susseguiranno in quella riga.
Io ho provato a fare questo programma ma viene fuori una matrice fatta tutta di "."
Io ho infatti creato una matrice di "." e poi sono andato a sostiturie nelle posizioni in cui si riscontravano le x, cio' che il programma richiedeva... evidentemente quindi non ci sono riuscito..
Ecco il sorgente:
codice:#include <stdio.h> void controllaO(char[], int ); void riempiOmatrice(char[][]); int getline(char[], FILE *); void stampamatrice(char[][]); void riempimatrice(char[][]); void inizializzaprom (); int promemoriaO[30][3]; main(int argc, char *argv[]) { FILE *finO; finO=fopen(argv[1],"r"); int len,r=0; char matrice [30][30]; char line [100]; inizializzaprom(); while((len=getline(line,finO))>0) controllaO(line,r++); riempimatrice(matrice); riempiOmatrice(matrice); stampamatrice(matrice); } void controllaO (char line[], int r) { int i,fine,iniz; for(i=0; line[i]!='\0'; i++) { if (line[i]=='x' && line[i-1]!='x') iniz=i; if (line[i]!='x' && line [i-1]=='x') fine=i; } promemoriaO[r][0]=r; promemoriaO[r][1]=iniz; promemoriaO[r][2]=fine; } void riempiOmatrice(char matrice[][30]) { int r; for(r=0; promemoriaO[r][0]>0; r++) { matrice[promemoriaO[r][0]][promemoriaO[r][1]]='O'; matrice[promemoriaO[r][0]][promemoriaO[r][1]+ 1]=promemoriaO[r][2]; } } void stampamatrice(char matrice[][30]) { int c,r; for(r=0;r<30;r++) { for(c=0;c<30;c++) printf("%c",matrice[r][c]); printf("\n"); } } int getline(char s[], FILE *f) { int c, i; for (i=0; (c=getc(f)) != EOF && c != '\n'; i++) s[i]=c; if (c=='\n') { s[i]=c; ++i; } s[i]='\0'; return i; } void riempimatrice(char matrice[][30]) { int r,c; for(r=0;r<30;r++) for(c=0;c<30;c++) matrice[r][c]='.'; } void inizializzaprom() { int r,c; for(r=0; r<30;r++) for(c=0; c<3;c++) promemoriaO[r][c]=-1; }

Rispondi quotando