[Hilo Oficial] Esto también es otro arte...el ARTE de programar
#37
Cita
Eso espero aunque por ahora tú y yo monopolizamos el 90% de los mensajes jaja
#38
Cita
Una preguntilla larga.

Mi experiencia programando: BasicMSX, CDIV y lenguajes propios de calculadoras HP, programas de CAD para automatizar trabajo y demás cosas similares. Vamos, que entiendo los conceptos de variables, bucles, sentencias y demás, llegué a programar un remake de un juego en 2D, conceptos de sprites y tal pues también. Pero realmente no se programar, chapucero mas bien.

He visto el código de Python, parece sencillo. ¿Alguien como yo con poca experiencia puede aprenderlo facilmente?, por hacer chapucillas, nada serio. He leído que es un lenguaje interpretado pero me gustaría saber si se puede compilar.


Saludos.
[Imagen: 2en8arn.jpg]
#39
Cita
Con esa experiencia yo creo que de sobras, Python tiene una sintaxis que lo hace muy intuitivo y el pdf que puse en la primera página es perfecto para iniciarse en él la verdad. Python no se compila simplemente hace falta tener el interprete instalado y podrás hacer pinitos en él. Si lo que quieres es crear un 'exe' se puede empaquetar el script en Python y el interprete para crear un programa al estilo clásico.
#40
Cita
(24-10-2012 22:12)Margaruga link Eso espero aunque por ahora tú y yo monopolizamos el 90% de los mensajes jaja
Poco a poco sucumbiran al lado oscuro  roto2:
[Imagen: ifar.png]
#41
Cita
@Babul, puede. Yo estuve estudiando Python por mi cuenta y riesgo mientras estaba en la ESO, y es muuuuuuuuuuuy sencillo.

Lo de interpretado... Es un lenguaje normal, lo que pasa es que no "compila" persé. Traduce cada línea de código a medida que la lee y la ejecuta, no como Java y estos que lo traducen de golpe y luego ejecutan.



Sobre el programa

Lo he implementado directamente en Ada, pero no me da lo que "se supone" que debe dar, aunque no veo en qué estoy fallando.

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 := 3*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;




Me da 166833 (la suma)

#42
Cita
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:

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.
(Ultima edición: 24-10-2012 22:29 por Nikayuri.)
#43
Cita
OK, gracias, veré a ver el pdf.

Saludos.
[Imagen: 2en8arn.jpg]
#44
Cita
Genial Smile añado tu solución al post principal. Muy claro el código, es la primera vez que veo un programa en Ada y parece interesante. Gracias a los dos por 'molestaros'

Vale, acabo de ver el Edito 2  lol:
#45
Cita
Marga, acabo de ver mi fallo. En un momento lo corrijo xDDD Me voy dando cuenta mientras lo pongo  Facepalm:


Pero bueno, que sirva para aprender:


Comparo M3 y M5. M3 = 3 * I, M5 = 5 * I. Nunca van a coincidir.

Debería coincidir en 15, por ejemplo. 3 * 5 = 15. Entonces I = 5, pero M5 entonces es 25.

Tengo que ver cómo lo soluciono.

Gracias Smile
#46
Cita
Ahhh claro, nunca van a coincidir los múltiplos iguales en la misma interacción del bucle while. Es que el problema de generar así los múltiplos y al mismo tiempo querer contar los comunes es que no van a coincidir en el mismo valor de 'I'┬á :'( bueno chicos, yo por ahora me voy al sobre que mañana a las 7 tengo que estar en pie. Mañana más y mejor┬á roto2:
#47
Cita
A las 7 yo ya estoy currando.  roto2:

Descansa y saludos.

[Imagen: 2en8arn.jpg]
#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.)


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)