RISOLTO [C++] Matrici dinamiche

Stato
Discussione chiusa ad ulteriori risposte.

marco42

Nuovo Utente
Salve ragazzi sto scrivendo un programma che utilizzi una matrice (di grandezza e valori scelti dall'utente) allocata dinamicamente e che chieda all'utente quale colonna eliminare per poi eliminarla fisicamente dalla colonna attraverso l'operatore delete; il problema è che il compilatore mi da errore proprio sull'operatore delete. sapete dirmi come risolvere?? grazie in anticipo :thanks:
Codice:
#include <iostream>
using namespace std;

int main()
{
int hh;
int x; //usiamo solo x poiche la matrice è quadrata
int dim_riga, dim_colonna;
int **MATRICE; // inizializazione del puntatatore (doppio star poichè è un array bidimensionale)


cout << "Definire la dimensione della matrice ";
cin >> x;
cout << endl;


// Allocazione dinamica della matrice

MATRICE = new int*[x]; //alloca lo spazio per x puntatori

for(dim_riga=0; dim_riga<x; dim_riga++) //per ogni riga
MATRICE[dim_riga] = new int[x];        //assegna ai puntatori delle righe della matrice l'indirizzo di x


// Riempimento matrice
for (dim_riga = 0; dim_riga < x; dim_riga++)
    {
        for (dim_colonna = 0; dim_colonna < x; dim_colonna++)
        {
            cout <<"inserisci il valore da asseganre alla riga: " <<dim_riga <<" e alla colonna: " <<dim_colonna <<" --> ";
            cin >> MATRICE [dim_riga] [dim_colonna];
        }
    }
cout << endl;

//lettura
cout<<"la tua matrice e': " <<endl;
    for (dim_riga = 0; dim_riga < x; dim_riga++)
        {

            for (dim_colonna = 0; dim_colonna < x; dim_colonna++)
            {
                cout <<" " <<MATRICE[dim_riga][dim_colonna];
            }
            cout <<endl;
        }


cout <<"inserire la colonna da eliminare: ";
cin >>hh;
for (int i=0; i<x; i++){
delete MATRICE [i][hh];
}


//lettura
cout<<"la tua matrice e': " <<endl;
    for (dim_riga = 0; dim_riga < x; dim_riga++)
        {

            for (dim_colonna = 0; dim_colonna < x; dim_colonna++)
            {
                cout <<" " <<MATRICE[dim_riga][dim_colonna];
            }
            cout <<endl;
        }


return 0;
}
 

Andretti60

Utente Èlite
3,360
2,233
Hardware Utente
Prima di tutto, non hai una matrice, ma un vettore di puntatori che simula una matrice.
Eliminare una riga (o una colonna) non è quindi semplice, devi redimendionare e riallocare i tuoi puntatori.
 

Andretti60

Utente Èlite
3,360
2,233
Hardware Utente
La maniera che hai usato è corretta, ne esistono altre ma si basano tutte sullo stesso principio base, un vettore di puntatori. Questo rende i cambiamenti dinamici problematici, se vuoi cambiare numero di righe o colonne non si può fare con una semplice 'delete'.
Questo è vero pure per vettori unidimensionali, come fai se vuoi cambiare la dimensione senza perdere i valori che hai già? È un esercizio più semplice che ti dà l'idea della complessità del problema. Non che sia impossibile (nulla è impossibile) solo che non basta una istruzione.

Te lo illustro con un esempio.
Supponiamo hai un vettore di cinque elementi che contengono I numeri
10 20 30 40 50
Vuoi eliminare il terzo elemento, quindi vuoi un vettore di quattro elementi che contiene i numeri
10 20 40 50
Esistono diversi modi per farlo, nessuno con una sola linea di codice.
 

marco42

Nuovo Utente
La maniera che hai usato è corretta, ne esistono altre ma si basano tutte sullo stesso principio base, un vettore di puntatori. Questo rende i cambiamenti dinamici problematici, se vuoi cambiare numero di righe o colonne non si può fare con una semplice 'delete'.
Questo è vero pure per vettori unidimensionali, come fai se vuoi cambiare la dimensione senza perdere i valori che hai già? È un esercizio più semplice che ti dà l'idea della complessità del problema. Non che sia impossibile (nulla è impossibile) solo che non basta una istruzione.

Te lo illustro con un esempio.
Supponiamo hai un vettore di cinque elementi che contengono I numeri
10 20 30 40 50
Vuoi eliminare il terzo elemento, quindi vuoi un vettore di quattro elementi che contiene i numeri
10 20 40 50
Esistono diversi modi per farlo, nessuno con una sola linea di codice.
Che algoritmo potrei usare per fare esattamente questo ? Magari anche solo con un vettore unidimensionale
 

Andretti60

Utente Èlite
3,360
2,233
Hardware Utente
Non esiste nessun "algoritmo", è solo spostare elementi da un vettore all'altro o all'interno di un unico vettore.
Per esempio
1) crea un nuovo vettore, della dimensione giusta
2) sposta gli elementi "giusti" dal vecchio vettore al nuovo
3) libera la memoria del vecchio vettore
4) assegna alla variabile usata per il vettore originale il vettore nuovo.
Non è la maniera più efficiente, ma la più semplice. Lascio a te implementarla, provaci almeno, hai tutte le indicazioni.
 

marco42

Nuovo Utente
Non esiste nessun "algoritmo", è solo spostare elementi da un vettore all'altro o all'interno di un unico vettore.
Per esempio
1) crea un nuovo vettore, della dimensione giusta
2) sposta gli elementi "giusti" dal vecchio vettore al nuovo
3) libera la memoria del vecchio vettore
4) assegna alla variabile usata per il vettore originale il vettore nuovo.
Non è la maniera più efficiente, ma la più semplice. Lascio a te implementarla, provaci almeno, hai tutte le indicazioni.
Grazie mille per l’aiuto, l’unica cosa che non ho capito bene è il 4 passaggio, devo praticamente assegnare al puntatore di partenza l’indirizzo del nuovo vettore??
 
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando