Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: rackdon en 16 de Abril 2014, 23:59

Título: ejemplo if else en C ¿son obligatorias las llaves? numero mas grande
Publicado por: rackdon en 16 de Abril 2014, 23:59
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;
}
Título: Re:problema de codigo en C
Publicado por: César Krall 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;
}
Título: Re:problema de codigo en C
Publicado por: rackdon 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?
Título: Re:problema de codigo en C
Publicado por: César Krall 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.
Título: Re:problema de codigo en C
Publicado por: rackdon en 17 de Abril 2014, 19:50
Ya esta. Muchisimas gracias por todo. Ya he aprendido algo nuevo jejeje