[C con Clase] Ayuda con la salida de la matriz final.

Ali Rincon alrincon1963 en hotmail.com
Mar Dic 31 01:16:22 CET 2013


He estado investigando como "eliminar" filas en una matriz cualquiera y creo que conseguí hacer algo simpático y funcional. Aunque no es lo que exactamente estoy tratando de solucionar, si me sirve para mejorar el código y hacerlo un poco mas general. Sin embargo tengo un problema con la salida de la matriz final la cual no consigo hacerla bien, es decir, se mezclan algunas filas al final y desearía saber si alguien pudiera decirme cual es el error o que es lo que me hace falta en el código. 

Aquí envío el código:

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

int main()
//void main()
{
    int matriz[10][10];
    int i,j,k;
    int a,b;
    int valor,posicion;
    int indices=10;
    char nombrefichero[40];
    FILE *fichero;

    //Lectura del fichero origen.

    printf("\nIntroduzca el nombre del fichero origen: ");
    scanf("%s39[^\n]s",nombrefichero);
    printf("\n");

    fichero = fopen(nombrefichero, "r");

    if (fichero != NULL)
    {
        for(i=0; i<10; i++)
        {
            for(j=0; j<10; j++)
            {
                fscanf(fichero, "%d", &matriz[i][j]);
            }
        }

    //Visualizar la matriz.

    for(i=0; i<10; i++)
    {
        for(j=0; j<10; j++)
        {
            printf("%4d", matriz[i][j]);
        }
        printf("\n\n");
    }

    //Imposicion de la condicion.

    printf("Introduzca el numero cuya fila sera eliminada: ");
    scanf("%d", &valor);

    for(i=0; i<10; i++)
    {
        for(j=0; j<10; j++)
        {
            if(matriz[i][j] == valor)
            {
            printf("El valor se encuentra en la fila: %d", i);
            printf("\n");
            posicion = i;
            }
        }
    }

    //Remover la fila donde se encuentre el valor

    for(k=posicion; k<indices; k++)
    {
        for(j=0; j<10; j++)
        {
            matriz[k][j] = matriz[k+1][j]; //Aqui deberian de retroceder las filas!!
        }
    }

    //Mostrar la matriz final reducida.

    indices=indices-1;
    printf("La matriz final sera: \n");
    printf("\n");

    for(i=0; i<indices; i++)
    {
        for(j=0; j<10; j++)
        {
            printf("%4d", matriz[i][j]);
        }
    }

    //Cerrar fichero.

    fclose(fichero);
    }
    else
        printf("Error al abrir el fichero");

    //Fin del programa.

    return 0;
} 

El fichero de origen es una matriz de 10x10 con numeros del 1 al 100, o pueden ser tambien numeros aleatorios.


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