Ejercicios Resueltos en PSeInt
Ejercicios Resueltos en PSeInt
Ejercicios Resueltos en PSeInt
PSeInt
PSeInt permite personalizar algunos aspectos del lenguaje. Para evitar confusin
en los alumnos, la idea es que la primera vez que se ejecute el programa, solicite al
estudiante elegir un "perfil de configuracin" para su
universidad/facultad/carrera, definiendo rpidamente y en un solo paso la
configuracin del lenguaje de acuerdo a las exigencias de su docente. Este mensaje
es para solicitar a los docentes que enven sus perfiles para agregarlos a la lista.
Para ello, deben realizar los siguientes pasos:
1. Ejecute PSeInt (asegrese de haber instalado la ltima versin).
2. Seleccione el tem "Opciones del Lenguaje (perfiles)" del men "Configurar".
3. En el cuadro de dilogo que aparece, haga click en "Personalizar".
4. En el nuevo cuadro de dilogo que aparece, configure el perfil como lo
desee.
5. Haga click en el segundo botn de la esquina inferior izquierda del cuadro
de dilogo (el que muestra un disquete) para guardar el perfil en un
archivo.
6. Seleccione una ubicacin cualquiera para el archivo e introduzca una breve
descripcin del perfil (se recomienda mencionar la institucin donde se
utiliza, la ctedra o carrera, y el nombre del docente responsable o de quien
enva el perfil).
7. Enve el archivo por email a zaskar_84<arroba>yahoo.com.ar.
Definir VAL_MAYOR,ARREGLO,CANT,I
Como Enteros;
Escribir "Ingrese la
Dimension ARREGLO[100]; cantidad de numeros:"
Escribir "Ingrese la cantidad de Leer CANT
numeros:"; Dimension ARREGLO[CANT]
Leer CANT;
Para Cada Elemento de
Para I<-0 Hasta CANT-1 Hacer ARREGLO
Escribir "Ingrese un numero:"; Escribir "Ingrese un
Leer ARREGLO[I]; numero:"
FinPara Leer ELEMENTO
Fin Para
VAL_MAYOR<-0;
Para I<-0 Hasta CANT-1 Hacer VAL_MAYOR<-0
Si ARREGLO[I]>VAL_MAYOR Para Cada ELEMENTO de
Entonces ARREGLO
VAL_MAYOR<-ARREGLO[i]; Si ELEMENTO Es Mayor Que
FinSi VAL_MAYOR
FinPara VAL_MAYOR<-ELEMENTO
Fin Si
Si VAL_MAYOR % 2 = 0 Entonces Fin Para
Escribir "El mayor es
",VAL_MAYOR," y es par"; Si VAL_MAYOR Es Par
Sino Escribir "El mayor es "
Escribir "El mayor es VAL_MAYOR " y es par"
",VAL_MAYOR," y es impar"; Sino
FinSi Escribir "El mayor es "
VAL_MAYOR " y es impar"
FinProceso Fin Si
FinAlgoritmo
El Pseudo-cdigo
Sintaxis sencilla
Manejo de las estructuras bsicas de control
Solo 3 tipos de datos bsicos: numrico, caracter /cadenas de caracteres y lgico
(verdadero-falso).
Estructuras de datos: arreglos
Proceso SinTitulo
accion 1;
accion 1;
.
.
.
accion n;
FinProceso
Comienza con la palabra clave Proceso seguida del nombre del programa, luego le
sigue una secuencia de instrucciones y finaliza con la palabra FinProceso. Una
secuencia de instrucciones es una lista de una o ms instrucciones, cada una
terminada en punto y coma.
Asignacin
Entradas
Esta instruccin lee N valores desde el ambiente (en este caso el teclado) y los asigna a
las N variables mencionadas. Pueden incluirse una o ms variables, por lo tanto el
comando leer uno o ms valores.
Salidas
Esta instruccin imprime al ambiente (en este caso en la pantalla) los valores
obtenidos de evaluar N expresiones. Dado que puede incluir una o ms expresiones,
mostrar uno o ms valores.
Dimensionamiento
La instruccin Dimension permite definir un arreglo, indicando sus dimensiones.
Condicional Si-Entonces
Si <condicin>
Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
La secuencia de instrucciones ejecutada por una instruccin Segun depende del valor
de una variable numrica.
Lazos Mientras
Lazos Repetir
Repetir
<instrucciones>
Hasta Que <condicin>
Lazos Para
La instruccin Para ejecuta una secuencia de instrucciones un nmero determinado de
veces.
Operadores y Funciones
Este pseudolenguaje dispone de un conjunto bsico de operadores y funciones que
pueden ser utilizados para la construccin de expresiones ms o menos complejas.
Las siguientes tablas exhiben la totalidad de los operadores de este lenguaje reducido:
Relacionales
Logicos
% MOD Mdulo (resto de la divisin entera) resto <- num MOD div
Funcin Significado
SEN(X) Seno de X
COS(X) Coseno de X
ATAN(X) Arcotangente de X
Ejemplos
Ejercicios
Ejemplos de algoritmos en PSeudoCodigo
Suma: Este es el ejemplo ms simple. Muestra cmo cargar dos nmeros de dos
variables, calcular la suma de los mismos y mostrarla en pantalla.
Proceso Suma
C <- A+B
FinProceso
Proceso Mayores
// se leen uno por uno los 200 datos y se los guarda en el arreglo
Para i<-1 Hasta n Hacer
Escribir "Ingrese el dato ",i,":"
Leer datos[i]
FinPara
// se comparan los dos primeros y se toman como may1 (el mayor de los
// dos) y may2 (el segundo mayor).
Si datos[1]>datos[2] Entonces
may1<-datos[1]
may2<-datos[2]
Sino
may1<-datos[2]
may2<-datos[1]
FinSi
// se recorren los demas elementos buscan si hay alguno mayor que may1 o may2
Para i<-3 Hasta n Hacer
Si datos[i]>may1 Entonces // si hay un valor mayor que may1
may2<-may1 // como may1 era el ms grande, pasa a estar en segundo lugar
may1<-datos[i] // y el nuevo dato toma el primer puesto (mayor de todos)
Sino // si no era mas grande que may1, todavia puede ser mas grande que may2
Si datos[i]>may2 Entonces // si supera al segundo mayor que teniamos
may2<-datos[i] // se lo guarda como segundo mayor
FinSi
FinSi
FinPara
FinProceso
Proceso sin_titulo
Si a Es Par
Escribir a " es par"
Sino
Escribir a " es impar"
FinSi
FinProceso
FinProceso
intentos<-10
num_secreto <- azar(100)+1
Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
Sino
Escribir "El numero era: ",num_secreto
FinSi
FinProceso
Proceso Promedio
acum<-0
prom<-acum/n
FinProceso
Triangulo: Este algoritmo determina a partir de las longitudes de tres
lados de un tringulo si corresponden a un tringulo rectngulo (para
utiliza la relacin de Pitgoras, tomando los dos lados de menor
longitud como catetos), y en caso afirmativo informa el rea del mismo.
Ejemplo de la estructura Si-Entonces y anidamiento.
// Lee los tres lados de un triangulo rectangulo, determina
// si corresponden (por Pitargoras) y en caso afirmativo
// calcula el area
Proceso TrianguloRectangulo
// cargar datos
Escribir "Ingrese el lado 1:"
Leer l1
Escribir "Ingrese el lado 2:"
Leer l2
Escribir "Ingrese el lado 3:"
Leer l3
FinProceso
Ordena Lista: Este ejemplo almacena una lista de nombres en un
arreglo y luego los ordena alfabticamente. El mtodo de
ordenamiento es relativamente simple. Para la entrada de datos se
utiliza una estructura Mientras, sin saber a priori la cantidad de datos
que se ingresarn
// Se ingresa una lista de nombres (la lista termina
// cuando se ingresa un nombre en blanco) no permitiendo
// ingresar repetidos y luego se ordena y muestra
Proceso OrdenaLista
Dimension lista[200]
// leer la lista
cant<-0
Leer nombre
Mientras nombre<>"" Hacer
cant<-cant+1
lista[cant]<-nombre
Repetir // leer un nombre y ver que no este ya en la lista
Leer nombre
se_repite<-Falso
Para i<-1 Hasta cant Hacer
Si nombre=lista[i] Entonces
se_repite<-Verdadero
FinSi
FinPara
Hasta Que NO se_repite
FinMientras
// ordenar
Para i<-1 Hasta cant-1 Hacer
// busca el menor entre i y cant
pos_menor<-i
Para j<-i+1 Hasta cant Hacer
Si lista[j]<lista[pos_menor] Entonces
pos_menor<-j
FinSi
FinPara
// intercambia el que estaba en i con el menor que encontro
aux<-lista[i]
lista[i]<-lista[pos_menor]
lista[pos_menor]<-aux
FinPara
FinProceso
Proceso Modulo
Escribir "Ingrese el numero: "
Leer N
Escribir "Ingrese el divisor: "
Leer M
Si N MOD M = 0 Entonces
Escribir M," es divisor exacto de ",N,"."
Sino
Escribir "El resto de dividir ",N," por ",M," es: ",N MOD M
FinSi
FinProceso
Proceso sin_titulo
Repetir
// mostrar menu
Limpiar Pantalla
Escribir "Men de recomendaciones"
Escribir " 1. Literatura"
Escribir " 2. Cine"
Escribir " 3. Msica"
Escribir " 4. Videojuegos"
Escribir " 5. Salir"
// ingresar una opcion
Escribir "Elija una opcin (1-5): "
Leer OP
// procesar esa opcin
Segun OP Hacer
1:
Escribir "Lecturas recomendables:"
Escribir " + Esperndolo a Tito y otros cuentos de fbol (Eduardo Sacheri)"
Escribir " + El juego de Ender (Orson Scott Card)"
Escribir " + El sueo de los hroes (Adolfo Bioy Casares)"
2:
Escribir "Pelculas recomendables:"
Escribir " + Matrix (1999)"
Escribir " + El ltimo samuray (2003)"
Escribir " + Cars (2006)"
3:
Escribir "Discos recomendables:"
Escribir " + Despedazado por mil partes (La Renga, 1996)"
Escribir " + Bfalo (La Mississippi, 2008)"
Escribir " + Gaia (Mgo de Oz, 2003)"
4:
Escribir "Videojuegos clsicos recomendables"
Escribir " + Da del tentculo (LucasArts, 1993)"
Escribir " + Terminal Velocity (Terminal Reality/3D Realms, 1995)"
Escribir " + Death Rally (Remedy/Apogee, 1996)"
5:
Escribir "Gracias, vuelva prontos"
De otro modo:
Escribir "Opcin no vlida"
FinSegun
Escribir "Presione enter para continuar"
Esperar Tecla
Hasta Que OP=5
FinProceso
Proceso Digitos
FinProceso
Resolvente: Utiliza la frmula resolvente para determinar las races de una
ecuacin de segundo grado a partir de sus tres coeficientes, y las informa
adecuadamente segn su tipo (reales iguales, reales distintas, imaginarias)
Proceso Resolvente
// cargar datos
Escribir "Ingrese el coeficiente A:"
Leer a
Escribir "Ingrese el coeficiente B:"
Leer b
Escribir "Ingrese el coeficiente C:"
Leer c
FinProceso
Proceso Primos
Escribir "1: 2" // el primer primo es 2, los otros son todos impares...
cant_mostrados <- 1
n<-3 // ...a partir de 3
Para i<-3 hasta rc(n) con paso 2 Hacer // ya sabemos que es impar
Si n MOD i = 0 entonces // si la division da exacta...
es_primo <- Falso // ...ya no es primo
FinSi
FinPara
Si es_primo Entonces
cant_mostrados <- cant_mostrados + 1
Escribir cant_mostrados, ": ",n
FinSi
n <- n + 2
FinMientras
FinProceso
Proceso Factorizacion
factorizar<-verdadero
FinProceso
// comparar todas las letras de frase con las de vocales y contar coincidencias
Para i<-1 hasta Longitud(frase) Hacer
Para j<-1 hasta Longitud(vocales) Hacer
Si Subcadena(frase,i,i)=Subcadena(vocales,j,j) Entonces
cantVocales<-cantVocales+1
FinSi
FinPara
FinPara
FinProceso
Proceso sin_titulo
FinProceso
Proceso DosALaDiezRecursivo
Escribir "Ingrese Base"
Leer base
Escribir "Ingrese Exponente"
Leer exponente
Escribir "El resultado es ",Potencia(base,exponente)
FinProceso
Proceso Principal
Dimension datos[100]
Escribir "Ingrese la cantidad de datos:"
Leer n
FinProceso
Proceso Misil
Esperar .2 Segundos
FinPara
FinProceso
Proceso Romanos
// leer el nmero
Escribir "Ingrese un nmero entre 1 y 1000"
Leer Numero
// realizar la conversin
Si SePuedeConvertir Entonces
Si Numero=1000 Entonces
Escribir "M"
Sino
Dimension nu[10], nd[10], nc[10] // notacin para unidades, decenas y
centenas
nu[1]<-''; nu[2]<-'I'; nu[3]<-'II'; nu[4]<-'III'; nu[5]<-'IV'; nu[6]<-'V'; nu[7]<-
'VI'; nu[8]<-'VII'; nu[9]<-'VIII'; nu[10]<-'IX'
nd[1]<-''; nd[2]<-'X'; nd[3]<-'XX'; nd[4]<-'XXX'; nd[5]<-'XL'; nd[6]<-'L';
nd[7]<-'LX'; nd[8]<-'LXX'; nd[9]<-'LXXX'; nd[10]<-'XC'
nc[1]<-''; nc[2]<-'C'; nc[3]<-'CC'; nc[4]<-'CCC'; nc[5]<-'CD'; nc[6]<-'D';
nc[7]<-'DC'; nc[8]<-'DCC'; nc[9]<-'DCCC'; nc[10]<-'CM'
centenas<-trunc(Numero/100) MOD 10
decenas<-trunc(Numero/10) MOD 10
unidades<-Numero MOD 10
Escribir nc[centenas+1],nd[decenas+1],nu[unidades+1]
FinSi
FinSi
FinProceso
// Hay una matriz que representa las torres, cada columna contiene
// nros que representan los tamanios de los discos en esas torres (solo
// interesan los valores hasta la cantidad de discos de esa torre).
// Cuantos discos tiene cada torre lo dice el vector cant_discos.
Proceso Hanoi
// jugar!
cant_movs<-0
Mientras cant_discos[3]<>discos Hacer // mientras no esten todos los discos en
la tercer torre, el juego sigue
Limpiar Pantalla
// solicitar movimiento
Escribir "Mover desde la torre: "
leer t1
Escribir "hacia la torre: "
leer t2
si t1<1 O t1>3 O t2<1 O t2>3 Entonces // controlar que el nro de torre sea
valido
Escribir "Movimiento invalido"
Esperar Tecla
sino
Si cant_discos[t1]=0 Entonces // controlar que la torre 1 tengo al menos un
disco
Escribir "Movimiento invalido"
Esperar Tecla
Sino
disco_a_mover <- torres[t1,cant_discos[t1]] // obtener tamanio del disco
que se quiere mover
puede_mover<-verdadero
Si cant_discos[t2]<>0 entonces // controlar que la torre dos no tenga
discos o tenga solo discos mas grandes
Si torres[t2,cant_discos[t2]]<disco_a_mover Entonces
puede_mover<-Falso
FinSi
FinSi
Si puede_mover Entonces // si paso todos los controles, mover
cant_movs <- cant_movs+1
cant_discos[t2]<-cant_discos[t2]+1
torres[t2,cant_discos[t2]] <- disco_a_mover
cant_discos[t1]<-cant_discos[t1]-1
Sino
Escribir "Movimiento invalido"
Esperar Tecla
FinSi
FinSi
FinSi
FinMientras
// mostrar resultado
Limpiar Pantalla
Escribir "Juego finalizado en ",cant_movs," movimientos!"
FinProceso
Proceso TaTeTi
// incializa dos matrices de 3x3, una para guardar la ficha que se ve,
// y otra para un valor asociado a la ficha, para un jugador sera 1, para
// el otro 2, entoces para ver quien gano se multiplica por fila, por
// columna y por diagonal, si el resultado es 1 gano el primer jugador,
// si es 8 gano el segundo, si es 0 es porque faltaba completar, si
// es otra cosa, estan las tres fichas, pero no son del mismo jugador
Dimension Tab1[3,3]
Dimension Tab2[3,3]
Para i<-1 Hasta 3 Hacer
Para j<-1 Hasta 3 Hacer
Tab1[i,j]<-0
Tab2[i,j]<-" "
FinPara
FinPara
TurnoJugador1<-Verdadero
Terminado<-Falso
Ganador<-Falso
CantTurnos<-0
// dibuja el tablero
Borrar Pantalla
Escribir " "
Escribir " || || "
Escribir " ",Tab2[1,1]," || ",Tab2[1,2]," || ",Tab2[1,3]
Escribir " 1|| 2|| 3"
Escribir " =====++=====++======"
Escribir " || || "
Escribir " ",Tab2[2,1]," || ",Tab2[2,2]," || ",Tab2[2,3]
Escribir " 4|| 5|| 6"
Escribir " =====++=====++======"
Escribir " || || "
Escribir " ",Tab2[3,1]," || ",Tab2[3,2]," || ",Tab2[3,3]
Escribir " 7|| 8|| 9"
Escribir " "
Repetir
Leer Pos
Si Pos<1 o Pos>9 Entonces
Escribir "Posicin incorrecta, ingrese nuevamente: "
Pos<-99;
Sino
i<-trunc((Pos-1)/3)+1
j<-((Pos-1) MOD 3)+1
Si Tab1[i,j]<>0 Entonces
pos<-99
Escribir "Posicin incorrecta, ingrese nuevamente: "
FinSi
FinSi
Hasta Que Pos<>99
// guarda la ficha en la matriz tab2 y el valor en tab1
CantTurnos<-CantTurnos+1
Tab1[i,j]<-Valor
Tab2[i,j]<-Ficha
Sino
Si Ganador Entonces
Escribir "Ganador: "
Si TurnoJugador1 Entonces
Escribir "Jugador 1!"
Sino
Escribir "Jugador 2!"
FinSi
Sino
Escribir "Empate!"
FinSi
Terminado<-Verdadero
FinSi
FinMientras
FinProceso
Calculadora Bsica (PSeInt)
Calculadora n1
Proceso sin_titulo
Calculadora n2
Proceso sin_titulo
//Entrada
n1<-0
n2<-0
menu<-0
leer n1;
leer n2;
leer menu;
//Proceso//Fin
leer n2;
FinMientras
De Otro Modo:
FinSegun
FinProceso
Proceso calculadora
Definir n1 Como Entero;
Definir n2 como entero ;
Definir tabla como entero;
definir resultado como entero;
2:resultado = n1-n2;
Escribir "su resultado es:" ,resultado;
3:resultado= n1*n2;
escribir "su resultado es:" ,resultado;
4: resultado= n1/n2;
Escribir "su resultado es:", resultado;
De Otro Modo:
Escribir "No ves que tenes 4 opciones nomas ? pedaso de imbecil escribi bien";
Fin Segun
FinProceso