Anda di halaman 1dari 31

Algoritmos Resueltos

Javier Crocco Mendez

ALGORITMOS RESUELTOS
-------------------------------------------------------------------------T1.GIF TEMA 1
-------------------------------------------------------------------------Bucles y tomas de decision
-------------------------------------------------------------------------1.-Hacer un pseudocodigo que imprima los numeros del 1 al 100.
PROGRAMA contador1
ENTORNO:
c <- 0
ALGORITMO:
Borrar_pantalla( )
MIENTRAS c < 101 HACER
ESCRIBIR c
c <- c + 1
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------2.-Hacer un pseudocodigo que imprima los numeros del 100 al 0, en orden
decreciente.
PROGRAMA contador2
ENTORNO:
c <- 100
ALGORITMO:
Borrar_pantalla( )
MIENTRAS c <= 0 HACER
ESCRIBIR c
c <- c - 1
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------3.-Hacer un pseudocodigo que imprima los numeros pares entre 0 y 100.
PROGRAMA pares
ENTORNO:
c <- 2
ALGORITMO:
Borrar_pantalla( )
MIENTRAS c < 101 HACER
ESCRIBIR c
c <- c + 2
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------4.-Hacer un programa que imprima la suma de los 100 primeros numeros.
PROGRAMA suma
ENTORNO:
c <- 1
suma <- 0
ALGORITMO:
Borrar_pantalla( )
MIENTRAS c <= 100 HACER
suma <- suma + c
c <- c + 1
FINMIENTRAS
ESCRIBIR "La suma de los 100 primeros nmeros es: "
ESCRIBIR suma
FINPROGRAMA

Algoritmos Resueltos

-------------------------------------------------------------------------14.-Hacer un pseudocodigo que imprima el mayor y el menor de una serie de


cinco numeros que vamos introduciendo por teclado.
PROGRAMA mayor_menor
ENTORNO:
con <- 0
n <- 0
maximo <- 0
minimo <- 99999
ALGORITMO:
Borrar_pantalla( )
MIENTRAS con <= 5 HACER
ESCRIBIR "Nmero: "
LEER n
SI n > maximo ENTONCES
maximo = n
FINSI
SI n < minimo ENTONCES
minimo <- n
FINSI
con <- con + 1
FINMIENTRAS
ESCRIBIR "El mayor de los nmeros es: "
ESCRIBIR maximo
ESCRIBIR "El menor de los nmeros es: "
ESCRIBIR minimo
FINPROGRAMA
-------------------------------------------------------------------------15.-Introducir dos numeros por teclado. Imprimir los numeros naturales que
hay entre ambos numeros empezando por el m s pequeo, contar cuantos hay y
cuantos de ellos son pares. Calcular la suma de los impares.
PROGRAMA par_impar
ENTORNO:
num1 <- 0
num2 <- 0
aux <- 0
son <- 0
pares <- 0
sumaimpa <- 0
ALGORITMO:
Borrar_pantalla( )
ESCRIBIR "Nmero: "
LEER num1
ESCRIBIR "Nmero: "
LEER num2
SI num1 > num2 ENTONCES
aux <- num1
num1 <- num2
num2 <- aux
FINSI
MIENTRAS num1 >= num2 HACER
ESCRIBIR num1
son <- son + 1
SI num1 = int( num1 / 2 ) * 2 ENTONCES
pares <- pares + 1
SINO
sumaimpa <- sumaimpa + num1
FINSI
num1 <- num1 + 1
FINMIENTRAS
ESCRIBIR "Nmeros visualizados: "
ESCRIBIR son
ESCRIBIR "Pares hay: "
ESCRIBIR pares
ESCRIBIR "La suma de los impares es: "

Javier Crocco Mendez

Algoritmos Resueltos

18.-Hacer un pseudocodigo que cuente las veces que aparece una determinada
letra en una frase que introduciremos por teclado.
PROGRAMA letra
ENTORNO:
frase <- Espacios( 30 )
letra <- Espacios( 1 )
longitud <- 0
a <- 0
res <- "S"
ALGORITMO:
MIENTRAS res = "S" HACER
Borrar_pantalla( )
ESCRIBIR "Introduce una frase: "
LEER frase
longitud <- Hallar_longitud( frase )
i <- 1
ESCRIBIR "Letra a buscar: "
LEER letra
MIENTRAS i <= longitud HACER
SI letra = Caracter( frase, i, 1 ) ENTONCES
a <- a + 1
FINSI
i <- i + 1
FINMIENTRAS
Borrar_pantalla( )
ESCRIBIR "El nmero de veces que aparece la letra "
ESCRIBIR letra
ESCRIBIR " en la frase "
ESCRIBIR frase
ESCRIBIR " es de "
ESCRIBIR a
res <- Espacios( 1 )
MIENTRAS res <> "S" Y res <> "N" HACER
ESCRIBIR "Desea introducir m&aacute;s frases (S/N): "
LEER res
res <- Convertir_maysculas( res )
FINMIENTRAS
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------19.-Hacer un pseudocodigo que simule el funcionamiento de un reloj digital y
que permita ponerlo en hora.
PROGRAMA reloj
ENTORNO:
horas <- 0
minutos <- 0
segundos <- 0
res <- "S"
ALGORITMO:
Borrar_pantalla( )
ESCRIBIR "Horas: "
LEER horas
ESCRIBIR "Minutos: "
LEER minutos
ESCRIBIR "Segundos: "
LEER segundos
MIENTRAS res = "S" HACER
MIENTRAS horas < 24 HACER
MIENTRAS minutos < 60 HACER
MIENTRAS segundos < 60 HACER
ESCRIBIR horas
ESCRIBIR minutos
ESCRIBIR segundos
segundos <- segundos + 1
FINMIENTRAS

Javier Crocco Mendez

Algoritmos Resueltos

c <- c + 1
col <- col + 4
SI col > 75 ENTONCES
fi <- fi + 2
col <- 5
FINSI
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------24.-Comprobar si un numero mayor o igual que la unidad es primo.
PROGRAMA primo
ENTORNO:
res <- "S"
ALGORITMO:
MIENTRAS res = "S" HACER
Borrar_pantalla( )
numero <- 0
sw <- 0
MIENTRAS numero < 1 HACER
EN 8,10 ESCRIBIR "Nmero: "
EN 8,18 LEER numero
FINMIENTRAS
i <- numero - 1
MIENTRAS i > 1 Y sw <> 1 HACER
SI numero = Int( numero / i ) * i ENTONCES
sw = 1
SINO
i <- i - 1
FINSI
FINMIENTRAS
SI sw = 1 ENTONCES
EN 10,10 ESCRIBIR "no es primo"
SINO
EN 10,10 ESCRIBIR "s es primo"
FINSI
HACER Mas
FINMIENTRAS
FINPROGRAMA
-----------------------------SUBPROGRAMA Mas
res <- " "
MIENTRAS res <> "S" Y res <> "N" HACER
ESCRIBIR "Desea introducir m s nmeros (S/N): "
LEER res
res <- Convertir_mayusculas( res )
FINMIENTRAS
FINSUBPROGRAMA
-------------------------------------------------------------------------25.-Introducir un numero menor de 5000 y pasarlo a numero romano.
PROGRAMA romano
ENTORNO:
res <- "S"
ALGORITMO:
MIENTRAS res = "S" HACER
Borrar_pantalla( )
num <- 0
MIENTRAS num < 1 O num > 5000 HACER
EN 8,10 ESCRIBIR "Nmero: "
EN 8,18 ESCRIBIR num
FINMIENTRAS
col <- 15
MIENTRAS num >= 1000 HACER
EN 15,col ESCRIBIR "M"
num <- num - 1000

Javier Crocco Mendez

Algoritmos Resueltos

HACER Factorial
CASO op = 3
HACER Tabla
FINCASO
FINMIENTRAS
FINPROGRAMA
-----------------------------SUBPROGRAMA Primo
sw <- 0
i <- n - 1
MIENTRAS i > 1 Y sw <> 1 HACER
SI n = Int( n / i ) * i ENTONCES
sw <- 1
SINO
i <- i - 1
FINSI
FINMIENTRAS
Borrar_pantalla( )
SI sw = 1 ENTONCES
EN 10,10 ESCRIBIR "no es primo"
SINO
EN 10,10 ESCRIBIR "s es primo"
FINSI
Pausa( )
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Factorial
fac <- 1
Borrar_pantalla( )
SI n < 0 ENTONCES
EN 10,10 ESCRIBIR "No tiene factorial"
SINO
MIENTRAS n > 1 HACER
fac <- fac * n
n <- n - 1
FINMIENTRAS
EN 10,10 ESCRIBIR "Su factorial es: "
EN 10,27 ESCRIBIR fac
FINSI
Pausa( )
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Tabla
i <- 0
fi <- 10
Borrar_pantalla( )
MIENTRAS i <= 10 HACER
EN 8,10 ESCRIBIR "Tabla de multiplicar"
EN fi,10 ESCRIBIR n
EN fi,15 ESCRIBIR "*"
EN fi,20 ESCRIBIR i
EN fi,25 ESCRIBIR "="
EN fi,30 ESCRIBIR n * i
i <- i + 1
FINMIENTRAS
Pausa( )
FINSUBPROGRAMA
-------------------------------------------------------------------------TEMA 4
-------------------------------------------------------------------------Arrays unidimensionales
-------------------------------------------------------------------------33.-Crear un array unidimensional de 20 elementos con nombres de personas.
Visualizar los elementos de la lista debiendo ir cada uno en una fila
distinta.
PROGRAMA nombres
ENTORNO:

Javier Crocco Mendez

Algoritmos Resueltos

cot <- cot + 4


i <- i + 1
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------38.-Cargar en una matriz las notas de los alumnos de un colegio en funcion del
numero de cursos (filas) y del nmero de alumnos por curso (columnas).
PROGRAMA notas
ENTORNO:
i <- 1
j <- 1
ALGORITMO:
Borrar_pantalla( )
EN 10,20 ESCRIBIR "Nmero de cursos: "
EN 10,39 LEER M
EN 12,20 ESCRIBIR "Nmero de alumnos: "
EN 12,40 LEER N
DIMENSIONAR A[ M, N ]
Borrar_pantalla( )
EN 2,25 ESCRIBIR "Introduccin de las notas"
MIENTRAS i <= M HACER
EN 10,25 ESCRIBIR "Curso: "
EN 10,32 ESCRIBIR i
MIENTRAS j <= N HACER
EN 14,25 ESCRIBIR "Alumno: "
EN 14,33 ESCRIBIR j
EN 16,25 ESCRIBIR "Nota: "
EN 16,32 LEER A[ i, j ]
j <- j + 1
FINMIENTRAS
i <- i + 1
FINMIENTRAS
FINPROGRAMA
-------------------------------------------------------------------------39.-Ordenar una matriz de M filas y N columnas por la primera columna
utilizandoelmtodoSHELLpor
(
insercion).
PROGRAMA ordenar
ENTORNO:
i <- 1
j <- 1
fi <- 10
co <- 15
M <- 0
N <- 0
ALGORITMO:
Borrar_pantalla( )
EN 10,20 ESCRIBIR "Filas: "
EN 10,27 LEER M
EN 12,20 ESCRIBIR "Columnas: "
EN 12,30 LEER N
DIMENSIONAR A[ M, N ]
Borrar_pantalla( )
MIENTRAS i <= M HACER
MIENTRAS j <= N HACER
A[ i, j ] = Int( Rnd( ) * 100 ) + 1
EN fi,co ESCRIBIR A[ i, j ]
co <- co + 5
j <- j + 1
FINMIENTRAS
co <- 15
fi <- fi + 2
i <- i + 1
FINMIENTRAS
salto <- Int( M / 2 )

Javier Crocco Mendez

Algoritmos Resueltos

MIENTRAS salto >= 1 HACER


sw <- 1
MIENTRAS sw <> 0 HACER
sw <- 0
i <- 1
MIENTRAS i <= M - salto HACER
SI A[ i, 1 ] > A[ i + salto, 1 ] ENTONCES
HACER Cambios
FINSI
i <- i + 1
FINMIENTRAS
FINMIENTRAS
salto <- Int( salto / 2 )
FINMIENTRAS
FINPROGRAMA
-----------------------------SUBPROGRAMA Cambios
j <- 1
MIENTRAS j <= N HACER
aux <- A[ i + salto, j ]
A[ i + salto, j ] <- A[ i, j ]
A[ i, j ] <- aux
j <- j + 1
FINMIENTRAS
sw <- 1
FINSUBPROGRAMA
-------------------------------------------------------------------------TEMA 6
-------------------------------------------------------------------------Arrays multidimensionales
-------------------------------------------------------------------------40.-Crear una tabla de 3 paginas, 4 filas y 5 columnas donde el primer
elemento valga 1, el segundo 2, el tercero 3 y as sucesivamente, e
imprimirla.
PROGRAMA tabla
ENTORNO:
DIMENSIONAR A[ 3, 4, 5 ]
i <- 1
j <- 1
k <- 1
b <- 0
fi <- 8
co <- 12
ALGORITMO:
MIENTRAS i <= 3 HACER
Borrar_pantalla( )
EN fi,co ESCRIBIR "Elementos de la p gina: "
EN fi,co + 24 ESCRIBIR i
fi <- fi + 2
MIENTRAS j <= 4 HACER
MIENTRAS k <= 5 HACER
b <- b + 1
A[ i, j, k ] <- b
EN fi,co ESCRIBIR A[ i, j, k ]
co <- co + 4
k <- k + 1
FINMIENTRAS
fi <- fi + 2
co <- 12
j <- j + 1
FINMIENTRAS
EN fi + 2,20 ESCRIBIR "Pulse INTRO para continuar ..."
Pausa( )
i <- i + 1
FINMIENTRAS
FINPROGRAMA

Javier Crocco Mendez

Algoritmos Resueltos

EN 9,5 ESCRIBIR "Apellidos: "


EN 11,5 ESCRIBIR "Direcci&oacute;n: "
EN 13,5 ESCRIBIR "Provincia: "
EN 7,16 LEER nombre
EN 9,16 LEER apellidos
EN 11,16 LEER direccion
EN 13,16 LEER provincia
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Cambios
nom <- nombre
ape <- apellidos
dir <- direccion
pro <- provincia
EN 7,16 LEER nom
EN 9,16 LEER ape
EN 11,16 LEER dir
EN 13,16 LEER pro
nombre <- nom
apellidos <- ape
direccion <- dir
provincia <- pro
Escribir_registro( )
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Detener
EN 10,20 ESCRIBIR "Registro inexistente"
EN 20,18 ESCRIBIR "Pulse INTRO para continuar"
Pausa( )
FINSUBPROGRAMA
-------------------------------------------------------------------------TEMA 8
-------------------------------------------------------------------------Informes y rupturas de control
-------------------------------------------------------------------------46.-Tenemos el fichero secuencial DATOS.DAT cuyos campos son: DNI, NOMBRE,
APELLIDOS, DIRECCION y PROVINCIA. Listar por impresora todos los registros
cuya provincia sea una determinada que introduciremos por teclado.
PROGRAMA provincia
ENTORNO:
fi <- 55
c <- 0
pag <- 1
pro <- Espacios( 15 )
ALGORITMO:
Borrar_pantalla( )
EN 10,20 ESCRIBIR "Provincia: "
EN 10,32 LEER pro
ABRIR "DATOS.DAT"
Activar_impresora( )
MIENTRAS NO Eof( ) HACER
SI provincia = pro ENTONCES
SI fi = 55 ENTONCES
HACER Cabecera
FINSI
EN fi,5 ESCRIBIR dni
EN fi,15 ESCRIBIR nombre
EN fi,35 ESCRIBIR apellidos
EN fi,65 ESCRIBIR direccion
fi <- fi + 1
c <- c + 1
FINSI
Siguiente_registro( )
FINMIENTRAS
SI pag <> 1 ENTONCES
EN fi + 2,20 ESCRIBIR "Total de personas: "
EN fi + 2,39 ESCRIBIR c

Javier Crocco Mendez

Algoritmos Resueltos

SI fi = 55 ENTONCES
HACER Cabesal
FINSI
MIENTRAS nart3 <> nart HACER
SELECCIONAR "ARTICULOS.DAT"
Siguiente_registro( )
FINMIENTRAS
aux <- nart3
HACER Buscar
HACER Sale
SELECCIONAR "SALIDAS.DAT"
Siguiente_registro( )
FINMIENTRAS
EN fi + 4,55 ESCRIBIR "Total: "
EN fi + 4,62 ESCRIBIR total
Activar_pantalla( )
Cerrar_ficheros( )
BORRAR "SALIDAS.DAT"
FINPROGRAMA
-----------------------------SUBPROGRAMA Calculos
SI tipo = 0 ENTONCES
entra <- entra + ventas
SINO
sale <- sale + ventas
FINSI
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Grabar
stock <- stock + entra - sale
SELECCIONAR "ARTICULOS.DAT"
Escribir_registro( )
nart3 <- aux
ventas3 <- sale
SELECCIONAR "SALIDAS.DAT"
Final_fichero( )
Escribir_registro( )
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Cabecompras
Salto_pagina( )
EN 2,65 ESCRIBIR "P g.: "
EN 2,71 ESCRIBIR pag
EN 4,20 ESCRIBIR "LISTADO DE LAS ENTRADAS DE ARTICULOS AL DIA: "
EN 4,66 ESCRIBIR Fecha_sistema( )
EN 6,18 ESCRIBIR "Nmero"
EN 6,35 ESCRIBIR "Artculo"
EN 6,65 ESCRIBIR "Cantidad"
EN 7,15 ESCRIBIR "----------------------------------------------------------------"
fi <- 9
pag <- pag + 1
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Compra
EN fi,16 ESCRIBIR aux
EN fi,30 ESCRIBIR articulo
EN fi,67 ESCRIBIR entra
fi <- fi + 1
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Cabesal
Salto_pagina( )
EN 2,65 ESCRIBIR "P g.: "
EN 2,71 ESCRIBIR pag
EN 4,20 ESCRIBIR "LISTADO DE SALIDAS DE ARTICULOS AL DIA: "
EN 4,60 ESCRIBIR Fecha_sistema( )
EN 6,8 ESCRIBIR "Nmero"
EN 6,16 ESCRIBIR "Artculo"
EN 6,40 ESCRIBIR "Cantidad"
EN 6,54 ESCRIBIR "PVP"

Javier Crocco Mendez

Algoritmos Resueltos

donde <- 0
i <- 0
Borrar_pantalla( )
EN 10,20 ESCRIBIR "D.N.I.: "
EN 10,29 LEER dn
num <- Algoritmo( dn )
SELECCIONAR "DATOS.DAT"
LEER num
SI dni = Str( dn ) ENTONCES
HACER Alta_duplicada
SINO
SI Val( dni ) = 0 O dni = Espacios( ) ENTONCES
swh <- 1
FINSI
SI Val( puntero ) = 0 O puntero = Espacios( ) ENTONCES
HACER Introducir
puntero <- Str( 0 )
GRABAR num
SINO
HACER Buscar
SI sw = 0 ENTONCES
HACER Introducir
SI swh = 1 ENTONCES
GRABAR num
SINO
HACER Encontrar_sitio
SELECCIONAR "SINONIMOS.DAT"
GRABAR 1
puntero <- Str( donde )
SI i = 0 ENTONCES
SELECCIONAR "DATOS.DAT"
GRABAR num
SINO
SELECCIONAR "SINONIMOS.DAT"
GRABAR Val( aux )
FINSI
puntero <- Str( 0 )
SELECCIONAR "SINONIMOS.DAT"
GRABAR donde
FINSI
SINO
HACER Alta_duplicada( )
FINSI
FINSI
FINSI
HACER Mas
FINMIENTRAS
Cerrar_ficheros( )
FINPROGRAMA
-----------------------------SUBPROGRAMA Introducir
EN 12,20 ESCRIBIR "Nombre: "
EN 14,20 ESCRIBIR "Apellidos: "
EN 16,20 ESCRIBIR "Direccin: "
EN 12,29 LEER nom
EN 14,32 LEER ape
EN 16,32 LEER dir
FINSUBPROGRAMA
-----------------------------SUBPROGRAMA Encontrar_sitio
SELECCIONAR "SINONIMOS.DAT"
LEER 1
SI Val( nombre ) <> 0 Y nombre <> Espacios( ) ENTONCES
donde <- Val( nombre )
LEER donde
hueco <- Val( nombre )
nombre <- Str( hueco )
SINO
donde <- Val( dni ) + 1
dni <- Str( donde )

Javier Crocco Mendez