PDA

Visualizza la versione completa : [c] Ricorda Le X Della Matrice


maurymg
13-02-2008, 02:17
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:


#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;
}

Loading