Autor Tema: Ejemplo código Instrucción goto en C stament harmful lenguajeC CU00546F  (Leído 2371 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas tardes. Dejo una posible solución de los ejercicios contemplados en la entrega CU00546F del tutorial de programación en lenguaje C desde cero.

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?

Sirve para calcular la suma de los números entrados por el usuario entre el primer número entrado. Si se entra algún número menor que "0.0" no se tomará por puesto y se saldrá del bucle debido a la instrucción "goto". Si entramos 10,5 y 2 nos imprimirá una media de "5.67". Si entramos 10, -5 y 2 nos dará un resultado de "10.00" porque la instrucción "goto" hará que salgamos del bucle y no tendremos opción de entrar "2".

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?

Son los mismos resultados que hemos descrito en el apartado a).

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

Que se incrementa la variable "i" con una unidad. Es lo mismo poner "++i" que "i++" que "i=i+1" que "i+1=i".

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

Sí, es lo mismo. Las dos formas son legales.

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>
// 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){
            break;
       }
       sum=sum+num;
}
jump:
  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?

A simple vista tendría que servir para responder según que edad entra el usuario si podría votar o no. Pero, nada más ejecutar el programa, me imprime los dos "printf" sin haber entrado ningún dato por consola. Supongo que se debe a que desde que se impartió el curso hasta hoy en día ha cambiado la versión del IDE "Code::Blocks" y no responde de la misma manera con la instrucción "goto".

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>
// Curso de programación C aprenderaprogramar.com
/*  C program to demonstrate the working of goto statement. */

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;
}

Gracias.
« Última modificación: 11 de Julio 2016, 22:38 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas

Esto no está bien:

Citar
Es lo mismo poner "++i" que "i++" que "i=i+1" que "i+1=i".

++i no es lo mismo que i++ aunque a veces tenga el mismo resultado, se explica en https://www.aprenderaprogramar.com/foros/index.php?topic=4768.0

Y tampoco i+1 = i es lo mismo que i = i+1, de hecho la primera forma puede ser no permitida

En el ejercicio 2 ocurre eso extraño, puede ser un error en el curso o un cambio


Salu2

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenos días, Ogramar.

Gracias por la corrección y por tu ayuda. Leí el hilo que me pegastae, pero aun así no entiendo por qué aquí el profesor ha utilizado "++i" en vez de "i++" a lo que estamos acostumbrados.

Saludos.

 

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".