PDA

Visualizza la versione completa : [C] Programma matrici non funzionante in verticale


playbasfa
30-01-2008, 18:20
Ho creato un programma che conta le parole in input e dispone in una matrice ( che finalmente sono riuscito a creare) tanti asterischi quante sono le parole in ingresso, e il progrmma funziona:
codice:



#include<stdio.h>
#include <math.h>
#define R 12
#define C 8

char matrix[R][C];

int getline(char[]);
int contaparole(char[]);
void crea();
void stampa();
void illumina(int,int);
void trovaipunti (int);

main()
{ int k;
char vett[10000];
printf("Inserisci una frase :\n");
getline(vett);
k=contaparole(vett);
printf("Il numero di parole che hai inserito corrispondera' al numero di asterischi..\n");
crea();
trovaipunti(k);
stampa();
getch();
}


void crea()
{
int r,c;
for(r=0;r<R;r++)
for(c=0;c<C;c++)
matrix[r][c]='.';
}

void illumina(int x,int y)
{
matrix[x][y]='*';
}


void stampa()
{
int c,r;
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
printf("%c\t",matrix[r][c]);
printf("\n");
}
}


int getline (char vettore[]){
int c,i=0;
while((c=getchar())!= '\n')
vettore [i++]=c;
if (c=='\n')
vettore[i++]=c;

vettore[i]= '\0';
return i;
}

int contaparole(char line[])
{
int a=0,b=1,i=0,stato,parola=0;
stato=a;
while(line[i]!=EOF)
{
if(line[i]!=' ' && stato==a)
{
i++;
parola++;
stato=b;
}
if(line[i]==' '&& stato==b)
{
stato=a;
i++;
}
else i++;
}
return parola;
}

void trovaipunti (int k)
{
double t,o,c,r;
int h;
t=k/C;
o=floor(t);
if(k<=C)
{
for(r=0;r<=0;r++)
{
for(c=0;c<k;c++)
illumina(r,c);
}

}

if(k>C)
{
for(r=0,h=0;r<=o;r++,h++)
{
for(c=0;c<C && h<=k;c++,h++)
illumina(r,c);
}
}
}






Ho dunque deciso di disporre gli asterischi, non piu' in riga ma in colonna.. Stavolta, se inserisco meno parole del numero di righe, o al piu' uguali, funziona.. se inserisco piu' parole non funziona..
Non riesco a trovare l'errore:





#include<stdio.h>
#include <math.h>
#define R 12
#define C 8

char matrix[R][C];

int getline(char[]); //in colonna
int contaparole(char[]);
void crea();
void stampa();
void illumina(int,int);
void trovaipunti (int);

main()
{ int k;
char vett[10000];
printf("Inserisci una frase :\n");
getline(vett);
k=contaparole(vett);
printf("Il numero di parole che hai inserito corrispondera' al numero di asterischi..\n");
crea();
trovaipunti(k);
stampa();
getch();
}


void crea()
{
int r,c;
for(r=0;r<R;r++)
for(c=0;c<C;c++)
matrix[r][c]='.';
}

void illumina(int x,int y)
{
matrix[x][y]='*';
}


void stampa()
{
int c,r;
for(r=0;r<R;r++)
{
for(c=0;c<C;c++)
printf("%c\t",matrix[r][c]);
printf("\n");
}
}


int getline (char vettore[]){
int c,i=0;
while((c=getchar())!= '\n')
vettore [i++]=c;
if (c=='\n')
vettore[i++]=c;

vettore[i]= '\0';
return i;
}

int contaparole(char line[])
{
int a=0,b=1,i=0,stato,parola=0;
stato=a;
while(line[i]!=EOF)
{
if(line[i]!=' ' && stato==a)
{
i++;
parola++;
stato=b;
}
if(line[i]==' '&& stato==b)
{
stato=a;
i++;
}
else i++;
}
return parola;
}

void trovaipunti (int k)
{
double t,o,c,r;
int h;
t=k/R;
o=floor(t);
if(k<=R)
{
for(r=0;r<k;r++)
{
for(c=0;c<=0;c++)
illumina(r,c);
}

}

if(k>R)
{
for(r=0,h=0;r<=R;r++,h++)
{
for(c=0;c<=o && h<=k;c++,h++)
illumina(r,c);
}
}
}

Loading