Para Qué Sirve PSeInt
Para Qué Sirve PSeInt
Para Qué Sirve PSeInt
PSeInt está pensado para asistir a los estudiantes que se inician en la construcción de programas o algoritmos
computacionales. El pseudocódigo se suele utilizar como primer contacto para introducir conceptos básicos
como el uso de estructuras de control, expresiones, variables, etc, sin tener que lidiar con las particularidades
de la sintaxis de un lenguaje real. Este software pretende facilitarle al principiante la tarea de escribir algoritmos
en este pseudolenguaje presentando un conjunto de ayudas y asistencias, y brindarle además algunas
herramientas adicionales que le ayuden a encontrar errores y comprender la lógica de los algoritmos.
Sintaxis sencilla
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 más
instrucciones, cada una terminada en punto y coma.
Las acciones incluyen operaciones de entrada y salida, asignaciones de variables, condicionales si-entonces o
de selección múltiple y/o lazos mientras, repetir o para.
Asignación
Entradas
Esta instrucción lee N valores desde el ambiente (en este caso el teclado) y los asigna a las N variables
mencionadas. Pueden incluirse una o más variables, por lo tanto el comando leerá uno o más valores.
Salidas
Esta instrucción imprime al ambiente (en este caso en la pantalla) los valores obtenidos de evaluar N
expresiones. Dado que puede incluir una o más expresiones, mostrará uno o más valores.
Dimensionamiento
Esta instrucción define un arreglo con el nombre indicado en <indentificador> y N dimensiones. Los N
parámetros indican la cantidad de dimensiones y el valor máximo de cada una de ellas. La cantidad de
dimensiones puede ser una o más, y la máxima cantidad de elementos debe ser una expresión numérica
positiva.
Se pueden definir más de un arreglo en una misma instrucción, separándolos con una coma (,).
Dimension <ident1> (<max11>,...,<max1N>),..., <identM>
(<maxM1>,...,<maxMN>)
La secuencia de instrucciones ejecutadas por la instrucción Si-Entonces-Sino depende del valor de una
condición lógica.
Si <condición>
Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las
instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino
si la condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o
Falso.
La cláusula Entonces debe aparecer siempre, pero la cláusla Sino puede no estar. En ese caso, si la condición
es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.
Selección Multiple
La secuencia de instrucciones ejecutada por una instrucción Según depende del valor de una variable
numérica.
Segun <variable> Hacer
<número1>: <instrucciones>
<número2>,<número3>: <instrucciones>
<...>
De Otro Modo: <instrucciones>
FinSegun
Esta instrucción permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor almacenado
en una variable de tipo numérico. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia
de instrucciones asociada con dicho valor.
Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de
instrucciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar
cuando el valor de la variable es uno de esos números.
Opcionalmente, se puede agregar una opción final, denominada De Otro Modo, cuya secuencia de
instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las
opciones anteriores.
Lazos Mientras
La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera.
Mientras <condición> Hacer
<instrucciones>
FinMientras
Al ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez
la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se
vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la
condición sea verdadera.
Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la
condición resulta ser falsa.
Si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo,
las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables
involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del
ciclo.
Lazos Repetir
La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera.
Repetir
<instrucciones>
Hasta Que <condición>
Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y
luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a
evaluar la condición. Esto se repite hasta que la condición sea verdadera.
Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al
menos una vez.
Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o
las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se
finalice la ejecución del ciclo.
Lazos Para
Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones
que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el
valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere
a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1.
Operadores y Funciones
Este pseudolenguaje dispone de un conjunto básico de operadores y funciones que pueden ser utilizados para
la construcción de expresiones más o menos complejas.
Las siguientes tablas exhiben la totalidad de los operadores de este lenguaje reducido:
Relacionales
Lógicos
Algebraicos
% ó MOD Módulo (resto de la división entera) resto <- num MOD div
La jerarquía de los operadores matemáticos es igual a la del álgebra, aunque puede alterarse mediante el uso
de paréntesis.
Función Significado
SEN(X) Seno de X
COS(X) Coseno de X
ATAN(X) Arcotangente de X
Notese que no puede haber instrucciones fuera del programa, aunque si comentarios.
Las estructuras no secuenciales pueden anidarse. Es decir, pueden contener otras adentro, pero
la estructura contenida debe comenzar y finalizar dentro de la contenedora.
Los identificadores, o nombres de variables, deben constar sólo de letras y números, comenzando
siempre con una letra, y no pueden ser palabras reservadas (como para, mientras, y, no, etc...)
Proceso Suma
C <- A+B
// finalmente, se muestra el resultado, precedido de un
// mensaje para avisar al usuario, todo en una sola
// instrucción Escribir
FinProceso
Subprocesos: Ejemplo básico que ilustra la sintaxis para declarar nuevas funciones
en pseudocódigo.
// funcion que no recibe ni devuelve nada
SubProceso Saludar
Escribir "Hola mundo!"
FinSubProceso
// funcion que recibe un argumento por valor, y
devuelve su doble
SubProceso res <- CalcularDoble(num)
res <- num*2 // retorna el doble
FinSubProceso
// funcion que recibe un argumento por referencia, y lo
modifica
SubProceso Triplicar(num por referencia)
num <- num*3 // modifica la variable duplicando su
valor
FinSubProceso
// proceso principal, que invoca a las funciones antes
declaradas
Proceso PruebaFunciones
Escribir "Llamada a la funcion Saludar:"
Saludar // como no recibe argumentos pueden
omitirse los paréntesis vacios
Escribir "Ingrese un valor numérico para x:"
Leer x
Escribir "Llamada a la función CalcularDoble
(pasaje por valor)"
Escribir "El doble de ",x," es ", CalcularDoble(x)
Escribir "El valor original de x es ",x
Escribir "Llamada a la función Triplicar (pasaje
por referencia)"
Triplicar(x)
Escribir "El nuevo valor de x es ", x
FinProceso
OrdenaLista: Este ejemplo almacena una lista de nombres en un arreglo y luego los
ordena alfabéticamente. El método 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 ingresarán
// 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]
Escribir "Ingrese los nombres (enter en blanco para
terminar):"
// 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
// mostrar como queda la lista
Escribir "La lista ordenada es:"
Para i<-1 Hasta cant Hacer
Escribir " ",lista[i]
FinPara
FinProceso
Resolvente: Utiliza la fórmula resolvente para determinar las raíces de una ecuación
de segundo grado a partir de sus tres coeficientes, y las informa adecuadamente
según su tipo (reales iguales, reales distintas, imaginarias)
// calcula las raices de una ecuacion de segundo grado
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
// determinar si son reales o imaginarias
disc <- b^2-4*a*c
Si disc<0 Entonces
// si son imaginarias
preal<- (-b)/(2*a)
pimag<- rc(-disc)/(2*a)
Escribir "Raiz 1: ",preal,"+",pimag,"i"
Escribir "Raiz 2: ",preal,"-",pimag,"i"
Sino
Si disc=0 Entonces // ver si son iguales o
distintas
r <- (-b)/(2*a)
Escribir "Raiz 1 = Raiz 2: ",r
Sino
r1 <- ((-b)+rc(disc))/(2*a)
r2 <- ((-b)-rc(disc))/(2*a)
Escribir "Raiz 1: ",r1
Escribir "Raiz 2: ",r2
FinSi
FinSi
FinProceso
Cadenas: Muestra la utilización de las funciones de cadenas para contar las vocales
de una frase
// Este ejemplo muestra como utilizar las funciones
para manejo
// de cadenas de caracteres. Requiere que el perfil de
lenguaje
// habilite estas funciones. Si al intentar ejecutar
obtiene
// errores en las funciones, revise su configuración en
el
// item "Opciones del lenguaje" del menú "Configurar".
Proceso sin_titulo
// el usuario ingresa una frase, vamos a contar
cuantas vocales tiene
Escribir "Ingrese una frase"
Leer frase
// pasamos toda la frase a minusculas para no tener
que preguntar 2 veces por cada vocal
frase<-Minusculas(frase)
// lista de letras que vamos a buscar
Vocales<-"aeiouáéíóúü"
cantvocales<-0
// 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
Escribir "La frase contiene ",cantVocales,"
vocales."
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
Mientras ~ Terminado hacer
// 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 " "
Si ~ Ganador y CantTurnos<9 Entonces
// carga auxiliares segun a qué jugador le
toca
Si TurnoJugador1 Entonces
Ficha<-'O'; Valor<- 1; Objetivo<-1
Escribir "Turno del jugador 1 (X)"
Sino
Ficha<-'X'; Valor<- 2; Objetivo<-8
Escribir "Turno del jugador 2 (O)"
FinSi
// pide la posición para colocar la ficha y
la valida
Escribir "Ingrese la Posición (1-9):"
Repetir
Leer Pos
Si Pos<1 o Pos>9 Entonces
Escribir "Posición 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 "Posición 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
// verifica si ganó, buscando que el
producto de las fichas en el tablero de Objetivo
aux_d1<-1; aux_d2<-1
Para i<-1 hasta 3 hacer
aux_i<-1; aux_j<-1
aux_d1<-aux_d1*Tab1[i,i]
aux_d2<-aux_d2*Tab1[i,4-i]
Para j<-1 hasta 3 hacer
aux_i<-aux_i*Tab1[i,j]
aux_j<-aux_j*Tab1[j,i]
FinPara
Si aux_i=Objetivo o aux_j=Objetivo
Entonces
Ganador<-Verdadero
FinSi
FinPara
Si aux_d1=Objetivo o aux_d2=Objetivo
Entonces
Ganador<-Verdadero
Sino
TurnoJugador1 <- ~ TurnoJugador1
FinSi
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