[C con Clase] Como eliminar filas en una matriz dinamica?
Ali Rincon
alrincon1963 en hotmail.com
Dom Dic 22 01:23:20 CET 2013
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
Más información sobre la lista de distribución Cconclase