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

José de Paz cplusplus en intelnet.net.gt
Lun Dic 23 15:52:18 CET 2013


Hola buen día,
 
Según puedo ver, tu estructura "mat" no está diseñada para realizar la
operación que deseas.
 
De pronto podrías utilizar una especie de estructura de tipo "lista", en
donde te permita insertar "nodos" y luego eliminar el que deseas.
 
 
 
 
Saludos

<-----Original Message----->
From: Ali Rincon [cconclase en listas.conclase.net]
Sent: 21/12/2013 7:33:47 PM
To: cconclase en listas.conclase.net
Subject: [C con Clase] Como eliminar filas en una matriz dinamica?

Hola a todos. A continuacion les envio el programa, en donde se calcula
unas combinaciones y luego deseo imponer una condicion muy simple (la
cual se explica en el programa) y lo que deseo es ver la matriz que debe
quedar:

#include <stdio.h>
#include <stdlib.h>

//Matriz15x14Dinamica
/*Programa que calcula las combinaciones de 15 numeros tomados de 14 en
14 y el resultado lo expresa en forma de una matriz 15x14 dinamica*/

//int main()
void main()

{
int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14;
int **mat = NULL; //Aqui la matriz "mat" se declara como un doble
puntero de tipo int, es decir, como un puntero a un puntero.
int f; // Fila
int c; // Columna
int nF = 15; // Número de filas
int nC = 14; // Número de columnas
char seguir, siga;

/*Reserva dinamica de memoria*/

mat = malloc(nF * sizeof(int *)); //Se reserva memoria para un numero de
filas nF de punteros a int.

//if(!mat)
if(mat == NULL)
{
printf("Memoria insuficiente\n");

return 1;
}

for(f = 0; f < nF; f++) //Este bucle proporciona un bloque de memoria
para cada una de las 15 filas de la matriz mat.
{
mat[f] = malloc(nC * sizeof(int));
//if(!mat[f])
if(mat[f] == NULL)
{
printf("Memoria insuficiente\n");

for(c = 0; c < f; c++)

free(mat[c]);
free(mat);

return 1;
}
}

/*Calculo de las combinaciones*/

f = 0;

for (i1 = 1; i1 <= 15; i1++)
{
for (i2 = i1 + 1; i2 <= 15; i2++)
{
for (i3 = i2 + 1; i3 <= 15; i3++)
{
for (i4 = i3 + 1; i4 <= 15; i4++)
{
for(i5 = i4 + 1; i5 <= 15; i5++)
{
for (i6 = i5 + 1; i6 <= 15; i6++)
{
for (i7 = i6 + 1; i7 <= 15; i7++)
{
for (i8 = i7 + 1; i8 <= 15; i8++)
{
for (i9 = i8 + 1; i9 <= 15; i9++)
{
for (i10 = i9 + 1; i10 <= 15; i10++)
{
for (i11 = i10 + 1; i11 <= 15; i11++)
{
for (i12 = i11 + 1; i12 <= 15; i12++)
{
for (i13 = i12 + 1; i13 <= 15; i13++)
{
for (i14 = i13 + 1; i14 <= 15; i14++)
{
if ((i1 != i2) && (i1 != i3) && (i1 != i4) && (i1 != i5) &&
(i1 != i6) && (i1 != i7) && (i1 != i8) && (i1 != i9) &&
(i1 != i10) && (i1 != i11) && (i1 != i12) && (i1 != i13) &&
(i1 != i14) && (i2 != i3) && (i2 != i4) && (i2 != i5) &&
(i2 != i6) && (i2 != i7) && (i2 != i8) && (i2 != i9) &&
(i2 != i10) && (i2 != i11) && (i2 != i12) && (i2 != i13) &&
(i3 != i4) && (i3 != i5) && (i3 != i6) && (i3 != i7) &&
(i3 != i8) && (i3 != i9) && (i3 != i10) && (i3 != i11) &&
(i3 != i12) && (i3 != i13) && (i4 != i5) && (i4 != i6) &&
(i4 != i7) && (i4 != i8) && (i4 != i9) && (i4 != i10) &&
(i4 != i11) && (i4 != i12) && (i4 != i13) && (i4 != i14) &&
(i5 != i6) && (i5 != i7) && (i5 != i8) && (i5 != i9) &&
(i5 != i10) && (i5 != i11) && (i5 != i12) && (i5 != i13) &&
(i5 != i14) && (i6 != i7) && (i6 != i8) && (i6 != i9) &&
(i6 != i10) && (i6 != i11) && (i6 != i12) && (i6 != i13) &&
(i6 != i14) && (i7 != i8) && (i7 != i9) && (i7 != i10) &&
(i7 != i11) && (i7 != i12) && (i7 != i13) && (i7 != i14) &&
(i8 != i9) && (i8 != i10) && (i8 != i11) && (i8 != i12) &&
(i8 != i13) && (i8 != i14) && (i9 != i10) && (i9 != i11) &&
(i9 != i12) && (i9 != i13) && (i9 != i14) && (i10 != i11) &&
(i10 != i12) && (i10 != i13) && (i10 != i14) && (i11 != i12) &&
(i11 != i13) && (i11 != i14) && (i12 != i13) && (i12 != i14) &&
(i13 != i14))
{
c = 0;
mat[f][c] = i1;
c = c + 1;
mat[f][c] = i2;
c = c + 1;
mat[f][c] = i3;
c = c + 1;
mat[f][c] = i4;
c = c +1;
mat[f][c] = i5;
c = c + 1;
mat[f][c] = i6;
c = c + 1;
mat[f][c] = i7;
c = c + 1;
mat[f][c] = i8;
c = c + 1;
mat[f][c] = i9;
c = c + 1;
mat[f][c] = i10;
c = c + 1;
mat[f][c] = i11;
c = c + 1;
mat[f][c] = i12;
c = c + 1;
mat[f][c] = i13;
c = c + 1;
mat[f][c] = i14;
f = f + 1;
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}

// Mostrar matriz

for (f=0; f<nF; f++)
{
for (c=0; c<nC; c++)
printf(" %d ", mat[f][c]);
printf("\n");
}

printf("\nDesea imponer alguna condicion sobre esta matriz (s/n)?: ");
scanf("%s", &seguir);
if(siga != 'n')
{
for(f = 0; f <=nF; f++)
{
for (c=0; c<nC; c++)

if (mat[f][c] == 1);

//Como hago aqui para definir una rutina que me permita eliminar las
filas que contengan al numero uno y me muestre las filas que no
contengan
//al numero uno, en forma de una matriz 15x14.

}
}

/*Liberacion de memoria*/

for(f = 0; f < nF; f++)
free(mat[f]);
free(mat);

//getch();
//return 0;
}

De verdad, les agradezco altamente toda la colaboracion que me puedan
brindar para resolver este problemita.

Muchas gracias de antemano a todos.

Ali Rincon
_______________________________________________
Lista de correo Cconclase Cconclase en listas.conclase.net
http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.ne
t
Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
<http://listas.conclase.net/index.php?gid=2&mnu=FAQ> 
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20131223/61abe45a/attachment.html>


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