Newsgroup: it.comp.lang.c
Titolo: Qualè il migliore ???

ciao ragazzi,
Arrivo subito al nocciolo della questione.. 
Quale tra questi due semplici programmini secondo voi č il migliore??
Entrambi fanno correttamente il proprio lavoro (almeno penso) ,li ho
provati entrambi e funzionano correttamente. 
Ecco i due proggrammini entrambi determinano il piů grande e il piů
piccolo di 3 numeri.
/*primo prog*/
#include <stdio.h>
main()
{
.	int a,b,c;
        printf ("Inserire 3 numeri\n\n");
        scanf  ("%d %d %d",&a ,&b ,&c);
         if ((a>b)&&(a>c))
	 .      printf ("\nIl piů grande č %d\n",a);
         .	else if ((b>c)&&(b>a))
         .	.	printf ("\nIl piů grande č %d\n",b);
         .	else
         .	.	printf ("\nIl piů grande č %d\n",c);
         if ((a<b)&&(a<c))
         .	printf ("\nIl piů piccolo č %d\n",a);
         .	else if ((b<a)&&(b<c))
	 .	.	printf ("\nIl piů piccolo č %d\n",b);
         .	else
         .	.	printf ("\nIl piů piccolo č %d\n",c);
}  
/*secondo prog*/
#include <stdio.h>
main()
 {
 	int a, b, c;
        printf ("\nDigita 3 valori");
        scanf  ("%d", &a);
        scanf  ("%d", &b);
        scanf  ("%d", &c);
        if (a>b)
        .	if (a>c) {
        .       . 	printf ("Il maggiore č: %d\n", a);
        .       .       if (b<c)
        .       .       .  	printf ("Il minore č : %d\n", b);
        .       .       else
        .       .       .  	printf ("Il minore č : %d\n", c);
        .       }
        .       else {
        .       .	printf ("Il maggiore č : %d\n", c);
        .       .       printf ("Il minore č : %d\n", b);
        .       }
        else
        .	if (b>c) {
        .       . 	printf ("Il maggiore č : %d\n", b);
        .       .       if (a<c)
        .       .       . 	printf ("Il minore č : %d\n", a);
        .       .       else
        .       .       . 	printf ("Il minore č : %d\n", c);
        .       }
        .       else {
        .       . 	printf ("Il maggiore č : %d\n", c);
        .       .       printf ("Il minore č : %d\n", a);
        .       }
        }
Qual'č il piů efficente e il piů leggibile ???
Il primo l'ho creato io il secondo č la soluzione di un esercizio che 
ho trovato su un libro di C .
Scusate per il lunghissimo messaggio ma non sapevo come risolvere questo
mio dubbio da neo-programmatore di C.
Spero di non aver detto nessuna cazzata.
Ciao a tutti .
     Krě3g
 

 Qual'è il più efficente e il più leggibile ???
non li ho gurdato molto in fino, ma guardando al volo, il secondo sembra
piu' leggibile. Riguardo alla velocita' di esecuzione del codice non ti
preoccupare nemmeno di questa cosa per tale problema....
Valuta anche una cosa cosi':
int piu_grande = max(max(a,b),c);
int piu_piccolo = min(min(a,b),c);
printf ("Il maggiore : %d\n", piu_grande);
printf ("Il minore : %d\n", piu_piccolo);
Entrambi i codici che hai postato sono pieni di IF, ELSE ed hanno tantissime
printf anche se in realta' vanno sempre e comunque stampate solo due
stringhe. Il codice sopra identifica il piu' grande e lo mette in una var,
idem per il piu' piccolo e poi.... stampi questi due valori.
max(a,b) ritorna il piu' grande di a e b quindi:
max(max(a,b),c); ritorna il piu' grande tra il piu' grande tra quello che
max(a,b) ha ritornato e c.
max e min possono essere implementati come funzioni, mantenendo il codice
pulito se semplice. Alternativamente possono essere implementati come MACRO:
#define max(a,b)( ((a)>(b))?(a):(b) )
#define min(a,b)( ((a)<(b))?(a):(b) )
se metti questo due righe dopo l'#includes tutto funziona, ma .....
attenzione alle macro sono pericolose ;-)
Implementare la stessa cosa come funzione (se le hai studiate) e' una
soluzione meno pericolosa, specialmente per un principiante.
Tommy

 Tommy
Grazie 1000 per i chiarimenti Tommy e per il tempo che mi hai concesso.
E scusa per la mia infinita curiosità.
Per qualsiasi cosa fammi un fischio!! ;) oK??
ciao 
 Kri3g

 Per qualsiasi cosa fammi un fischio!! ;) oK??
Non so fino a che punto tutta questa discussione su un problema cosi'
semplice possa essere utile ;-)
Tommy

 Qual'è il più efficente e il più leggibile ???
Per quanto riguarda l'efficienza, cosi' a intuito direi che e' meglio il
secondo, perché sfrutta una parte di informazioni derivate dalla ricerca del
massimo per trovare anche il minimo.
Il primo programma invece fa prima una ricerca del massimo e poi riparte da
capo facendo una ricerca del minimo.
Un po' piu' rigorosamente, stabilendo come unita' di misura della
complessita' il numero di confronti (mi sembra plausibile)
il secondo costa  sempre 3. Il primo costa nel caso migliore 4...
Per quanto riguarda la questione delle printf, e' vero che la soluzione del
libro ne ha 10 ma possono essere semplicemente ridotte a 6 accorpando la
stampa del massimo e del minimo.
Ciao,
Ema

 semplice possa essere utile ;-)
Invece mi è stata molto utile...
mi hai risposto ad una domanda che non sono riuscuto a  trovare ,per ora,
in nessun libro. 
Grazie Tommy, grazie Ema ce ne fosse di persone come voi!!! ;)
ciao
   Kri3g