Trovare il Max e il successivo Max più piccolo

di il
16 risposte

Trovare il Max e il successivo Max più piccolo

Buon giorno a tutti
mi è capitato questo problema
in c++ devo trovare il max tra numeri inseriti e qui non ci sono problemi,
poi devo trovare il secondo maggiore che ovviamente è < di max ma non ci riesco.
senza vettori e senza funzioni. qualcuno ha qualche idea?
grazie

16 Risposte

  • Re: Trovare il Max e il successivo Max più piccolo

    Il problema non è strettamente di programmazione,,
    Riguarda il saper come fare

    Pensa di avere in mano un mazzo di carte
    Peschi la prima
    Sarà certamente il massimo
    Peschi la seconda
    Essa sarà il massimo?
    E se non lo fosse potrebbe essere...
  • Re: Trovare il Max e il successivo Max più piccolo

    Non e' il massimo successivo piu' piccolo

    MA

    il massimo PRECEDENTE.

    Gia' con questa definizione, hai TUTTE LE INFORMAZIONI per una corretta implementazione
  • Re: Trovare il Max e il successivo Max più piccolo

    Prima mi sono collegato erroneamente da PC, dal quale non riesco ancora a loggarmi, e non capisco ancora perché
    Vabbè nulla di male

    Ma da non loggato ho visto il contributo di Migliorabile, che sarebbe nella mia ignore-list

    Per lo OP:
    Non badargli: Migliorabile ha fatto una affermazione inesatta che rischia di fuorviarti
  • Re: Trovare il Max e il successivo Max più piccolo

    @StandardOil, che fa parte anche lui della mia lista di ignoranti, spesso e volentieri dice sciocchezze.

    Vedasi il fatto che, dalla sua osservazione, non c'e' traccia di come trovare DUE valori e non UNO SOLO!

    Ma sai come e': la "credulanza" dei giovani
  • Re: Trovare il Max e il successivo Max più piccolo

    Non so bene cosa abbia scritto Migliorabile, ma immagino che sia la difesa del suo metodo

    che è vero, se la sequenza dei numeri da analizzare fosse del tipo
    1 2 3 4 5 (ovvero una sequenza monotona)
    il massimo sarebbe 5
    il massimo precedente sarebbe 4
    in effetti il pre-massimo, chiamiamolo così, sarebbe il massimo precedente

    ma se la sequenza fosse non monotona
    1 2 3 5 4
    il massimo sarebbe sempre 5
    il massimo precedente sarebbe invece 3
    e il valore cercato sarebbe 4, ma verrebbe ignorato

    come volevasi dimostrare: Migliorabile ha toppato
  • Re: Trovare il Max e il successivo Max più piccolo

    Buonasera, pur non essendo per nulla pratico del linguaggio proprio di questa sezione del forum, propongo la soluzione del quesito in pseudocodice. Sta a lei poi adattarlo in C++.
    
    DICHIARAZIONE VARIABILI:
    NumMax variabile di tipo reale 
    Num2Max variabile di tipo reale
    Num variabile di tipo reale
    I variabile di tipo intero //Contatore dei numeri inseriti
    k variabile di tipo intero //Numero di numeri da inserire
    
    ade il valore della variabile k
    ade il valore della variabile Num
    NumMax<--Num
    ade il valore della variabile Num
    SE Num<NumMax
      ALLORA
        Num2Mas<--Num
      ALTRIMENTI
        INIZIO
          Num2Mas<--NumMax
          NumMax<--Num
        FINE
    I<--2
    MENTRE (i<k) FAI
      INIZIO 
        ade il valore della variabile Num
        SE Num>NumMax
          ALLORA 
            INIZIO
              Num2Max<--NumMax
              NumMax<--Num
            FINE
         ALTRIMENTI
           SE Num>Num2Max
             ALLORA Num2Max<--Num
        I<--I+1
      FINE
    rde il valore della variabile NumMax
    rde il valore della variabile Num2Max
    
    Ritengo @StandardOil che il concetto espresso da @migliorabile non sia del tutto sbagliato, non credo infatti che intendesse ciò che lei ha in precedenza espresso
    1 2 3 5 4
    il massimo sarebbe sempre 5
    il massimo precedente sarebbe invece 3
    e il valore cercato sarebbe 4, ma verrebbe ignorato
    bensì suppongo intendesse che qualora venisse trovato un numero maggiore del più grande, allora questi diventerebbe in automatico il secondo maggiore.
  • Re: Trovare il Max e il successivo Max più piccolo

    Il problema non è se trovi un numero maggiore del massimo

    Ma se trovi un 'non massimo' che però è maggiore del secondo

    Con la definizione di migliorabile questo non avverrebbe


    Col tuo pseudocodice dovrebbe andare
  • Re: Trovare il Max e il successivo Max più piccolo

    E' necessario anche considerare un ulteriore problema

    se nella sequenza di numeri da prendere in cosiderazione il valore massimo fosse ripetuto avremmo (correttamente?) che sia il massimo che il suo "Pre" sarebbero uguali

    sarebbe giusto?
    serve o no di considerare i doppioni?

    questo va preso in cosiderazione

    io di mio ho scritto questo:
    
    /*
     * massimi.c
     *
     * 30-11-2020 Nelson "Standardoil"
     * Sentitevi liberi di trarre ispirazione
     * L'ammiraglio non si offende
     *
     * per trovare gli N numeri più alti in una sequenza di numeri
     */
    
    
    #include <stdio.h>
    
    
    int sequenza[] = {2, 4, 29, 30, 7, 5, 9, 10, 3, 4, 30, 29, 8, 11};
    // lo array che contiene i valori
    int valori = sizeof sequenza / sizeof sequenza[0];
    // il numero dei valori
    
    #define N 9  // il numero di campioni da conservare
    int cam[N];  // lo array dove conservare i campioni
    int flag = 1; // se flag == 0 non elimina i doppioni, se 1 li elimina
    
    void seleziona(int a)
    {
       for(int i = 0; i < N; i++)
       {
    
          if(flag && (a == cam[i]))
          {
             break;
          }
          if(a > cam[i])
          {
             for(int j = N; j > i  ; j--)
             {
                cam[j] = cam[j - 1];
             }
    
             cam[i] = a;
             break;
          }
       }
    }
    
    int main(int argc, char **argv)
    {
       printf("\n\nProgramma per selezionare i %d valori più elevati\n", N);
    
       // stampo la sequenza
    
       for(int i = 0; i < valori; i++)
       {
          seleziona(sequenza[i]);
       }
    
       for(int i = 0; i < N; i++)
       {
          printf("%d\n", cam[i]);
       }
    
       return 0;
    }
    
    come vedete non risolve il problema dello OP, che deve farlo in C++, senza funzioni e senza array

    invece questa mia versione in C, con una funzione che fa tutto il lavoro sporco e un array che mantiene i valori dei varii "massimi di ordine progressivamente inferiore"

    massimo di ordine progressivamente inferiore:

    massimo di ordine 0: il massimo assoluto
    massimo di ordine 1: quello appena inferiore

    e via così

    e come vedete ho previsto da parametro di funzione se escludere oppure no i doppioni

    credo che lo OP, a partire dall'ottimo pseudocodice di TIFilippo e dal mio esempio con array e funzioni possa tirar fuori il suo risultato
  • Re: Trovare il Max e il successivo Max più piccolo

    Come al solito, StandardOil si ferma all'interpretazione che MEGLIO gli aggrada per confermare il SUO punto di vista.

    Va bene anche cosi'.
  • Re: Trovare il Max e il successivo Max più piccolo

    giaber ha scritto:


    Buon giorno a tutti
    mi è capitato questo problema
    in c++ devo trovare il max tra numeri inseriti e qui non ci sono problemi,
    poi devo trovare il secondo maggiore che ovviamente è < di max ma non ci riesco.
    senza vettori e senza funzioni. qualcuno ha qualche idea?
    grazie
    Ciao, la sequenza dove la registri se non in un vettore?
    L'idea più semplice per me è ordinare la sequenza in maniera crescete o decrescente (è indifferente) e prendi il primo e secondo elemento o ultimo e penultimo.
    Un altra idea secondo me un po' più rozza potrebbe essere ciclare la sequenza e trovare con confronti il massimo trovato il primo max ripeti l'iterazione e o cancelli il max trovato dalla sequenza oppure dovresti far si che quando fai il confronto con il tuo 1° max salti quel passo con un ''continue''. Fammi sapere
  • Re: Trovare il Max e il successivo Max più piccolo

    Non è detto


    La sequenza potrebbe essere scritta da tastiera

    Se lo OP non ha studiato i vettori e/o il suo docente ne ha escluso l'uso non può fare come dici tu
    Nemmeno lo potrebbe fare se il numero dei campioni da gestire fosse superiore alla memoria disponibile (non sto pensando a PC, ma a microcontrollori)

    Se fa come gli ho indicato io o come gli ha indicato TIFilippo non usa assolutamente vettori e può gestire qualunque numero di valori in ingresso, dato che deve registrare solo 2 numeri

    Invece se per
  • Re: Trovare il Max e il successivo Max più piccolo

    StandardOil ha scritto:


    Non è detto


    La sequenza potrebbe essere scritta da tastiera

    Se lo OP non ha studiato i vettori e/o il suo docente ne ha escluso l'uso non può fare come dici tu
    Nemmeno lo potrebbe fare se il numero dei campioni da gestire fosse superiore alla memoria disponibile (non sto pensando a PC, ma a microcontrollori)

    Se fa come gli ho indicato io o come gli ha indicato TIFilippo non usa assolutamente vettori e può gestire qualunque numero di valori in ingresso, dato che deve registrare solo 2 numeri

    Invece se per
    perdonami ma nella tua soluzione usi l'array o non ho visto io bene però vabbe l'ho buttata li giusto per un idea
  • Re: Trovare il Max e il successivo Max più piccolo

    Ma tu non hai letto il messaggio prima....


    E la tra virgolette "estensione" a soli due valori non richiede alcun array

    E il primo array lo uso nella main solo per non scrivere sempre da tastiera, infatti passo alla funzione un solo valore per volta, e la funzione tratta un solo valore per volta

    Se come dici tu i valori si accumulassero in un vettore, dovrei anche tenere conto del tempo di ordinamento dello stesso


    Come ho scritto nel mio primo messaggio il vero problema qui non è scrivere il programma, ma capire cosa serve fare (ovvero capire cosa è strettamente necessario e cosa no)
  • Re: Trovare il Max e il successivo Max più piccolo

    StandardOil ha scritto:


    Ma tu non hai letto il messaggio prima....


    E la tra virgolette "estensione" a soli due valori non richiede alcun array

    E il primo array lo uso nella main solo per non scrivere sempre da tastiera, infatti passo alla funzione un solo valore per volta, e la funzione tratta un solo valore per volta

    Se come dici tu i valori si accumulassero in un vettore, dovrei anche tenere conto del tempo di ordinamento dello stesso


    Come ho scritto nel mio primo messaggio il vero problema qui non è scrivere il programma, ma capire cosa serve fare (ovvero capire cosa è strettamente necessario e cosa no)
    Beh sono d'accordo con il tuo punto di vista, ci sono tanti modi di procedere, per quanto riguarda il tempo di ordinamento non credo che deve essere tenuto in considerazione visto che probabilmente si tratta di un esercizio universitario o comunque "privato" che con molte probabilità non riguarda la complessità, semplicemente si cerca una soluzione al problema, comunque sicuramente la tua soluzione è piu che accettabile.
Devi accedere o registrarti per scrivere nel forum
16 risposte