Dev - C++ - eliminar fila y columna de una matriz

 
Vista:

eliminar fila y columna de una matriz

Publicado por Nicolas Haro (4 intervenciones) el 24/09/2021 07:57:42
Hola amigos programadores.
Tengo una duda sobre c++.Sucede que tengo una matriz que quiero eliminar una fila y columna n mediante el uso de punteros sin embargo primero decidi crear un codigo simplre sin punteros para despues en base a este usar punteros, el usuario ingresa n (numero de fila y columna a eliminar), para esto cree un doble for para que cuando las variable del for tomen valores igual o superiores a la posicion n, el valor de dicha posicion se cambie por el valor n+1. sin embargo intento correr el programa y algo no funciona ya que la matriz no se imprime ni tampoco el programa me devuelve un error. Adjunto mi codigo. De antemano gracias por su tiempo.

#include <iostream>
#include <vector>
#include <time.h>

using namespace std;

int main()
{
int a,b;
cin>>a;
vector <vector<int>> A(a);
for(int i=0;i<a;i++){
A[i].resize(a);
}
vector <vector<int>> X(a);
for(int i=0;i<a;i++){
X[i].resize(a);
}
for(int i=0;i<a;i++){
for(int j=0;j<a;j++){
A[i][j]= 1 + rand()%100;
}
}
cout<<"matriz aleatoria\nA:\n";
for(int i=0;i<a;i++){
cout<<"| ";
for(int j=0;j<a;j++){
cout<<A[i][j]<<" ";
}
cout<<"|"<<endl;
}
cin>>b;

cout<<"matriz aleatoria A despues de eliminar la fia y columna "<<b<<"\nA:\n";
vector <vector<int>> C(a- 1);
for(int i=0;i<a- 1;i++){
C[i].resize(a- 1);
}
for(int i=0;i<a;i++){
for(int j=0;j<a;j++){
if(j==b- 1){
X[i][j]=A[i+ 1][j+ 1];
}else{
X[i][j]=A[i][j];
}
}


}
for(int i=0;i<a;i++){
cout<<"| ";
for(int j=0;j<a;j++){
cout<<X[i][j]<<" ";
}
cout<<"|"<<endl;
}





return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

eliminar fila y columna de una matriz

Publicado por anonymous (146 intervenciones) el 24/09/2021 13:50:00
Hola, mira por lo que veo, en los últimos dos bucles anidados estas recorriendo los vectores desde 0 hasta `a' pero la longitud de los vectores es de `a-1', estas accediendo a un elemento que no existe tanto en las filas como en las columnas, creo que ese es el problema, avísame cualquier cosa, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar

eliminar fila y columna de una matriz

Publicado por Nicolas Haro (4 intervenciones) el 24/09/2021 22:23:09
Hola gracias por responder, mira lo que pasa es que envie el codigo incompleto porque todo lo demas funciona bien, esa matriz C es de dimension a-1 esta matriz aun ni trabaja en el codigo, pero la matriz A y X son de dimension a.
lo que no entiendo es porque sucede el error mira tengo 2 casos en el uno funciona y en el 2do no. aca te los pongo.
aca funciona el programa con ese if pero necesito para todas las filas no solo una en especifico porque mi idea es obtener la matriz X y redimensionarla en a-1 y esta matriz igualarla a C.(esto puede lucir de mas lose).

for(int i=0;i<a;i++){
if(i==b-1){
for(int k=0;k<a;k++){
if(k==b- 1){
X[i][k]=A[i+ 1][k+ 1];
}else{
X[i][k]=A[i][k];
}
}
}
}
sin embargo si elimino el if ya no funciona
for(int i=0;i<a;i++){
for(int k=0;k<a;k++){
if(k==b- 1){
X[i][k]=A[i+ 1][k+ 1];
}else{
X[i][k]=A[i][k];
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

eliminar fila y columna de una matriz

Publicado por anonymous (146 intervenciones) el 24/09/2021 23:29:52
Oye la verdad no estoy seguro, como no puedo compilar el código estoy limitado a hacer suposiciones, pero en mi opinión deberías usar el primer código pero cambiando == por != (De manera que se copien los valores normales) Y por cada verificación es decir tanto en las filas como en las columnas, escribe su correspondiente else para que se copie únicamente el valor que le sigue al que quieres eliminar(tu solo escribiste un else (el de las filas)), seria como hacer lo mismo pero con doble verificación a la inversa. Avísame cualquier cosa, suerte, saludos.

PD: Si no entendiste el enredo que acabo de escribir, puedo escribir el código por ti, pero necesito que me des permiso EXPLÍCITO para copiar, modificar y compilar tu codigo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

eliminar fila y columna de una matriz

Publicado por Nicolas Haro (4 intervenciones) el 25/09/2021 21:02:22
Si claro si me puedes corregir mi codigo te agradeceria, ya intente tu sentencia con el distinto de pero no es lo uqe busco quiero que para todo i,k igual o mayor a b-1 se le asgine el siguiente pero los menores a b-1 permanezcan constantes.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

eliminar fila y columna de una matriz

Publicado por anonymous (146 intervenciones) el 25/09/2021 21:15:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
b = b - 1;
 
for(int i=0;i<a;i++)
{
    if(i != b)
        for(int k=0;k<a;k++)
        {
            if(k != b)
                 X[i][k]=A[i][k];
            else
                X[i][k]=A[i][k+1];
        }
    else
        for(int k=0;k<a;k++)
        {
            if(k != b)
                 X[i][k]=A[i+1][k];
            else
                X[i][k]=A[i+1][k+1];
        }
}

Creo que funcionará, pero no lo probé así que si tiene errores o no te funciona, avísame. Suerte, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

eliminar fila y columna de una matriz

Publicado por Nicolas Haro (4 intervenciones) el 25/09/2021 21:49:17
amigo te agradezco por tu tiempo y por intentarlo, sin embargo tu código tiene algunos fallos, aun así ya logre resolver el problema y le implemente punteros al mismo.
Si te interesa la solución acá te la dejo amigo:
Matriz A(nxn).
Eliminar fila k, columna k de A.
∀ k ∈{1,2,...,n}

#include <iostream>
#include <vector>
#include <time.h>
#include <conio.h>

using namespace std;

int main()
{
int a,b,cont=0,cont1=0;
cin>>a;
vector <vector<int>> A(a);
for(int i=0;i<a;i++){
A[i].resize(a);
}
for(int i=0;i<a;i++){
for(int j=0;j<a;j++){
A[i][j]= 1 + rand()%100;
}
}
cout<<"matriz aleatoria\nA:\n";
for(int i=0;i<a;i++){
cout<<"| ";
for(int j=0;j<a;j++){
cout<<A[i][j]<<" ";
}
cout<<"|"<<endl;
}
cin>>b;
vector<vector<int>>*B =new vector<vector<int>>(a);
B=&A;
cout<<"matriz aleatoria A despues de eliminar la fia y columna "<<b<<"\nA:\n";
vector <vector<int>> C(a- 1);
for(int i=0;i<a- 1;i++){
C[i].resize(a- 1);
}

for(int i=0;i<a- 1;i++){

for(int k=0;k<a- 1;k++){
if(i< b-1){
if(k<b-1){
C[i][k]=(*B)[i][k];
}else{
C[i][k]=(*B)[i][k+ 1];
}
}
else{
if(k<b-1){
C[i][k]=(*B)[i+ 1][k];
}else{
C[i][k]=(*B)[i+ 1][k+ 1];
}
}

}

}
for(int i=0;i<a- 1;i++){
cout<<"| ";
for(int j=0;j<a- 1;j++){
cout<<C[i][j]<<" ";
}
cout<<"|"<<endl;
}





return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

eliminar fila y columna de una matriz

Publicado por anonymous (146 intervenciones) el 25/09/2021 21:51:49
Oh ya veo, bueno lastima que no pude ayudarte, pero gracias por compartir tu código arreglado, saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar