Master en Artes Digitales (IUA-UPF)
Módulo de Programación

Estructuras de Control de Flujo

Condicionales | Bucles | Ejercicios

Los programas no siempre fluyen de forma lineal. A veces hay que tomar decisiones y a veces hay que hacer tareas repetitivas.

Condicionales:

Bucles:

Ejemplos de estructuras de control de flujo a programar en el entorno EP-NAR-6

Ejemplo 1 :

Leer caracter a caracter una frase terminada en un punto. Irla escribiendo por pantalla sin ninguna vocal.

Ejemplo 2 :

Se darán letras por teclado hasta finalizar con un punto. Se quiere saber cuantas veces aparece cada vocal y el tanto por ciento que representa cada una del total de letras.

Ejemplo 3 :

Dadas 5 letras por teclado, escribir (en líneas distintas) todas las combinaciones (sin repretición de letra) posibles de esas 5 letras en grupos de 3.
NOTA: Se piden combinaciones y no permutaciones. Por ejemplo: si las letras son: a b c d e , entonces la combinación a b c se considera equivalente a las permutaciones b a c , b c a , c a b , c b a , con lo que solo la a b c es necesaria para representar esta combinación de letras.

Ejemplo 4 :

Se dará una frase por teclado y se quiere escribir por pantalla en sentido inverso. (Nota: la frase no será más larga de 200 caracteres).

 

Soluciones:

Ejemplo 1 :

function main(){
   letra = ""
   letra = readchr()
   while(letra != "."){
      if(letra != "a" && letra != "e" && letra != "i" && letra != "o" && letra != "u"){
         write(letra)
      }
      letra = readchr()
   }
}
o bien:
function main(){
   letra = ""
   letra = readchr()
   while(letra != "."){
      switch(letra) {
         case "a": 
         case "e": 
         case "i": 
         case "o": 
         case "u": break
         default: write(letra)
      }
      letra = readchr()
   }
}

Ejemplo 2 :

function main(){
   letra = ""
   total_a = 0
   total_e = 0
   total_i = 0
   total_o = 0
   total_u = 0
   total_letras = 0
   letra = readchr()
   while(letra != "."){
      total_letras++
      switch(letra) {
         case "a": total_a++
                   break
         case "e": total_e++
                   break
         case "i": total_i++
                   break
         case "o": total_o++
                   break
         case "u": total_u++
                   break
      }
      letra = readchr()
   }
   write("Total de letras: " + total_letras + "\n")
   write("Total de a: " + total_a + "\n")
   write("% de a: " + (total_a / total_letras * 100) + "\n")
   write("Total de e: " + total_e + "\n")
   write("% de e: " + (total_e / total_letras * 100) + "\n")
   write("Total de i: " + total_i + "\n")
   write("% de i: " + (total_i / total_letras * 100) + "\n")
   write("Total de o: " + total_o + "\n")
   write("% de o: " + (total_o / total_letras * 100) + "\n")
   write("Total de u: " + total_u + "\n")
   write("% de u: " + (total_u / total_letras * 100) + "\n")
}

Ejemplo 3 :

function main(){
   letras = new Array(5)
   for(i = 0; i < 5; i++){
      letras[i] = readchr()
   }
   for(i = 0; i < 5; i++){
      for(j = i+1; j < 5; j++){
         for(k = j+1; k < 5; k++){
            write(letras[i]+letras[j]+letras[k]+"\n")
         }
      }
   }
}

Ejemplo 4 :

function main(){
   frase = new Array(200)
   i = 0
   frase[i] = readchr()
   while(frase[i] != "."){
      i++
      frase[i] = readchr()
   }
   for(j = i; j >= 0; j--){
      write(frase[j])
   }
} 
 
Ejercicios: Escribir programas que hagan lo siguiente
  1. Se dará una frase por teclado (terminada en punto, no más larga de 100 caracteres) y se quiere saber si es capicua (es decir, palíndroma o legible del derecho y del revés).

  2. Se dará una frase por teclado letra a letra (terminada en punto). Se quiere ir escribiendo por pantalla pero quitando los espacios excesivos que pudiera haber entre palabras. Es decir, entre dos palabras solo debe haber un solo espacio y si en la frase original hay más de uno, el programa debe dejar uno solo.

  3. Dadas dos secuencias de texto terminadas en punto (no más largas de 100 caracteres cada una), intercalar los caracteres uno a uno formando una sola secuencia que se mostrará por pantalla.

  4. Se dará una frase por teclado letra a letra (terminada en punto) y se quiere saber si aparece la palabra "hola" en la frase.

  5. Se dará una frase por teclado letra a letra (terminada en punto) y se quiere saber la longitud de la palabra más larga de la frase.

  6. Modificar el ejercicio anterior para que muestre la palabra más larga.

  7. Generar una forma de cuadrado a base de escribir espacios y letras X en líneas sucesivas. El programa deberá leer de teclado el tamaño del costado del cuadrado y generarlo según esta medida.
    Ejemplo: Si el tamaño del costado debe ser 4
    , entonces el programa deberá generar lo siguiente:

    XXXX
    XXXX
    XXXX
    XXXX

  8. Modificar el ejemplo anterior para que solo salga el perímetro del cuadrado.
    Ejemplo:

    XXXX
    X  X
    X  X
    XXXX

  9. Modificar el ejemplo 7 para que en vez de un cuadrado, se genere un rectángulo a partir de una base y una altura dadas por teclado.
    Ejemplo: Si la base es 8 y la altura es 3

    XXXXXXXX
    XXXXXXXX
    XXXXXXXX

  10. Generar una forma de rombo a base de escribir espacios y letras X en líneas sucesivas. El programa deberá leer de teclado la dimensión máxima del rombo y generarlo según esta medida.
    Ejemplo: Si el rombo debe tener una dimensión de 5, entonces el programa deberá generar lo siguiente:


      X
     XXX
    XXXXX
     XXX
      X
    NOTA: La dimensión siempre ha de ser inpar y mayor o igual a 0 (cero). Si no lo es, el programa debe dar un mensaje de dimensión incorrecta y no generar el rombo.


< Sesión Anterior | Índice | Siguiente Sesión >