PDA

View Full Version : [C] Problema con programma tabelline


wino_7
21-03-2008, 13:01
Salve sono nuovo del forum e anche un novello del C, sto facendo un esercizio in cui è richiesto di stamapre a video la tabellina di un numero.

ES.
01234
11234
22468
336912
4481216

Questo è quello che sono riuscito a fare da solo, (cioè ben poco).


#include <stdio.h>

main()
{

int i, j, m = 0, n = 1, s;

for (i= 0; i < 5; i++)
{

for(j = 0; j < 5; j++)
{
s = m * n;
printf("%d", s);
m++;

if(m == 5)
{
m = 1;
n = 1;
}

}
printf("\n");
}

system("PAUSE");
return;
}


Per favore potete darmi qualche spunto???
P.s sono 2 giorni che ci ragiono su

wingman87
21-03-2008, 13:11
Dovresti commentare un po' il codice, così si può capire se l'errore sta nel ragionamento o solo nel codice.
Così ad occhio posso dirti che stai usando m e n quando potresti molto più semplicemente sfruttare gli indici dei cicli i e j. Inoltre n non lo modifichi mai.

PS:ad ogni modo la tabellina dello 0 è sempre 0

wino_7
21-03-2008, 13:18
/*In questo caso voglio la tabellina del 4, la stampa deve essere così

0 1 2 3 4
1 1 2 3 4
2 2 4 6 8
3 3 6 9 12
4 4 8 12 15

*/

#include <stdio.h>

main()
{

int i, j, m = 0, n = 1, s; /*Uso 'i' e 'j' per i cicli, 'm' e 'n' sono i numeri da moltiplicare e 's' è la somma*/

/*Uso i due cicli, il primo per scrivere 5 volte sulla riga, il secondo per scrivere le 5 righe*/

for (i= 0; i < 5; i++)
{

for(j = 0; j < 5; j++)
{
s = m * n;
printf("%d", s);
m++;

if(m == 5)
{
m = 1; /*Il problema lo incontro già alla seconda riga della stampa
perchè se fate caso in ogni riga tranne che nella prima i primi due numeri sono uguali
per questo ho pensato ad un 'if' che mi controlla se sto per iniziare una nuova riga*/
n = 1;
}

}
printf("\n");
}

system("PAUSE");
return;
}

X3llo5
21-03-2008, 13:34
Salve sono nuovo del forum e anche un novello del C, sto facendo un esercizio in cui è richiesto di stamapre a video la tabellina di un numero.

ES.
01234
11234
22468
336912
4481216

Questo è quello che sono riuscito a fare da solo, (cioè ben poco).


#include <stdio.h>

main()
{

int i, j, m = 0, n = 1, s;

for (i= 0; i < 5; i++)
{

for(j = 0; j < 5; j++)
{
s = m * n;
printf("%d", s);
m++;

if(m == 5)
{
m = 1;
n = 1;
}

}
printf("\n");
}

system("PAUSE");
return;
}


Per favore potete darmi qualche spunto???
P.s sono 2 giorni che ci ragiono su

La prima cosa che ho notato.

così tu fai
0*1
poi
1*1
poi
2*1
ecc.

quando cambi n?

wino_7
21-03-2008, 13:38
E' questo che non riesco a fare, poi il mio problema se leggi il mio ultimo post sta nel fatto che a ogni riga i primi due numeri sono uguali e se li metto in un ciclo e incremento si incremento anche la prima volta e non vengono mai uguali.

F@lkland§
21-03-2008, 13:46
mah non riesco a capire il tuo ragionamento....io avrei fatto semplicemente uno switch sul numero da calcolare la tabellina e per ogni case un ciclo for per fare le moltiplicazioni...

andbin
21-03-2008, 13:46
Per fare quell'output è sufficiente usare solamente gli indici 'i' e 'j' e nient'altro.

X3llo5
21-03-2008, 13:47
#include <stdio.h>

main()
{

int i, j, m = 1, n = 1, s; /*Uso 'i' e 'j' per i cicli, 'm' e 'n' sono i numeri da moltiplicare e 's' è la somma*/ /*non dovevi fare il prodotto?*/


for (i= 0; i < 5; i++)
{

for(j = 0; j < 5; j++)
{
s = m * n;
printf("%d_", s); // con _ almeno separi i numeri
m++;
/*
if(m == 5)
{
m = 1; /*Il problema lo incontro già alla seconda riga della stampa
perchè se fate caso in ogni riga tranne che nella prima i primi due numeri sono uguali
per questo ho pensato ad un 'if' che mi controlla se sto per iniziare una nuova riga*/
n = 1;
}
*/ questo non ti serve, se stampi anche j vedrai che quando m assume 5 esce dal ciclo quindi non entrerà mai in questo for.

}
printf("\n");
m=1; /*così ricominci*/
n++; /*così passa alla "tebellina successiva"*/

}

system("PAUSE"); /*non dovresti usare chiamate al sistema, rendono il codice non portabile*/
return;
}



usa il tag code, e non php
questo dovrebbe aiutarti

brigoly
21-03-2008, 14:07
forse ti puo' aiutare questo:


#include <stdio.h>
int main()
{
int n_MAXtocalc=10; /*numero sino a cui eseguire la tabellina*/
int tot_tocalc=10; /*numero sino a cui eseguire la tabellina*/
int result=0;
int i=0;
int j=0;
printf("\n\n--Welcome nel programma per calcolo Tabellina:\n\n\n");
for(j=0;j<=n_MAXtocalc;j++)
{
printf("\n----------------------------------------------------");
printf("\nTabellina in base:%d\n",j);
for(i=0;i<=tot_tocalc;i++)
{
result=i*j;
printf("Base:%d, Moltiplicatore:%d,Risultato:%d\n",j,i,result);
}
printf("\n----------------------------------------------------");
}
return 0;
}

mclele
23-03-2008, 00:25
non sarebbe male nemmeno:



#include <stdio.h>

int main ()

{
int r;
int c;

for (r = 1; r <= 10; r++)
{
for (c = 1; c <= 10; c++)
{
printf("%3d ", r * c );
}
printf("\n");
}
return 0;
}


un semplice ciclo annidato a volte ti risolve la vita :read:

brigoly
23-03-2008, 03:45
non sarebbe male nemmeno:



#include <stdio.h>

int main ()

{
int r;
int c;

for (r = 1; r <= 10; r++)
{
for (c = 1; c <= 10; c++)
{
printf("%3d ", r * c );
}
printf("\n");
}
return 0;
}


un semplice ciclo annidato a volte ti risolve la vita :read:

che è il gemello di cui sopra;)