Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 21

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Dato che la funzione palindromo è sbagliata, mostra quella corretta
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  2. #2
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Secondo me ci sono problemi anche in altre parti del codice. Ad esempio, cosa sarebbe questo?
    codice:
        int n = 0;
        int *vet1;
        vet1 = new int [n];

    Praticamente metti n=0 e poi allochi un vettore di dimensione zero? Direi che è da rivedere!
    Questa versione sembra funzionante:
    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 [5]{1,2,3,2,1};
        int riemp = 5;
    
        //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;
        }
        return true;
    
    }

    ma ho fatto l'inserimento del vettore direttamente da codice. Prova a sistemare la lettura da file e poi dovresti esserci.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    ho risolto finalmente xD in sostanza ho unito le funzioni leggi e palindromo,poi ho spostato la stampa dal main alla funzione palindromo e mi va benissimo.Devo essere sincero non ho proprio ben afferrato del perchè ora va,probabilmente i problemi di visibilità che avevo all'inizio si sono risolti.

    codice:
    #include <iostream>#include <fstream>
    
    
    using namespace std;
    
    
    void leggi (int riemp,int *vet1);
    
    
    
    
    int main ()
    {
    	
        int n = 0;
    	int *vet1;
    	vet1 = new int [n];
    	int riemp = 0;
    	
    	leggi (riemp,vet1);
    	
    	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];
    	}
    	cout << "\n";
    	
    	bool palindromo = true;
    	for (int i=0;i<riemp;i++)
    		{
    			if(vet1[i] != vet1[riemp-i-1])
    			palindromo = false;
    		}
    		
        if (palindromo == true)
    	cout << "\n\nil vettore e' palindromo";
    	else cout << "\n\nil vettore non e' palindromo";
    }
    ah poi minomic quella parte di codice che mi hai indicato tu sarebbe l'allocazione dinamica dell'array.

  4. #4
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    OK per l'allocazione ma... cosa allochi? Se n vale zero, quando fai new int [n] cosa ottieni? Secondo me continua ad esserci qualcosa che non va... Poi magari funziona per qualche strano motivo, ma non è detto che un programma che funziona sia anche corretto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    perfettamente d'accordo e per essere sincero una spiegazione al corso non l'abbiamo mai avuta e quello volte che sono state fatte delle domande la risposta è stata "si fa così".Io per esempio per l'allocazione dinamica avrei impostato che tu devi dargli la dimensione facendo cin >> dimensione e poi vet = new int [dim],però sono capitate occasione in cui ci dicevano "e se non sai quanta roba c'è nel file tu che ne sai della dimensione perciò il miglior modo e' quello". Tra l'altro molti per l'allocazione dinamica (es. su youtube,google) usano la funzione malloc che noi non abbiamo proprio trattato.
    Ultima modifica di Mrhide1; 04-01-2016 a 11:50

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Così è sbagliato, non ci sono discorsi che tengano.
    Se funziona è solo per "fortuna" che la memoria sporcata non sia utile al processo.
    La new è la soluzione corretta per il C++ (la malloc lo sarebbe stata per il C) ma va usata dopo che sai quanti sono i caratteri da leggere, vedendo prima quanto è lungo il file.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    cosa è sbagliato? l'algoritmo che ho usato per il programma o la cosa che ho detto su come avrei fatto l'allocazione dinamica inserendo da tastiera la dimensione?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Io parlo della riga vet1 = new int [n];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Per dare un'idea (anche se molto parziale), possiamo dire che queste sono alcune possibilità:

    1. chiedi la dimensione del vettore e poi allochi
    codice:
    cout << "Inserire la dimensione del vettore: ";
    int n;
    cin >> n;
    
    // adesso posso allocare il vettore
    int* vettore = new int[n];

    2. allochi una quantità "sufficiente" di memoria e poi la usi:
    codice:
    int size = 1000;
    int* vettore = new int[size];

    Ovviamente ci sono diversi problemi: chi lo dice quanta memoria è sufficiente? Cosa succede se poi risulta essere poca? E se invece è troppa, è grave lasciarla inutilizzata (e quindi, in un certo senso, sprecarla)?

    3. usi una struttura dati dinamica, cioè una per cui non hai bisogno di conoscere in anticipo la dimensione, ma che si "gonfia" quando inserisci un nuovo elemento. Forse è un argomento che non avete ancora trattato ma, se sei curioso, puoi guardare ad esempio i vector.

    L'unica costante è quello che ti abbiamo detto io e oregon: allocare con n=0 è certamente sbagliato e può portare a comportamenti imprevedibili.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Capisco,allora in futuro userò il metodo del chiedere la dimensione la vedo più accettabile come soluzione e certamente non voglio ritrovarmi con comportamenti imprevedibile già il DEV C++ ne ha abbastanza di suo,comunque grazie a entrambi per i chiarimenti.

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