PSINT Pseudocódigo
PSINT Pseudocódigo
Introduccin Uno de las mayores dificultades con las que se encuentran los hispanoparlantes que empiezan a programar es el idioma. Por una parte, la mayora de lenguajes de programacin se basan en el ingls, por lo que un estudiante de habla hispana tiene que aprender que "write" o "print" son las palabras equivalentes a "escribir". Adems, la mayora de lenguajes tienen rdenes que realmente son abreviaturas de una o varias palabras inglesas, de modo que el aprendiz tiene que entender o memorizar palabras como "printf" o "writeln" incluso para realizar las tareas ms sencillas. Para colmo, la mayora de entornos de programacin estn tambin en ingls (mens, mensajes de error y aviso, etc). Por eso, una herramienta habitual para ayudar a los que empiezan es el "Pseudocdigo", algo as como un falso lenguaje de programacin en espaol, que permite asimilar con ms facilidad las ideas bsicas. El pseudocdigo soluciona el primer problema: no hace falta aprender otros idiomas para entender los conceptos bsicos. Pero "histricamente" no solucionaba el problema del "entorno de programacin": no existan entornos para programar en pseudocdigo, as que tpicamente ha sido una herramienta para usar "con lapiz y papel". Algunas universidades han creado sus propios "intrpretes de pseudocdigo", para ayudar a los alumnos de primer curso a crear los programas "pensando en espaol", pero permitindoles adems probar esos programas desde un entorno "casi real". En cuanto a estos "intrpretes de pseudocdigo", que permiten teclear nuestro programa y ver cual sera el resultado, hay uno que me parece especialmente bueno: PSEINT, que adems realza con colores la sintaxis de nuestros programas para ayudar a detectar errores, tiene autocompletado para permitir ganar tiempo, est disponible para Windows y Linux, es
gratuito (1), etc. ste es el que usaremos en este curso introductorio. Eso s, no existe un estndar claro en cuanto a pseudocdigo, puede que la sintaxis que empleen en tu universidad o centro de estudios sea ligeramente diferente a la que veremos aqu. Aun as, esperamos poder ayudarte a coger con facilidad las nociones bsicas. (1) PSEINT realmente es "de cdigo abierto": cualquiera puede ver cmo est creado, de forma que incluso si su autor perdiera el inters por el proyecto, otras personas podran retomarlo, lo que le garantiza una vida mucho mayor. PSEINT se puede descargar desde
http://pseint.sourceforge.net/
2-Toma de contacto
Vamos a empezar por lo ms sencillo: escribir en pantalla. Si queremos crear un programa que escriba algo en pantalla, usaremos la orden ESCRIBIR. A continuacin de esta palabras, entre comillas, escribiremos el texto que queremos que aparezca en pantalla.
Escribir "Hola"
Crear un programa que escriba Hola en la pantalla usando PSEINT tambin es igual de simple. En el caso de PSEINT, cada programa debe encerrarse entre las palabras "Proceso" (para indicar dnde comienza) y "FinProceso" (para sealar dnde termina). Pero eso no aade ninguna dificultad, porque cuando entramos a PSEINT, ese esqueleto de programa ya aparece escrito:
Nuestro programa debera tener un nombre: se nos propone que se llame "sin_titulo", pero mejor podemos hacer clic en esa palabra y escribir otro ttulo que recuerde mejor lo que va a hacer nuestro programa. De momento, bastar con "Ejemplo001", por eso de que es nuestro primer ejemplo. Despus, bajamos a la siguiente lnea y comenzamos a teclear la palabra "Escribir". Veremos que PSEINT se da cuenta, y nos recuerda cmo era la orden exacta, incluso cuando apenas llevamos unas pocas letras :
Cuando terminamos la palabra "Escribir", se nos propone que escribamos una o ms expresiones, separadas por comas; en nuestro caso, ser la palabra "Hola", entre comillas:
Nuestro programa est completo: podemos comprobar su funcionamiento pulsando el botn que recuerda al "Play" de los equipos de msica:
Y entonces aparecer una nueva ventana que nos muestra el resultado de nuestro programa (por supuesto, se trata de la palabra Hola):
Por supuesto, no slo podemos escribir textos prefijados. Podemos usar nuestro ordenador como calculadora, que nos muestre el resultado de una operacin aritmtica:
Proceso Ejemplo002 Escribir 20+30 FinProceso
Y como despedida por hoy, vamos a hacer algo un poco ms complejo: vamos a sumar dos nmeros que no estn prefijados dentro del programa, sino que deber teclear el usuario. Para eso, usaremos la orden "Leer", que nos permite leer lo que el usuario teclee y dejarlo guardado para utilizarlo despus. Debemos dar un nombre temporal a estos datos que leemos del usuario. Parece razonable que el primer nmero que teclee el usuario se llame algo como "primerNumero", y el segundo sea algo como "segundoNumero". El resultado que queremos obtener ser la suma de ese primer nmero y ese segundo nmero, as que nuestro programa podra quedar as:
Proceso Ejemplo003 Escribir "Dime un numero" Leer primerNumero
Escribir "Dime otro numero" Leer segundoNumero Escribir "Su suma es ", primerNumero + segundoNumero FinProceso
En la prxima entrega puntualizaremos un poco ms lo que hemos hecho en este ltimo programa y veremos cmo comprobar condiciones. Eso ser dentro de una semana...
Esas dos palabras, "primerNumero" y "segundoNumero" representan a nmeros que no tienen un valor prefijado. Eso es lo que llamaremos "variables". En las variantes de pseudocdigo que emplean en muchas universidades y centros de estudio (ya habamos avisado de que no existe ningn estndar totalmente asentado) debemos "declarar las variables" antes de usarlas: decir qu tipo de dato es el que querremos representar con ese nombre. En nuestro ejemplo anterior se trataba de dos nmeros enteros, as que el programa sera:
Proceso Ejemplo003b Variable primerNumero: Entero Variable segundoNumero: Entero
Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero Escribir "Su suma es ", primerNumero + segundoNumero FinProceso
Esto se debe a que en la mayora de lenguajes de programacin "reales" es necesario detallar qu tipo de datos querremos guardar en cada variable, para que la herramienta de programacin sepa exactamente qu cantidad de memoria ser necesaria para guardar ese dato. Insisto: no es el caso de PSEINT; con esta herramienta no es necesario declarar las variables, el propio entorno presupone de qu estamos hablando.
Por otra parte, no siempre querremos que el valor de una variable lo introduzca el usuario. Habr veces que seamos nosotros mismos los que demos el valor inicial a una variable desde nuestro programa, bien para usarlo en una serie de clculos posteriores, o bien por legibilidad (es ms fcil entender algo como "longitudCircunferencia = 2 * pi * radio" que algo como "longitudCircunferencia = 6.28 * radio". La forma de dar un valor a una variable es con la secuencia de smbolos "<-":
radio <- 3 longitudCircunferencia <- 2 * pi * radio
(esos smbolos representan una flecha, para indicar que el valor 3 se va a guardar en el espacio de memoria reservado para la variable llamada "radio").
Y qu ocurre si usamos una variable sin haberle dado valor? Esto pasa a veces por despiste, si tecleamos mal el nombre de una variable, como en este fragmento de programa:
primerNumero <- 2 Escribir primerNmero
Si lees ese fragmento con cuidado, vers que el nombre de la variable que aparece en la segunda lnea es incorrecto, falta la letra "u". Qu sucede en ese caso? En algunos lenguajes (pocos, afortunadamente) se da por sentado que es una variable nueva, y se le da el valor 0; en el caso de PseInt, igual que en la mayora de lenguajes actuales, obtendremos un mensaje de error que nos dir que estamos usando una variable que no tena valor.
El bloque "Si No" es opcional: podemos optar por no indicar lo que queremos que se haga cuando no se cumpla la condicin. Para ayudarnos a planificar el comportamiento de una secuencia de instrucciones, se suele usar como ayuda los llamados "diagramas de flujo". En estos diagramas, una condicin se representa como un rombo, del que salen dos flechas: una para la secuencia de acciones a realizar si se cumple la condicin y otra para cuando no se cumple:
As, si en PSeInt hacemos clic en el icono de la parte derecha que representa la condicin SI, aparece un esqueleto de programa casi completo, para que hagamos los cambios que nos interesen:
Slo tenemos que escribir la condicin que realmente nos interesa, y la serie de pasos a dar si se cumple y si no se cumple, de modo que nuestro programa podra quedar as:
Proceso Ejemplo004 Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero Si primerNumero > segundoNumero Entonces Escribir "El primero es mayor" Sino
En ese ejemplo hemos comparado si un valor es mayor que el otro (>). Los operadores de comparacin que tenemos disponibles son: Operador relacional > < = <= >= Significado Mayor que Menor que Igual que Menor o igual que Mayor o igual que Ejemplo 3>2 'ABC'<'abc' 4=3 'a'<='b' 4>=5
Tambin podemos comprobar varias condiciones a la vez, para hacer construcciones como: "si a es mayor que b y b es mayor que c", o como "si a es igual a 1 o b es igual a 1". Los operadores lgicos que de los que disponemos son:
El bloque "De Otro Modo" es opcional: si detallamos todos los valores posibles, no sera necesario utilizarlo.
El nmero de valores que podemos probar es indefinido: no tiene por qu ser 3, sino que pueden ser menos casos o muchos ms. Segn la variante de pseudocdigo (o el lenguaje de programacin) que empleemos, puede haber restricciones en el tipo de datos que es aceptable. Por ejemplo, en el caso de PseInt, la variable tiene que tener un valor numrico, no puede ser un texto. Al igual que ocurra con la orden SI, existe un smbolo que podemos usar en los diagramas de flujo para ayudarmos a planificar nuestro programa (aunqe este smbolo est menos extendido que el de SI):
As, si en PseInt hacemos clic en el icono de la parte derecha que representa la condicin SI, aparece un esqueleto de programa casi completo, para que hagamos los cambios que nos interesen:
Slo tenemos que escribir la condicin que realmente nos interesa, y la serie de pasos a dar si se cumple y si no se cumple, de modo que nuestro programa podra quedar as:
Proceso EjemploCasos Escribir "Introduzca la nota"; Leer nota;
Segun nota Hacer 10: Escribir 9: Escribir 8: Escribir 7: Escribir 6: Escribir 5: Escribir De Otro Modo: Escribir FinSegun FinProceso
"Ha obtenido un sobresaliente alto"; "Ha obtenido un sobresaliente bajo"; "Ha obtenido un notable alto"; "Ha obtenido un notable bajo"; "Ha obtenido un aprobado alto"; "Ha obtenido un aprobado"; "Ha suspendido";
Pero no siempre habr que comprobar condiciones una nica vez. Es muy frecuente que haya que hacerlo de forma repetitiva. Por ejemplo, "pedir una contrasea al usuario hasta que sea la correcta", o an ms cercano al mundo real, "pedir una contrasea al usuario hasta que
6 - Condiciones repetitivas
Habitualmente, una condicin se deber comprobar ms de una vez. Por ejemplo, una condicin de error puede repetirse: el usuario que introduce mal una contrasea por primera vez puede equivocarse en una segunda ocasin. Por eso, igual que cualquier lenguaje de programacin tiene una orden "si", la gran mayora de ellos tendr una orden "mientras", que permite que un fragmento de un programa se repita mientras una cierta condicin se siga cumpliendo (por ejemplo, mientras la contrasea que teclee el usuario sea incorrecta, el usuario deber volver a introducirla). Tambin existe un smbolo habitual en los diagramas de flujo para representar este tipo de condiciones repetitivas, en las que si se cumple la condicin, se realiza una serie de acciones y se vuelve a comprobar la condicin, y as sucesivamente hasta que la condicion no se cumpla:
Por ejemplo, un programa capaz de sumar muchos nmeros, todos los que el usuario quisiera, y en el que hubiera que escribir "0" para indicar que queremos terminar, podra ser as:
Proceso Mientras01 Escribir "Dime un numero"; Leer x; suma <- 0; Mientras x <> 0 Hacer suma <- suma + x; Escribir "Hasta ahora, la suma es ", suma; Escribir "Dime otro numero"; Leer x; FinMientras Escribir "Terminado"; FinProceso
compruebe despus de dar ciertos pasos. Esa estructura es "repetir... hasta": Su representacin en un diagrama de flujo sera:
Por ejemplo, un programa que pida al usuario una clave de acceso, y que no le permita seguir hasta que la introduzca correctamente, se podra hacer as:
Proceso Repetir01 Repetir Escribir "Dime tu clave de acceso"; Leer clave; Si clave <> 1234 Entonces Escribir "Clave incorrecta"; FinSi Hasta Que clave=1234 Escribir "Bienvenido!"; FinProceso
Queda otra forma de repetir fragmentos de programa. Pronto estaremos con ella...
pantalla existe una orden ms cmoda que la orden "mientras" o la orden "repetir... hasta".Es la orden "para", que hace que una variable tome una serie de valores que se van incrementando. Por ejemplo, una estructura como "para x con valores desde 2 hasta 4" hara que un bloque de programa se repitiera 3 veces. En la primera repeticin, la variable "x" tendra el valor 2, en la segunda tendra el valor 3 y en la tercera tendra el valor 4. La sintaxis exacta en PseInt es: "Para variable <- valorInicial Hasta valorFinal Hacer" Su representacin en un diagrama de flujo sera:
Por ejemplo, un programa que mostrara los nmeros del 1 al 10, podra ser:
Proceso Para01 Para x <- 1 Hasta 10 Hacer Escribir x; FinPara FinProceso
Y obtendramos:
Hemos visto casi todas las construcciones que podremos encontrar en los lenguajes de programacin convencionales (y, por tanto, al planificarlos usando pseudocdigo). En la prxima entrega veremos alguna otra posibilidad, como el manejo de matrices y las funciones matemticas, para pasar despus a algunos ejemplos completos.
9 - Matrices.
Cuando necesitamos manejar muchos datos, generalmente hay soluciones ms efectivas que tener muchas variables. Por ejemplo, si hay que guardar 100 nmeros, suele ser ms eficiente almacenar esos 100 datos "juntos", formando una "matriz", en vez de usar 100 variables distintas. La palabra "matriz" es una traduccin del ingls "array". Algunos autores lo traducen alternativamente como tabla, vector o incluso "arreglo". Normalmente, en una matriz podremos acceder individualmente a cada uno de sus elementos usando corchetes: el primer dato sera algo como "dato[1]".
Vamos a ver un ejemplo que nos pida 6 datos y luego los muestre en orden contrario al que se han introducido:
Proceso MostrarAlReves Dimension datos[6] Para i <- 1 Hasta 6 Hacer Escribir "Dime el dato numero ", i Leer datos[i] FinPara Escribir "Los datos al reves son: " Para i <- 6 Hasta 1 Con Paso -1 Hacer Escribir datos[i] FinPara FinProceso
11 - Ejercicios resueltos
a) Enunciados 1.- Crear un algoritmo que escriba "Hola" cinco veces.
2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o cero. 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma. 4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo (tantas veces como sea necesario). 5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario. Por ejemplo, si el usuario introduce 4 como tamao y * como smbolo, deber escribirse algo como:
2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o cero.
// 2.- Crear un algoritmo que pida al usuario un numero y le diga si es positivo, negativo o cero. Proceso Resuelto02 Escribir "Dime un numero"; Leer x; Si x > 0 Entonces Escribir "Es positivo"; Sino Si x < 0 Entonces Escribir "Es negativo"; Sino Escribir "Es cero"; FinSi FinSi FinProceso
Leer x; suma <- suma + x; FinPara Escribir "Su suma es ", suma; FinProceso
4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo (tantas veces como sea necesario).
// // // // 4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo (tantas veces como sea necesario).
Proceso Resuelto04 Repetir Escribir "Dime un numero"; Leer x; Si x < 0 Entonces Escribir "No puede ser negativo"; FinSi Hasta Que x >= 0 Escribir "Su raiz es ", rc(x);
FinProceso
5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario. (No funcionar correctamente en versiones de PseInt anteriores a agosto de 2011)
// 5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, // y dibuje un cuadrado usando ese smbolo. El cuadrado tendr el tamao // que ha indicado el usuario. // No funciona con versiones de PseInt de antes de Agosto de 2011, // porque las versiones previas a la 20110801 no permiten escribir // sin avanzar de linea Proceso Resuelto05 Escribir "Dime el lado"; Leer lado; Escribir "Dime el simbolo de relleno"; Leer simbolo; Para fila<-1 Hasta lado Hacer Para columna <- 1 Hasta lado Hacer Escribir Sin Saltar simbolo ; // Escribir sin bajar de lnea FinPara Escribir ""; FinPara FinProceso // Avance de lnea tras cada fila
c) Ejemplos de soluciones con Python 1.- Crear un algoritmo que escriba "Hola" cinco veces.
# 1.- Crear un algoritmo que escriba "Hola" cinco veces. for x in range(1,6): print("Hola")
2.- Crear un algoritmo que pida al usuario un nmero y le diga si es positivo, negativo o cero.
# 2.- Crear un algoritmo que pida al usuario un numero y le diga si es positivo, negativo o cero. x = input ("Dime un numero ") if x > 0 : print ("Es positivo") elif x < 0 : print ("Es negativo") else : print ("Es cero")
4.- Crear un algoritmo que calcule la raz cuadrada del nmero que introduzca el usuario. Si se introduce un nmero negativo, debe mostrar un mensaje de error y volver a pedirlo (tantas veces como sea necesario).
# # # #
4.- Crear un algoritmo que calcule la raiz cuadrada del numero que introduzca el usuario. Si se introduce un numero negativo, debe mostrar un mensaje de error y volver a pedirlo (tantas veces como sea necesario).
from math import sqrt while True: x = input( "Dime un numero: " ) if x < 0: print ( "No puede ser negativo" ) else: print ( "Su raiz es {}".format( sqrt(x) ) ) break
5.- Crear un algoritmo que pida al usuario un nmero y un smbolo, y dibuje un cuadrado usando ese smbolo. El cuadrado tendr el tamao que ha indicado el usuario. Esta es la forma ms cercana a la de PseInt, con dos "for" anidados. Como el "smbolo" es texto, no podemos usar "input" para leerlo, o Python intentara interpretarlo como nmero; en su lugar, usaremos "raw_input":
# 5.- Crear un algoritmo que pida al usuario un numero y un simbolo, # y dibuje un cuadrado usando ese simbolo. El cuadrado tendra el tamanyo # que ha indicado el usuario. # Forma "general" lado = input( "Dime el lado: " ) simbolo = raw_input( "Dime el simbolo de relleno: " ) for fila in range( 1 , lado+1 ): textoFila = '' for columna in range( 1 , lado+1 ): textoFila += simbolo print( textoFila )
Y esta es una forma alternativa ms compacta, usando * para repetir una cadena de texto varias veces:
# 5.- Crear un algoritmo que pida al usuario un numero y un simbolo, # y dibuje un cuadrado usando ese simbolo. El cuadrado tendra el tamanyo # que ha indicado el usuario.
# Forma compacta lado = input( "Dime el lado: " ) simbolo = raw_input( "Dime el simbolo de relleno: " ) for fila in range( 1 , lado+1 ): textoFila = simbolo * lado print( textoFila )
ejercicos 1- sirve para intercambiar datos Proceso sin_titulo resp<-'s' mientras resp='S' o resp='s' Hacer Escribir 'INTERCAMBIA DATOS'; Escribir 'ingrese a'; Leer a; Escribir 'ingrese b'; Leer b; c<-a; a<-b; b<-c; Escribir 'a',a; Escribir 'b',b; escribir 'este programa fue escrito por 5748'; Escribir 'Desea calcular otro triangulo? (S/N)' Leer resp FinMientras FinProceso 2----------------diferencia entre 3 figuras Proceso qe_figura_es resp<-'s' mientras resp='S' o resp='s' Hacer Escribir 'ingrese los tres lados'; Leer a,b,c; Si a=b y a=c Entonces Escribir 'es un equilatero'; Sino Si a=b o b=c o a=c Entonces Escribir 'es un isoceles'; Sino Escribir 'es un escaleno'; FinSi
FinSi Escribir 'Desea ingresar otros valores? (S/N)' Leer resp FinMientras FinProceso
4-------- par impar negativo o positivo los distinge Proceso sin_titulo resp<-'s' mientras resp='S' o resp='s' Hacer Escribir "ingrese un valor"; Leer n; Si n>0 Entonces Escribir "ES POSITIVO"; Sino Si n<0 Entonces Escribir "ES NEGATIVO"; Sino //el cero no puede ser par o impar megativo o positivo Escribir "ES CERO"; FinSi FinSi Si n<>0 Entonces r<-n mod 2; Si r=0 Entonces Escribir "es par"; Sino Escribir "es impar"; FinSi Sino Escribir "es nulo"; FinSi escribir 'Desea comprobar con otro dato? (S/N)' Leer resp FinMientras FinProceso 5---------el promedio y nombre Proceso Promedio Escribir 'Ingrese su nombre: '; Leer nombre;
materia<-1; total<-0; Repetir Escribir 'Ingrese la nota de la ',materia, ' materia: '; Leer nota; total<-total+nota; materia<-materia+1; Hasta Que materia>7 promedio<-total/7; Escribir 'El promedio del alumno ',nombre, ' es: ',promedio; FinProceso o---.. Proceso notas Escribir 'ingrese las nota'; Leer a,b,c; d<-(a+b+c)/3; Si d>=19 Entonces Escribir 'sobresaliente'; Sino Si d>=16 Entonces Escribir 'muy buena'; Sino Si d>=13 Entonces Escribir 'buena';Sino Si d>=10 Entonces Escribir 'regular'; Sino Si d>=0 Entonces Escribir 'es insuficiente'; Sino Escribir 'la nota no es valida'; FinSi FinSi FinSi FinSi FinSi FinProceso 6--------pitagoras Proceso sin_titulo
resp<-'s' mientras resp='S' o resp='s' Hacer Escribir 'teorema de pitagoras'; Escribir 'ingrese los datos de los catetos'; Escribir 'ingrese el primer cateto a'; Leer a; Escribir 'ingrese el segundo cateto b'; Leer b; c<-(rc(a^2+b^2)) Escribir 'la hipotenusa es:',c; //esta codificacion permite desidir si ingresa o no otros datos S"si" y N"no" Escribir 'Desea ingresar otros valores? (S/N)' Leer resp FinMientras FinProceso
7----EL AREA DE UN TRIANGULO'; Proceso sin_titulo resp<-'s' mientras resp='S' o resp='s' Hacer Escribir 'EL AREA DE UN TRIANGULO'; Escribir 'ingrese el valor de la altura:'; leer altura; escribir 'ingrese el valor de la base:'; leer base; si (altura>3) Entonces a<-(base*altura)/2; escribir 'resultado:',a; sino a<-(base*altura)/2; escribir 'resultado:',a; FinSi escribir 'este programa fue escrito por 5748'; Escribir 'Desea calcular otro triangulo? (S/N)' Leer resp FinMientras FinProceso 8----transform los seg a horas min y segu Proceso Programa resp<-'s' mientras resp='S' o resp='s' Hacer
Escribir "Ingrese la hora en segundos:"; Leer n; segundos<-n MOD 60; minutos<-n/60; horas<-minutos/60; minutos<-minutos MOD 60; Escribir "Valor de horas: ", horas; Escribir "Valor de minutos: ", minutos; Escribir "Valor de segundos: ", segundos; Escribir 'Desea ingresar otros valores? (S/N)' Leer resp FinMientras FinProceso
9----te dice si un alo es bisiesto o no Proceso diagrama6 Escribir 'es o no bisiesto'; Escribir 'ingrese el ao'; Leer a; Si a mod 4=0 Entonces Si a mod 100=0 Entonces Si a mod 400=0 Entonces Escribir 'es bisiesto';Sino Escribir 'no es bisiesto'; FinSi Sino Escribir 'no es bisiesto'; FinSi Sino Escribir 'no es bisiesto'; FinSi FinProceso