Autor Tema: ejemplo if else en C ¿son obligatorias las llaves? numero mas grande  (Leído 4583 veces)

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Buenas, estoy haciendo el siguiente programa: Se trata de introducir 10 numeros enteros y que el ordenador determine cuales son los 2 numeros mayores. En teoria todo esta correcto, el problema viene cuando lo ejecuto, que me indica el numero mas grande y luego siempre muestra como segundo numero el 71, y sinceramente no se de donde viene porque alomejor los numeros que he metido son del 1 al 10 por ejemplo.
Pongo el codigo a continuacion, a ver si alguien encuentra el error y me lo  puede indicar.
Muchas gracias de antemano.

// Determinación de los 2 numeros mas grandes //

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

main()
{
      int contador = 1, numero, mayor1, mayor2;
     
      printf("Por favor introduzca 10 numeros: ");
     
      while (contador <= 10){
            scanf("%d", &numero);
            contador += 1;
            if (numero > mayor1) {
                       mayor1 = numero;}
            else {
            if (numero > mayor2)
                       mayor2 = numero;
                       }
           
           
            }
     
      printf(" Los dos numeros mayores son: %d y %d \n", mayor1, mayor2);
     
system("pause");
return 0;
}
« Última modificación: 14 de Septiembre 2014, 21:33 por Alex Rodríguez »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:problema de codigo en C
« Respuesta #1 en: 17 de Abril 2014, 08:35 »
Hola, para pegar código utiliza el botón # del foro, cuando lo pulsas te aparece [code ] ... [ /code] y dentro de esas etiquetas es donde debes pegar el código.

El error en el código que has puesto está en que no inicializas las variables, es decir, cuando empieza el programa debes dar un valor inicial a las variables porque si no tienen un valor no previsible y podría ocurrir que mayor2 valga 71 y por eso te muestre 71. Aquí te dejo el código con variables inicializadas, saludos:

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

int main() {
    int contador = 1;    int numero=0;
    int mayor1=0;    int mayor2=0;
    printf("Por favor introduzca 10 numeros: ");
    while (contador <= 10) {
        scanf("%d", &numero);
        contador += 1;
        if (numero > mayor1) {
            mayor1 = numero;
        } else {
            if (numero > mayor2)
                mayor2 = numero;
        }
    }
    printf(" Los dos numeros mayores son: %d y %d \n", mayor1, mayor2);
    system("pause");
    return 0;
}
Responsable de departamento de producción aprenderaprogramar.com

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:problema de codigo en C
« Respuesta #2 en: 17 de Abril 2014, 09:14 »
Muchas gracias, pero sigue sin funcionar. La diferencia ahora esta en que "mayor2" ahora se muestra como 0 en vez de 71.
¿Se os ocurre por que puede ser?

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:problema de codigo en C
« Respuesta #3 en: 17 de Abril 2014, 10:32 »
Hola, te indico:

Recomendación : el if cerrarlo siempre entre llaves

            if (numero > mayor2) {
                mayor2 = numero;
                }

El problema principal está en la lógica: si un número se descubre que es el mayor, entonces el que antes era el mayor pasa a ser el segundo mayor, es decir, tienes que desplazar el valor. En código quedaría así:

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

int main() {
    int contador = 1;    int numero=0;
    int mayor1=0;    int mayor2=0;
    printf("Por favor introduzca 10 numeros: ");
    while (contador <= 10) {
        scanf("%d", &numero);
        contador += 1;
        if (numero > mayor1) {
            mayor2 = mayor1;
            mayor1 = numero;
        } else {
            if (numero > mayor2) {
                mayor2 = numero;
                }
        }
    }
    printf(" Los dos numeros mayores son: %d y %d \n", mayor1, mayor2);
    system("pause");
    return 0;
}


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

rackdon

  • Principiante
  • **
  • APR2.COM
  • Mensajes: 50
    • Ver Perfil
Re:problema de codigo en C
« Respuesta #4 en: 17 de Abril 2014, 19:50 »
Ya esta. Muchisimas gracias por todo. Ya he aprendido algo nuevo jejeje

 

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