24-10-2012 22:24
Acabo de ver el fallo. Esperad un momento.
EDITO: Ya está. En el segundo IF, asignaba a M5 3*I en vez de 5*I (por hacer un copypaste descarado xD)
El código correcto:
EDITO 2: Me pasa lo mismo que a Ifar. Me da mal la suma y no me cuenta los múltiplos iguales. Seguiremos informando.
(Ultima edición: 24-10-2012 22:29 por Nikayuri.)
EDITO: Ya está. En el segundo IF, asignaba a M5 3*I en vez de 5*I (por hacer un copypaste descarado xD)
El código correcto:
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,
  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;
  --- Calculador
  WHILE Check3 /= True OR Check5 /= True LOOP
┬á ┬á ┬á --- Miramos que los múltiplos no sean mayores que 1000.
     
      IF (3*I) >= 1000 THEN
        M3 := 0;
        Check3 := True;
        ELSE
        M3 := 3*I;
        ContM3 := ContM3 + 1;
      END IF;
      IF (5*I) >= 1000 THEN
        M5 := 0;
        Check5 := True;
        ELSE
        M5 := 5*I;
        ContM5 := ContM5 + 1;
      END IF;
   
   
┬á ┬á ┬á --- Hacemos el cálculo
   
      IF M3 = M5 and Check3 = False and Check5 = False THEN
        SumaMult := SumaMult + M3;
        ContMC := ContMC + 1;
      ELSE
        SumaMult := SumaMult + M3 + M5;
      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;
EDITO 2: Me pasa lo mismo que a Ifar. Me da mal la suma y no me cuenta los múltiplos iguales. Seguiremos informando.