Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problema con arreglo en funcion

Estas en el tema de Problema con arreglo en funcion en el foro de C/C++ en Foros del Web. Hola es gusto poder saludarles y de paso aprovechar para solicitar su ayuda Estoy desarrollando un programa como trabajo final de semestre el cual realizara ...
  #1 (permalink)  
Antiguo 29/11/2013, 23:32
Avatar de Basteri  
Fecha de Ingreso: noviembre-2008
Mensajes: 30
Antigüedad: 15 años, 5 meses
Puntos: 0
Pregunta Problema con arreglo en funcion

Hola es gusto poder saludarles y de paso aprovechar para solicitar su ayuda
Estoy desarrollando un programa como trabajo final de semestre el cual realizara algunos cálculos utilizados en fotografía.

Mi problema es que tengo la siguiente funcion que genera un arreglo unidimencional

Código:
void matriz(){
     int x, y=1;
     float m[3];
     
      for(x=0;x<3;x++){
      y=m[x]=y+2;      }
      for(x=0;x<3;x++){
      cout<<m[x]<<endl;
      }
     }
y la mando llamar de la siguiente manera

Código:
matriz();
Hasta aquí todo perfecto se imprime la matriz completa, esta función la uso por que es una matriz que necesito meter en distintas partes del programa y para no repetir todo el código cada vez. Pero en un caso en especifico quiero que esta matriz funcione como menú, me explico, que de los números que se imprimen el usuario digite cual prefiere para realizar una serie de operaciones.

Entonces lo que necesito es que la función solo me devuelva el dato que contiene en una casilla especifica del arreglo que es la opción que el usuario solicito

digamos,
Matriz
0 2.3
1 4.5
2 3.4

que el usuario eligió la opción 0 entonces necesito que la función me devuelva solo lo contenido en la casilla 0 que es 2.3 para poder realizar cálculos con este numero

algo así

x=0
res=matriz[x]+3;
res=5.3

Ya lo intente con funciones con paso de parámetros y con return pero no me funciona, probablemente mi sintaxis este mal, espero me puedan ayudar
  #2 (permalink)  
Antiguo 30/11/2013, 00:20
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Problema con arreglo en funcion

Traté de entender lo que propones, y me imaginé una solución. Si esta no es a lo que te refieres, discúlpame, y plantea la pregunta de nuevo para guiarme mejor.

Código C:
Ver original
  1. #include <stdio.h>
  2.  
  3. float
  4. matriz (const unsigned int op)
  5. {
  6.   if (op < 0 || op > 2)
  7.     return -1; /* Error... */
  8.  
  9.   unsigned int x = 0;
  10.   unsigned int y = 1;
  11.   static float m[3];
  12.  
  13.   for (; x < 3; x++)
  14.     y = m[x] = y+2;
  15.  
  16.   return m[op];
  17. }
  18.  
  19. int
  20. main (void)
  21. {
  22.   printf("%0.1f", matriz(2));
  23. }
  #3 (permalink)  
Antiguo 30/11/2013, 00:30
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 6 meses
Puntos: 38
Respuesta: Problema con arreglo en funcion

Código C++:
Ver original
  1. #include <iostream>
  2. #include <windows.h>
  3. using namespace std;
  4.  
  5. void matriz( int opt = -1 ){
  6.      int x;
  7.      int y=1;
  8.      float m[3];
  9.      
  10.      for (x=0;x<3;x++){
  11.         y=m[x]=y+2;
  12.      }    
  13.      
  14.      // si opt recibe 0, 1 o 2 entra en if caso no reciba nada pasa a else  
  15.      if (opt==0 || opt==1 || opt==2 ){
  16.         cout<<m[opt]<<endl;            
  17.      }
  18.      else{     
  19.         for (x=0;x<3;x++){
  20.             cout<<m[x]<<endl;
  21.         }    
  22.      }
  23.  
  24. }    
  25.  
  26. int main (){
  27.    
  28.     //quita la doble barra y prueba el funcionamiendo de cada llamada
  29.    
  30.     //matriz(0);
  31.     //matriz(1);
  32.     //matriz(2);
  33.     //matriz();    
  34.    
  35.     //system("pause>null");
  36.     return 0;
  37. }
  #4 (permalink)  
Antiguo 30/11/2013, 12:55
Avatar de Basteri  
Fecha de Ingreso: noviembre-2008
Mensajes: 30
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con arreglo en funcion

Hola guzzano muchas gracias por tu respuesta mi compilador me tira errores en la linea 14 uso el devc y una pregunta quiza tonta pero al poner unsigned que es? una variable o un tipo de variable?

vangodp gracias por tu respuesta la estoy probando y parece que funciona perfecto, intentare acoplarla al programa y les cuento como me fue. Gracias
  #5 (permalink)  
Antiguo 30/11/2013, 20:53
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Problema con arreglo en funcion

Cita:
Iniciado por Basteri Ver Mensaje
Hola guzzano muchas gracias por tu respuesta mi compilador me tira errores en la linea 14 uso el devc y una pregunta quiza tonta pero al poner unsigned que es? una variable o un tipo de variable?

vangodp gracias por tu respuesta la estoy probando y parece que funciona perfecto, intentare acoplarla al programa y les cuento como me fue. Gracias
Buenas, el código está compilado:
Código text:
Ver original
  1. gzz ~ $ gcc -Wall test.c -o test
  2. gzz ~ $ gcc --version
  3. gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)

Sin ningún error como podrás observar, y funciona perfecto. Posiblemente sea tu versión de DevC++, que no tenga el último compilador, si no una versión MUY vieja y con bastante errores, algo común en la versión oficial de DevC++, (la número cinco). También lo probé en gentoo con gcc versión 4.8.2 sin ningún tipo de problemas. Además, se puede observar que en el código, no hay errores.

Pero podrías probar así, dado que no le agregué las llaves, cosa que no hace falta.

Código C:
Ver original
  1. for (; x < 3; x++)
  2. {
  3.     y = m[x] = y+2;
  4. }

Por otro lado, unsigned es que la variable no tendrá ningún número negativo, solo positivos. Y te coloqué la variable m de forma estática para que no sea una variable local, (siguiendo lo que dijiste que la usarías lo que devolviera para otros cálculos, por eso le agregué un return.

Si esa matriz, solo dará esos tres números, o sea, son constantes, es mejor hacerle un macro, por cuestión de optimización, de nada vale tener ese loop.

Un saludo.
  #6 (permalink)  
Antiguo 01/12/2013, 00:49
Avatar de Basteri  
Fecha de Ingreso: noviembre-2008
Mensajes: 30
Antigüedad: 15 años, 5 meses
Puntos: 0
Respuesta: Problema con arreglo en funcion

Hola buenas noches, solo para comentarles que ya se resolvió el problema con la solución de Vangodp, funciono de maravilla.

Guzanno muchas gracias por la explicación de las variables y al final si era problema del compilador devc por lo que no pude correr tu solución la cual también me pareció excelente, de ella tome la comprobación inicial que le pusiste.

Muchas gracias a ambos.
Saludos.
  #7 (permalink)  
Antiguo 02/12/2013, 01:23
Avatar de guzzano  
Fecha de Ingreso: julio-2010
Ubicación: Isla de Margarita
Mensajes: 162
Antigüedad: 13 años, 9 meses
Puntos: 13
Respuesta: Problema con arreglo en funcion

Cita:
Iniciado por Basteri Ver Mensaje
Hola buenas noches, solo para comentarles que ya se resolvió el problema con la solución de Vangodp, funciono de maravilla.

Guzanno muchas gracias por la explicación de las variables y al final si era problema del compilador devc por lo que no pude correr tu solución la cual también me pareció excelente, de ella tome la comprobación inicial que le pusiste.

Muchas gracias a ambos.
Saludos.
Como una recomendación, es bueno tener siempre el compilador al día en actualizaciones, cuando comencé a programar, usaba si mal no recuerdo la última versión de DevC++, que puede que sea la tuya (te recuerdo que el proyecto DevC++ oficial no recibe actualizaciones desde hace años), y muchas cosas que me aceptó el compilador, iban en contra del ANSI, como por ejemplo definir una función en una función. Y cuando me cambié a un IDE con un compilador mucho más al día, me trajo muchos problemas porque me acostumbré a trabajar así, con tantos errores que el compilador omitió.

Como última cosa, aunque no es un error, es solo optimización, me equivoqué en la variable que definí en la función matriz

Código C:
Ver original
  1. float
  2. matriz (const unsigned char op)

Debería ser así exactamente para cuando es una cuestión de opciones, no vale la pena desperdiciar cuatro bytes, cuando podíamos usar uno.

Un saludo.

Etiquetas: arreglo, funcion, int, matriz, numero, programa
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:37.