Este es nuestro ejercicio de hoy y nuestro primer tiempo de la codificación de las funciones de llamada en clase. Estas son las instrucciones que nos da:

  1. Tengo que hacer un Programa en C calculadora con opciones: 0 – salida, 1 – agregar 2 – resta, 3 – multiplicar y 4 – dividir.
  2. Una vez que el usuario introduce su elección, le pido dos números a partir de ellos.
  3. Necesito para utilizar las funciones para cada operación aritmética.
  4. Cuando he terminado con el cálculo, se debe regresar al menú.
  5. El programa sólo termina cuando el usuario elige 0.

Esta mi programa que he editado mucho ya.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int add(int, int);
int sub(int, int);
int mul(int, int);
int div(int, int);
int main(){
int num1, num2, choice;
printf("[0] Exit\v[1] Add\v[2] Subtract\v[3] Multiply\v[4] Divide");
scanf("%d", &choice);
switch(choice){
case 0:
return 0;
break;
case 1:
printf("Enter 1st number:\n");
scanf("%d", &num1);
printf("Enter 2nd number:\n");
scanf("%d", &num2);
printf("%d", add(num1,num2));
break;
case 2:
printf("Enter 1st number:\n");
scanf("%d", &num1);
printf("Enter 2nd number:\n");
scanf("%d", &num2);
printf("%d ", sub(num1,num2));
break;
case 3:
printf("Enter 1st number:\n");
scanf("%d", &num1);
printf("Enter 2nd number:\n");
scanf("%d", &num2);
printf("%d", mul(num1,num2));
break;
case 4:
printf("Enter 1st number:\n");
scanf("%d", &num1);
printf("Enter 2nd number:\n");
scanf("%d", &num2);
printf("%d", div(num1,num2));
break;
default:
printf("That is not a valid choice.");
break;
}
//Addition
int add(int x,int y){
int z = x + y;
return z;
}   
//Subtraction
int sub(int a,int b){
int c = a - b;
return  c;
}   
//Multiplication
int mul(int d,int e){
int f = d * e;
return f;
}
//Division
int div(int g,int h){
int i = g / h;
return i;
}
}

Por ahora, a dos errores sólo:
[Error] conflicto de los tipos de ‘div’
y
la declaración anterior de ‘div’ fue aquí

  • Esto, obviamente, no se compilará. Así que, obviamente, necesita ser mejorado. Si usted no entiende lo que uno de los mensajes del compilador es y por qué su código es incorrecto, a continuación, haga esa pregunta. De lo contrario, obtener el código para compilar y, a continuación, ejecutarlo y ver si funciona (no … pero podría tener una mejor idea de por qué).
  • Ya he editado, pero siempre me sale este error: [Error] conflicto de los tipos de ‘div’
  • No hay necesidad para aquellos que añadir, etc. funciones … sólo utilizar los operadores directamente. Y no repetir el printf y scanf para obtener los números … ¿ellos antes de que el interruptor, o poner en una función.
  • En C no se puede definir una función en otra
  • Los principiantes pueden obtener ayuda desde aquí -> Programa para crear calculadora con funciones
InformationsquelleAutor confusedcat | 2013-08-23

6 Comentarios

  1. 1

    «Ya he editado, pero siempre me sale este error: [Error] conflicto de los tipos de ‘div’ «

    => porque el nombre de la función div() ya definido en stdlib.h.

    Deberá cambiar su nombre por otro nombre.

    e.g: Divide(int, int);

    • Ohh. Gracias por eso!
    • o deshacerse de stdlib: ¿qué función se llama de stdlib tal que usted necesita para tener en tu código?
    • Mejor: sólo tiene que utilizar / y deshacerse de la función; no hay necesidad para ello.
    • El uso de funciones en lugar de operandos, todo el interruptor de la construcción se puede quitar fácilmente, en lugar de un array de punteros a funciones, que (a) no será ampliable, (b) evitar un montón de código compartido, y (c) podría ser en la próxima lección.
    • La matriz no tiene ninguna ventaja sobre el interruptor, que también es ampliable y no requiere de código duplicado.
  2. 1

    Un principio básico de la programación es la R. D. Y. = Don’t Repeat Yourself. Si usted ve el mismo código se repite de la misma manera en múltiples puntos, entonces significa que usted podría agrupar en una buena función. Usted puede ahorrar algo de espacio, no asignando una variable en cada función matemática, simplemente devuelva la fórmula matemática.

    También, si este está destinado a ser un ciclo continuo, usted probablemente tendrá que usar un bucle

    while(true) {
    ...
    }

    y de salida si el usuario escribe 0

  3. 0

    Tienes un enorme problema de codificación:

    int suma = suma; //etc

    esto no tiene ningún sentido-que va a asignar un puntero a función (add) a un int (sum)

    Simplemente quieres (más adelante en el código):

    printf("%d\n", add(num1, num2);

    que usted está haciendo el código mucho demasiado complejo-la simplicidad es buena!.

    • Me acabo de dar cuenta que demasiado. He editado mi código, pero todavía tiene errores.
    • Que exactamente ¿por qué quieres KISS (keep it simple tonto) para que usted pueda centrarse en la los problemas.
  4. 0

    Por CIERTO, tienes un error de sintaxis. Su función main() parece:

    int main(void) {
    ...whatever...
    switch (choice) {
    ...whatever...
    }
    int add() {
    ...
    }
    ...whatever...
    } /* wrong place for closing '}' (this closes the "main() {" block */

    El resultado de su código es que las funciones add(), sub (a), etc., se definen dentro del cuerpo de main(), lo cual es incorrecto.

  5. 0

    Que la declaración de función debe estar fuera de la función main. Tan cerca de la principal función de definir add, sub, mul, div. Va a resolver los errores.
    Usar un bucle para hacer algún proceso una y otra vez.
    Para evitar el código de redundancia, puede crear una función que obtiene los valores de entrada y almacenar en la memoria de la dirección. Llamar a esta función, en donde usted quiera en lugar de la repetición de códigos.

    Por debajo usted puede encontrar un nombre de función getData que recibe dos valores de usuario y lo almacena en la dirección de memoria se pasa a la función. El programa de llamada se pasa la dirección de memoria donde los valores se almacenan.

    Algunas Pautas mientras escribe el código:

    1.) Write DRY(Dont Repeat Yourself) type code.
    2.) Use only required header files. stdio.h is enough to do basic programming in your case.

    Simple código de Trabajo:

    #include<stdio.h>
    //Function Prototype
    int add(int, int);
    int sub(int, int);
    int mul(int, int);
    int div(int, int);
    void getData(int *, int *);
    //Main Function
    int main()
    {
    int num1, num2, choice;
    while(1)
    {
    printf("\n[0] Exit\n[1] Add\n[2] Subtract\n[3] Multiply\n[4] Divide\nEnter Your Choice:");
    scanf("%d", &choice);
    switch(choice)
    {
    case 0:
    return 0;
    case 1:
    getData(&num1, &num2); //get Input Values
    printf("%d", add(num1,num2));
    break;
    case 2:
    getData(&num1, &num2); //get Input Values       
    printf("%d ", sub(num1,num2));
    break;
    case 3:
    getData(&num1, &num2); //get Input Values       
    printf("%d", mul(num1,num2));
    break;
    case 4:
    getData(&num1, &num2); //get Input Values
    printf("%d", div(num1,num2));
    break;
    default:
    printf("That is not a valid choice.");
    break;
    }
    }
    }
    //Get Memory Address of num1, num2 and store input values in those locations.
    void getData(int *num1_ptr, int *num2_ptr)
    {
    printf("Enter 1st number:\n");
    scanf("%d", num1_ptr);
    printf("Enter 2nd number:\n");
    scanf("%d", num2_ptr);
    }
    //Addition
    int add(int x,int y)
    {   return x+y;   }   
    //Subtraction
    int sub(int x,int y)
    {   return  x-y;  }   
    //Multiplication
    int mul(int x,int y)
    {   return x*y;   }
    //Division
    int div(int x,int y)
    {   return x/y;   }
  6. 0
    #include<stdio.h>
    #include<math.h>
    int add(int, int);
    int sub(int, int);
    int mul(int, int);
    float dib(float, float);
    int main(){
    int num1, num2, choice;
    printf("1:addiction\n2:substraction\n3:multiplication\n4:division\n0:exit\nplease enter your choice:");
    scanf("%d", &choice);
    switch(choice){
    case 0:
    return 0;
    break;
    case 1:
    printf("Enter 1st number:\n");
    scanf("%d", &num1);
    printf("Enter 2nd number:\n");
    scanf("%d", &num2);
    printf("%d", add(num1,num2));
    break;
    case 2:
    printf("Enter 1st number:\n");
    scanf("%d", &num1);
    printf("Enter 2nd number:\n");
    scanf("%d", &num2);
    printf("%d ", sub(num1,num2));
    break;
    case 3:
    printf("Enter 1st number:\n");
    scanf("%d", &num1);
    printf("Enter 2nd number:\n");
    scanf("%d", &num2);
    printf("%d", mul(num1,num2));
    break;
    case 4:
    printf("Enter 1st number:\n");
    scanf("%d", &num1);
    printf("Enter 2nd number:\n");
    scanf("%d", &num2);
    printf("%f", dib(num1,num2));
    break;
    default:
    printf("That is not a valid choice.");
    break;
    }
    }
    //Addition
    int add(int x,int y){
    int z = x + y;
    return z;
    }
    //Subtraction
    int sub(int a,int b){
    int c = a - b;
    return  c;
    }
    //Multiplication
    int mul(int d,int e){
    int f = d * e;
    return f;
    }
    //Division
    float dib(float g,float h){
    float i = g / h;
    return i;
    }

Dejar respuesta

Please enter your comment!
Please enter your name here