Go Down

Topic: Tabella da visualizzare con serial monitor (Read 702 times) previous topic - next topic

disne

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

nid69ita

#1
Dec 18, 2017, 10:05 am Last Edit: Dec 18, 2017, 10:07 am by nid69ita
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) );
my name is IGOR, not AIGOR

disne

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"

gpb01

Ti basta aggiunge un altro FOR per gli zeri ...

Code: [Select]
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
Search is Your friend ... or I am Your enemy !

nid69ita

#4
Dec 18, 2017, 03:49 pm Last Edit: Dec 18, 2017, 03:54 pm by nid69ita
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

Code: [Select]
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("");
}


my name is IGOR, not AIGOR

disne

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

gpb01

#6
Jan 11, 2018, 01:40 pm Last Edit: Jan 11, 2018, 01:41 pm by gpb01
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
Search is Your friend ... or I am Your enemy !

disne

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

gpb01

#8
Jan 11, 2018, 02:08 pm Last Edit: Jan 11, 2018, 02:09 pm by gpb01
A me il codice di Nid funziona correttamente (... e non vedo perché non dovrebbe) ...

Code: [Select]
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:

Code: [Select]
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
Search is Your friend ... or I am Your enemy !

disne

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

gpb01

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

O vuoi fare altro ? ? ?

Guglielmo
Search is Your friend ... or I am Your enemy !

disne


nid69ita

#12
Jan 12, 2018, 08:59 am Last Edit: Jan 12, 2018, 09:00 am by nid69ita
Code: [Select]
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("");
}
my name is IGOR, not AIGOR

disne

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

gpb01

#14
Jan 12, 2018, 09:41 am Last Edit: Jan 12, 2018, 09:43 am by gpb01
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
Search is Your friend ... or I am Your enemy !

Go Up