Autor Tema: Ejercicio de función en C

0 Usuarios y 1 Visitante están viendo este tema.

17 Mayo, 2025, 12:03 am
Leído 3238 veces

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Necesito resolver este ejercicio, tanto en pseudocódigo como en C.

Realizar una función que permita calcular la división entre dos valores enteros A y B. A debe ser mayor
que 800, y además, B debe ser diferente de 0 (cero) y además debe ser mayor a 200 para que pueda realizarse el
cálculo. Incluir la invocación de la función desde un programa. A y B se ingresan por teclado.

No se como hacerlo, necesito tenerlo resuelto al menos para poder estudiarlo, gracias.

17 Mayo, 2025, 02:53 am
Respuesta #1

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
¿Acaso la dificultad es que es en C? No veo que la haya mucho sino.
Código: [Seleccionar]
Si A no es entero
  dar mensaje informándolo
sino si B no es entero
  dar mensaje informándolo
sino si A < 801
  dar mensaje informándolo
sino si B == 0
  dar mensaje informándolo
sino si B < 201
  dar mensaje informándolo
sino
  mostrar A/B

Lo de 801 y 201 es porque habiendo descartado que tenga coma, son los mínimos números admisibles. Puedes poner A <= 800 y B <= 200 pero para mí eso es como hacer 2 chequeos (uno para < y otro para ==) así que lo que puse me parece mejor.


Respuesta de GPT:
Citar
Tu razonamiento general está bastante bien encaminado: estás validando correctamente las condiciones del enunciado antes de realizar la división. Sin embargo, te haré algunos comentarios y sugerencias tanto sobre el **pseudocódigo** como sobre la **implementación en C**, para que tengas una solución más clara y completa.

---

## ✅ Revisión del Pseudocódigo

Tu pseudocódigo es correcto en lógica, pero se puede mejorar en estructura y claridad. Aquí te dejo una versión más formal y clara del pseudocódigo:

```plaintext
Inicio
  Leer A
  Leer B

  Si A <= 800 Entonces
    Mostrar "Error: A debe ser mayor que 800"
  Sino
    Si B == 0 Entonces
      Mostrar "Error: B no puede ser cero"
    Sino
      Si B <= 200 Entonces
        Mostrar "Error: B debe ser mayor que 200"
      Sino
        Resultado ← A / B
        Mostrar "El resultado de la división es: ", Resultado
      FinSi
    FinSi
  FinSi
Fin
```

### Comentarios sobre tu versión:
- La parte de "si A no es entero" y "si B no es entero" no es necesaria si ya estás leyendo los datos como enteros (por ejemplo, usando `scanf` en C).
- Tu razonamiento sobre usar `A < 801` o `A <= 800` es correcto. Cualquiera es válida; usar `<=` es más común.
- El pseudocódigo que propusiste era funcional, pero puede beneficiarse de una estructura más clara como la de arriba.

---

## ✅ Código en Lenguaje C

Aquí tienes una implementación completa en C que sigue la lógica del pseudocódigo:

```c
#include <stdio.h>

int dividir(int a, int b) {
    return a / b;
}

int main() {
    int a, b;

    printf("Ingrese el valor de A: ");
    scanf("%d", &a);

    printf("Ingrese el valor de B: ");
    scanf("%d", &b);

    if (a <= 800) {
        printf("Error: A debe ser mayor que 800.\n");
    } else if (b == 0) {
        printf("Error: B no puede ser cero.\n");
    } else if (b <= 200) {
        printf("Error: B debe ser mayor que 200.\n");
    } else {
        int resultado = dividir(a, b);
        printf("El resultado de A / B es: %d\n", resultado);
    }

    return 0;
}
```

---

## ✅ Consejos Adicionales

- **Funciones**: Separar la división en una función es lo que pide el enunciado. Podrías también validar dentro de la función si quieres, pero en este caso es mejor hacerlo en `main`.
- **Robustez**: En casos reales, deberías validar que `scanf` haya leído correctamente los datos, pero para este nivel es suficiente.
- **Mensajes claros**: Es útil indicar **qué condición falló** para que el usuario entienda qué debe cambiar.

---

## ✅ Resumen

- Tu razonamiento original está bien direccionado.
- El pseudocódigo puede mejorar en claridad con buena indentación y estructura.
- El código en C propuesto arriba es una implementación correcta del enunciado.
- Buena idea la de evitar dobles chequeos innecesarios en condiciones.

Espero que esta explicación te sea útil para **estudiar y entender** cómo se resuelve este tipo de ejercicios. ¿Querés que te lo comente paso a paso también?

17 Mayo, 2025, 01:51 pm
Respuesta #2

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
Buen día, se podrá confiar en ChatGPT?

17 Mayo, 2025, 08:23 pm
Respuesta #3

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Buen día, se podrá confiar en ChatGPT?
Puedes escribir el programa de mil maneras en C, pero la escencia esta en que haga lo que te piden y básicamente es lo que te han  ya posteado
agregaria algunos detalles

 
¿Acaso la dificultad es que es en C? No veo que la haya mucho sino.
Código: [Seleccionar]
Entrar dato A
Si A no es entero
  dar mensaje informándolo
sino si A < 801
  dar mensaje informándolo
Entrar dato B
si B no es entero
  dar mensaje informándolo
sino si B == 0
  dar mensaje informándolo
sino si B < 201
  dar mensaje informándolo
sino
  mostrar A/B

GPT por lo general tiene errores, pero para eso está, la prueba y error ,¡chequea que funcione!,  usa ese tiempo que ya  ahorras en pensarlo y tipearlo.
Saludos  \(\mathbb {R}^3\)

17 Mayo, 2025, 09:43 pm
Respuesta #4

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0
GPT por lo general tiene errores, pero para eso está, la prueba y error ,¡chequea que funcione!,  usa ese tiempo que ya  ahorras en pensarlo y tipearlo.

Necesito el ejercicio bien resuelto para estudiarlo, tengo final y el material que me dieron esta flojo.

17 Mayo, 2025, 10:21 pm
Respuesta #5

Richard R Richard

  • Ingeniero Industrial
  • $$\Large \color{#9c57a6}\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 4,054
  • País: ar
  • Karma: +2/-0
  • Sexo: Masculino
  • Dentro de la ciencia todo,fuera de la ciencia nada
Ya te dije hay mil formas de codificar, para interpretar lo que te escriba en código debes conocer el lenguaje.
lo expuesto antes funciona...
pero puedes cambiar  el orden de alguna sentencias , por ejemplo yo lo modificaría así

codigo
Código: [Seleccionar]
int dividir(int a, int b) {
    return a / b;
}

int main() {
    int a, b;

    printf("Ingrese el valor de A: ");
    scanf("%d", &a);

    if (a <= 800) {
        printf("Error: A debe ser mayor que 800.\n");
    } else {
        printf("Ingrese el valor de B: ");
        scanf("%d", &b);

        if (b == 0) {
            printf("Error: B no puede ser cero.\n");
        } else if (b <= 200) {
            printf("Error: B debe ser mayor que 200.\n");
        } else {
            int resultado = dividir(a, b);
            printf("El resultado de A / B es: %d\n", resultado);
        }
    }
    return 0;
}
[cerrar]
Saludos  \(\mathbb {R}^3\)

17 Mayo, 2025, 11:33 pm
Respuesta #6

Wursen

  • $$\Large \color{#5372a0}\pi\,\pi$$
  • Mensajes: 96
  • País: ar
  • Karma: +0/-0

17 Mayo, 2025, 11:43 pm
Respuesta #7

Juan Pablo Sancho

  • Moderador Global
  • Mensajes: 6,562
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Te pongo esto:
Código: [Seleccionar]
#include<stdio.h>
void division_euclidea(int a , int b);


int main()
{
    int dividendo,divisor,control = 0;
    do
    {
       if(control > 0)
       {
         printf("¡¡¡¡El dividendo debe ser mayor que  800 zoquete\n");
       }
       control ++;
       printf("Introduce el dividendo, recuerda que debe ser mayor que 800   :   ");
       scanf("%d",&dividendo);
    }while(dividendo <= 800);
    control = 0;
    do
    {
       if(control > 0)
       {
         printf("¡¡¡¡El divisor debe ser mayor que  200 zoquete\n");
       }
       control ++;
       printf("Introduce el divisor, recuerda que debe ser mayor que 200   :   ");
       scanf("%d",&divisor);
    }while(divisor <= 200);

    division_euclidea(dividendo , divisor);

    return 0;
}

void division_euclidea(int a , int b)
{
    int cociente = 0,aux_dividendo = a;


    if(b > a)
    {
        printf("%d = %d * 0 + %d  \n",a,b,a);
    }
    else
    {
        while(aux_dividendo - b > 0 )
        {
            cociente++;
            aux_dividendo -= b;
        }

        printf("%d = %d * %d + %d\n",a,b,cociente,aux_dividendo);
    }


}

18 Mayo, 2025, 02:48 am
Respuesta #8

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Si se debe confiar en una máquina, en una persona, en ti mismo, en supuestos seres sobrehumanos, es cosa de cada uno.

Poder se puede.

Yo diría que no se debe, debes chequear, primero ver que no sea un virus o algo raro, que no te tranque la PC, entonces lo vas probando, lo vas leyendo, hay algo raro en este tema porque tú deberías ser capaz de entender el código y saber si va a funcionar o no, o tienes alta probabilidad de predecir. Yo no sé C, ni me interesa aprenderlo, si es como chino:

#include <stdio.h>
¿Estudio? ¿humano, hombre, hermano...?

printf("Ingrese el valor de A: ");
¿fastly, in the front, forward?

scanf("%d", &a);
Ni idea, escanea, mira algo... ¿para qué?
Supongo que es como Input, algo que espera a que el usuario agrega algo, pero no sé qué es "%d", no tiene sentido aparente, ni la &.

Si casi nada entiendes, vas poniendo el código que entiendas y vas agregando el siguiente a ver qué hace, pero algo tienes que entender o podés borrar archivos de tu PC o algo.

Otra cosa que puedes hacer es en vez de intentar que sea una función, 1ero intentar que sea un código normal, suelto digamos. Una vez que logras eso, intentas que sea una función y se use como tal.

18 Mayo, 2025, 03:55 am
Respuesta #9

Juan Pablo Sancho

  • Moderador Global
  • Mensajes: 6,562
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
De programacion no sé nada.
En los lenguajes de programación hay bibliotecas , en python por ejemplo time, en C la biblioteca stdio, es la encargada de introducir datos por el teclado o mostrarlos por pantalla (y mas cosas)
printf se usa para poner datos por pantalla y scan para introducir datos.
En python puedo usar una variable Juan_es_guapo = 3 que es entera,Juan_es_guapo = "HOLA", que es una cadena o Juan_es_guapo=3.14159 que es real en los tres casos para representar en pantalla pones print(Juan_es_guapo), en C una variable tienes que indicarle si es entera,real,.. en este caso %d significa que es entera, pero esto es esencial para cáculos masivos, a C se lo tienes que poner masticadito,para que no tenga que estar reservando memoria.
Se pone & para indicarle a C donde está la variable en el ordenador, para que sepa donde buscar.
Pongo una modificación de un programa que puse hace poco en el foro:
Spoiler
#include<stdio.h>
double raiz(double number);
double potencia(double a, int b);
int main(int argc, char const *argv[])
{
   double calcular_raiz_numero = 0;
   int indice;
   for(indice = 2 ; indice <= 10000000; indice++)
   {
       printf("La raíz cuadrada de %d es %g\n" , indice , raiz(indice));
   }
   return 0;
}

double raiz(double number)
{
   int indice = 0 , resto = 0, k = 0 , i;
   double iteracion_inicial = 0,number_dos;
   number_dos = number;
   if (number > 1)
   {
      while(number >= 2)
      {
         indice++;
         number /=2;
      }
      resto = indice % 2;
      k = indice / 2;
      iteracion_inicial = potencia(2,k) * (1/3.0 * potencia(2,resto) * number + 17.0/24);
        for(i=1 ; i<=3 ; i++)
        {
           iteracion_inicial = 0.5 *(iteracion_inicial + number_dos / iteracion_inicial);
        }
        return iteracion_inicial;
   }

    else if (0 < number & number < 1)
    {
       return 1/raiz(1 / number);
    }
    else
       return number;

}

double potencia(double a, int b)
{
   double pot = 1;
   int i = 0;

   for(i = 1; i <= b ; i++)
      pot = a * pot;
   return pot;
}
[cerrar]

Mira la diferencia en tiempo si lo haces con python(Exactamente igual)