No se como ni lo que estaba buscando, pero llegué a esta página web de temática Python, aunque lleva sin actualizar unos cuantos años. El caso es que el autor resuelve mediante Python 2 una serie de ejercicios que encontró en un libro que menciona en esta entrada. ¿Cuan de difícil sería convertir ese código de Python 2 a Gambas? Pues a priori la cosa fue fácil, ya que los ejercicios son sencillitos. Y visto lo visto, con Gambas escribes unas pocas líneas más que con Python, pero desde mi punto de vista, Gambas es mas legible que Python, pero esto es sólo una opinión mía.
Dim entrada As String Dim dato, ndias, aux, nhoras, nmin, nseg As Integer 'Pedimos los datos Print "Número de segundos: "; Flush Input entrada 'Convertimos el número introducido en un Integer dato = CInt(entrada) 'Comprobamos si el número introducido es menor de a un millón If dato >= 1000000 Then Print "El número debe ser menor a 1000000" Else 'Días ndias = dato \ 86400 aux = dato % 86400 'Horas nhoras = aux \ 3600 aux = aux % 3600 'Minutos y segundos nmin = aux \ 60 nseg = aux % 60 'Mostramos el resultado Print Subst("&1 dias, &2 horas, &3 minutos, &4 segundos", ndias, nhoras, nmin, nseg) Endif
'Escribir un algoritmo que imprima el mínimo, el máximo y la media de tres números. Dim ev As String[] = ["primer", "segundo", "tercer"] Dim numeros As New Float[3] Dim texto As String Dim minimo, maximo, media As Float 'Obtenemos los números For i As Integer = 0 To 2 Print Subst("Introduce el &1 numero:", ev[i]); Flush Input texto numeros[i] = CFloat(texto) Next 'Ordenamos el array numeros = numeros.Sort() 'Obtenemos el máximo y el mínimo minimo = numeros[0] maximo = numeros[2] 'Obtenemos la media aritmética media = Round(((numeros[0] + numeros[1] + numeros[2]) / 3), -2) 'Mostramos los resultados Print Subst("Mínimo: &1, Máximo: &2, Media: &3", minimo, maximo, media)
Ejercicio 3.
Escribir un
algoritmo que, dado el infinitivo de un verbo regular de la primera
conjugación, obtenga la conjugación en singular y plural de presente
de indicativo. Por ejemplo, para el verbo cantar el resultado es yo
canto, tu cantas, el canta, nosotros cantamos, vosotros cantáis, ellos
cantan.
Dim pronombre As String[] = ["yo", "tu", "el", "nosotros", "vosotros", "ellos"] Dim terminaciones As Collection = ["yo": "o", "tu": "as", "el": "a", "nosotros": "amos", "vosotros": "áis", "ellos": "an"] Dim palabra As String 'Pedimos la palabra Print "Verbo regular de la primera conjugación:"; Flush Input palabra 'Recorremos el diccionario y construmimos la conjugación For Each i As String In pronombre Print i & ": " & Left(palabra, -2) & terminaciones[i] Next
Ejercicio 4.
Escribir un
algoritmo que, para un número binario de 4 cifras, imprima su valor en
base 10. Se estudiarán dos formas del problema según la representación
de los datos:
-forma 1: los datos son cuatro enteros (0 ó 1). Por ejemplo: 1,1,0,1.
-forma 2: el dato es un entero cuya representación decimal con cuatro
cifras no contenga más que 0 ó 1: Por ejemplo: 1101.
En este ejercicio lo he variado un poco para no complicarme mucho la vida. Se tiene que introducir el número binario seguido, sin separadores y se puede introducir más de cuatro cifras.
Dim binar As String Dim nbinario As New String[] Dim decimal, potencia As Integer 'Contadores 'Obtenemos datos. Print "Número binario (4 cifras): "; Flush Input binar If CInt(binar) = 0 Then Print "Su representación decimal es de 0." Quit Endif 'Obtenemos los dígitos. For j As Integer = 1 To binar.Len nbinario.add(Mid(binar, j, 1)) Next 'Le damos la vuelta al número binario. nbinario.Reverse() For Each i As String In nbinario decimal += CInt(i) * 2 ^ potencia Inc potencia Next 'Visualizamos el resultado Print Subst("Su representación decimal es de: &1", decimal)
Ejercicio 5.
Escribir un
algoritmo que decodifique fechas del siglo XXI. El dato es un entero
comprendido entre 10100 y 311299. El resultado es una secuencia
de caracteres: número del día dentro del mes, del mes dentro del año y
del año dentro del siglo. Por ejemplo, para el dato 30485, el resultado
es el texto 3-4-2085.
Dim dato As String Dim anyo, mes, dia As Integer 'Obtenemos el dato Print "Introduce dato: "; Flush Input dato 'Descodificamos el año dentro del siglo XXI anyo = 2000 + CInt(Right(dato, 2)) 'Descodificamos el mes mes = CInt(dato[dato.Len - 4, 2]) 'Descodificamos el día. dia = CInt(dato[0, dato.Len - 4]) 'Imprimimos el resultado Print Subst("&1-&2-&3", dia, mes, anyo)
Ejercicio 6.
Escribir un
algoritmo que, para una suma de dinero dada, indique cómo descomponerla
en billetes y monedas corrientes. Se desea utilizar el mínimo de
billetes y monedas. No hay ninguna limitación respecto al número de
billetes y monedas disponibles.
'Se declara los datos básicos Dim billetesYmonedas As Float[] = [500, 200, 100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.005, 0.002, 0.001] Dim monedero As New Integer[15] 'Cantidad de billetes o monedas que habrá. La cantidad de una determinada billete o moneda se determina por la posición Dim entrada As String Dim entero As Integer Dim decimal, unidades As Float Print "Introduce el importe en Euro: "; Flush Input entrada 'Parte decimal del número decimal = Round(Frac(CFloat(entrada)), -3) 'Parte entera del número entero = Int(CFloat(entrada)) For i As Integer = 0 To 8 unidades = entero / billetesYmonedas[i] If Frac(unidades) = 0 Then monedero[i] = unidades entero -= unidades * billetesYmonedas[i] Endif If entero = 0 Then Break Next If decimal > 0 Then For i As Integer = 9 To billetesYmonedas.Max unidades = decimal / billetesYmonedas[i] If Frac(unidades) = 0 Then monedero[i] = unidades decimal -= unidades * billetesYmonedas[i] Endif If decimal = 0 Then Break Next Endif For a As Integer = 0 To monedero.Max If monedero[a] > 0 Then Print Subst("&1 de &2", monedero[a], billetesYmonedas[a]) Endif Next
Ejercicio 7.
Escribir un
algoritmo que simule el funcionamiento de una calculadora. El dato es
una serie de tres caracteres: una cifra, un símbolo de operación y
otra cifra. El resultado es el valor de la expresión dada.
Dim entrada As String Print "Introduce la operación: "; Flush Line Input entrada Print Eval(entrada)
Ejercicio 8.
Consideremos una hora expresada en forma de tripleta . Escribir
un algoritmo que imprima la hora correspondiente al siguiente
segundo. Por ejemplo, para la entrada 13,43,24 tiene que devolver
13,43,25.
Dim entrada, salida As String Dim trocea As New String[] Dim horas, minutos, segundos As Integer Print "Introduce el tiempo: "; Flush Input entrada 'Obtenemos los datos trocea = Split(entrada, ",") horas = CInt(trocea[0]) minutos = CInt(trocea[1]) segundos = CInt(trocea[2]) 'Aumentamos un segundo Inc segundos 'Según proceda If segundos = 60 Then salida = horas & ":" & minutos & ":" & segundos Else If minutos = 59 And horas = 23 Then salida = 0 & ":" & 0 & ":" & 0 Else If minutos = 59 Then salida = (horas + 1) & ":" & 0 & ":" & 0 Else salida = horas & ":" & (minutos + 1) & ":" & 0 Endif Print salida
Ejercicio 9.
Escribir una función que determine si una letra dada es consonante.
Private Function esConsonante(letra As String) As Boolean 'Escribir una función que determine si una letra dada es consonante. Dim letras As String[] = ["a", "e", "i", "o", "u", "á", "é", "í", "ó", "ú", "ï", "ü"] Dim le As String le = String.LCase$(letra) If letras.Exist(le) Then Return True Else Return False Endif End
Ejercicio 10.
Escribir una función que calcule el factorial de un número. Por ejemplo, 5! = 5*4*3*2*1 = 120.
Private Function Factorial(numero As Integer) As Integer If numero = 0 Then Return 1 Else Return numero * Factorial(numero - 1) Endif End
Siento decirlo pero python es un lenguaje puntero tan sencillo como un Basic mientras que nadie usa gambas (ni saben lo que es).
ResponderEliminarHola.
EliminarA veces no solo se busca la sencillez, es cuestión de gustos. Me gusta más Gambas que Phyton, y si Gambas me sirve para lo que lo uso, eso quiere decir que es un lenguaje tan válido como otro cualquera. Por no decir que alguien ya lo conoce, yo mismo, bueno y el desarrollador del lenguaje. No se que clase de argumento es ese de que nadie lo conoce para no utilizarlo, de verdad, usa algo más elavorado. Gambas desde mi punto de vista tiene un par de ventajas sobre Python y esas ventajas hacen que me decante por este. La primera es que en Gambas hay que declarar las variables, los métodos y funciones están diferenciados, y los parámetros que reciben o devuelven están declarados, eso quiere decir que de un vistazo ya sabes que un método o función que tipo de parámetro recibe o devuelve, cosa que en Python no lo sabes (aunque creo que en la última versión si se puede indicar), Y la otra ventaja es al crear una interfaz gráfica, mientras en Python es más farragoso en Gambas se vuelve tremendamente sencillo. Por no decir que el IDE de Gambas es muy bueno y cómodo.
Un saludo.