24-10-2012 22:58
Ahora sí que no sé qué le pasa:
Me da 159185
Edito: He quitado el código. Lo pongo y me doy cuenta de qué está mal... otra vez┬á :
El error era que chequeaba Check5 Y Check3, en vez de Check5 O Check3, por lo que si uno de ellos era False, salía directamente.
Da 266318.
333 múltiplos de 3, 199 múltiplos de 5, y 200 en común.
He añadido comentarios explicando los pasos para que se entienda. Si se necesita que añada alguno más, sólo decidme ^^
La verdad es que Ada es un lenguaje muy sencillo y visual. A mí al menos me encanta xD
Ahora sí:
(Ultima edición: 24-10-2012 23:06 por Nikayuri.)
Me da 159185
Edito: He quitado el código. Lo pongo y me doy cuenta de qué está mal... otra vez┬á :
El error era que chequeaba Check5 Y Check3, en vez de Check5 O Check3, por lo que si uno de ellos era False, salía directamente.
Da 266318.
333 múltiplos de 3, 199 múltiplos de 5, y 200 en común.
He añadido comentarios explicando los pasos para que se entienda. Si se necesita que añada alguno más, sólo decidme ^^
La verdad es que Ada es un lenguaje muy sencillo y visual. A mí al menos me encanta xD
Ahora sí:
Código:
WITH Ada.Integer_Text_IO;
USE Ada.Integer_Text_IO;
WITH Ada.Text_IO;
USE Ada.Text_IO;
PROCEDURE Suma_M3_M5_Hasta_1000 IS
┬á --- Declaración de variables ("---" es para comentarios en Ada. Vale con un simple -)
  I,
  SumaMult,
  ContM3,
  ContM5,
  ContMC,
  CheckMC,
  M3,
  M5      : Integer;
  Check3,
  Check5 : Boolean;
BEGIN
┬á --- Asignación a variables.
  SumaMult := 0;
  ContM3 := 0;
  ContM5 := 0;
  ContMC := 0;
  M3 := 0;
  M5 := 0;
  I := 1;
  Check3 := False;
  Check5 := False;
  CheckMC := 0;
  -----------------------------------------------------------------------------------
  -----------------------------------------------------------------------------------
  --- Calculador con While.
  WHILE Check3 /= True OR Check5 /= True LOOP
┬á ┬á ┬á --- Miramos que los múltiplos de 3 no sean mayores que 1000.
      IF (3*I) >= 1000 THEN
        M3 := 0;
        Check3 := True;
      ELSE
        M3 := 3*I;
        ContM3 := ContM3 + 1;
      END IF;
┬á ┬á ┬á --- Miramos que los múltiplos de 5 no sean mayores que 1000.
      IF (5*I) >= 1000 THEN
        M5 := 0;
        Check5 := True;
      ELSE
        M5 := 5*I;
        ContM5 := ContM5 + 1;
      END IF;
      -----------------------------------------------------------------------------------
┬á ┬á ┬á --- Hacemos el cálculo.
      IF Check3 = False OR Check5 = False THEN
       
            SumaMult := SumaMult + M5;
 
        IF M5 mod 3 = 0 THEN
            ContMC := ContMC + 1;
            CheckMC := M5;
        END IF;
        IF M3 /= CheckMC THEN
            SumaMult := SumaMult + M3;
        END IF;
      END IF;
      -----------------------------------------------------------------------------------
┬á ┬á ┬á --- I es la variable que indica el múltiplo.
      I := I + 1;
  END LOOP;
  -----------------------------------------------------------------------------------
  -----------------------------------------------------------------------------------
┬á --- Solución.
┬á Put("La suma de los múltiplos de 3 y los múltiplos de 5 es: ");
  Put(SumaMult);
  New_Line;
┬á Put("El número de múltiplos de 3 menores que 1000 es: ");
  Put(ContM3);
  New_Line;
┬á Put("El número de múltiplos de 5 menores que 1000 es: ");
  Put(ContM5);
  New_Line;
┬á Put("El número de múltiplos comunes de 3 y 5 es: ");
  Put(ContMC);
END Suma_M3_M5_Hasta_1000;