Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77

    [C++] Errore: cannot be used a function

    Buonasera
    Ho fatto un programma che dato un vettore di numeri preso da file,controlla se questo è palindromo o meno tutto qua e infatti il programma va ma quando però provo a dividerlo in funzioni mi da come errore "palindromo cannot be used as a function",cioè in sostanza il problema è la funzione che controlla se il vettore è palindromo o meno.Vi posto il codice perchè non ho proprio idea di quale sia il problema,essendo che il programma funzionava bene quando era tutto nel main.

    codice:
    #include <iostream>#include <fstream>
    
    
    using namespace std;
    
    
    void leggi (int riemp,int *vet1);
    void palindromo (int riemp,int *vet1,int *vet2);
    
    
    int main ()
    {
    	
        int n = 0;
    	int *vet1;
    	vet1 = new int [n];
    	int *vet2;
    	vet2 = new int [n];
    	bool palindromo = true;
    	int riemp = 0;
    	
    	leggi (riemp,vet1);
    	palindromo (riemp,vet1,vet2);
    	
    	
    	if (palindromo == true)
    	cout << "\n\nil vettore e' palindromo";
    	else cout << "\n\nil vettore non e' palindromo";
    	
    	
    	
    	cout << "\n\n";
    	system("pause");
    }
    
    
    void leggi (int riemp,int *vet1)
    {
    	
    	ifstream file;
    	file.open("dati.txt",ios::in);
    	
     
        
    	while(!file.eof())
    	{
    		file >> vet1[riemp++];
    		
    		
    	}
    	
    	
    	for (int i=0;i<riemp;i++)
    	{   
    	    cout << vet1[i];
    	}
    	
    	
    }
    
    
    void palindromo (int riemp,int *vet1,int *vet2)
    {
    	bool palindromo = true;
    	
    	for (int i=0;i<riemp;i++)
    	{   
    	    vet2[i] = vet1[i];
    	}
    
    
    cout << "\n\n";
    	for (int i=0;i<riemp;i++)
    		{
    			if(vet1[i] != vet1[riemp-i-1])
    			palindromo = false;
    		}
    	
    	
    }
    Ultima modifica di MItaly; 01-01-2016 a 23:23

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Ciao,
    hai dato lo stesso nome (palindromo) a una funzione e a un bool... Per semplificare il tutto, fai in modo che la funzione palindromo ti restituisca direttamente un bool (true se è palindromo e false altrimenti).

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Perfetto grazie minomic adesso parte.Ora devo solo risolvere il problema delle visibilità perchè mi da sempre che il vettore è palindromo, suppongo che quando bool diventa false nel ciclo for il programma non lo rileva :\

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Secondo me la cosa più semplice è sempre quella di definire la funzione palindromo (o anche isPalindromo, se vuoi rispettare una certa naming convention) come bool, quindi qualcosa del tipo
    codice:
    bool isPalindromo(int* vettore) {
       ...
    }

    Poi nel codice fai semplicemente
    codice:
    if(isPalindromo(vettore))
        cout << "Palindromo\n";
    else
        cout << "Non palindromo\n";

    Se hai altri problemi, posta il codice aggiornato, così diamo un'occhiata.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    ah ho capito forse cosa intendi, invece di lasciare la mia funzione come void la metto come funzione booleana che mi da direttamente la risposta,aggirando così il problema della visibilità. Ma cosa ci devo mettere poi nel ciclo for della funzione bool isPalindromo(int* vettore)? a parte chiariamente un IF che controlla che i varie elementi siano uguali.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Nel senso se scrivo
    codice:
    bool isPalindromo(int* vettore)
    {
    for (int i=0;i<riemp;i++)
            {   
                if(vet1[i] != vet1[riemp-i-1])
                
            }
    }
    che ci devo mettere nell'if per dare una conferma nel main che il vettore è palindromo o meno?
    Ultima modifica di LeleFT; 04-01-2016 a 14:34

  7. #7
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Un
    codice:
    return true/false;

    a seconda del caso.

    P.S. Per chiudere il tag CODE, devi usare la forward-slash, non la back-slash.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    uh hai ragione scusami,febbre e programmazione non vado molto d'accordo non c'è dubbio.Comunque il codice è questo ma mi dice che il vettore non è mai palindromo.

    codice:
     #include <iostream>#include <fstream>
    
    
    using namespace std;
    
    
    void leggi (int riemp,int *vet1);
    bool palindromo (int riemp,int *vet1);
    
    
    int main ()
    {
    	
        int n = 0;
    	int *vet1;
    	vet1 = new int [n];
    	int riemp = 0;
    	
    	leggi (riemp,vet1);
    	
    	if (palindromo (riemp,vet1)==true)
    	cout << "\n\nil vettore e' palindromo";
    	else if (palindromo (riemp,vet1)==false)
    	cout << "\n\nil vettore non e' palindromo";
    	
    	cout << "\n\n";
    	system("pause");
    }
    
    
    void leggi (int riemp,int *vet1)
    {
    	ifstream file;
    	file.open("dati.txt",ios::in);
    	
        while(!file.eof())
    	{
    		file >> vet1[riemp++];
    	}
    	
    	cout << "il vettore che hai caricato e':\n\n";
    	for (int i=0;i<riemp;i++)
    	{   
    	    cout << vet1[i];
    	}
    }
    
    
    
    
    bool palindromo (int riemp,int *vet1)
    {
    	for (int i=0;i<riemp;i++)
    		{   
    		    if(vet1[i] != vet1[riemp-i-1])
    			return false;
    			else if (vet1[i] == vet1[riemp-i-1])
    			return true;
    		}
    		
    }

  9. #9
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Secondo me c'è un errore evidente nella logica della funzione palindromo: deve ritornare true solo alla fine del ciclo! Altrimenti basta che un controllo sia verificato per ritornare immediatamente true. Inoltre non è necessario ripetere la condizione con 'else if': è sufficiente mettere 'else'. Prova un po' a rivedere la logica e poi ne riparliamo.
    Ciao!

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    No infatti l'else if inizialmente non lo avevo messo,c'era solo l'if e return false ma essendo che non andava ho provato a mettere anche quell'altra condizione.Il problema comunque rimane,mi dice sempre che il vettore non è palindromo e io a questo punto non so dove sbattere la testa.

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.