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.