Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] parametro restituito errato

    salve a tutti sto imparando la programmazione multifile attraverso un codice molto semplice che mi ricerca i dati di una certa persona, il tutto allocato dinamicamente. Sia sulla programmazione multifile che la ricerca all'interno dell'archivio tutto ok finchè alla restituzione del valore di posizione della persona (se presente) non è quello che mi aspettavo: infatti mi restituisce sempre 0; però se notate nel sottoprogramma di ricerca ho fatto una cout dell'indice ed effettivamente l'indice è quello che mi aspetterei; ho provato anche a cambiare le impostazioni del passaggio del parametro ma nessunn effetto ho riscontrato, come mai? grazie in anticipo per chi mi aiuterà
    Ecco il codice:

    (header file che contiene i prototipi e la struttura salvato come persona.h)
    codice:
    #ifndef _PERSONA_
    #define _PERSONA_
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    
    
    using namespace std;
    
    
    
    struct persona
    {
           string nome;
           string cognome;
           int eta;
    };
    typedef persona* archivio;
    
    
    archivio allocazione(archivio,const int);
    archivio inserisci(archivio,const int );
    bool ricerca(const archivio, const int, const string, const string);
    int posizione(int);
    void stampa(const archivio,const int);
    void deallocazione(archivio);
    
    #endif
    (file che contiene il codice del main)
    codice:
    #include "persona.h"
    
    
    int main()
    {
        archivio punt=NULL;
        int n,pos;
        string nome1,cognome1;
        
        do
        {
            cout<<"inserire dimensione archivio\n";
            cin>>n;
        }while(n<=0);
        
        cin.ignore();
        
        punt=allocazione(punt,n);
        
        cout<<".........inserimento dati nell'archivio............\n";
        cout<<"inserisci "<<n<<" record nell'archivio\n";
        punt=inserisci(punt,n);
        
        cout<<"............................\n";
        
        cout<<"...........ricerca di una persona nell'archivio............\n";
        cout<<"inserire nome della persona cercata: " ;
        getline(cin,nome1);
        cout<<"inserire cognome della persona cercata: ";
        getline(cin,cognome1);
        if(ricerca(punt,n,nome1,cognome1))
        {
        pos=posizione(posiz); 
        cout<<"persona presente nell'archivio in posizione "<<pos<<"\n";
        }
        else cout<<"persona non trovata\n";
        
        cout<<"............................\n";
        
        cout<<"stampa dell'archivio\n";
        stampa(punt,n);
        
        cout<<"............................\n";
        
        deallocazione(punt);
        
        cout<<"............................\n";
       
        system("PAUSE");
        return 0;
    }
    (file che contiene il codice dei vari sottoprogrammi)
    codice:
    #include "persona.h"
    
    archivio allocazione(archivio p,const int riemp)
    {
         try
         {
         p=new persona[riemp];
         cout<<"archivio allocato con successo\n";
         }
         catch(bad_alloc xa)
         {
         cout<<"allocazione fallita\n";
         exit(1);
         }     
         return p;
    }
    
    
    
    
    archivio inserisci(archivio p,const int riemp)
    {
         int i;
         for(i=0;i<riemp;i++)
         {
         cout<<"inserisci nome: ";
         getline(cin,p[i].nome);
         cout<<"inserisci cognome: ";
         getline(cin,p[i].cognome);
         cout<<"inserisci eta': ";
         cin>>p[i].eta;
         cin.ignore();
         }
         return p;
    }
    
    bool ricerca(const archivio p, const int riemp, const string n1, const string c1)
    {
     int i=0;
     
     bool trovato=false;
     
     while(!trovato && i<riemp)
     {
        if(p[i].nome==n1 && p[i].cognome==c1)
        {
          trovato=true;
          cout<<i<<endl;
          posizione(i);
        }
        else i++;
     }
     
    return trovato;
    }
    
    int posizione (int j)
    {
        return j;
    }
    
    void stampa(const archivio p,const int riemp)
    {
          int i;
          for(i=0;i<riemp;i++)
          {
           cout<<"nome: "<<p[i].nome<<endl;
           cout<<"cognnome: "<<p[i].cognome<<endl;
           cout<<"eta': "<<p[i].eta<<endl;
          }
          
    }
    
    void deallocazione(archivio p)
    {
         p=NULL;
         delete [] p;
         cout<<"deallocazione avvenuta con successo\n";
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non ho capito ... come dovrebbe funzionare questa funzione

    codice:
    int posizione (int j)
    {
        return j;
    }
    nel contesto del tuo programma ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Premetto che sono agli inzi della mia carriera nello sviluppo di programmi...comunque la funzione int posizione mi dovrebbe ritornare nel main la posizione della tupla trovata così da poterla farla vedere all'utente che esegue il programma...ho fatto così in quanto credo che non posso fare 2 return nella funzione bool ricerca e che per giunta mi debba restituire un valore booleano mentre io voglio tornare al main 2 valori che concettualmente sono dello stesso tipo (in quanto true=1 e false=0)ma sintatticamente diversi...se ho detto un mucchio di "scemenze" ti prego di correggermi ho voglia di apprendere da qualcuno molto più esperto di me

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Sicuramente la funzione posizione non fa quello che pensi ... non fa proprio nulla se non restituirti il suo parametro in ingresso.

    Ma per darti un suggerimento devo capire cosa volevi fare e non l'ho ancora capito ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    mi rispiego meglio XD allora il mio programma deve inserire visualizzare e ricercare una persona all'interno di un archivio con la posizione esatta all'interno di essa. Ad esempio inserisco Tizio Caio e se presente all'interno di esso oltre a farmi visualizzare un messaggio di conferma della sua presenza mi dovrebbe restituire anche la sua esatta posizione. La funzione bool ricerca mi dovrebbe fare tutto ciò, però siccome mi restituisce un valore booleano ho pensato che volendo anche un intero quando trovo la persona di fare una chiamata ad un altro sottoprogramma (in questo caso posizione) passandogli l'indice così da restituirmi nel main anche la posizione e in output farla visualizzare...spero che sia stato chiaro stavolta e grazie ancora per la tua disponibilità.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Perché non fai restituire alla ricerca un intero con la posizione (0 = non trovato, >0 = posizione)

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    già che scemo che sono mi complico la solo!grazie mille per il lume

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 © 2024 vBulletin Solutions, Inc. All rights reserved.