Autor Tema: Ejemplo goto en C. Etiquetas labels. Por qué no deben usarse LenguajeC CU00546F  (Leído 2829 veces)

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Hola, dejo una posible solución al ejercicio CU00546F del tutorial de programación en lenguaje C.

Citar
EJERCICIO Nº1

Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/*  C program to demonstrate the working of goto statement. */

int main(){
   float num,average,sum;
   int i,n;
   printf("Maximum no. of inputs: ");
   scanf("%d",&n);
   for(i=1;i<=n;++i){
       printf("Enter n%d: ",i);
       scanf("%f",&num);
       if(num<0.0)
       goto jump;             /* control of the program with goto */
       sum=sum+num;
}
jump:
  average=sum/(i-1);       
  printf("Average: %.2f",average);
  return 0;
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?

Este programa calcula la media de n números enteros. Sumará esos tres números y el resultado lo dividirá entre tres, y mostrará el resultado por pantalla.

Que calculará la media de solo un número, en este caso el 10, y dará como resultado 10, porque el goto hace que el programa salga del for, sin que se pueda seguir introduciendo datos después de introducir un número negativo.


Citar
b) Ejecutando el código ¿cuál será el resultado del programa si introducimos los números 10, 5 y 2? ¿cuál será el resultado del programa si introducimos los números 10, -5 y 2?

Que "average = 5,67" por lo que se explica en la pregunta anterior.

Que average vale 10 por lo que se explica en la pregunta anterior.


Citar
c) ¿Qué signficado tiene ++i en el contexto de este programa?

Al igual que si usamos i++, se incrementa 1 a i.

Citar
d) ¿Es equivalente escribir      if( num<0.0) goto jump;      y      if( num < 0.0) { goto jump; }  ?

si

Citar
e) Haz que el código ofrezca los mismos resultados evitando el uso de goto.

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    float num,average,sum;
    int i,n;
    printf("Maximum no. of inputs: ");
    scanf("%d",&n);
    for(i=1; i<=n; ++i)
    {
        printf("Enter n%d: ",i);
        scanf("%f",&num);
        if(num == 0 || num > 0)
        {
            sum=sum+num;
        }
    }
    average=sum/(i-1);
    printf("Average: %.2f",average);
    return 0;
}


Citar
EJERCICIO Nº2

Estudia el siguiente código y responde a las preguntas:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
// Curso de programación C aprenderaprogramar.com
/*  C program to demonstrate the working of goto statement. */

int main() {
   int age;
   Vote:
     printf("you are eligible for voting");

   NoVote:
     printf("you are not eligible to vote");

   printf("Enter you age:");
   scanf("%d", &age);
   if(age>=18)
        goto Vote;
   else
        goto NoVote;

   return 0;
}

Citar
a) Sin ejecutar el código (sólo pensando) responde: ¿para qué sirve este programa? ¿cuál será el resultado del programa si introducimos el número 22?

Para comprobar si se tiene la mayoría de edad para votar.
se imprimirá los tres print por pantalla y preguntará otra vez lo mismo, y dependiendo  si tienes más o menos de 18, se ejecutará el primer print o el segundo, haciendo una especie de bucle infinito del cual no saldrá nunca, según está estructurado.


Citar
b) Crea otro programa equivalente (que produzca los mismos resultados) sin hacer uso de la sentencia goto

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age;
    printf("Enter you age:");
    scanf("%d", &age);
    if(age>=18)
    {
        printf("you are eligible for voting");
    }
    else
    {
        printf("you are not eligible to vote");
    }


    return 0;
}


Saludos.  ;D




« Última modificación: 01 de Julio 2016, 22:00 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenas noches,

En el ejercicio 1 apartado d), si introduces 4, 8, -2, 15 ¿obtienes el mismo resultado con el código inicial que con el código que tú has propuesto?

En el ejercicio 2, si tenemos que crear un programa que haga lo mismo, ¿hace lo mismo cuando ejecutas el programa inicial y el que tú has propuesto?

Saludos.

Pandemia

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 255
    • Ver Perfil
Buenas tardes, gracias por contestar Mario, y por corregir.

En el primer ejercicio apartado d) en el codigo inicial solo permite la entrada de tres números y en mi código permite la entrada de más números.

En el segundo ejercicio creo que sí hacen lo mismo los dos códigos, o eso espero.

Saludos.

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola!

Al probar el ejercicio original la pregunta se repite continuamente, aunque no me funciona bien ya que aparecen los mensajes sin el orden debido

Al probar el código de Pandemia sí aparece el mensaje correcto, pero la pregunta sólo se hace una vez y no se repite

Saludos!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".