Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    3

    [C] esercizio, ricerca massimo in una lista

    Salve, apro questa discussione per un aiuto su un esercizio in linguaggio C. Devo scrivere un programma in C con una funzione che trovi il valore massimo contenuto in una lista semplicemente concatenata di numeri interi fornita da input e restituisca il valore massimo come output, se la lista è nulla la funzione deve restituire 0. Sono le prime volte che lavoro sulle liste e non trovo un modo di scorrere la lista per trovare il valore massimo, ringrazio anticipatamente chi mi saprà aiutare.
    Ultima modifica di steve0; 26-11-2016 a 18:30

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Mostra il codice in cui definisci la struttura della lista e la riempi.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Ciao, potresti scorrere la tua lista con semplice ciclo while cioè:


    while(cella != NULL){
    // fai quello che devi fdare
    cella = cella->next;
    }


    ove cella sara il puntatore al primo nodo della lista) Se devi cercare il massimo valore, ti converrà di salvare il
    valore del primo nodo in una variabile locale e poi ad ogni iterazione del ciclo andare a vedere se il valore corrente è inferiore, allora aggiorni la variabile.. Alla fine, cioè dopo il ciclo, basterà restituire la variabile)

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    3
    Di seguito il codice di un programma per inserire da input numeri in una lista e poi visualizzarli in output (al quale poi aggiungerei la funzione per trovare il numero massimo), che però non compila e restituisce come errore: "[Error] unknown type name 'lista'" e "[Error] 'info' undeclared (first use in this function)".

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    //dichiarazione lista di numeri interi
    struct lista {
      int info;
      struct lista *next;
    };
    
    int main(int argc, char *argv[]) {
        
        lista list;
        
        //inserisco in input elementi nella lista
        while(info != NULL){
            printf("Inserisci un numero\n");
            scanf("%d", &info)
            info = info->next;
        }
        
        //visualizzo elementi nella lista
        while(info != NULL){
            printf("%d \n", info);
            info = info->next;
        }
    
        system("pause");
        return 0;
    }
    Cosa devo correggere nel codice riportato?
    Ultima modifica di steve0; 27-11-2016 a 13:21

  5. #5
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    • Non esiste nessun tipo di dato lista, forse volevi intendere struct lista.
    • la variabile info che usi nel main non è dichiarata da nessuna parte, inoltre non la stai comunque utilizzando in modo corretto in quanto prima la usi come intero (scanf("%d", &info)), poi come un puntatore a un qualche tipo di struttura contenente un campo next (info = info->next)
    • Supponendo tu stia trattando info come un puntatore a struct lista, dove allochi la memoria?
    Ultima modifica di Scara95; 27-11-2016 a 13:54
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2016
    Messaggi
    3
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    • Non esiste nessun tipo di dato lista, forse volevi intendere struct lista.
    • la variabile info che usi nel main non è dichiarata da nessuna parte, inoltre non la stai comunque utilizzando in modo corretto in quanto prima la usi come intero (scanf("%d", &info)), poi come un puntatore a un qualche tipo di struttura contenente un campo next (info = info->next)
    • Supponendo tu stia trattando info come un puntatore a struct lista, dove allochi la memoria?
    Vorrei dichiarare una lista semplicemente concatenata di numeri interi, potresti indicarmi il codice corretto per dichiarazione e ciclo di scorrimento della stessa?

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Cosa devo correggere nel codice riportato?
    Nel tuo codice non crei nessuna lista.
    Una lista è composta da puntatori a struct, contenenti a loro volta un puntatore a se stessi.

    codice:
    typedef struct lista { // Per comodità ci creiamo un tipo, invece di usare la sintassi struct lista useremo L
      int info;
      struct lista *next;
    }L;
    
    L* InserisciTesta(L *lista); //Prototipo
    
    
    L* InserisciTesta(L *lista){
    
          L*tmp=(L*)malloc(sizeof(L));
          tmp->next=lista;
          return tmp;
    
    
    }
    
    
    int main(){
    
        L*lista=NULL;
    
        lista=InserisciTesta(lista);// restituisce una nuova lista che viene assegnata al puntatore nel main()
    
    
    
    
    }
    

    P.S. Ho voluto postare un esempio, perché in rete sono disponibili innumerevoli esempi di liste inserimento in testa o inserimento in coda, e non sono "abilità di programmazione" ma elementi base come usare una struttura di controllo, quindi personalmente credo che non ci sia niente di male fare esempi di questo tipo...
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.