Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Primos. Condicionales
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Primos. Condicionales 
 
Hola!.

Viendo una condición en una función Python, que puede resultar rara a simple vista, luego cree algo parecido en gambas,
pero sin esa condición.

Se trata de averiguar los números primos. En los bucles Python podemos usar una función llamada (range), la cual siempre
devuelve un número menos.

Así que si decimos  range(2,10) , el intervalo es entre 2 y 9.
Veréis, esta es la función en Python y la parte desde donde se llama. Luego os muestro lo mismo en Gambas.

#!/usr/bin/python3

# Funciones
# Con las funciones reutilizamos el código, evitando la repeticion de este

# Es primo

def esprimo(n):
    if n == 1:
        print ('1 es especial')
        return False
    for x in range(2,n):
        if n % x == 0:
            print ('{} igual {} x {}'.format(n, x, n // x))
            return False
    else:
        print (n, 'es un número primo')
        return True

for n in range(1,20):
    esprimo(n)
 


¿ Os habéis fijado en el ultimo else ?. ¿ Raro no ?.
( No he logrado entender ese else, ya que no parece hacer gran cosa, si lo elimino y quito la indetación a las lineas siguientes hace lo mismo)..
Como no sea algo propio para la demostración del código del autor.

Si no entendéis alguna instrucción del código os lo explico. Es sencillo.

Ahora bien, hagamos el mismo código en Gambas.

Public Sub Main()
  
  Dim n As Integer
  
  For n = 1 To 20
    esprimo(n)
  Next
  
End

Public Function esprimo(n As Integer)
  
  Dim x As Integer
  
  If n = 1 Then
    Print "1 es especial"
    Return
  Endif
  For x = 2 To n - 1
    If n Mod x = 0 Then
      Print Subst("&1 igual &2 x &3", n, x, n \ x)
      Return
    Endif
  Next  
  Print (n & " es un número primo")
  Return  
  
End
 


Como era de esperar, necesitaba usar  n - 1, sin eso, no funciona.

Las salida que se obtiene es:
Citar:

1 es especial
2 es un número primo
3 es un número primo
4 igual 2 x 2
5 es un número primo
6 igual 2 x 3
7 es un número primo
8 igual 2 x 4
9 igual 3 x 3
10 igual 2 x 5
11 es un número primo
12 igual 2 x 6
13 es un número primo
14 igual 2 x 7
15 igual 3 x 5
16 igual 2 x 8
17 es un número primo
18 igual 2 x 9
19 es un número primo
20 igual 2 x 10


Cuando realiza el producto (no es un número primo) sale de la función con la instrucción return.

Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
última edición por Shell el Jueves, 30 Abril 2015, 11:16; editado 2 veces 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Primos. Condicionales 
 
Ah, encontré algo.

El else en ese lugar concreto en el código Python se suele usar para el manejo de excepciones, pero no hay Try por ningun lado.

Citar:

La construcción try–except puede contar además con una clausula else, que define un fragmento de código a ejecutar sólo si no se ha producido ninguna excepción en el try.


try:
    num = 33
except:
    print "Hubo un error!"
else:
    print "Todo esta bien"
 


Saludos
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Primos. Condicionales 
 
No tendría mucho sentido hacer uso de Finally..

Public Function esprimo(n As Integer)
  
  Dim x As Integer
  
  If n = 1 Then
    Print "1 es especial"
    Return
  Endif
  For x = 2 To n - 1
    If n Mod x = 0 Then
      Print Subst("&1 igual &2 x &3", n, x, n \ x)
      Return
    Endif
  Next
Finally  
  Print (n & " es un número primo")
  Return    
  
End
 

 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Primos. Condicionales 
 
El 'else' lo único que hace es comprobar los números que no son igual a 1. Si te fijas, en el if inicial compara contra el 1, por ser un caso especial (no es necesario hacer cálculos). El caso 'else' es para todos los demás.

De todas formas no me gusta ese planteamiento, porque la comparación debería estar dentro del bucle for, al ser una función que comprueba por rango en el código Python, verdad? Luego, tu no has tenido en cuenta ese detalle en el código gambas último.

Me retracto de lo dicho, sólo se comprueba si el número <> 1 y realiza la comprobación del resto de división entre 2, para quitar los números pares.

Hay otros algoritmos bastante curiosos e incluso más rápidos para un rango grande, aunque lleve más código:

http://es.wikipedia.org/wiki/Criba_de_Atkin


Saludos
 




===================
Jesús Guardón

Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".

"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
 
jguardon - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Primos. Condicionales 
 
Con el tamaño de fuente del código que usa en la wiki, aparenta ser hasta más grande.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Reporte 0.03 -Base De De Datos De Cine Con... Dani26 Aplicaciones/Fragmentos de Código 2 Miercoles, 05 Septiembre 2012, 02:21 Ver último mensaje
Dani26
No hay nuevos mensajes Saltar Grupo De Sentencias Condicionales If Shell General 4 Viernes, 05 Julio 2013, 00:08 Ver último mensaje
Shell
No hay nuevos mensajes Condicionales. Evitar Condición Repetida Shell General 2 Jueves, 12 Diciembre 2013, 10:08 Ver último mensaje
Shell
No hay nuevos mensajes Reportes Condicionales Con Gb.report Dani26 Videotutoriales 0 Martes, 29 Julio 2014, 14:57 Ver último mensaje
Dani26
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron