Scrittura e lettura di un albero da file C++

di il
5 risposte

Scrittura e lettura di un albero da file C++

Salve, mi è stato assegnato per le vacanze di creare un progetto in c++ stile "akinator". Il mio problema è salvare su file l'albero. Qualcuno riesce ad aiutarmi?
1.PNG
1.PNG


2.PNG
2.PNG


3.PNG
3.PNG


4.PNG
4.PNG

questo è il mio codice.

5 Risposte

  • Re: Scrittura e lettura di un albero da file C++

    Se posti immagini al posto del testo del codice non ci provo neanche.
  • Re: Scrittura e lettura di un albero da file C++

    1. Non so che sia Nodo
    2. Non so che sia Gioco
  • Re: Scrittura e lettura di un albero da file C++

    oregon ha scritto:


    Se posti immagini al posto del testo del codice non ci provo neanche.
    scusa hai ragione, provvedo subito.

    NodoA.h //nodo dell'albero binario
    #ifndef NODOA_H
    #define NODOA_H
    #include <iostream>
    using namespace std;
    class Nodo
    {
    private:
    string info;
    Nodo* lLink, *rLink;
    public:
    Nodo();
    Nodo(string);
    ~Nodo();
    string GetInfo();
    Nodo* GetlLink();
    Nodo* GetrLink();
    void SetInfo(string);
    void SetlLink(Nodo*);
    void SetrLink(Nodo*);
    };
    #endif

    NodoA.cpp

    #include "NodoA.h"
    #include <iostream>

    using namespace std;

    Nodo::Nodo(){
    lLink = rLink = NULL;
    }
    Nodo::Nodo(string x):Nodo(){
    info = x;
    }
    Nodo::~Nodo(){
    }
    string Nodo::GetInfo(){
    return info;
    }
    Nodo* Nodo::GetlLink(){
    return lLink;
    }
    Nodo* Nodo::GetrLink(){
    return rLink;
    }
    void Nodo::SetInfo(string i){
    info = i;
    }
    void Nodo::SetlLink(Nodo* p){
    lLink = p;
    }
    void Nodo::SetrLink(Nodo* s){
    rLink = s;
    }

    Gioco.h

    #ifndef GIOCO_H
    #define GIOCO_H
    #include "NodoA.h"
    #include <iostream>
    using namespace std;
    class Gioco
    {
    private:
    Nodo* radice;
    string nomePlayer;
    string vett[100]; //VETTORE DI RISPOSTE
    bool vittoria; //SE vittoria == true VUOL DIRE CHE IL COMPUTER HA VINTO
    void Gioca(Nodo*);
    bool Controlla(Nodo*);
    int i;
    void preOrder(Nodo*);
    public:
    Gioco();
    Gioco(Nodo*);
    ~Gioco();
    void Gioca();
    void Wiki();
    void Inserisci(Nodo*, string, string);
    void Fine();
    void Carica(Nodo*);
    void SetNomePlayer(string);
    string GetNomePlayer();
    void preOrder();
    };
    #endif

    Gioco.cpp

    #include "Gioco.h"
    #include "NodoA.h"
    #include <iostream>
    #include <string.h>
    #include <fstream>

    using namespace std;

    Gioco::Gioco() { //COSTRUTTORE DI DEFAULT
    radice = 0;
    i=-1;
    }

    Gioco::Gioco(Nodo* p) //COSTRUTTORE CHE CREA UN ALBERO CON NODO RADICE E DUE NODI FOGLIA
    {
    radice = new Nodo("vola?");
    p = radice;

    Nodo* r = new Nodo("cane");
    radice -> SetrLink(r);

    Nodo* l = new Nodo("airone");
    radice -> SetlLink(l);
    Carica(p);
    }

    Gioco::~Gioco() //DISTRUTTORE
    {

    }

    void Gioco::Carica(Nodo* p){ //CARICAMENTO DA FILE DI TESTO
    string riga;
    ifstream file;
    file.open("parte2.txt",ios::in); //apre il file per leggere le informazioni
    while(!file.eof()){
    getline(file,riga);
    if(riga!=""){ //controlla che la riga non sia vuota
    if(riga=="no"){ //controlla se la riga è un "no"
    if(Controlla(p)) //controlla se il nodo puntato da p è un nodo foglia
    p->SetrLink(new Nodo());
    else
    p=p->GetrLink();
    }
    else if(riga=="si"){ //controlla se la riga è un "si"
    if(Controlla(p))
    p->SetlLink(new Nodo());
    else
    p=p->GetlLink();
    }
    else{
    p->SetInfo(riga); //altrimenti inserisce nel nodo la domanda
    getline(file,riga); //legge un'altra riga
    p->SetlLink(new Nodo(riga)); //crea un nuovo nodo e inserisce nel campo info l'animale
    p=radice;
    }
    }
    }
    file.close();
    }

    void Gioco::SetNomePlayer(string n) { //MUTATOR DI NOME PLAYER
    nomePlayer = n;
    }

    string Gioco::GetNomePlayer() { //ACCESSOR DI NOME PLAYER
    return nomePlayer;
    }

    void Gioco::Inserisci(Nodo* p, string domanda, string newAnimale) { //INSERISCE UN NUOVO ANIMALE O UNA NUOVA DOMANDA
    int x=i;
    p -> SetrLink(new Nodo(p -> GetInfo()));
    p -> SetlLink(new Nodo(newAnimale));
    p -> SetInfo(domanda);
    ofstream file;
    file.open("parte2.txt", ios::app);
    for(i=0;i<x+1;i++)
    file<<"\n"<<vett<<endl;
    file<<domanda<<endl;
    file<<newAnimale<<endl;
    file.close();
    }

    bool Gioco::Controlla(Nodo* p) { //FUNZIONE CHE CONTROLLA SE E' UN NODO FOGLIA
    return (p -> GetlLink() == 0);
    }

    void Gioco::Gioca(Nodo* p) { //VERA FUNZIONE GIOCA (PRIVATA)

    string dom, ris, newAnimale;
    if (!Controlla(p)) { //CONTROLLO SE E' UN NODO FOGLIA
    i++;
    cout<<"\n\nL'animale a cui stai pensando "<<p -> GetInfo()<<"\t";
    do {
    cin>>ris;
    }while(ris != "si" && ris != "no");
    if (ris == "si"){
    p = p -> GetlLink();
    vett="si"; //carica in un vettore di risposte l'input per la costruzione dell'albero da file
    }
    else{
    p = p -> GetrLink();
    vett="no";
    }
    system("cls");
    Gioca(p);
    }
    else {
    cout<<"\n\n"<<p -> GetInfo()<<" \212 l'animale a cui stai pensando?\t";
    do {
    cin>>ris;
    }while(ris != "si" && ris != "no");

    if (ris == "si") {
    cout<<"\nIL COMPUTER HA VINTO, PUOI FARE DI MEGLIO \n\n";
    vittoria = true;
    }
    else{
    i++;
    vett="no";
    cout<<"\nQual \212 l'animale a cui stavi pensando?\t";
    cin>>newAnimale;
    cout<<"\nInserire domanda che caratterizza questo animale:\t";
    fflush(stdin); //PULISCE BUFFER DI INPUT
    getline (cin, dom); //LEGGE LA DOMANDA "CARATTERISTICA"
    Inserisci(p, dom, newAnimale);
    vittoria = false;
    }
    i=0;
    Fine(); //aggiorna la classifica
    }
    }

    void Gioco::Gioca() { //FUNZIONE PUBBLICA DI GIOCA PER LA RICORSIONE
    Gioca(radice);
    }

    void Gioco::Fine() { //STAMPA LE DUE CLASSIFICHE
    ofstream file; //file players Vincenti e file players Perdenti

    if (vittoria) {
    file.open("ClassificaPerdenti.txt", ios::app); //SE HA VINTO IL COMPUTER MODIFICO IL FILE DEI GIOCATORI CHE HANNO PERSO
    file<<"\n"<<nomePlayer;
    file.close();
    }
    else {
    file.open("ClassificaVincenti.txt", ios::app);
    file<<"\n"<<nomePlayer;
    file.close();
    }
    }
  • Re: Scrittura e lettura di un albero da file C++

    _Achille ha scritto:


    1. Non so che sia Nodo
    2. Non so che sia Gioco
    Nodo è un nodo di un albero binario, gioco sarebbe la classe albero con alcuni metodi e attributi in piu
  • Re: Scrittura e lettura di un albero da file C++

    Usa i tag code
Devi accedere o registrarti per scrivere nel forum
5 risposte