Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    4

    [C++] Aiuto esercizio tosto sulle liste!..

    ciao..sn nuovo..mi trovo alle prese con un esercizio sulle liste in C++.
    Precisamente l'esercizio mi chiede: data una successione potenzialmente infinita di interi con possibili ripetizioni:
    1)memorizzare i numeri pari ,dispari e divisibili per 5 in tre liste differenti utilizzando il concetto di lista linkata.
    2)ordinare usando un qlsiasi algoritmo di ordinamento le liste definite al punto uno e visualizzarle..

    qualcuno saprebbe darmi una mano??

  2. #2
    Non è difficile, se hai capito come funzionano le liste lo fai subito.
    Se non lo hai capito basta anche che fai una ricerchina sul forum o su google.

    Butta giù un pò di codice e troverai sicuramente qualcuno che te lo corregge

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2006
    Messaggi
    4
    Ho seguito il tuo cnsiglio e sono riuscito a fare riconoscere i pari ed i dispari e a visualizzarli sue due liste differenti..adesso mi servirebbe una mano sui numeri divisibili per 5 perkè ad esempio 25 è dispari ma è divisibile x 5 e 30 sarebbe pari ma è altrettanto divisibile per 5...e inoltre c'è la parte dove dovrei ordinare le tre liste cn un ordinamento..cmq vi incollo il codice sotto

    /* PROGRAMMA By R4id3n Liste pari disp div5 */

    //Librerie utilizzate
    #include <iostream.h>
    #include <stdio.h>
    #include <stdlib.h> //Per l'operazione di pulizia dello schermo
    #include <conio.h> //Per la getch ()
    #include "lista.h" //Header file contenente la classe lista

    //PROTOTIPI DELLE FUNZIONI UTILIZZATE

    void maschera_scelte (void);
    lista *inserisci (void);
    void visualizza (lista *);
    void pari_dispari (lista *);

    //MAIN

    /*Nel main si visualizza la maschera grafica iniziale e si avvia la mascera che permetterà
    all'utente di scegliere le operazioni da compiere all'interno del programma.*/


    main ()
    {
    system("cls"); //Pulizia dello schermo
    cout << endl;
    cout << endl;
    cout <<" __________________________________________________ _________________"<<endl;
    cout <<" | |"<< endl;
    cout <<" | Programma per la suddivisione di una lista di interi in elementi |"<< endl;
    cout <<" | pari ed elementi dispari. |"<< endl;
    cout <<" | |"<< endl;
    cout <<" | Realizzato da: LOCURCIO MICHELE Matricola n. 4337801 |"<< endl;
    cout <<" |_________________________________________________ __________________|"<< endl;
    cout << endl;
    cout << endl;
    cout << endl;
    cout << " Premere INVIO per continuare";
    cout << endl;
    getch ();
    system("cls");
    maschera_scelte ();
    }

    //DICHIARAZIONE DELLE FUNZIONI UTILIZZATE

    //INSERISCI

    /*Con questa funzione possiamo inserire gli elementi in input all'interno di una lista di
    interi. Questa lista ci servirà per eventuali operazioni successive.*/


    lista *inserisci (void)
    {
    lista *primo_elemento = NULL; //puntatore al primo elemnto di 'temp'
    lista *temp; //puntatore ad una lista temporanea
    lista *nuova; //puntatore agli elemnti inseriti in una nuova lista
    int i, tot_elementi, dato;

    cout << " INSERIMENTO DEGLI INTERI NELLA LISTA" << endl;
    cout << endl;
    cout << "Inserire il num. totale degli elementi che si desiderano immettere nella lista: ";
    cin >> tot_elementi;
    cout << endl;

    //Fase di inserimento nella lista degli elementi dati in input

    for (i = 0; i < tot_elementi; i++)
    {
    nuova = new lista;
    cout << endl;
    cout << "Inserire il " << i+1 << "^ elemeto: ";
    cin >> dato;
    nuova->set (dato);
    if (primo_elemento == NULL)
    {
    primo_elemento = nuova;
    }
    else
    {
    temp->pt_successivo (nuova);
    }
    temp = nuova;
    }

    //Messaggio di completamento dell'operazione di inserimento

    cout << endl;
    cout << endl;
    cout << "L'inserimento dei dati richiesti e' stato completato. Premere INVIO per continuare." << endl;
    getch ();

    //Inizializzazione di 'temp' al suo primo elemento e restituzione di tale lista al
    //chiamante

    temp = primo_elemento;
    return temp;
    }


    //MASCHERA_SCELTE

    /*Questa è una funzione che permette all'utente di scegliere quale operazione compiere.*/


    void maschera_scelte (void)
    {
    char scelta;
    lista *lista1; //puntatore alla lista di interi ricevuta in input

    //Maschera delle scelte che l'utente può effettuare per compiere delle date
    //operazioni

    do
    {
    system ("cls");
    cout <<" __________________________________________________ _____"<<endl;
    cout <<" | |"<< endl;
    cout <<" |Le operazioni che si possono effettuare sono: |"<< endl;
    cout <<" | |"<< endl;
    cout <<" | |"<< endl;
    cout <<" |1. Inserimento della lista |"<< endl;
    cout <<" | |"<< endl;
    cout <<" |2. Visualizzazione della lista inserita |"<< endl;
    cout <<" | |"<< endl;
    cout <<" |3. Visualizzazione degli elementi pari e di quelli |"<< endl;
    cout <<" | dispari contenuti nella lista inserita |"<< endl;
    cout <<" | |"<< endl;
    cout <<" |4. Termina l'esecuzione del programma |"<< endl;
    cout <<" |_________________________________________________ ______|"<< endl;
    cout << endl;
    cout << endl;
    cout <<"Digitare il numero corrispondente all'operazione che si vuole svolgere, dopo premere INVIO: ";
    cin >> scelta;

    //Analisi della scelta effettuata dall'utente volta per volta

    switch(scelta)
    {
    case'1':
    {
    system ("cls");
    lista1 = inserisci();
    scelta = '5';
    break;
    }
    case '2':
    {
    system ("cls");
    cout << " VISUALIZZAZIONE DELLA LISTA INSERITA" << endl;
    visualizza (lista1);
    scelta = '5';
    break;
    }
    case '3':
    {
    system ("cls");
    cout << " VISUALIZZAZIONE DEGLI ELEMENTI PARI E DI QUELLI DISPARI" << endl;
    cout << endl;
    cout << endl;
    pari_dispari (lista1);
    scelta = '5';
    break;
    }
    case '4':
    {
    exit (1);
    break;
    }

    /*Trattamento degli errori di inserimento del codice della scelta*/

    default:
    {
    cout << endl;
    cout << "Il codice inserito per determinare la scelta effettuata non e' valido!";
    cout << endl;
    cout << "Premere INVIO per ripetere l'immisione del codice." << endl;
    getch ();
    }
    }
    }
    while ((scelta != '1') && (scelta != '2') && (scelta != '3') && (scelta != '4'));
    }


    //PARI&DISPARI

    /*Questa funzione suddivide la lista che gli viene data in input in due liste contenenti
    rispettivamente i numeri pari ed i numeri dispari che la compongono. Per l'individua_
    zione dei numeri pari, si divide il numero per due e si verifica che il resto di tale
    operazione è pari a zero. Se così non fosse, il numero è da ritenersi dispari. La pro_
    ceura provvede anche alla visualizzazione delle due liste ottenute.*/


    void pari_dispari (lista *interi)
    {
    lista *base; //puntatore alla lista pervenuta in input
    base = interi;

    //Operazione che verifica se la lista da esaminare è vuota oppure no

    if (base == NULL)
    {
    cout << "La lista da esaminare e' vuota o non e' stata inserita." << endl;
    cout << endl;
    cout << endl;
    cout << "Premi INVIO per continuare." << endl;
    getch ();
    return;
    }

    //Fase di suddivisione degli elementi della lista di base in due liste, 'pari' e
    //'dispari'

    lista *pari; //puntatore alla lista dei pari
    lista *dispari; //puntatore alla lista dei dispari
    lista *primo_pari = NULL; //puntatore al primo elemento di 'pari'
    lista *primo_dispari = NULL; //puntatore al primo elemento di 'dispari'
    lista *nuova; //puntatore agli elementi da inserire
    //nelle nuove liste
    int quoziente, numero;
    int resto;

    /*Selezione ed inserimento*/

    do
    {
    numero = base->get_val ();
    quoziente = (numero/2);
    resto = (numero - (quoziente * 2));
    if (resto != 0)
    {
    nuova = new lista;
    nuova->set (numero);
    if (primo_dispari == NULL)
    {
    primo_dispari = nuova;
    }
    else
    {
    dispari->pt_successivo (nuova);
    }
    dispari = nuova;
    }
    else
    {
    nuova = new lista;
    nuova->set (numero);
    if (primo_pari == NULL)
    {
    primo_pari = nuova;
    }
    else
    {
    pari->pt_successivo (nuova);
    }
    pari = nuova;
    }
    base = base->get_next ();
    }
    while (base != NULL);

    //Fase di visualizzazione dei risultati ottenuti

    pari = primo_pari;
    cout << "Ecco la visualizzazione della lista contentente i numeri pari" << endl;
    visualizza (pari);
    cout << endl;
    cout << "Ecco la visualizzazione della lista contentente i numeri dispari" << endl;
    dispari = primo_dispari;
    visualizza (dispari);
    cout << endl;
    cout << endl;
    cout << "La visualizzazione dei numeri pari e di quelli dispari e' stata completata." << endl;
    cout << "Premere INVIO per continuare." << endl;
    getch ();
    }


    //VISUALIZZA

    /*Questa funzione serve a visualizzare gli elementi di una lista che gli viene passata
    in input come parametro.*/


    void visualizza (lista *mostra)
    {

    //Operazione che controlla se la lista da visualizzare è vuota

    if (mostra == NULL)
    {
    cout << endl;
    cout << endl;
    cout << "La lista e' vuota!" << endl;
    cout << endl;
    cout << "Premere INVIO per continuare." << endl;
    getch ();
    return;
    }

    //Fase di visualizzazione

    int i = 1;
    cout << endl;
    cout << endl;
    do
    {
    cout << i << "^ elemento: ";
    cout << mostra->get_val () << endl;
    mostra = mostra->get_next ();
    i++;
    }
    while (mostra != NULL);
    cout << endl;
    cout << endl;
    cout << "La lista e' sta visualizzata per intero. Premere INVIO per continuare." << endl;
    getch ();
    }

    __________________________________________________ ___________________
    __________________________________________________ __________________

    /* questo è l'HEADER file*/
    #ifndef lista_H
    #define lista_H


    class lista
    {
    int valore;
    lista *successivo;

    public:

    lista (void)
    {
    valore = 0;
    successivo = NULL;
    }

    void set (int num)
    {
    valore = num;
    }

    void pt_successivo (lista *pt_succ)
    {
    successivo = pt_succ;
    }

    int get_val (void)
    {
    return valore;
    }

    lista *get_next (void)
    {
    return successivo;
    }
    };


    #endif

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.