Título: Me tiene loco Publicado por: kayron8 en 7 Abril 2013, 12:31 pm Muy buenos días a todos y a todas, por si no tuviera suficiente con las funciones, ya entramos de lleno al paso por referencia y la recursividad :(
Tengo el siguiente ejercicio que creo que lo tengo casi hecho pero de tal caos que tengo en mi mente no sé cómo continuar… El ejercicio dice lo siguiente: 4.- Realizar un programa que pida dos números enteros por teclado y muestre por pantalla el siguiente menú: + --> SUMAR - --> RESTAR * --> MULTIPLICAR / --> DIVIDIR ^ --> POTENCIA ! --> FACTORIAL s --> SALIR El usuario deberá elegir introducir dos valores y a continuación elegir una opción (pulsando el carácter correspondiente), el programa deberá mostrar el resultado por pantalla. En este caso para calcular el resultado habrá que llamar a una función con el siguiente prototipo: void operacion (int n1, int n2, char oper, float* resul, int *error); siendo: • n1, n2: dos parámetros pasados por valor que representan los dos números sobre los que se quiere operar. • oper: un parámetro pasado por valor que indica el tipo de operación que se debe realizar sobre n1 y n2. Así si queremos realizar una suma este parámetro deberá tener el valor ‘+’, siendo para el resto de los casos: resta ‘-‘, multiplicación: ‘*’, división ‘/’, potencia ’^’, factorial ‘!’. • result: es un parámetro pasado por referencia donde se almacenará el resultado de la operación. • error: es un parámetro pasado por referencia donde se almacenará si la operación se ha resuelto o no con éxito. Los posibles valores que puede tomar son: o -1: si ha habido problemas al realizar la operación, como por ejemplo una división entre cero o el factorial de un número negativo. o 1: si la operación concluyó con éxito. El código que llevo hasta ahora, es el siguiente: Código
Espero que me puedan ayudar :D Título: Re: Me tiene loco Publicado por: amchacon en 7 Abril 2013, 13:16 pm Yo lo veo entero...
Título: Re: Me tiene loco Publicado por: kayron8 en 7 Abril 2013, 13:42 pm Yo lo veo entero... Bien, una pregunta más, ¿los resultados de las operaciones, que es más correcto, mostrarlas en el switch o en el main? ¿Para mostrarlos con el printf debo poner un & delante del nombre de la variable o algo así? Es decir, printf(“El resultado de la suma es: %f”,&resul); ¿O estoy equivocado? Un saludo Título: Re: Me tiene loco Publicado por: 0xDani en 7 Abril 2013, 13:54 pm Pues a no ser que quieras que el printf te muestre la direccion de memoria en la que esta almacenada la variable, no tienes que ponerle el ampersand (&).
Saludos. Título: Re: Me tiene loco Publicado por: avesudra en 7 Abril 2013, 14:16 pm Cosas que comentarte:
- Al pasarle los parámetros a la función "operación" , éstos tienen que tener el mismo nombre que el que has puesto en el prototipo dado que tu puedes pasarle cualquier variable del mismo tipo...Me refiero a esta línea: Código Donde: -No están declaradas ni n1 ni n2 ni oper. Y resul no existe, es result. - Al pasarle a la función un parámetro por referencia le tienes que pasar la dirección de memoria de la variable, con el operador &.Me refiero a la misma línea de antes quedando: Código Dado que el prototipo es un puntero y le tienes que pasar una dirección de memoria, como por ejemplo result que es donde se va a guardar el resultado. -En la función fact, vuelves a llamar a la misma función pero esta se llama fact no factorial ;) Código El código lo he corregido así por encima: Código Lo de limpiar el buffer no es algo que me guste, lo veo chapucero, pero bueno... Creo que el problema es que sigues sin tener soltura con las funciones,y entonces si ya te meten punteros... Una función la declaras: Código Y después al llamarla puedes pasarle la variable que quieras siempre respetando que sea un entero! Así por ejemplo: Código O : Código En el caso del paso de parámetros por referencia, lo que se le pasa es la dirección de la variable en vez de copiar su valor, un programa de ejemplo vale más que mi palabras: Código La función miFuncionPorReferencia2 no la tengo muy clara,se utilizarla pero no se explicarla resulta raro pero así es, a ver si alguno de aquí te lo puede explicar mejor.Ejecuta ese programa y mira detenidamente las salidas, te dejo mi salida por si no puedes o lo que sea: Código: Direccion de memoria de miNumero1: 0x1A9CBD38 Valor: 1 Título: Re: Me tiene loco Publicado por: kayron8 en 7 Abril 2013, 15:02 pm Una cosilla, yo el EOF sí que se lo que es, lo que pasa que en clase no lo hemos hecho aún, ¿como lo puedo substituir para que me siga funcionando?
Gracias una vez más :D Título: Re: Me tiene loco Publicado por: avesudra en 7 Abril 2013, 15:27 pm Ni idea, supongo que podrás sustituirlo por su valor simbólico pero es lo mismo osea que nada. Una sugerencia, no cites cuando los comentarios son tan largos ;)
Título: Re: Me tiene loco Publicado por: 85 en 7 Abril 2013, 16:41 pm qué citón que se mandó XD, por cierto que idioma es ese de kayron8, parece español pero no precisamente..
Saludos Título: Re: Me tiene loco Publicado por: avesudra en 7 Abril 2013, 16:49 pm qué citón que se mandó XD, por cierto que idioma es ese de kayron8, parece español pero no precisamente.. Te respondo por kayron8 si no te importa.Es Catalán, se habla en Cataluña, comunidad autónoma de España y cuya capital es Barcelona.(la zona resaltada es la comunidad autónoma). Si eres Argentino o del otro lado del charco como aquí decimos, creo que es algo normal que no lo conozcas, a no ser que seas culé(aficionado al F.C Barcelona).Saludos (http://upload.wikimedia.org/wikipedia/commons/thumb/2/2b/Localizaci%C3%B3n_de_Catalu%C3%B1a.svg/240px-Localizaci%C3%B3n_de_Catalu%C3%B1a.svg.png) Título: Re: Me tiene loco Publicado por: 85 en 7 Abril 2013, 16:58 pm Lo que conocía es que hay una región llamada Cataluña (no sabía su localización específica), se de la ciudad Barcelona y se del 'Barsa' XD, pero no sabía del idioma o dialecto de esa región. ;-) ;-)
gracias por la información. Título: Re: Me tiene loco Publicado por: rir3760 en 7 Abril 2013, 18:27 pm Lo de limpiar el buffer no es algo que me guste, lo veo chapucero, pero bueno... Puedes evitarlo cambiando la llamada a scanf:Código Por: Código Al utilizar " %c" el espacio le indica a la funcion que descarte todo espacio blanco, de forma similar a "%d", "%f", etc. Un saludo Título: Re: Me tiene loco Publicado por: avesudra en 7 Abril 2013, 20:23 pm Puedes evitarlo cambiando la llamada a scanf: ;-) ;-) ;-) ;-) desde luego por día me impresiona más lo que sabéis algunos por aquí. Código Por: Código Al utilizar " %c" el espacio le indica a la funcion que descarte todo espacio blanco, de forma similar a "%d", "%f", etc. Un saludo ¡Muchísimas gracias! Título: Re: Me tiene loco Publicado por: kayron8 en 7 Abril 2013, 20:33 pm Que foro más completo la leche jajaja
A parte de resolver temas de programación también se dan clases de geografía e idiomas jajaja ¡Y avesudra no hay ningún problema que contestes por mi parte :)! ¡Gracias por el aporte rir3760! Saludos :D |