Tabella da visualizzare con serial monitor

Buongiorno a tutti,
dovrei visualizzare la seguente tabella sul serial monitor di Arduino utilizzando due cicli for annidati:

1 0 0 0 0
1 2 0 0 0
1 2 3 0 0
1 2 3 4 0
1 2 3 4 5

Sono riuscito a visualizzare:

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

con il seguente sketch:

int ,i,j;

void setup() {
Serial.begin(9600);

for (i=1;i<=5;i++)

{
for(j=1;j<=i;j++)
{Serial.print(j);
Serial.print("\t"); }
Serial.println("");
}
}
void loop() {
}

Potreste darmi indicazioni su come visualizzare anche gli zeri a fine di ogni riga?
Grazie a tutti

Probabilmente solo con un if, se la cifra è valore 0 allora stampi un carattere '0'

Forse anche convertendo il numero in testo con Serial.print( char(i+48) );

Grazie per la risposta.
Ho provato con ciclo "if", ma niente, si tratta di somme quindi non si verifica che la variabile "j" assuma valore "0"

Ti basta aggiunge un altro FOR per gli zeri …

int i, j, k;

void setup() {
   Serial.begin(9600);

   for (i = 1; i <= 5; i++) {
      for (j = 1; j <= i; j++) {
         Serial.print(j);
         Serial.print("\t");
      }
      for (k = i + 1; k <= 5; k++) {
         Serial.print("0");
         Serial.print("\t");
      }      
      Serial.println("");
   }
}
void loop() {
}

Guglielmo

Oops, non avevo fatto caso al secondo for che si basa sulla i del primo. Chissà perchè ho pensato che non stampasse gli 0 perchè … zero !?! Sorry.

Come dice Guglielmo oppure anche il for j interno lo fai sempre da 1 a 5 e con if se j<=i stampi j altrimenti 0

for (i=1;i<=5;i++)
{ for(j=1;j<=5;j++)
 { Serial.print( ( j<=i ? j : 0 ) );           // if in linea  ( test ? vero : falso )
   Serial.print("\t");  
 }
 Serial.println(""); 
}

Sapreste indicarmi come visualizzare gli zero con un comando "if"?

Ti ha messo un ‘IF’ solo che non lo vedi perché ha usato l’operatore ‘ternario’

In pratica “j<=i ? j : 0” è un ‘IF’ scritto in un modo differente. Quell’espressione valuta SE j <= i allora ritorna j, altrimenti ritorna 0.

Guglielmo

Ho provato ma visualizzo un solo zero e non il completamento dell'intera riga

A me il codice di Nid funziona correttamente (… e non vedo perché non dovrebbe) …

1	0	0	0	0	
1	2	0	0	0	
1	2	3	0	0	
1	2	3	4	0	
1	2	3	4	5

… devi aver commesso tu qualche errore nel copiare il for.

In pratica devi avere:

int i, j, k;

void setup() {
   Serial.begin(9600);

   for (i = 1; i <= 5; i++) {
      for (j = 1; j <= 5; j++) {
         Serial.print( ( j <= i ? j : 0 ) );         // if in linea  ( test ? vero : falso )
         Serial.print("\t");
      }
      Serial.println("");
   }
}

void loop() {
}

Guglielmo

Non mi riferivo al codice NID postato ma al solo utilizzo di un codice "if"

... modifica il codice di Nid sostituendo opportunamente l'operatore 'ternario' con una IF ::slight_smile:

O vuoi fare altro ? ? ?

Guglielmo

Vorrei fare questo ma non riesco

for (i=1;i<=5;i++)
{ for(j=1;j<=5;j++)
 { if( j<=i ) 
   { Serial.print(j); }
   else
   { Serial.print(0); }
   Serial.print("\t");  
 }
 Serial.println(""); 
}

Grazie mille nid69ita!

Avresti una soluzione anche per questa tabella?

0 0 0 0 5
0 0 0 4 5
0 0 3 4 5
0 2 3 4 5
1 2 3 4 5

NON siamo qui per fare i tuoi "compiti" ...
... ti abbiamo fatto vedere vari modi di fare la cosa nell'altro caso; ora, mettiti li, studiaci bene sopra e poi facci vedere quello che hai fatto, cosa ottieni e dicci dove incontri difficoltà.

Guglielmo

P.S.: ... e tieni presente il punto 16.1 del REGOLAMENTO

Sono arrivato a questo punto ma visualizzo la tabella speculare rispetto a ciò che vorrei

for(i=5;i>=1;i--)
{
for(j=5;j>=i;j--)
{
Serial.print(j);
Serial.print("\t");
}
Serial.println("");
}

Prova a ragionare sul secondo for ... che non necessariamente deve essere uguale al primo, anzi ... :wink:

Guglielmo

P.S.: E devi anche aggiungere l'IF per vedere se stampare 0 o il valore.

Eccola, mi restano sempre gli zero da inserire con “if”

for(i=5;i>=1;i–)
{
for(j=i;j<=5;j++)
{
Serial.print(j);
Serial.print("\t");
}
Serial.println("");
}

disne:
Eccola, mi restano sempre gli zero da inserire con "if" ...

Beh, prendi spunto dal post di Nid e inseriscili :wink:

Guglielmo

Purtroppo visualizzo gli zero dopo i numeri e non prima

5 0 0 0 0
5 4 0 0 0
5 4 0 0 0
5 4 3 0 0
5 4 3 2 1