Determinare i due massimi su 10 interi

di il
5 risposte

Determinare i due massimi su 10 interi

Buongiorno, mi trovo in notevole difficoltà con un esercizio che ho trovato sul mio libro.
Allora chiede di fare un programma che inseriti 10 interi mi calcoli il massimo. Eccolo qua fatto e funzionante.
#include <stdio.h>
#include <stdlib.h>
int main()
{
    int intero, contatore=0, massimo=-1;
    while(contatore<=9)
    {
      printf("inserisci un intero: ");
      scanf("%d", &intero);
      if(intero>massimo)
      massimo=intero;
      contatore++;
      }
      printf("\n%d", massimo);

    return 0;
}
Dopo però mi chiede di modifcarlo facendo in modo che non sia possibile inserire due valori uguali e che mi fornisca i due numeri maggiori tra i 10 inseriti.
Premetto che ho ho delle limtizioni nel fare il programma, nel senso che non posso usare vettori e cicli for, ma solo while e il libro stesso mi consiglia di usare un variabile chiamata intero una massimo e una contatore.
IL mio cruccio è che usando solo la variabile intero il numero assegnato a tale variabile viene "buttato ogni nuovo assegnamento" e quindi mi sembra impossibile poter trovare eventuali valori uguali e un secondo massimo. Però il testo dell'esercizio dice espressamente:" si mantenga una struttura simile al programma precedente (che sarebbe quello postato sopra)."
Mi potete dare una mano su come affrontare questo programma?

5 Risposte

  • Re: Determinare i due massimi su 10 interi

    Sono d'accordo con le tue perplessità. Forse se inserisci il testo ESATTO che hai trovato sul manuale possiamo ragionarci meglio: delle volte ci possono essere dei fraintendimenti sulle parole.
  • Re: Determinare i due massimi su 10 interi

    Ciao Samuele, grazie per la risposta. Riporto fedelmente il testo.
    Esercizio 3.9
    Si scriva in c un programma che presi in input 10 interi restituisca il maggiore. Suggerimento: il vostro programma dovrà utilizzare tre variabili:
    -counter: per tenere traccia di quanti numeri sono stati immessi;
    -number (io l'ho chiamato interi): il numero corrente immesso nel programma;
    -largest: il numero più grande trovato sino a questo momento.
    Questo è il programma che mi funziona e ho postato nel precedente post.

    Esercizio 4.0
    Trovare i due numeri maggiori tra 10 interi, si usi un approccio simile al 3.9.
    Nota:potrete prendere in input ogni valore solo una volta.

    Faccio una precisazione: questi esercizi si trovano nel capitolo in cui non sono ancora stati affrontati il ciclo for e i vettori quindi ne concludo che sia possibile realizzarli senza ricorrere a questi ultimi.

    Ciò che non riesco proprio a capire è come, mantenedo una struttura simile all'esercizio 3.9 tipo l'utilizzo di una sola variabile number o come l'ho chiamata io intero, possa realizzare ciò richiesto dall'es 4.0
  • Re: Determinare i due massimi su 10 interi

    Esercizio di traduzione:
    counter =10
    finchè counter è maggiore di zero esegui confronto tra number e largest, salva largest counter=counter-1
  • Re: Determinare i due massimi su 10 interi

    Il testo dell'esercizio 4.0 ha in effetti chiarito le cose.
    Per trovare i due numeri maggiori tra dieci interi è sufficiente usare due variabili, p. es. massimo1 e massimo2. Ogni qual volta viene inserito un nuovo numero da tastiera è sufficiente confrontarlo con i due maggiori "attuali" ed eventualmente memorizzarlo scartando il più piccolo dei due precedenti. Potresti, per comodità, memorizzare il minore dei due massimi in massimo1, ed il maggiore in massimo2. In pseudo-codice potrebbe essere una cosa del genere:

    massimo1 = -1
    massimo2 = -1
    Ripeti dieci volte
    • Acquisisci un nuovo numero
      Se il nuovo numero è maggiore di massimo2
      • massimo1 = massimo2
        massimo2 = nuovo numero

      Altrimenti Se il nuovo numero è maggiore di massimo1
      • massimo1 = nuovo numero
    [/i]

    Per quel che riguarda la"nota" presente nel testo dell'esercizio:
    Nota: potrete prendere in input ogni valore solo una volta.
    credo che tu l'abbia fraintesa (anche se in effetti l'autore non si è espresso molto bene...). Penso si voglia semplicemente intendere che non si deve, per esempio, richiedere all'utente di inserire due volte il terzo numero della serie.
    Secondo me la faccenda è semplicemente questa; anche perché esigere di controllare che il numero n-esimo non sia mai stato inserito, richiede necessariamente il suo confronto con i primi n-1 numeri inseriti, che perciò devono per forza essere memorizzati da qualche parte.

    Spero di esserti stato utile. Dimmi se il programma ti funziona.
  • Re: Determinare i due massimi su 10 interi

    Grazie samuele, con il tuo consiglio il programma funziona perfettamente!
Devi accedere o registrarti per scrivere nel forum
5 risposte