Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: muymuyperdido en 24 Noviembre 2012, 20:29 pm



Título: Programa con funciones en funcion de una opcion
Publicado por: muymuyperdido en 24 Noviembre 2012, 20:29 pm
Estoy en inicios de C, trabajando con funciones e intento un programa que yo introduzco una matriz bidimensional y una opcion en forma de caracter, y segun este sea el programa hace una funcion u otra, lo he planteado asi pero no compila y no veo el error

#include <stdio.h>
#define FIL 2
#define COL 3
void sumaescalar (int [FIL][COL]);
void multescalar (int [FIL][COL]);
int media (int [FIL][COL]);
int main (void){
    char o;
    int v[FIL][COL],i,j;
    for (i=0; i<FIL;i++){
        for (j=0;j<COL;j++){
            printf("Introduce el elemento [%d,%d]", i,j);
            scanf("%d",&v[j]);}}
    printf("Introduce la opción, s sumar, m multiplicar y a media");
    scanf("%c",&o);
    switch(o){
              case 's': sumaescalar(v);
              break;
              case 'm': multescalar (v);
              break;
              case 'a': printf ("La media es media=media(v)");
              break;
              default :printf ("Opcion no valida");}
}
   void sumaescalar (int [FIL][COL]){
        int suma[FIL][COL],v[FIL][COL], n,i,j;
        printf("Introduce el escalar a sumar");
        scanf("%d",&n);
        for (i=0; i<FIL;i++){
                    for (j=0;j<COL;j++){
                        suma[j]=v[j]+n;}}}
     void multescalar (int [FIL][COL]){
        int m[FIL][COL],v[FIL][COL], n,i,j;
        printf("Introduce el escalar a multiplicar");
        scanf("%d",&n);
        for (i=0; i<FIL;i++){
                    for (j=0;j<COL;j++){
                        m[j]=v[j]*n;}}}
  int media (int [FIL][COL]){
      int suma,v[FIL][COL],i,j,media;
      for (i=0; i<FIL;i++){
                    for (j=0;j<COL;j++){
                        suma=suma+v[j];}}
      media=suma/(FIL*COL);
      return media;
      }


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: Ferno en 24 Noviembre 2012, 20:41 pm
¿Podrías poner el mensaje del compilador?

Por lo rápido que lo vi, te falta declarar las variables "i" y "j" que usas en los for.

Otra cosa, ¿Podrías usar las etiquetas GeSHi para postear código? Así es más legible.


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: muymuyperdido en 24 Noviembre 2012, 20:47 pm
He modificado el mensaje original con algunos cambios y me quita varios errores.
No se como poner lo del Gehsi, lo siento, no se como funciona esto muy bien aun.
El error me da en cada funcion "parameter name omitted"
Gracias por la ayuda :)


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: Ferno en 24 Noviembre 2012, 21:08 pm
Ahh, es que estás declarando un vector en CADA UNA de las funciones como variable local!
No le pusiste nombre al parámetro en cada función, fijate que tenés "int [FIL][COL] como parámetro y jamás le pusiste un nombre el cual usar dentro de la función.

En realidad la función quedaría:

Código
  1. int media (int v [FIL][COL]){
  2.      int suma,i,j,media;
  3.      for (i=0; i<FIL;i++){
  4.                    for (j=0;j<COL;j++){
  5.                        suma=suma+v[j];}}
  6.      media=suma/(FIL*COL);
  7.      return media;
  8.      }

Es decir, incluir el nombre que usas en la función para ese vector (en tu caso "v" en la declaración de la función y en su definición y borrar la variable local "v[FIL][COL]".

Te recomiendo leer un buen libro de programación. El Lenguaje de Programación C de Kernighan y Ritchie es excelente.


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: muymuyperdido en 24 Noviembre 2012, 21:18 pm
¡Gracias! Ahora me compila, pero,
Leo el vector por teclado
Imprime el mensaje de elegir la opcion y cuando la escribo se me cierra el programa.
(Al compilar no da errores, asi que si que no tengo ni idea)


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: Ferno en 24 Noviembre 2012, 21:22 pm
Código
  1. scanf("%d",&v[j]);

Eso no está del todo bien. Para leer el valor v[j] por pantalla deberías hacer:

Código
  1. scanf("%d",v[i][j]);

PD: BTW, para usar las etiquetas GeSHi, lo que debes hacer es, al momento de estar en la pantalla de "publicar respuesta", tenés que seleccionar el código correspondiente, y seleccionar del formulario de arriba a la derecha de este cuadro de texto, donde dice GeSHi, el lenguaje correspondiente. A la derecha de todas las opciones de formato y arriba de "Cambiar Color" :)


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: muymuyperdido en 24 Noviembre 2012, 21:33 pm
Ya he arreglado ese problema,
la suma y la multiplicacion funcionan, pero la media me da un valor que supongo basura pero no entiendo porque.


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: Ferno en 24 Noviembre 2012, 21:41 pm
Tu tienes esto:

Código
  1. suma=suma+v[j];

En realidad, ¿no deberías hacer lo siguente?

Código
  1. suma = suma + v[i][j];


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: muymuyperdido en 24 Noviembre 2012, 21:45 pm
Cambié y sigue sin salirme, me sale un numero enorme que no es ni de lejos el resultado real :|
pero gracias de todos modos!! :) :)


Título: Re: Programa con funciones en funcion de una opcion
Publicado por: leosansan en 24 Noviembre 2012, 22:25 pm
Cambié y sigue sin salirme, me sale un numero enorme que no es ni de lejos el resultado real :
¿Has probado a inicializar suma?, es decir:
Código
  1. int suma=0;
Si no lo haces la variable suma toma inicialmente un valor basura.
Saluditos!. ... y mira los mensajes que te llegan.
P.D: Cuando vayas a poner un código, previamente te vas a donde pone GesHi y elijes C++, y en medio de las etiquetas que aparecen  pegas tu código.
Saluditos!.