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

    [C++] Problema Stampa Matrice di Dimensioni Sconosciute

    Buonasera a tutti,
    ho un problema con questo programma,data una matrice di dimensione sconosciute presa da file, devo leggerla e stamparla. Ora in pratica il programma l'ho risolto e fatto anche in funzioni,tuttavia a un certo punto ho voluto implementare il codice cercando di mettere tutto il possibile del contenuto del main nei vari moduli come per esempio la parte di codice che determina le dimensioni della matrice e l'allocazione dinamica di quest'ultima. Cosa succede però quando questa parte del codice che ho citato è nel main,mi viene dato il messaggio,che ho impostato io,che il file è stato letto con successo e la matrice stampata è 4x4 per esempio e poi viene stampata,ma se sposto quella parte di codice per dire in una funzione a parte la lettura va a buon fine come prima ma quando provo a stampare a video la matrice non mi esce nulla.A questo punto ho provato a bazzicare con il codice ma non capisco quale sia il problema perchè alla fin fine quella parte di codice spostata serve solo a sapere le dimensioni della matrice,l'unica cosa che ho cambiato è la posizione di questa sezione di codice mentre tutto il resto è rimasto invariato. Vi inserisco sotto la parte di codice incriminata:

    codice:
    fstream file;	file.open("dati.txt",ios::in);
    	if (!file)
    	{
    		cout << "Errore apertura file!";
    	}
    
    
    	while (!file.eof())
    	{
    	    file.getline (contarighe,10);
    	    righe++;
    
    
    	}
    
    
    
    
    	file.seekg(0);
    	int i=0;
    	while (!file.eof())
    	{
    		file >> contacolonne;
    		i++;
    
    
    	}
    
    
    	colonne = i/righe;
    
    
    
    
        mat = new int*[righe];
         for (int i=0;i<righe;i++)
    	    {
    		mat[i] = new int [colonne];
    	    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Così è difficile risponderti ...

    Qual era il codice completo funzionante tutto compreso nel main?

    Qual è il codice completo con le varie funzioni che non va?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    le altre due funzioni sono semplicemente queste:

    codice:
    void leggi(int **mat,int righe,int colonne){
    
    
        fstream file;
    	file.open("dati.txt",ios::in);
    	if (!file)
    	cout << "errore apertura file";
        else
        {
            for (int i=0;i<righe;i++)
    	  {
    		for (int j=0;j<colonne;j++)
    		{
    			file >> mat[i][j];
    		}
    	  }
    
    
         cout << "il file e' stato letto con successo\n";
    
    
        }
    
    
    	 system("pause");
    }
    
    
    void stampa (int **mat,int righe,int colonne)
    {
    	for (int i=0;i<righe;i++)
    	  {
    		for (int j=0;j<colonne;j++)
    		{
    			cout << mat[i][j] << " ";
    		}
    		 cout << "\n";
    	  }
        system("pause");
    }
    ma la stampa della matrice è andata storta solo dopo che ho messo il pezzo di codice che ho scritto all'inizio in una funzione,ma comunque è strano perchè quella individua solo le dimensioni della matrice tutto qua,che per la cronaca sono anche giuste in quanto ho messo sotto la chiamata della funzione nel main un cout che mi dicesse quante righe e colonne ha la matrice.Posto l'intero programma magari c'è qualcosa di sbagliato di cui non mi sono accorto.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Scusa, vuoi postare anche il main? E' possibile copiare il codice completo e compilarlo per prova?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    questo è tutto il programma

    codice:
    #include <iostream>#include <fstream>
    #include <cstdlib>
    
    
    using namespace std;
    
    
    void conteggio (int **mat,int righe,int colonne);
    void leggi  (int **mat,int righe,int colonne);
    void stampa (int **mat,int righe,int colonne);
    
    
    int main ()
    {
    	int righe = 0;
    	int colonne = 0;
    	int **mat;
    
    
        bool uscita = false;
    	int opzione;
    
    
    
    
        conteggio(mat,righe,colonne);
        cout << righe << " " << colonne;
    
    
        mat = new int*[righe];
         for (int i=0;i<righe;i++)
    	    {
    		mat[i] = new int [colonne];
    	    }
    
    
    	while (uscita == false)
        {
    
    
            cout << "\nScegli una opzione:\n";
            cout << "1)Leggi.\n";
            cout << "2)Stampa.\n";
            cout << "3)Esci dal programma.\n";
            cin >> opzione;
    
    
           switch (opzione)
           {
             case (1):
             leggi(mat,righe,colonne);
             cout << "\n\n\n";
             break;
    
    
             case (2):
             stampa (mat,righe,colonne);
             cout << "\n\n\n";
             break;
    
    
             case (3): uscita = true;
             break;
           }
    
    
    
    
        }
        cout << "\n\n\n";
    
    
    
    
    
    
    }
    
    
    void conteggio (int **mat,int righe,int colonne)
    {
        char contarighe[10];
    	int contacolonne;
        fstream file;
    	file.open("dati.txt",ios::in);
    	if (!file)
    	{
    		cout << "Errore apertura file!";
    	}
        
    	while (!file.eof())
    	{
    	    file.getline (contarighe,10);
    	    righe++;
    
    
    	}
        
    
    
    	file.seekg(0);
    	int i=0;
    	while (!file.eof())
    	{
    		file >> contacolonne;
    		i++;
    
    
    	}
    
    
    	colonne = i/righe;
    
    
    }
    
    
    
    
    void leggi(int **mat,int righe,int colonne)
    {
    
    
        fstream file;
    	file.open("dati.txt",ios::in);
    	if (!file)
    	cout << "errore apertura file";
        else
        {
            for (int i=0;i<righe;i++)
    	  {
    		for (int j=0;j<colonne;j++)
    		{
    			file >> mat[i][j];
    		}
    	  }
    
    
         cout << "il file e' stato letto con successo\n";
    
    
        }
    
    
    	 system("pause");
    }
    
    
    void stampa (int **mat,int righe,int colonne)
    {
    	for (int i=0;i<righe;i++)
    	  {
    		for (int j=0;j<colonne;j++)
    		{
    			cout << mat[i][j] << " ";
    		}
    		 cout << "\n";
    	  }
        system("pause");
    }

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    potrebbe essere che ho sbagliato a mettere come void la funzione conteggio?? però comunque da questa funzione tiro fuori due interi,fosse stato un vettore sicuro avrei messo int conteggio perchè tanto solo un intero dovevo ricevere.

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    La funzione conteggio è sbagliata perché

    1) non deve utilizzare mat come argomento (a cosa le serve?)

    2) deve restituire i valori di righe e colonne e non lo fa. Deve passare righe e colonne per puntatore

    (int *righe, int *colonne)

    chiamarla con i puntatori

    conteggio(&righe, &colonne)

    che dovrà utilizzare al suo interno per modificare le variabili puntate.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    Sul punto 1 la risposta è banale,mi scocciavo di riscrivere gli argomenti e li ho copiati dalle altre funzioni dimenticando di togliere la matrice.Sul punto due hai perfettamente ragione infatti ho provato a mettere quel cout << righe << " " << colonne; nella funzione conteggio e le dimensioni della matrice vengono esatte ma se quello stesso cout lo tengo nel main invece mi da dimensione errate cioè 0x0,ergo è un problema di visibilità. Ora provo a inserire le modifiche che mi hai consigliato.

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2015
    Messaggi
    77
    mi da due errori uno riferito alla riga della chiamata della funzione conteggio nel main e l'altra alla riga colonne = i/righe dentro alla funzione conteggio:
    1) error : cannot convert int** to int* for argument 1 to int conteggio(int* ,int*)
    2) error : invalid operands of types int and int* to binary operator/

    in parole povere?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Mostra il codice che hai scritto ... sempre ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.