Programa con funciones en funcion de una opcion

Iniciado por muymuyperdido, 24 Noviembre 2012, 20:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

muymuyperdido

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;
      }

Ferno

¿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.

muymuyperdido

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 :)

Ferno

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:

int media (int v [FIL][COL]){
      int suma,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;
      }


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.

muymuyperdido

¡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)

Ferno

scanf("%d",&v[j]);

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

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" :)

muymuyperdido

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.

Ferno

Tu tienes esto:

suma=suma+v[j];

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

suma = suma + v[i][j];

muymuyperdido

Cambié y sigue sin salirme, me sale un numero enorme que no es ni de lejos el resultado real :|
pero gracias de todos modos!! :) :)

leosansan

Cita de: 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 :
¿Has probado a inicializar suma?, es decir:
Código (cpp) [Seleccionar]
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!.