[Hilo Oficial] Esto también es otro arte...el ARTE de programar
#48
Cita
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┬á Facepalm:

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;
(Ultima edición: 24-10-2012 23:06 por Nikayuri.)


Mensajes en este tema
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 25-10-2012 15:34
Re:Esto también es otro arte...el ARTE de programar - por Corona Radiata - 27-10-2012 03:00
Re:Esto también es otro arte...el ARTE de programar - por Juntacadaveres - 24-10-2012 16:47
Re:Esto también es otro arte...el ARTE de programar - por Nikayuri - 24-10-2012 22:58

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)