Visualizzazione dei risultati da 1 a 10 su 10

Discussione: [C] Terne pitagoriche

  1. #1

    C++ terne pitagoriche

    dovrei creare un programma che mi trovi tutti i valori minori di 500 che rispettano la regola x^2 + y^2 = z^2 ,ovvero tutte i numeri appartenenti alla terna pitagorica...qualcuno ha un idea di come posso chiedere questa cosa??

    questo è il codie che ho fatto

    codice:
    #include <iostream>
     using namespace std;
    
      int main() { 
    	int x;
     	int y;
     	int z;
     	int k = z*z;
     	int l = y*y;
     	int m = x*x; 
     	 for (x = 1; x<= 500; x++)
     	 { 	  for (y = 1; y <= 500; y++) 
    	  { 	   for (z = 1; z <= 500; z++) 
    	    { 	    if ( m= l + k || k= l + m || l= m + k) 
    	    	     {cout << "La terna è: " << x << y << z << endl;} 	 
                } 	 
              } 	
            }  	
     return 0; 
    }

    però mi da errore di left value alla riga 26 dove c'è l'if ..

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ti ricordo che il confronto in C si ottiene con

    ==

    e non con

    =


    P.S. Ancora non hai imparato che si scrive un titolo adeguato per i thread in questo forum ? In questo modo ti chiuderanno i thread ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Ti ricordo che il confronto in C si ottiene con

    ==

    e non con

    =


    P.S. Ancora non hai imparato che si scrive un titolo adeguato per i thread in questo forum ? In questo modo ti chiuderanno i thread ...

    credo che sia adeguato C++ terne pitagoriche no??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Il fatto è che non c'e' il titolo nell'indice del forum ... non l'hai messo quando hai creato il thread ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    Codice PHP:
    #include <iostream>

    using namespace std;

    int main(){
     
    int x=0;
     for(
    int i=1;i<500;i++){
         for(
    int j=1;j<500;j++){
             for(
    int l=1;l<500;l++){
                 if(
    i*i+j*j==l*l){
                    
    cout<<i<<"-"<<j<<"-"<<l<<"\t";
                    
    x++;
                 }
             }
         }
     }
     
    cout<<"\nCi sono "<<x<<" combinazioni";

    dovrebbe funzionare però secondo me c'è sicuramente un algoritmo più efficiente perché questo non mi convince troppo(anche se l'ho fatto io ) voi che dite?
    cogli l'attimo

  6. #6
    Originariamente inviato da c_junior
    Codice PHP:
    #include <iostream>

    using namespace std;

    int main(){
     
    int x=0;
     for(
    int i=1;i<500;i++){
         for(
    int j=1;j<500;j++){
             for(
    int l=1;l<500;l++){
                 if(
    i*i+j*j==l*l){
                    
    cout<<i<<"-"<<j<<"-"<<l<<"\t";
                    
    x++;
                 }
             }
         }
     }
     
    cout<<"\nCi sono "<<x<<" combinazioni";

    dovrebbe funzionare però secondo me c'è sicuramente un algoritmo più efficiente perché questo non mi convince troppo(anche se l'ho fatto io ) voi che dite?

    ma x a che ti serve???..cmq sembra simile al mio e a me funziona!!

  7. #7
    Originariamente inviato da c_junior
    Codice PHP:
    #include <iostream>

    using namespace std;

    int main(){
     
    int x=0;
     for(
    int i=1;i<500;i++){
         for(
    int j=1;j<500;j++){
             for(
    int l=1;l<500;l++){
                 if(
    i*i+j*j==l*l){
                    
    cout<<i<<"-"<<j<<"-"<<l<<"\t";
                    
    x++;
                 }
             }
         }
     }
     
    cout<<"\nCi sono "<<x<<" combinazioni";

    dovrebbe funzionare però secondo me c'è sicuramente un algoritmo più efficiente perché questo non mi convince troppo(anche se l'ho fatto io ) voi che dite?
    Il ciclo più interno è inutile, basta semplicemente verificare che la radice della somma dei due quadrati non abbia parte decimale.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Credo anche che l'indice del ciclo for centrale j possa essere inizializzato a i e non a 1 (quindi j = i e non j = 1), anzi direi proprio che debba essere fatto così, ottimizzazioni a parte, altrimenti ciascuna terna pitagorica ti verrebbe calcolata due volte... di fatto 3,4,5 e 4,3,5 (e ovviamente tutte le altre) ti vengono calcolate come due terne diverse con quell'algoritmo, pur non essendolo in realtà. Stampando le terne su righe diverse ottengo infatti

    3-4-5
    4-3-5

    5-12-13
    6-8-10
    7-24-25
    8-6-10
    ...
    mentre invece inizializzando j ad i questo non succede, tra l'altro questo migliora anche la complessità di tempo dei primi due cicli for che da quadratica pura (n^2) diventa pari alla somma dei primi n numeri naturali, ossia n*(n+1)/2 = (n^2)/2 + n/2, ossia quasi la metà.
    every day above ground is a good one

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    153
    Originariamente inviato da YuYevon
    Credo anche che l'indice del ciclo for centrale j possa essere inizializzato a i e non a 1 (quindi j = i e non j = 1), anzi direi proprio che debba essere fatto così, ottimizzazioni a parte, altrimenti ciascuna terna pitagorica ti verrebbe calcolata due volte... di fatto 3,4,5 e 4,3,5 (e ovviamente tutte le altre) ti vengono calcolate come due terne diverse con quell'algoritmo, pur non essendolo in realtà. Stampando le terne su righe diverse ottengo infatti
    ah...ma quindi 3 4 5 e 4 3 5 sono da considerare una terna? diciamo che io pensavo fossero tutte delle triple ordinate quindi <3,4,5> è diverso da <4,3,5>
    cogli l'attimo

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Penso che con "terna" si intenda una combinazione di 3 numeri, non una disposizione, quindi l'ordine dovrebbe essere irrilevante. D'altra parte, dagli esempi di Wikipedia sembra essere confermata la cosa, perché c'è ad esempio 3,4,5 ma non anche 4,3,5
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.