• Jueves 14 de Noviembre de 2024, 04:12

Autor Tema:  Funciones con matrices  (Leído 2379 veces)

alejandro222

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Funciones con matrices
« en: Viernes 12 de Octubre de 2012, 20:52 »
0
Lo primero, felicitarlos a todos por el foro, que me ha sido de ayuda en varias ocasiones, y agradeceros vuestra atención.
Posteo para pedir ayuda con un código al que no consigo encontrar el fallo; básicamente crea una matriz de dimensión n, y pide al usuario rellenarla. A continuación, se imprime un número de esa matriz, dada una fila y una columna.
Código: [Seleccionar]
# include <stdio.h>

# include <iostream>

using namespace std;

int dim; //una variable para guardar las dimensiones de la matriz

void imprimir(int matriz[][10],int fila,int columna); //la funcion que me da errores

int main(){

cout << "Introduzca la dimensión n de la matriz (cuadrada): "; //pedir el rango
cin >> dim; //guardarlo

int matrizA[dim][dim]; //creo la matriz con la que quiero trabajar


/*Pillar los datos de la matriz*/
cout << "Introduzca los datos, empezando por la primera fila, de izda. a derecha y arriba a debajo, conforme se le van pidiendo: " << endl;

for(int i = 0; i <dim; i++){ //recorrer las filas

    for(int j = 0; j < dim; j ++){ //recorrer las columnas
        cout << "Elemento " <<i +1<< j +1<<" : "; //indicar al usuario que dato está introduciendo
        cin >> matrizA[i][j]; //guardar el dato en la posición correspondiente de la matriz
    }

}

imprimir(matrizA,1,2); //Imprimir la posición 1,2 (por poner algo, podría ser cualquier otra posición que necesitara)
   
    return 0;

}

void imprimir(int matriz[][10],int fila,int columna){ //la función pide una matriz, una fila y una columna
   
cout << matriz[fila][columna];//imprime a consola el elemento correspondiente

}

Al ejecutar el programa, me lanza el siguiente error (si ayuda en algo, mi IDE es codeblocks):
cannot convert ‘int (*)[(((long unsigned int)(((long int)dim) + -0x00000000000000001)) + 1)]’ to ‘int (*)[10]’ for argument ‘1’ to ‘void imprimir(int (*)[10], int, int)’|

En cambio, si en vez de usar una función a parte introduzco el código directamente en la función main, el programa funciona perfectamente (quiero decir, en lugar de la linea imprimir(matrizA,1,2);, poner algo como cout<<matrizA;[1][2].

Muchas gracias por vuestra ayuda, agradeceré cualquier comentario que me ayude a avanzar un poco.

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:Funciones con matrices
« Respuesta #1 en: Sábado 13 de Octubre de 2012, 00:17 »
0
Hola, alejandro222

Mira, no puedes definir dinamicamente el tamaño de una matriz de la forma en que lo estas haciendo, o sea, la siguiente linea es incorrecta:

    int matrizA[dim][dim];

Para definir una matriz la manera correcta seria definir su tamaño de manera estatica o sea:

    int matrizA[10][10];

Hay una forma de crear matrices con tamaño dinamico, pero requieren el uso de apuntadores y memoria dinamica y es un tema mas largo del que te podria explicar en unas cuantas lineas, asi que la manera mas simple en tu caso seria definir tu matriz estaticamente, y colocar una validacion para que tu matriz no exceda el tamaño que definiste de manera estatica.

Dicho eso,. te dejo el codigo corregido, te quedaria de tarea colocar una validacion para que el tamaño de dim no sea mayor a el tamaño maximo de tu matriz:

Código: [Seleccionar]
# include <stdio.h>
# include <iostream>

using namespace std;

int dim; //una variable para guardar las dimensiones de la matriz

int matrizA[10][10]; //creo la matriz con la que quiero trabajar


void imprimir(int matriz[][10],int fila,int columna); //la funcion que me da errores

int main()
{

    cout << "Introduzca la dimensión n de la matriz (cuadrada): "; //pedir el rango
    cin >> dim; //guardarlo

    /*Pillar los datos de la matriz*/
    cout << "Introduzca los datos, empezando por la primera fila, de izda. a derecha y arriba a debajo, conforme se le van pidiendo: " << endl;

    for(int i = 0; i <dim; i++)  //recorrer las filas
    {

        for(int j = 0; j < dim; j ++)  //recorrer las columnas
        {
            cout << "Elemento " <<i +1<< j +1<<" : "; //indicar al usuario que dato está introduciendo
            cin >> matrizA[i][j]; //guardar el dato en la posición correspondiente de la matriz
        }

    }

    imprimir(matrizA,1,2); //Imprimir la posición 1,2 (por poner algo, podría ser cualquier otra posición que necesitara)

    return 0;

}

void imprimir(int matriz[][10],int fila,int columna)  //la función pide una matriz, una fila y una columna
{

    cout << matriz[fila][columna];//imprime a consola el elemento correspondiente

}

Saludos :)

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

alejandro222

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re:Funciones con matrices
« Respuesta #2 en: Domingo 14 de Octubre de 2012, 23:38 »
0
Muchas gracias por la ayuda, funciona perfecto  :smartass: