Eso espero aunque por ahora tú y yo monopolizamos el 90% de los mensajes jaja
Mensajes: 2.772
Temas: 75
Registro en: Mar 2012
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.
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.
Mensajes: 5.453
Temas: 146
Registro en: Oct 2011
(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  :
Mensajes: 17
Temas: 0
Registro en: Sep 2012
@ 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)
Mensajes: 17
Temas: 0
Registro en: Sep 2012
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.)
Mensajes: 2.772
Temas: 75
Registro en: Mar 2012
OK, gracias, veré a ver el pdf.
Saludos.
Genial 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  :
Mensajes: 17
Temas: 0
Registro en: Sep 2012
Marga, acabo de ver mi fallo. En un momento lo corrijo xDDD Me voy dando cuenta mientras lo pongo  :
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
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┬á :
Mensajes: 2.772
Temas: 75
Registro en: Mar 2012
A las 7 yo ya estoy currando.  :
Descansa y saludos.
Mensajes: 17
Temas: 0
Registro en: Sep 2012
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í:
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.)
|