Newsgroup: it.comp.lang.c
Titolo: AIUTO !!! XCHE NON FUNZIONA

Qual'e' secondo voi il problema con questo stupidissimo programmino ?
Sto forse facendo casino con le funzioni ? Segue listato.
#include <stdio.h>
#include <conio.h>
#define rows 4
#define cols 4
int i,j;
int sommarighe=0;
int sommacolonne=0;
int xprint=2;
int yprint=2;
int tab[rows][cols];
char continua;
char lenghtcntrl;
void FAICONTI(void);
void STAMPA(void);
int SOMMACOLONNE(int i);
int SOMMARIGHE(int j);
void main(void)
{
clrscr();
printf("Inizializzazione matrice\n");
for (i=0;i<(rows-1);i++)
 for (j=0;j<(cols-1);j++)
{
do
{
printf("\nValore riga %d colonna %d : ",i+1,j+1);
scanf("%d",&tab[i][j]);
if (tab[i][j]>999)
{
printf("\nValore troppo grande inserire un numero tra 0 e 999.\n");
lenghtcntrl=1;
}
else lenghtcntrl=0;
}
while (lenghtcntrl);
}
FAICONTI();
STAMPA();
getch();
}
void FAICONTI(void)
{
for (j=0;j<(cols-1);j++)
tab[rows][j]=SOMMARIGHE(j);
for (i=0;i<(rows-1);i++)
tab[cols][i]=SOMMACOLONNE(i);
}
int SOMMARIGHE(int j)
{
for (i=0;i<(rows-1);i++)
sommarighe+=tab[i][j];
return (sommarighe);
}
int SOMMACOLONNE(int i)
{
for (j=0;j<(cols-1);j++)
sommacolonne+=tab[i][j];
return (sommacolonne);
}
void STAMPA(void)
{
clrscr();
tab[rows][cols]=00000;
for (i=0;i<=rows;i++,yprint++)
for (j=0;j<=cols;j++)
{
gotoxy(xprint,yprint);printf("%5d",tab[i][j]);
xprint+=2;
}
} 
Augusto Pucci
Webmaster di Prospektiva On-line
http://go.to/Prospektiva

tab[rows][cols]=00000;
La routine di stampa (oltre ad avere il problema che accede
all'elemento 4 della matrice) non stampa bene perche' :
- la xprint avanza di due caratteri mentre la printf stampa 5 cifre.
questo significa che ogni printf copre parzialmente la precedente (la
prima printf stampa da colonna 3 a 7, la seconda da 5 a 9, etc...)
- la xprint non viene mai azzerata (dovrebbe andare a zero ogni volta
che incrementi la yprint)
Domanda : perche' non usi solo la printf e lasci perdere la gotoxy ?
Puoi benissimo scrivere :
for (i=0;...
 {
 printf("\n");
 for (j=0;...
   {
   printf(%5d", tab....
   }
 }
p.s. se io dovessi fare una cosa del genere memorizzerei le somme
delle righe e delle colonne nei rispettivi elementi 0 cosi' avrei che
tab[1] corrisponde a riga 1, etc...
ciao

 Sto forse facendo casino con le funzioni ? Segue listato.
 Il problema è che se tu dichiari un array, per esempio
int tab[4];
puoi usare solo:
tab[0], tab [1], tab[2], tab[3],
infatti "tab[4]" è una cella di memoria non dichiarata e vai quindi a
scrivere su altri dati
tu sbagli in tutte le righeche fanno:
tab[rows][cols]=...;
inoltre c'erano altri errori.
ti ho sistemato il programma se ho capito cosa volevi fare:
#include <stdio.h>
#include <conio.h>
#define rows 4
#define cols 4
int i,j;



void FAICONTI(void)
{
for (j=0;j<cols;j++)
tab[rows-1][j]=SOMMARIGHE(j);
for (i=0;i<rows;i++)
tab[i][cols-1]=SOMMACOLONNE(i);
}
int SOMMARIGHE(int j)
{
int sommarighe=0;
for (i=0;i<rows;i++)
sommarighe+=tab[i][j];
return (sommarighe);
}
int SOMMACOLONNE(int i)
{
int sommacolonne=0;
for (j=0;j<=cols;j++)
sommacolonne+=tab[i][j];
return (sommacolonne);
}
void STAMPA(void)
{
clrscr();
/*tab[rows][cols]=00000;*/
for (i=0;i<rows;i++,yprint++)
{
printf("\n");
for (j=0;j<cols;j++)
{
/*gotoxy(xprint,yprint);*/
printf("%5d",tab[i][j]);
xprint+=2;
}
}
}