Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C++] inizializzazione matrice

    Ciao, ho dichiarato questa matrice dinamicamente in C++: int **Matrice;
    Ora come la inizializzo con caratteri nulli?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Caratteri? L'hai dichiarata come "int"...

    Comunque qual è il problema? Se hai già allocato spazio per tutte le righe, devi semplicemente fare un doppio ciclo for che inizializzi a 0 tutti gli elementi.
    every day above ground is a good one

  3. #3
    Originariamente inviato da YuYevon
    Caratteri? L'hai dichiarata come "int"...

    Comunque qual è il problema? Se hai già allocato spazio per tutte le righe, devi semplicemente fare un doppio ciclo for che inizializzi a 0 tutti gli elementi.
    Si scusa volevo dire valori nulli non caratteri
    Comunque ho solo fatto int **Matrice e mi sono bloccato qui...volevo sapere appunto come inizlizzare a 0 tutti i valori.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Devi innanzitutto allocare spazio per la matrice, altrimenti così hai un semplice puntatore a puntatore con cui non ci fai nulla. Se programmi in C++, usa l'operatore new... spero che tu conosca l'allocazione dinamica della memoria se no il problema viene ancora prima dell'inizializzazione a 0 degli elementi della matrice.
    every day above ground is a good one

  5. #5
    Originariamente inviato da YuYevon
    Devi innanzitutto allocare spazio per la matrice, altrimenti così hai un semplice puntatore a puntatore con cui non ci fai nulla. Se programmi in C++, usa l'operatore new... spero che tu conosca l'allocazione dinamica della memoria se no il problema viene ancora prima dell'inizializzazione a 0 degli elementi della matrice.
    In questo modo va bene?
    codice:
    int **Matrice;
    	Matrice=new int*[righe];
    	for(i=0; i<righe: i++)
    	{
    		M[i]=new int[0];
    	}

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Così:

    codice:
    	Matrice=new int*[righe];
    allochi spazio per "righe" righe...

    ma così

    codice:
    	for(i=0; i<righe: i++)
    	{
    		M[i]=new int[0];
    	}
    per ogni riga allochi spazio per 0 colonne...

    Comunque la strada è quella.
    every day above ground is a good one

  7. #7
    Originariamente inviato da YuYevon
    Così:

    codice:
    	Matrice=new int*[righe];
    allochi spazio per "righe" righe...

    ma così

    codice:
    	for(i=0; i<righe: i++)
    	{
    		M[i]=new int[0];
    	}
    per ogni riga allochi spazio per 0 colonne...

    Comunque la strada è quella.
    Ho capito, quindi l'allocazione è questa
    [/CODE]
    int **Matrice;
    Matrice=new int*[righe];
    for(i=0; i<righe: i++)
    {
    M[i]=new int[colonne];
    }
    [/CODE]
    Ora però come si fa ad inizializzare questa matrice con valori nulli?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Ah ma comunque all'interno del ciclo for hai messo M... bada che va scritto Matrice...

    Comunque che io sappia l'operatore new azzera di default tutti gli elementi allocati, ma non vorrei sbagliarmi.

    Se proprio lo vuoi fare esplicitamente, devi solo scrivere un doppio ciclo for che scorra tutte le righe della matrice (e per ogni riga tutte le colonne) azzerandone gli elementi.
    every day above ground is a good one

  9. #9
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Sì, a quanto so io l'operatore new azzera di default tutti gli elementi allocati e questo piccolo codice lo conferma:
    codice:
    	int** mat;
    	mat = new int*[righe];
    	for(int i=0; i<righe; i++)
    	{	
    		mat[i] = new int[colonne];
    		for(int j=0; j<colonne; j++)
    			cout << mat[i][j];
    		cout << endl;
    	}
    Comunque nel caso l'operatore non azzerasse di deafult tutti gli elementi sarebbero sufficienti due cicli for che assegnavano il valore 0 a tutti gli elementi della matrice.

  10. #10
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao... L' allocazione tramite new richiama si i costruttori di default, ma solo nei tipi definiti dall' utente. Per i tipi di "default" può essere usato il cosìdetto pseudocostruttore :
    codice:
    int* pointer = new int(0);
    Per settare i valori della matrice a zero devi scorrere le sue righe e per ognuna di questa, settare a 0 le sue colonne
    codice:
    int** matrice = NULL;
    Matrice = new int* [RIGHE];
    for(int i=0; i<RIGHE; i++)
    {
    Matrice[i] = new int[COLONNE];
    for(int j=0; j<COLONNE; j++)
    {
    Matrice[i][j] =0;
    }
    }

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.