Pagina 1 di 2

Tavola pitagorica

MessaggioInviato: 9 ago 2014, 18:09
da angrigio
Ho un problema da proporre alla vostra attenzione:
devo generare una tabella pitagorica che visualizzi il seguente contenuto:

X 1 2 3 4 5
1 1 2 3 4 5
2 2 4 6 8 10
3 3 6 9 12 15
4 4 8 12 16 20
5 5 10 15 20 25

Ho costruito un programma in linguaggio c per risolvere il problema ma non ho ottenuto grandi risultati
Codice: Seleziona tutto
#include<stdio.h>
int main()
{
   int a,b;
   for (a = 1 ; a <= 5 ;  a = a + 1)
      printf("%-3d",a);
      printf("\n");
      for (a = 1 ; a <= 5 ;  a = a + 1)
      for (b = 1 ; b <= 5 ;  b = b + 1)
   
   printf("%-3d %-3d ", a*1, a*b );
   
    printf("\n");
   
      
   return 0;
}

Ho bisogno di suggerimenti per correggere il codice e generare la tabella pitagorica

Re: TAVOLA PITAGORICA

MessaggioInviato: 9 ago 2014, 18:41
da simo85

Re: TAVOLA PITAGORICA

MessaggioInviato: 9 ago 2014, 18:55
da angrigio
L'esercizio deve essere risolto usando cicli di for o elementi di selezione if.
Le istruzioni per generare vettori o puntatori non le ho ancora fatte.

Re: TAVOLA PITAGORICA

MessaggioInviato: 9 ago 2014, 19:23
da simo85
Bene.

Allora ragiona su questo ciclo for annidato:

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
  int ir = 0, ic = 0;

  for(ir = 1; ir < 6; ir++)
  {
    for(ic = 1; ic < 6; ic++)
      printf("%2d\t", ir * ic);
   
    printf("\n");
  }

  return 0;
}


Compila ed esegui.
Ragionaci sopra, prova a moficarlo.

Se ti trovi in difficoltà ne parliamo assieme.

Il programma lo puoi anche scrivere cosi:

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
  int ir = 0, ic = 0;

  for(ir = 0; ir < 5; ir++)
  {
    for(ic = 0; ic < 5; ic++)
      printf("%2d\t", (ir + 1) * (ic + 1));
   
    printf("\n");
  }

  return 0;
}

Re: TAVOLA PITAGORICA

MessaggioInviato: 9 ago 2014, 20:42
da angrigio
Ho modificato il codice cosi':

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
  int ir = 0, ic = 0;
  printf("X\n");

  for(ir = 1; ir < 6; ir++)
  { 
     printf("%2d\t", ir);
     for(ic = 1; ic < 6; ic++)
     printf("%2d\t", ic);
     printf("%2d\t", ir * ic);
     printf("\n");
  }
 
  return 0 ;
}



l'output di uscita e':
X
1 1 2 3 4 5 6
2 1 2 3 4 5 12
3 1 2 3 4 5 18
4 1 2 3 4 5 24
5 1 2 3 4 5 30



Non so dove sto sbagliando...

Re: TAVOLA PITAGORICA

MessaggioInviato: 9 ago 2014, 22:55
da simo85
Devi stampare la X all' interno del ciclo for annidato.

Come vedi, nelle due linee (orizzontale e verticale) colorare ci sono 6 caratteri, da X a 5.

X 1 2 3 4 5
1 1 2 3 4 5
2 2 4 6 8 10
3 3 6 9 12 15
4 4 8 12 16 20
5 5 10 15 20 25

E la X la stampi quando ir = ...

Re: TAVOLA PITAGORICA

MessaggioInviato: 10 ago 2014, 11:16
da angrigio
Dovrebbe stampare una sequenza in orizzontale dei primi 5 numeri .

Re: TAVOLA PITAGORICA

MessaggioInviato: 10 ago 2014, 11:25
da angrigio
Quando ir va da 1 a 5

Re: TAVOLA PITAGORICA

MessaggioInviato: 10 ago 2014, 13:53
da simo85
angrigio ha scritto:Dovrebbe stampare una sequenza in orizzontale dei primi 5 numeri .

angrigio ha scritto:Quando ir va da 1 a 5


Non ho capito bene quale delle due è la risposta a quando stampare la X.
Forse ti confondono un po' i for annidati.

Se è cosi, con lo scopo di farti capire meglio, cosa deduci osservando ed anche eseguendo questo codice ?

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
   int ir = 0, ic = 0;

   for(ir = 0; ir < 6; ir++)
   {
      printf("ir ");
      
      for(ic = 1; ic < 6; ic++)
         printf("ic ");

      printf("\n");
   }

   return 0;
}


Come vedi è molto facile sostituire gli argomenti della printf perché vengano stampati i numeri..
Prima hai detto che devi usare gli if-else, e non ti sbagliavi. :-)

Re: TAVOLA PITAGORICA

MessaggioInviato: 10 ago 2014, 14:20
da angrigio
Ho testato il progamma ,l'output è:
ir ic ic ic ic ic
ir ic ic ic ic ic
ir ic ic ic ic ic
ir ic ic ic ic ic
ir ic ic ic ic ic
ir ic ic ic ic ic
Mi stampa la colonna ir poi la riga ic e successivamente tutte le righe ic.
Ho poi modificato il testo del programma:

Codice: Seleziona tutto
#include <stdio.h>

int main(void)
{
   int ir = 0, ic = 0;

   for(ir = 1; ir < 6; ir++)
   {
      printf("%d ",ir);
     
      for(ic = 1; ic < 6; ic++)
         printf("%d ",ic*ir);

      printf("\n");
   }

   return 0;
}

La stampa dell'esercizio e' praticamente risolta.
Grazie mille.
Avrei bisogno di capire meglio i cicli di for annidati