viernes, 9 de septiembre de 2022

Ejercicios de programación III

  Sigo resolviendo ejercicios de programación en Gambas. Como en la entrada anterior sigo con los ejercicios que propone Pythondiario. Ahora son un poco mas complicados, pero muy útiles para aprender.


Ejercicio 1
La función max() del ejercicio 1 (primera parte) y la función max_de_tres() del ejercicio 2 (primera parte), solo van a funcionar para 2 o 3 números. Supongamos que tenemos mas de 3 números o no sabemos cuantos números son. Escribir una función max_in_list() que tome una lista de números y devuelva el mas grande. Aquí supongo que el autor querría que nos estrujáramos mas la cabeza, pero yo he tirado por la sencillez, lo que hace mi función es ordenar el array de mayor a menor y devuelve el primer valor que es el mayor.

Private Sub maxArray ( lista As Integer [ ] ) As Integer
 
  lista.Sort
( gb.Descent )
 
  Return lista
[ 0 ]
 
End

Ejercicio 2
Escribir una función mas_larga() que tome una lista de palabras y devuelva la mas larga.
 
 
 Private Function masLarga ( lista As String [ ] ) As String
 
 
Dim larga As String
 
  larga = lista
[ 0 ]
 
 
For Each a As String In lista
   
If larga < a Then
      larga = a
    Endif
 
Next
  Return larga
End
 
Ejercicio 3
Escribir una función filtrar_palabras() que tome una lista de palabras y un entero n, y devuelva las palabras que tengan mas de n caracteres. 
 
Private Function filtrarPalabras ( lista As String [ ] , numero As Integer ) As String [ ]
 
 
Dim devolver As New String [ ]
 
 
For Each a As String In lista
   
If String .Len ( a ) > numero Then
      devolver.Add
( a )
    Endif
 
Next
  Return devolver
End
 
Ejercicio 4
Escribir un programa que le diga al usuario que ingrese una cadena. El programa tiene que evaluar la cadena y decir cuantas letras mayúsculas tiene.
 
Public Sub Main ( )
 
 
Dim entrada, b As String
 
Dim contador As Integer
 
 
Print "Ingresa una cadena:"
 
Input entrada
 
 
For a As Integer = 1 To Len ( entrada )
    b = Mid
( entrada, a, 1 )
   
If b <> LCase ( b ) Then
      Inc contador
    Endif
 
Next
 
 
Print Subst ( "Tu cadena &1 tiene &2 mayúsculas." , entrada, contador )
 
End
 
Ejercicio 5
Construir un pequeño programa que convierta números binarios en enteros. 
 
Public Sub Main ( )
 
 
Dim entrada, b As String
 
Dim decimal , exp As Integer
 
 
Print "Ingresa un número binario:"
 
Input entrada
 
  exp = Len
( entrada ) - 1
 
For i As Integer = 1 To exp + 1
   
decimal += ( CInt ( Mid ( entrada, i, 1 ) ) * 2 ^ exp )
    Dec exp
 
Next
 
 
Print "Número en decimal: " & decimal
 
End
   
Ejercicio 6
Escribir un pequeño programa donde:
- Se ingresa el año en curso. (No he añadido esto, he preferido que el programa use la fecha del ordenador)
- Se ingresa el nombre y el año de nacimiento de tres personas.
- Se calcula cuántos años cumplirán durante el año en curso.
- Se imprime en pantalla. 

Public Sub Main ( )
   
   
Dim nombre As New String [ 3 ]
   
Dim anno As New Integer [ 3 ]
   
Dim contador As Integer
   
Dim entrada As String
   
   
For a As Integer = 0 To 2
     
Print Subst ( "Introduce el nombre de la persona &1: " , a + 1 )
     
Input nombre [ a ]
     
Print Subst ( "Introduce su año de nacimiento: " )
     
Input entrada
     anno
[ a ] = CInt ( entrada )
   
Next
   
   
For a As Integer = 0 To 2
     
If Year ( Now ) = anno [ a ] Then
       
Print Subst ( "Este año cumple &1" , nombre [ a ] )
     Endif
   
Next
   
 
End
 
Ejercicio 7
Definir una tupla con 10 edades de personas (En Gambas no existe las tuplas, en este caso voy a declarar un array)
Imprimir la cantidad de personas con edades superiores a 20.
Puedes variar el ejercicio para que sea el usuario quien ingrese las edades.
 
Public Sub Main ( )
   
Dim edad As New Integer [ 10 ]
   
Dim entrada As String
   
Dim contador As Integer
   
   
For a As Integer = 0 To 9
     
Print Subst ( "Introduce la edad de la persona &1: " , a + 1 )
     
Input entrada
      edad
[ a ] = CInt ( entrada )
   
Next
   
   
For Each a As Integer In edad
     
If a > 20 Then Inc contador
   
Next
   
   
Print Subst ( "Las personas mayores de 20 años son: &1" , contador )
 
End
 
Ejercicio 8
Definir una lista con un conjunto de nombres, imprimir la cantidad de comienzan con la letra a.
También se puede hacer elegir al usuario la letra a buscar.  (Un poco mas emocionante)
 
Public Sub Main ( )
   
Dim palabras As String [ ] = [ "Gambas" , "es" , "muy" , "sencillo" ]
   
Dim entrada As String
   
   
Print "Introduce la letra a buscar: "
   
Input entrada
   
   
For Each a As String In palabras
     
If Mid ( a, 1 , 1 ) == entrada Then 'Cuando se compara dos strings y se usa el doble igual,
    'significa que se hace la comparación sin tener en cuenta si es mayúscula o minúsculas.
    Print Subst ( "&1 comienza por la letra &2" , a, entrada )
      Endif
   
Next
 
End
 
Ejercicio 9
Crear una función contar_vocales(), que reciba una palabra y cuente cuantas letras "a" tiene, cuantas letras "e" tiene y así hasta completar todas las vocales.
Se puede hacer que el usuario sea quien elija la palabra.
 
Private Sub contarVocales ( palabra As String )
 
 
Dim letras As String [ ] = [ "a" , "e" , "i" , "o" , "u" ]
 
Dim cantidad As New Integer [ 5 ]
 
 
For a As Integer = 1 To Len ( palabra )
   
Select Case Mid ( palabra, a, 1 )
     
Case "a"
        Inc cantidad
[ 0 ]
     
Case "e"
        Inc cantidad
[ 1 ]
     
Case "i"
        Inc cantidad
[ 2 ]
     
Case "o"
        Inc cantidad
[ 3 ]
     
Case "u"
        Inc cantidad
[ 4 ]
   
End Select
 
Next
 
 
Print Subst ( "La palabra &1 contiene..." , palabra )
 
 
For a As Integer = 0 To 4
   
Print Subst ( "Letra &1: &2" , letras [ a ] , cantidad [ a ] )
 
Next
 
End
 
Ejercicio 10
Escriba una función es_bisiesto() que determine si un año determinado es un año
bisiesto.Un año bisiesto es divisible por 4, pero no por 100. También es divisible por 400
 
Private Function esBisiesto ( anio As Integer ) As Boolean
  Dim bisiesto as Boolean

 
If ( ( anio Mod 4 = 0 ) And ( anio Mod 100 <> 0 ) ) Or ( anio Mod 400 = 0 ) Then
    bisiesto =
True 'Es bisiesto
Else
    bisiesto =
False 'No es bisiesto
 Endif
 
End
 

No hay comentarios:

Publicar un comentario