Pagina 1 di 1

[Risolto] Trovare il maggiore tra N numeri in C

Inviato: 17 dicembre 2017, 22:09
da u53r
Salve a tutti,
da un po' di tempo sto smadonnando con questo problema:

Dati in input N numeri interi, si determini il massimo e il minimo tra essi


Il programma deve essere scritto in C .
Ecco il codice che ho scritto fino ad ora:

Codice: Seleziona tutto

/*
  PROBLEMA: dati in input N numeri, trova il maggiore e il minore tra essi
*/

#include <stdio.h>
#include <stdlib.h>

int main() {
   int *a,max,min,n,i;
   printf("Quanti numeri vuoi inseririe? ");
   scanf("%d", &n);
   a = malloc(n * sizeof(int));
   printf("Inserisci i tuoi numeri\n");
   for (i = 0; i<n; i++) {
     scanf("%d", &a[i]);
   }
   //Determino il maggiore
   if(a[n-1] > a[n-2]){
     max = a[n-1];
   }else{
     max = a[n-2];
   }
   for (i = n - 3; i >= 0; i--) { //
     if(max < a[i]){
       max = a[i];
     }
   }
   // Determino il minore
   if(a[n-1] < a[n-2]){
     min = a[n-1];
   }else{
     min = a[n-2];
   }
   for (i = n - 3; i >= 0; i--) {
     if (min > a[i]) {
       min = a[i];
     }
   }
   printf("Massimo: %d\n", max);
   printf("Minimo: %d\n", min);
  return 0;
}
Il programma funziona, il problema è che l'ho creato usando un array dinamico , e quindi un puntatore.
Nel capitolo del libro in cui è presente questo problema, array e puntatori non sono stati ancora trattati, dunque non dovrei usarli.
Qualcuno a qualche idea su come farne a meno?
Ho pensato ad una soluzione del genere

Codice: Seleziona tutto

#include <stdio.h>

int main() {
  int x,n,mg,mn,i;
  mg = 0;
  mn = 0;
  printf("Quanti numeri vuoi inserire?");
  scanf("%d", &n);
  printf("Inserisci i tuoi numeri\n");
  for (i = 0; i < n; i++) {
    scanf("%d", &x);
    if (mg < x) {
      mg = x;
    }else if(mn > x){
      mn = x;
    }
  }
  printf("Maggiore: %d\n", mg);
  printf("Minore: %d\n", mn);
  return 0;
}
E funziona, ma solo finché non si inseriscono numeri uguali, a quel punto il maggiore viene individuato correttamente il numero maggiore, come minore viene restituito 0 .
Qualcuno ha qualche idea ??
Grazie in anticipo per le risposte.

Re: Trovare il maggiore tra N numeri in C

Inviato: 18 dicembre 2017, 13:43
da pierluigi
Per la ricerca di massimo e minimo non ti occorre memorizzare tutti i numeri inseriti, puoi memorizzare solo il valore massimo e il valore minimo finora trovati.
Ovvero facendo come hai riportato nella seconda soluzione.

Il problema relativo all'inserimento di numeri uguali (ad es. 3 volte "5") è che la prima volta ricadi nel caso di aggiornamento del massimo (mg < x), mentre dalla seconda volta in poi, dato che hai inizializzato il minimo a 0, nessun valore potrà essere più piccolo e il minimo non viene aggiornato (in caso di numeri positivi).

Potresti durante la prima iterazione del for, cioè con (i==0) assegnare direttamente sia mg e mn al valore letto x. In quel momento infatti x rappresenta (essendo l'unico valore letto) sia massimo che minimo.

Re: Trovare il maggiore tra N numeri in C

Inviato: 18 dicembre 2017, 22:47
da u53r
Grazie mille della risposta, domani proverò.
Per cortesia, evitare certi messaggi dispersivi. Si risponde con dati concreti. TheSaint

Re: Trovare il maggiore tra N numeri in C

Inviato: 19 dicembre 2017, 18:58
da u53r
Grazie mille!
Ha funzionato!
Posto il codice definitivo e metto "Risolto" nel titolo
Grazie ancora

Codice: Seleziona tutto

/*
  PROBLEMA: dati in input N numeri interi, trova il maggiore e il minore tra essi
  V. 2
*/
#include <stdio.h>

int main() {
  int x,n,mg,mn,i;
  printf("Quanti numeri vuoi inserire?");
  scanf("%d", &n);
  printf("Inserisci i tuoi numeri\n");
  scanf("%d", &x);
  mn = mg = x;
  for (i = 1; i < n; i++) {
    scanf("%d", &x);
    if (mg < x) {
      mg = x;
    }else if(mn > x){
      mn = x;
    }
  }
  printf("Maggiore: %d\n", mg);
  printf("Minore: %d\n", mn);
  return 0;
}