elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda tonta de parámetros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Duda tonta de parámetros  (Leído 4,534 veces)
Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Duda tonta de parámetros
« en: 18 Enero 2016, 14:25 pm »

Buenas, tengo este ejercicio :
escribir un programa que reciba dos números como parámetros y muestre por pantalla la syma y la resta de esos dos valores.

Y esto es lo que hice :

Código
  1. #include <stdio.h>
  2. int operacion(int a, int b){
  3. a=2;
  4. b=3;
  5. int s,r;
  6. s=a+b;
  7. r=a-b;
  8. printf("\nLa suma es%d\n", s);
  9. printf("\nLa resta es%d\n", r);
  10. }
  11. int main(void){
  12. int x,y;
  13. operacion(x,y);
  14. }
  15.  

Mi duda es simplemente si está bien hecho acorde a lo que pide el enunciado del ejercicio, es decir, si realmente lo hice bien y por parámetros tal como pide el problema o tiene otra forma de ser hecho.

UN saludo


En línea

fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Duda tonta de parámetros
« Respuesta #1 en: 18 Enero 2016, 14:47 pm »

Esta mal.

Lee esto sobre los argumentos del main.

http://decsai.ugr.es/~jfv/ed1/c/cdrom/cap6/cap64.htm

Saludos.


En línea

Un byte a la izquierda.
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Duda tonta de parámetros
« Respuesta #2 en: 18 Enero 2016, 15:16 pm »

Hola.

Lo correcto es inicializar los valores del parámetro antes de invocar a la función:

Código
  1. int x = 2,y = 3;
  2. operacion(x,y);
En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda tonta de parámetros
« Respuesta #3 en: 18 Enero 2016, 15:19 pm »

El problema que tienes es que en el cuerpo de la función operacion() no estás pidiendo los valores al usuario final, sino que los estás estableciendo tú mismo como a=2 y b=3.

Usando la función de entrada scanf() para pedir los valores, el programa quedaría como:

Código
  1. #include <stdio.h>
  2. int operacion(int a, int b) {
  3.  
  4. int s,r;
  5.  
  6. s=a+b;
  7. r=a-b;
  8.  
  9. printf("a = %d, b = %d\n", a, b);
  10.  
  11. printf("\nLa suma es: %d\n", s);
  12. printf("\nLa resta es: %d\n", r);
  13.  
  14. return 0;
  15. }
  16.  
  17. int main(void){
  18.  
  19. int x,y;
  20.  
  21. printf("Intro primer valor: ");
  22. scanf("%d", &x);
  23. printf("Intro segundo valor: ");
  24. scanf("%d", &y);
  25.  
  26. operacion(x,y);
  27. }
  28.  

Otro detalle, no se si lo notaste es que faltó el valor de retorno de operacion() el cual se declaró como int. Por eso debes añadir la instrucción "return 0" al final del cuerpo de la función.

La salida en pantalla queda como
Citar
Intro primer valor: 3
Intro segundo valor: 5
a = 3, b = 5

La suma es: 8

La resta es: -2

----------------------------------
Saludos, Yoel



0xFer dijo:

Lo correcto es inicializar los valores del parámetro antes de invocar a la función:

Bueno 0xFer, yo diría antes de invocar a la función operacion(), o también sería válido dentro del cuerpo de ella.

Una tercera alternativa sería usando los argc y argv[] que sugirió fary.

Saludos, Yoel.
« Última modificación: 18 Enero 2016, 15:44 pm por Eternal Idol » En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
fary


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: Duda tonta de parámetros
« Respuesta #4 en: 18 Enero 2016, 15:37 pm »

Le estais dando una respuesta erronea, la solución a su ejercicio es esta:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char *argv[])
  5. {
  6.    if (argc != 3)
  7.    {
  8.        printf("Error, no introduciste los parametros.");
  9.    }else{
  10.        int n1 = atoi(argv[1]);
  11.        int n2 = atoi(argv[2]);
  12.  
  13.        printf("La suma de los numeros es: %i\n", n1 + n2);
  14.        printf("La resta de los numeros es: %i\n", n1 - n2);
  15.    }
  16.    getchar();
  17.    return(0);
  18. }

Salida del programa:

Código:
C:\Users\Juan\Desktop\Ejemplo\bin\Debug>Ejemplo.exe 5 4
La suma de los numeros es: 9
La resta de los numeros es: 1

saludos.
En línea

Un byte a la izquierda.
0xFer


Desconectado Desconectado

Mensajes: 400



Ver Perfil
Re: Duda tonta de parámetros
« Respuesta #5 en: 18 Enero 2016, 15:45 pm »

escribir un programa que reciba dos números como parámetros y muestre por pantalla la syma y la resta de esos dos valores.

Si, la solución  que pone fary me parece correcta.
« Última modificación: 18 Enero 2016, 15:48 pm por 0xFer » En línea

Código
  1. int getRandomNumber(){
  2.    return 4; //chosen by fair dice roll
  3.              //guaranteed to be random
  4. }
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda tonta de parámetros
« Respuesta #6 en: 18 Enero 2016, 16:19 pm »

Le estais dando una respuesta erronea (..)

Fair, ¿por qué es errónea? En todo caso no eres quién mandó el ejercicio, así que no conoces el criterio de lo que se está pidiendo o como se espera hacerlo.

Yo trato de dar la respuesta más amplia posible, no sólo la que encuadra con mi preferencia personal, o la forma como YO lo haría.

Se trata de pedir dos números, y devolver su suma y su resta. Es mi opinión se pueden pedir como argumentos de main(), o de cualquier función auxiliar dentro del programa.

En términos de eficiencia e implementación es diferente, pero estoy tratando de dar una respuesta EN LA MISMA LÍNEA QUE PLANTEÓ ORIGINALMENTE EL USUARIO, es decir, respetando su esfuerzo y criterio original, para que mi respuesta pueda ser realmente útil a él.

En vez de lucirme explicando la manera sensacional COMO YO LO HARÍA, en cuyo caso me estaría respondiendo a mí mismo y no a él.

Saludos, Yoel.
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Duda tonta de parámetros
« Respuesta #7 en: 18 Enero 2016, 16:19 pm »

De todas formas tampoco tiene claro como funciona el paso de parámetros a una función.
Ya son unos cuántos que confunden parámetros de función con declaración de variables locales. Si su estudio viene del mismo sitio, en dónde sea que lo hagan, dan las clases muy mal.

Orb, cuándo tu función está declarada cómo
Código
  1. int operacion(int a, int b)
quiere decir que desde donde se la llame se le van a pasar dos enteros, el a y el b, para que dentro de la función se trabaje con ellos. Algo así como:
Código
  1. int operacion(int a, int b) {
  2.    printf("La suma de a y b es %i.", a + b);
  3.    ...
  4.  

En cambio si quisieras que a y b formaran parte de la función pero no deben ser usadas para pasar parámetros en ella:
Código
  1. int operacion() {
  2.    int a = 2;
  3.    int b = 3;
  4.    printf("La suma de a y b es %i.", a + b);
  5.    ...
  6.  

Hacer algo como lo que has puesto:
Código
  1. int operacion(int a, int b) {
  2.    a = 2;
  3.    b = 3;
  4.    ...
  5.  
Es una mala práctica ya que, sea lo que sea que has recibido por a y b, lo sustituyes por tus propios datos. Tu dirás: si así funciona, ¿porqué cambiar? La razón es que para llamar a la función debes pasarle tantos argumentos como así la hayas definido, además si la usa otra persona que no eres tú esperará que funcione de una forma cuándo se encontrará con resultados extraños porqué machacas lo que ella ha querido pasar.

Por otra parte tu función retorna un valor entero. Cuándo las funciones son declaradas con un valor de retorno éstas siempre deben terminar devolviendo un dato de ese tipo, aunqué después no lo uses, como ocurre casi siempre con printf (sí, printf devuelve un dato entero). Las únicas que están exentas de ello son las funciones con retorno tipo void.
« Última modificación: 18 Enero 2016, 16:34 pm por MAFUS » En línea

Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Duda tonta de parámetros
« Respuesta #8 en: 18 Enero 2016, 16:27 pm »

De todas formas tampoco tiene claro como funciona el paso de parámetros a una función.
Ya son unos cuántos que confunden parámetros de función con declaración de variables locales. Si su estudio viene del mismo sitio en dónde sea que lo hagan dan las clases muy mal.

Mafus, por eso dije le dije a Orb que tenía que modificar el cuerpo de operacion() de modo que pidiera los valores por teclado en lugar que establacerlos él mismo como valores fijos.

Y de acuerdo contigo en que si definió la función con retorno int, entonces es necesario poner el return.
Aunque la verdad lo veo innecesario, si fuera por mí la hubiera declarado void y no se requeriría retornar nada, lo cual por cierto estaría más de acuerdo con el propósito original del ejercicio que es devolver los datos por pantalla.

Saludos, Yoel.
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Orb

Desconectado Desconectado

Mensajes: 81


Ver Perfil
Re: Duda tonta de parámetros
« Respuesta #9 en: 18 Enero 2016, 16:44 pm »

Buenas!

Lo primero gracias por tomaros la molestia de ayudarme.

He estado haciendo todos los ejercicios que se han ido mandando la universidad, pero al llegar a los parámetros ha sido una confusión total.
YO considero a esto un parámetro no sé si estaré equivocado
void suma (int a, int b)
En los apuntes se ponen estos ejemplos, unas en las que es por ejemplo void suma(void) y demás.
También he estado mirando los usos de arc y argv por si pudieran servirme aquí u en otra ocasión pero no acabo de entender su uso.
Arriba declaré los datos porque no pedía el ejercicio que los datos fuesen introducidos por el usuario.

Gracias de nuevo, un saludo

P.D:El return no lo he usado en los 3 meses que llevo aprendiendo, lo que hago lo hago directamente en ubuntu, tendrá algo que ver?
« Última modificación: 18 Enero 2016, 16:48 pm por Orb » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda tonta en VB
Programación Visual Basic
Athagan 7 2,142 Último mensaje 31 Diciembre 2005, 23:55 pm
por Athagan
duda tonta...
Programación Visual Basic
hAcKeR92 3 1,867 Último mensaje 14 Marzo 2008, 01:01 am
por ((( SPAWN )))
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines