Ir al contenido


Foto

Operaciones básicas y funciones


  • Por favor identifícate para responder
20 respuestas en este tema

#1 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 mayo 2009 - 04:25

Aquí mi segunda aportación... Críticas y sugerencias ??? Super Bienvenidas !!!!  :D  (y)



cpp
  1. /* Programa que realiza las 4 operaciones básicas a travéss de funciones*/
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. int suma(int a, int b)//Función que suma dos enteros que recibe como parámetros y regresa un resultado también entero
  7. {
  8. int resultado; //Declara resultado como variable local de tipo entero
  9.  
  10. resultado=a+b; //Realiza la operación aritmética de suma y guarda el valor en la variable resultado
  11. return resultado; //Regresa el valor de la variable resultado
  12. }
  13.  
  14. int resta(int a, int b)//Función que resta dos enteros que recibe como parámetros y regresa un resultado también entero
  15. {
  16. int resultado; //Declara resultado como variable local de tipo entero
  17.  
  18. resultado=a-b; //Realiza la operación aritmíéica de resta y guarda el valor en la variable resultado
  19. return resultado; //Regresa el valor de la variable resultado
  20. }
  21.  
  22. int multiplica(int a,int b)//Función que multiplica dos enteros que recibe como parámetros y regresa un resultado también entero
  23. {
  24. int resultado; //Declara resultado como variable local de tipo entero
  25.  
  26. resultado=a*b; //Realiza la operación aritmética de multiplicación y guarda el valor en la variable resultado
  27. return resultado; //Regresa el valor de la variable resultado
  28. }
  29.  
  30. int divide(int a,int b)//Función que divide dos enteros que recibe como parámetros y regresa un resultado también entero
  31. {
  32. int resultado; //Declara resultado como variable local de tipo entero
  33.  
  34. if (b!=0) // Verifica que el divisor sea diferente de CERO para evitar un error al dividir
  35. resultado=a/b; //Realiza la operación aritmética de división y guarda el valor en la variable resultado
  36. else
  37. if (a!=0) // En caso de que b sea CERO verifica si la división puede tomar a como divisor
  38. resultado=b/a; //Realiza la operación aritmética de división y guarda el valor en la variable resultado
  39. else
  40. resultado= -1; // Si tanto a como b son ceros, asigna a resultado un valor de error (-1)
  41.  
  42. return resultado; //Regresa el valor de la variable resultado
  43. }
  44.  
  45. void main (void) //Función principal
  46. {
  47. int x,y; //Se declaran dos variables locales para el main, de tipo entero
  48.  
  49. printf("\n Introduce un numero entero positivo -> "); //Mensaje de salida a pantalla
  50. scanf("%d",&x); //Se capta el valor introducido por el usuario y se almacena en la variable x
  51. printf("\n Introduce otro numero entero positivo -> "); //Segundo mensaje de salida a pantalla
  52. scanf("%d",&y); //Se capta el valor introducido por el usuario y se almacena en la variable y
  53.  
  54. printf("\n\n\n\t La sumatoria es de -> %d",suma(x,y)); //Envía el resultado a pantalla, mandando llamar a la función "suma" con  x y y como parámetros
  55. printf("\n\n\t La resta es de -> %d",resta(x,y)); //Envia el resultado a pantalla, mandando llamar a la función "resta" con  x y y como parámetros
  56. printf("\n\n\t La multiplicacion es de -> %d",multiplica(x,y)); //Envía el resultado a pantalla, mandando llamar a la función "multiplica" con  x y y como parámetros
  57. if ((divide(x,y))!=-1)//Si el resultado del llamado a la función "divide" con x y y como parámetros es diferente al resultado de error (-1) envía a pantalla el resultado
  58. printf("\n\n\t La division es de -> %d",divide(x,y));
  59. else //En caso de recibir -1 como resultado, envía un mensaje de error a pantalla
  60. printf("\n\n\t La division no pudo ser realizada");
  61.  
  62.  
  63. printf("\n\n\n\n Pulsa cualquier tecla para terminar....");
  64. getch(); //Espera pulsación de tecla por parte del usuario para terminar
  65. }




Nota Adicional:
El "\n" en el printf, permite un salto de línea en el lugar donde se coloque, en este caso, al inicio de cada uno de los mensajes en pantalla. También está el "\t" que permite hacer tabulaciones.
  • 0

#2 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 mayo 2009 - 04:28

Se ve un poco feo sin indentar, pero no respeta los espacios al momento de publicarlo  :$, les aseguro que en mi programa original sí­ está todo correctamente indentado  :p...

Saludos,
  • 0

#3 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 mayo 2009 - 04:33

Bravo  (y) Buen ejemplo para ir abriendo boca.

Podemos resumir el código de las funciones, ahora que las hemos entendido?


cpp
  1. int suma(int a, int b)//Función que suma dos enteros que recibe como parámetros y regresa un resultado también entero
  2. {
  3.   int resultado; //Declara resultado como variable local de tipo entero
  4.  
  5.   resultado=a+b; //Realiza la operación aritmética de suma y guarda el valor en la variable resultado
  6.   return resultado; //Regresa el valor de la variable resultado
  7. }


Se puede escribir así­:


cpp
  1. int suma(int a, int b)//Función que suma dos enteros que recibe como parámetros y regresa un resultado también entero
  2. {
  3.     return a+b; //devuelve la operación aritmética de suma
  4. }



Saludos.
  • 0

#4 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 mayo 2009 - 04:35

Se ve un poco feo sin indentar, pero no respeta los espacios al momento de publicarlo  :$, les aseguro que en mi programa original sí­ está todo correctamente indentado  :p...

Saludos,


Trata de hacerlo con espacios y no con tabulaciones  :D

Saludos.
  • 0

#5 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 mayo 2009 - 04:39


Se ve un poco feo sin indentar, pero no respeta los espacios al momento de publicarlo  :$, les aseguro que en mi programa original sí­ está todo correctamente indentado  :p...

Saludos,


Trata de hacerlo con espacios y no con tabulaciones  :D

Saludos.


Yo hablaba del código no de lo que se mostraba en pantalla  *-)... hablamos de lo mismo ???  :$  :p

Saludos

P.D. Las siguientes entregas tendrán que esperar un poco, jejeje, aún no han inventado un programa que lave la ropa sin lavadora, así­ que tendré que hacerlo a mano  :(  :p
  • 0

#6 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 mayo 2009 - 04:50

Antes de irme, la modificación del código con las observaciones de nuestro amigo escafandra aplicadas  :D...



cpp
  1. /* Programa que realiza las 4 operaciones básicas a través de funciones*/
  2.  
  3. #include <stdio.h>
  4. #include <conio.h>
  5.  
  6. int suma(int a, int b)//Función que suma dos enteros que recibe como parámetros y regresa un resultado también entero
  7. {
  8.     return a+b; //Regresa el valor de la variable resultado
  9. }
  10.  
  11. int resta(int a, int b)//Función que resta dos enteros que recibe como parámetros y regresa un resultado también entero
  12. {
  13.     return a-b; //Regresa el valor de la variable resultado
  14. }
  15.  
  16. int multiplica(int a,int b)//Función que multiplica dos enteros que recibe como parámetros y regresa un resultado también entero
  17. {
  18.     return a*b; //Regresa el valor de la variable resultado
  19. }
  20.  
  21. int divide(int a,int b)//Función que divide dos enteros que recibe como parámetros y regresa un resultado también entero
  22. {
  23.     if (b!=0) // Verifica que el divisor sea diferente de CERO para evitar un error al dividir
  24.         return a/b; //Regresa la operación aritmética de división
  25.     else
  26.         if (a!=0) // En caso de que b sea CERO verifica si la división puede tomar a como divisor
  27.             return b/a; //Regresa la operación aritmética de división
  28.         else
  29.             return -1; // Si tanto a como b son ceros, regresa como resultado un valor de error (-1)
  30.  
  31. }
  32.  
  33. void main (void) //Función principal
  34. {
  35.     int x,y; //Se declaran dos variables locales para el main, de tipo entero
  36.  
  37.     printf("\n Introduce un numero entero positivo -> "); //Mensaje de salida a pantalla
  38.     scanf("%d",&x); //Se capta el valor introducido por el usuario y se almacena en la variable x
  39.     printf("\n Introduce otro numero entero positivo -> "); //Segundo mensaje de salida a pantalla
  40.     scanf("%d",&y); //Se capta el valor introducido por el usuario y se almacena en la variable y
  41.  
  42.     printf("\n\n\n\t La sumatoria es de -> %d",suma(x,y)); //Enví­a el resultado a pantalla, mandando llamar a la función "suma" con  x y y como parámetros
  43.     printf("\n\n\t La resta es de -> %d",resta(x,y)); //Enví­a el resultado a pantalla, mandando llamar a la función "resta" con  x y y como parámetros
  44.     printf("\n\n\t La multiplicacion es de -> %d",multiplica(x,y)); //Enví­a el resultado a pantalla, mandando llamar a la función "multiplica" con  x y y como parámetros
  45.     if ((divide(x,y))!=-1)//Si el resultado del llamado a la función "divide" con x y y como parámetros es diferente al resultado de error (-1) enví­a a pantalla el resultado
  46.         printf("\n\n\t La division es de -> %d",divide(x,y));
  47.     else //En caso de recibir -1 como resultado, enví­a un mensaje de error a pantalla
  48.         printf("\n\n\t La division no pudo ser realizada");
  49.  
  50.  
  51.     printf("\n\n\n\n Pulsa cualquier tecla para terminar....");
  52.     getch(); //Espera pulsación de tecla por parte del usuario para terminar
  53. }



P.D. Lo de los espacios en vez de tabulaciones en código también funcionó de perlas, gracias amigo  (y)  :D
  • 0

#7 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 mayo 2009 - 04:55

Claro, a eso me referí­a al código. Lo captaste rápido. (y)

Saludos.
  • 0

#8 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 30 mayo 2009 - 05:02

Otro pequeño detallito a la hora de resumir código, en eso C es todo un campeón:

No es necesario especificar, en los condicionales, que sea distinto de cero. Si la expresión no es cero y se mete en un if el compilador automáticamente realiza un casting a BOOL de forma que estas dos expresiones son lo mismo:



cpp
  1. if(a!=0)....
  2. if(a)....



Entonces podemos cambiar esto:


cpp
  1. int divide(int a,int b)//Función que divide dos enteros que recibe como parámetros y regresa un resultado también entero
  2. {
  3.     if (b!=0) // Verifica que el divisor sea diferente de CERO para evitar un error al dividir
  4.         return a/b; //Regresa la operación aritmética de división
  5.     else
  6.         if (a!=0) // En caso de que b sea CERO verifica si la división puede tomar a como divisor
  7.             return b/a; //Regresa la operación aritmética de división
  8.         else
  9.             return -1; // Si tanto a como b son ceros, regresa como resultado un valor de error (-1)
  10.  
  11. }



por esto otro:


cpp
  1. int divide(int a,int b)//Función que divide dos enteros que recibe como parámetros y regresa un resultado también entero
  2. {
  3.     if (b) // Verifica que el divisor sea diferente de CERO para evitar un error al dividir
  4.         return a/b; //Regresa la operación aritmética de división
  5.     else
  6.         if (a) // En caso de que b sea CERO verifica si la división puede tomar a como divisor
  7.             return b/a; //Regresa la operación aritmética de división
  8.         else
  9.             return -1; // Si tanto a como b son ceros, regresa como resultado un valor de error (-1)
  10.  
  11. }




Saludos.
  • 0

#9 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 30 mayo 2009 - 05:06

Otro pequeño detallito a la hora de resumir código, en eso C es todo un campeón:

No es necesario especificar, en los condicionales, que sea distinto de cero. Si la expresión no es cero y se mete en un if el compilador automáticamente realiza un casting a BOOL de forma que estas dos expresiones son lo mismo:



cpp
  1. if(a!=0)....
  2. if(a)....


....


Interesante, eso sí­ no lo sabí­a  :)... Gracias !  8-|
  • 0

#10 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 31 mayo 2009 - 06:36

eso ultimo si seria complicarle la vida a los que apenas si conocemos el lenguaje jejejje
  • 0

#11 Fenareth

Fenareth

    Advanced Member

  • Administrador
  • 3.486 mensajes
  • LocationMexico City

Escrito 31 mayo 2009 - 03:34

eso ultimo si seria complicarle la vida a los que apenas si conocemos el lenguaje jejejje


A mi me parece no tan lógico al sólo observar el código, claro que si alguien te lo explica pues comprendes la situación pero a primera vista no es tan obvio  :p...

Lo bueno es que se han quedado las dos opciones junto con la explicación para que se tome la que se desee, se sabe que ambas son correctas, sólo que una más óptima que la otra...

Saludos  :)
  • 0

#12 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 31 mayo 2009 - 04:17

eso ultimo si seria complicarle la vida a los que apenas si conocemos el lenguaje jejejje

Pues por suerte o por desgracia, en C existen innumerables formas de contraer código y de complicarse la vida conozcas o no el lenguaje  :p :D.

A mi me parece no tan lógico al sólo observar el código...


Bueno, desde la perspectiva de que una sentencia if evalúa una expresión lógica booleana, el resultado es verdadero o falso. Si la expresión es simplemente:


cpp
  1. if(a)

y a, no es cero, entonces es verdadero.

Para mi es lo mas lógico y natural del mundo, y recudes código. Al fin y al cabo, un BOOL no es ni mas ni menos que un int que vale cero o no.  ;)

Saludos.
  • 0

#13 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 31 mayo 2009 - 04:55

...Pues por suerte o por desgracia, en C existen innumerables formas de contraer código y de complicarse la vida conozcas o no el lenguaje...


No está en duda las bien demostradas capacidades del lenguaje C, como ser la "reducción de código", sino hablamos de qué tan legible es éste para los ojos inexpertos o aquellos acostumbrados a la "no reducción" del mismo.

Hasta hace poco he creado código sin importarme que tan legible es éste, pero cuando se desarrolla en equipo o en el caso de que el código tenga fines didácticos se debe escribir de la forma más comprensible por razones obvias e independientemente de las capacidades que uno tenga :)

No es crí­tica mi buen amigo escafandra, solo que la letra entra con sangre y prefiero difundir mi experiencia.

Bueno, resulta que cierto bcb6p que hice por ahí­ no cuenta con librerí­as estándar y nadie me lo hizo notar :(, en mi siguiente post prometo aportar con algo de código :$

Salud!
  • 0

#14 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 31 mayo 2009 - 05:10

No está en duda las bien demostradas capacidades del lenguaje C, como ser la "reducción de código", sino hablamos de qué tan legible es éste para los ojos inexpertos o aquellos acostumbrados a la "no reducción" del mismo.


Claro está que la contracción del código C puede volverlo difí­cil de leer y de entender. Y esto no favorece el aprendizaje ni la adopción del lenguaje.

Con el ejemplo de los condicionales mostré una forma de usar el if muy común en C, de forma que en casi cualquier fragmento de código vamos a encontrar ese uso, lo que me hizo pensar en hacer la observación para que se entienda con claridad el significado.  :)

Saludos.
  • 0

#15 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 02 junio 2009 - 08:47

Viendo el ejemplo de Fena, recordé unos ejercicios básicos que escribí­ hace 5 años y pensé que éste es el momento oportuno de publicarlo pues de seguro les será de utilidad. Aunque no están documentados, los primeros ejemplos cuentan con un enunciado lo que permite entender mejor su razón de existir.

Adjunto la mayorí­a del codigo escrito en aquella época (casi 100 ejercicios en C). De acuerdo al hilo aconsejo revisar los ejemplos alfabéticamente, llegando a un ejemplo grafico para hallar la "ruta mas corta" y otro que muestra el uso de pilas, colas y otros. Como habrán de notar ni si quiera en la universidad me resistí­a a utilizar lenguaje de maquina y cualquier artilugio para compensar mi inasistencia a clases :p

Si lo ven pertinente los conocedores del tema pueden comentar acerca de algún ejemplo para analizar sus funciones, alternativas, mejoras o falencias (como la comentada por mi mismo mas arriba). Al igual los aprendices solicitando el mismo efecto para una mejor comprensión.

PD; No los retoque en este tiempo, así­ que les pido sean flexibles conmigo :$

Enjoy!
  • 0

#16 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 junio 2009 - 09:02

Ya he visto tus programas amigo, me haces recordar mis años de estudiante :D (y)

Salud OS
  • 0

#17 cHackAll

cHackAll

    Advanced Member

  • Administrador
  • 599 mensajes

Escrito 02 junio 2009 - 09:15

Ya he visto tus programas amigo, me haces recordar mis años de estudiante :D (y)

Salud OS


Mira que es la mejor epoca de la vida! :)
  • 0

#18 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 02 junio 2009 - 09:30

Mira que es la mejor epoca de la vida! :)


Por supuesto amigo, mira que cuando tu estabas naciendo yo ya estaba escribiendo código basic :p :D :D :D

Salud OS
  • 0

#19 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.107 mensajes
  • LocationMadrid - España

Escrito 02 junio 2009 - 04:18

Viendo el ejemplo de Fena, recordé unos ejercicios básicos que escribí­ hace 5 años y pensé que éste es el momento oportuno de publicarlo pues de seguro les será de utilidad...


Buenos ejercicios, y no cabe duda que que serán de utilidad. La única pega la pondrán aquellos programadores noveles e impacientes que quieran resultados rápidos en un entorno gráfico. Pero no cabe duda de que a leer se empieza por la "A" y el que algo quiere algo le cuesta. De forma que paciencia, que todo se andará.

Estos ejercicios sientan las bases no ya del lenguaje C sino de muchos conceptos importantes de programación.  (y)

Buenos tiempos aquellos, los de TurboC.
Buenos tiempos los del Basic.

Saludos.

  • 0

#20 RaCerLokO

RaCerLokO

    Member

  • Miembros
  • PipPip
  • 28 mensajes
  • LocationMexico

Escrito 06 julio 2009 - 12:52

Tengo una sugerencia, bueno creo que sera buena no se que les parezca a ustedes, lo que Pasa que el codigo que vi al inicio se me hizo muy enredoso en cuanto a que los comentarios lo haces como muy psado de leer, pero si esta muy bien entendible, propongo que los comentarios vayan en la parte superior de la sentencia, digo para que no vayan en la misma linea y se preste a confusiones o dolores de cabeza, creo que asi seria mas facil de leer, no se que piensen ustedes
  • 0




IP.Board spam blocked by CleanTalk.