Newsgroup: it.comp.lang.c
Titolo: BANALE ma non ci riesco: Maggiore e minore

Un programma che dati 5 numeri interi ne determini il minore e il
maggiore, questo non funziona bene, perché? grazie infinite! ma sono
agli inizi con il C.
#include <stdio.h>
int main ()
{
   int a, b, c, d, e;
   printf("Inserisci 5 numeri interi: ");
   scanf("%d%d%d%d%d", &a, &b, &c, &d, &e);
   if (a>b)
     if (a>c)
       if (a>d)
        if (a>e)
          printf("Tra tutti i valori inseriti %d e' il maggiore\n",
a);
          else
          printf("Tra tutti i valori inseriti %d e' il minore\n", e);
    if (b>a)
     if (b>c)
       if (b>d)
        if (b>e)
          printf("Tra tutti i valori inseriti %d e' il maggiore\n",
b);
          else
          printf("Tra tutti i valori inseriti %d e' il minore\n", e);
    if (c>a)
     if (c>b)
       if (c>d)
        if (c>e)
          printf("Tra tutti i valori inseriti %d e' il maggiore\n",
c);
          else
          printf("Tra tutti i valori inseriti %d e' il minore\n", e);
    if (d>a)
     if (d>b)
       if (d>c)
        if (d>e)
          printf("Tra tutti i valori inseriti %d e' il maggiore\n",
d);
          else
          printf("Tra tutti i valori inseriti %d e' il minore\n", e);
    if (e>a)
     if (e>b)
       if (e>c)
        if (e>d)
          printf("Tra tutti i valori inseriti %d e' il maggiore\n",
e);
          else
          printf("Tra tutti i valori inseriti %d e' il minore\n", e);
return 0;
}

           printf("Tra tutti i valori inseriti %d e' il minore\n", e);
il tuo else ti dice solo che e' minore o uguale ad e, non che sia il minore
di tutti gli altri!
Tommy

agli inizi con il C.
ordinali in un array... poi stampi il primo e l'ultimo:
/*C*/
int compare (const void * a, const void * b){
  return ( *(int*)a -*(int*)b ); 
}
int main (void){
    int values[] = { 420, 11, 212, 9, 120 };
    qsort (values, 5, sizeof(int), compare);
    printf ("%d\r\n ",values[0]);
    printf ("%d\r\n ",values[4]);
    return 0;
}
ciao
 sbirish

Tommy
allora come si fa?
grazie ancora.

 allora come si fa?
Sbirish ti ha risposto. Il suo non e' forse il modo piu' semplice se sei
agli inizi con il C, ma.... prova a capirla.
A volte pero' ordinare un array e' un lavoro "in piu'" che se vuoi SOLO il
piu' piccolo ed il piu' grande puoi evitarti.
Con un solo ciclo puoi scorrere l'array e trovare i due valori:
<CODE>
#include<stdio.h>
int main()
{
    int nums[5]={300,478,2,502,27};
    int smallest,biggest;
    int i;
    for(i=1,biggest=smallest=nums[0];i<5;++i){
        if(nums[i]<smallest)smallest=nums[i];
        if(nums[i]>biggest)biggest=nums[i];
    }
    printf ("%d\n",smallest);
    printf ("%d\n",biggest);
    return 0;
}
</CODE>
In questo modo il tempo di esecuzione e' minore rispetto a quello che
ottieni se ordini l'array!
Tuttavia per 5 numeri NON si pone davvero il problema!
Tommy

se non vuoi creare l'array fai qualcosa di questo genere
scanf("%d",&a);
min=a;
max=a;
scanf("%d",&b);
if (b<min) min=b; if (b>max) max=b;
scanf("%d",&c);
if (c<min) min=c; if (c>max) max=c;
scanf("%d",&d);
if (d<min) min=d; if (d>max) max=d;
scanf("%d",&e);
if (e<min) min=e; if (e>max) max=e;

    int a, b, c, d, e;
errore di impostazione: ti servono i 5 int + altri 2: uno per il massimo
relativo e uno per il minimo.
1) confronta a e b, aggiorna max e min
2) confronta c e max, se necessario aggiorna max, altrimenti confronta c e
   min, se necessario aggiorna min.
3) il passo 2) con d
4) il passo 2) con e
5) stampa min e max.
-- 
main() {
  char B[4]={47,41,98,0},y[3]={B[2],0},
       Z[5]={91,94,y[0],93,0},e[4]={123,'2',125,0},D[3]={B[1]--,B[0],0};
  printf("%s%s%c%s%s%s\n", B, y, '|', Z, e, D); }