[C con Clase] Como eliminar filas en una matriz dinamica?

Ali Rincon alrincon1963 en hotmail.com
Lun Dic 23 17:36:22 CET 2013


Ok, muchas gracias por tu sugerencia. Intentaré hacer algo al respecto. Pero permitame una pregunta que se me ocurre: Podria seguir trabajando con reserva dinamica de memoria, y definir otra matriz auxiliar, de manera de guardar en ella las filas que me interesan, es decir, que cumplan con una determinada condicion? No estoy muy versado, pero he inventigado que la funcion realloc podria ayudarme con ello. Que opina Ud?? Podria hecerlo asi??




El pasado 2013-12-23 14:52:16, cplusplus escribió:
 
c> Hola buen día,
c>  
c> Según puedo ver, tu estructura "mat" no está diseñada para realizar la
c> operación que deseas.
c>  
c> De pronto podrías utilizar una especie de estructura de tipo "lista", en
c> donde te permita insertar "nodos" y luego eliminar el que deseas.
c>  
c>  
c>  
c>  
c> Saludos
c> <-----Original Message----->
c> From: Ali Rincon [cconclase en listas.conclase.net]
c> Sent: 21/12/2013 7:33:47 PM
c> To: cconclase en listas.conclase.net
c> Subject: [C con Clase] Como eliminar filas en una matriz dinamica?
c> Hola a todos. A continuacion les envio el programa, en donde se calcula
c> unas combinaciones y luego deseo imponer una condicion muy simple (la
c> cual se explica en el programa) y lo que deseo es ver la matriz que debe
c> quedar:
c> #include <stdio.h>
c> #include <stdlib.h>
c> //Matriz15x14Dinamica
c> /*Programa que calcula las combinaciones de 15 numeros tomados de 14 en
c> 14 y el resultado lo expresa en forma de una matriz 15x14 dinamica*/
c> //int main()
c> void main()
c> {
c> int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14;
c> int **mat = NULL; //Aqui la matriz "mat" se declara como un doble
c> puntero de tipo int, es decir, como un puntero a un puntero.
c> int f; // Fila
c> int c; // Columna
c> int nF = 15; // Número de filas
c> int nC = 14; // Número de columnas
c> char seguir, siga;
c> /*Reserva dinamica de memoria*/
c> mat = malloc(nF * sizeof(int *)); //Se reserva memoria para un numero de
c> filas nF de punteros a int.
c> //if(!mat)
c> if(mat == NULL)
c> {
c> printf("Memoria insuficiente\n");
c> return 1;
c> }
c> for(f = 0; f < nF; f++) //Este bucle proporciona un bloque de memoria
c> para cada una de las 15 filas de la matriz mat.
c> {
c> mat[f] = malloc(nC * sizeof(int));
c> //if(!mat[f])
c> if(mat[f] == NULL)
c> {
c> printf("Memoria insuficiente\n");
c> for(c = 0; c < f; c++)
c> free(mat[c]);
c> free(mat);
c> return 1;
c> }
c> }
c> /*Calculo de las combinaciones*/
c> f = 0;
c> for (i1 = 1; i1 <= 15; i1++)
c> {
c> for (i2 = i1 + 1; i2 <= 15; i2++)
c> {
c> for (i3 = i2 + 1; i3 <= 15; i3++)
c> {
c> for (i4 = i3 + 1; i4 <= 15; i4++)
c> {
c> for(i5 = i4 + 1; i5 <= 15; i5++)
c> {
c> for (i6 = i5 + 1; i6 <= 15; i6++)
c> {
c> for (i7 = i6 + 1; i7 <= 15; i7++)
c> {
c> for (i8 = i7 + 1; i8 <= 15; i8++)
c> {
c> for (i9 = i8 + 1; i9 <= 15; i9++)
c> {
c> for (i10 = i9 + 1; i10 <= 15; i10++)
c> {
c> for (i11 = i10 + 1; i11 <= 15; i11++)
c> {
c> for (i12 = i11 + 1; i12 <= 15; i12++)
c> {
c> for (i13 = i12 + 1; i13 <= 15; i13++)
c> {
c> for (i14 = i13 + 1; i14 <= 15; i14++)
c> {
c> if ((i1 != i2) && (i1 != i3) && (i1 != i4) && (i1 != i5) &&
c> (i1 != i6) && (i1 != i7) && (i1 != i8) && (i1 != i9) &&
c> (i1 != i10) && (i1 != i11) && (i1 != i12) && (i1 != i13) &&
c> (i1 != i14) && (i2 != i3) && (i2 != i4) && (i2 != i5) &&
c> (i2 != i6) && (i2 != i7) && (i2 != i8) && (i2 != i9) &&
c> (i2 != i10) && (i2 != i11) && (i2 != i12) && (i2 != i13) &&
c> (i3 != i4) && (i3 != i5) && (i3 != i6) && (i3 != i7) &&
c> (i3 != i8) && (i3 != i9) && (i3 != i10) && (i3 != i11) &&
c> (i3 != i12) && (i3 != i13) && (i4 != i5) && (i4 != i6) &&
c> (i4 != i7) && (i4 != i8) && (i4 != i9) && (i4 != i10) &&
c> (i4 != i11) && (i4 != i12) && (i4 != i13) && (i4 != i14) &&
c> (i5 != i6) && (i5 != i7) && (i5 != i8) && (i5 != i9) &&
c> (i5 != i10) && (i5 != i11) && (i5 != i12) && (i5 != i13) &&
c> (i5 != i14) && (i6 != i7) && (i6 != i8) && (i6 != i9) &&
c> (i6 != i10) && (i6 != i11) && (i6 != i12) && (i6 != i13) &&
c> (i6 != i14) && (i7 != i8) && (i7 != i9) && (i7 != i10) &&
c> (i7 != i11) && (i7 != i12) && (i7 != i13) && (i7 != i14) &&
c> (i8 != i9) && (i8 != i10) && (i8 != i11) && (i8 != i12) &&
c> (i8 != i13) && (i8 != i14) && (i9 != i10) && (i9 != i11) &&
c> (i9 != i12) && (i9 != i13) && (i9 != i14) && (i10 != i11) &&
c> (i10 != i12) && (i10 != i13) && (i10 != i14) && (i11 != i12) &&
c> (i11 != i13) && (i11 != i14) && (i12 != i13) && (i12 != i14) &&
c> (i13 != i14))
c> {
c> c = 0;
c> mat[f][c] = i1;
c> c = c + 1;
c> mat[f][c] = i2;
c> c = c + 1;
c> mat[f][c] = i3;
c> c = c + 1;
c> mat[f][c] = i4;
c> c = c +1;
c> mat[f][c] = i5;
c> c = c + 1;
c> mat[f][c] = i6;
c> c = c + 1;
c> mat[f][c] = i7;
c> c = c + 1;
c> mat[f][c] = i8;
c> c = c + 1;
c> mat[f][c] = i9;
c> c = c + 1;
c> mat[f][c] = i10;
c> c = c + 1;
c> mat[f][c] = i11;
c> c = c + 1;
c> mat[f][c] = i12;
c> c = c + 1;
c> mat[f][c] = i13;
c> c = c + 1;
c> mat[f][c] = i14;
c> f = f + 1;
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> }
c> // Mostrar matriz
c> for (f=0; f<nF; f++)
c> {
c> for (c=0; c<nC; c++)
c> printf(" %d ", mat[f][c]);
c> printf("\n");
c> }
c> printf("\nDesea imponer alguna condicion sobre esta matriz (s/n)?: ");
c> scanf("%s", &seguir);
c> if(siga != 'n')
c> {
c> for(f = 0; f <=nF; f++)
c> {
c> for (c=0; c<nC; c++)
c> if (mat[f][c] == 1);
c> //Como hago aqui para definir una rutina que me permita eliminar las
c> filas que contengan al numero uno y me muestre las filas que no
c> contengan
c> //al numero uno, en forma de una matriz 15x14.
c> }
c> }
c> /*Liberacion de memoria*/
c> for(f = 0; f < nF; f++)
c> free(mat[f]);
c> free(mat);
c> //getch();
c> //return 0;
c> }
c> De verdad, les agradezco altamente toda la colaboracion que me puedan
c> brindar para resolver este problemita.
c> Muchas gracias de antemano a todos.
c> Ali Rincon
c> _______________________________________________
c> Lista de correo Cconclase Cconclase en listas.conclase.net
c> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.ne
c> t
c> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
c> <http://listas.conclase.net/index.php?gid=2&mnu=FAQ> 
c> _______________________________________________
c> Lista de correo Cconclase Cconclase en listas.conclase.net
c> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
c> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ


Más información sobre la lista de distribución Cconclase