Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    [C] Lista numeri scomponibili in somma di due quadrati

    Ciao a tutti come da titolo dovrei fare un programma,sicuramente banale e spero non offensivo per voi, che,dato un certo numero n inserito da tastiera,vada a controllare che ogni numero da 1 ad n possa essere scomposto come somma di quadrati,una volta stabilito ciò bisogna stampare la lista dei numeri che effettivamente possono essere riscritti come somma di due quadrati.

    Per esempio, se n=8
    avremo:
    2=1^2 + 1^2
    5=1^2 + 2^2
    8=2^2 + 2^2

    In effetti il programmino,per come l'ho scritto,sembra funzionare,l'unica cosa,un pò fastidiosa è il fatto che ignori la proprietà commutativa,quindi mi scrive due volte il 5 per esempio.Sapete come evitare queste ripetizioni senza dover usare controlli tra array o cose del genere?

    (tra l'altro ciò non si verifica per il primo e l'ultimo valore,immagino perchè entrambi partano da 1 a ciclare e c'è un solo caso in cui entrambi sono a 1 per esempio)

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    /*    ->VARIANTE<-
    SCRIVERE UN PROGRAMMA CHE LEGGE UN INTERO POSITIVO N E STAMPA LA SEQUENZA DI TUTTI I NUMERI SCOMPONIBILI COME SOMMA DI DUE QUADRATI*/
    
    
    // primoA=primo Addendo secondoA=secondo Addendo
    
    
    
    int main()
    {
        int a,primoA,secondoA,tot,n;
        
        printf("\n inserisci numero\n\n");
        scanf("%d",&n);
        
        for(int z=1;z<=n;z++)
        {
            a=z;    
            for(int i=1;i<=a;i++)
            {
                    primoA=i*i;
                    for(int j=1;j<=a;j++)
                    {
                            secondoA=j*j;
                            tot=primoA+secondoA;
                            if(tot==a)
                            {
                                      
                                      printf("\n%d = [ %d^2 + %d^2 ]\n",z,i,j);
                                      
                            }
                    }
                            
            }
        }
       
        system ("pause");
        return 0;
    }
    Grazie mille.
    Ultima modifica di MItaly; 20-10-2013 a 16:54

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2001
    Messaggi
    3,259
    Ciao,

    una soluzione semplice: potresti utilizzare un flag che attivi quando hai trovato la combinazione valida. Tale flag lo potresti poi controllare per uscire dal ciclo, perché tanto non ti interessa continuare per quel numero, giusto?

    (vedi parte codice in grassetto)



    Quote Originariamente inviata da Satiro88 Visualizza il messaggio
    Ciao a tutti come da titolo dovrei fare un programma,sicuramente banale e spero non offensivo per voi, che,dato un certo numero n inserito da tastiera,vada a controllare che ogni numero da 1 ad n possa essere scomposto come somma di quadrati,una volta stabilito ciò bisogna stampare la lista dei numeri che effettivamente possono essere riscritti come somma di due quadrati.

    Per esempio, se n=8
    avremo:
    2=1^2 + 1^2
    5=1^2 + 2^2
    8=2^2 + 2^2

    In effetti il programmino,per come l'ho scritto,sembra funzionare,l'unica cosa,un pò fastidiosa è il fatto che ignori la proprietà commutativa,quindi mi scrive due volte il 5 per esempio.Sapete come evitare queste ripetizioni senza dover usare controlli tra array o cose del genere?

    (tra l'altro ciò non si verifica per il primo e l'ultimo valore,immagino perchè entrambi partano da 1 a ciclare e c'è un solo caso in cui entrambi sono a 1 per esempio)

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    
    /*    ->VARIANTE<-
    SCRIVERE UN PROGRAMMA CHE LEGGE UN INTERO POSITIVO N E STAMPA LA SEQUENZA DI TUTTI I NUMERI SCOMPONIBILI COME SOMMA DI DUE QUADRATI*/
    
    
    // primoA=primo Addendo secondoA=secondo Addendo
    
    
    
    int main()
    {
        int a,primoA,secondoA,tot,n,found;
        
        printf("\n inserisci numero\n\n");
        scanf("%d",&n);
        
        for(int z=1;z<=n;z++)
        {
            a=z;   
            found=0; 
            for(int i=1;i<=a;i++)
            {
                    if(found==1)break;
                    primoA=i*i;
                    for(int j=1;j<=a;j++)
                    {
                            if(found==1)break;
                            secondoA=j*j;
                            tot=primoA+secondoA;
                            if(tot==a)
                            {
                                      
                                      printf("\n%d = [ %d^2 + %d^2 ]\n",z,i,j);
                                      found=1;
                                      
                            }
                    }
                            
            }
        }
       
        system ("pause");
        return 0;
    }
    Grazie mille.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Quote Originariamente inviata da Dennis Visualizza il messaggio
    Ciao,

    una soluzione semplice: potresti utilizzare un flag che attivi quando hai trovato la combinazione valida. Tale flag lo potresti poi controllare per uscire dal ciclo, perché tanto non ti interessa continuare per quel numero, giusto?

    (vedi parte codice in grassetto)

    Grazie,stavo pensando anche io a qualcosa di simile anche se i break non piacciono molto al docente XD,grazie ancora ciao!

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.