Introducción a la programación Pseudocódigo
1 - Introducción Una de las mayores dificultades con las que se encuentran los hispanoparlantes que empiezan a programar es el idioma. Por una parte, la mayoría de lenguajes de programación se basan en el inglés, por lo que un estudiante de habla hispana tiene que aprender que "rite" o "print" son las palabras equi!alentes a "escribir". dem#s, la mayoría de lenguajes lenguajes tienen órdenes que que realmente son abre!iaturas de una o !arias palabras inglesas, de modo que el aprendiz tiene que entender o memorizar palabras como "printf" o "riteln" incluso para realizar las tareas m#s sencillas. Para colmo, la mayoría de entornos de programación est#n también en inglés $men%s, mensajes de error y a!iso, etc&. Por eso, una herramienta habitual para ayudar a los que empiezan es el "Pseudocódigo", algo así como un falso lenguaje de programación en espa'ol, que ayuda a asimilar con m#s facilidad las ideas b#sicas. (l pseudocódigo soluciona el primer problema) no hace falta aprender inglés para entender los conceptos b#sicos. Pero "históricamente" no solucionaba el problema del "entorno de programación") no e*istían entornos para programar en pseudocódigo, así que típicamente ha sido una herramienta para usar "con lapiz y papel". lgunas uni!ersidades uni!ersidades han creado sus propios propios "intérpretes de pseudocódigo", pseudocódigo",
para ayudar a los alumnos de primer curso a crear los programas "pensando en espa'ol", pero permitiéndoles adem#s probar esos programas desde un entorno "casi real". (*isten !arios de estos "intérpretes de pseudocódigo", que permiten teclear nuestro programa y !er cual sería el resultado, pero hay uno que me parece especialmente bueno) P+(-, P+(-, que adem#s realza con colores la l a sinta*is de nuestros programas para ayudar a detectar errores, tiene autocompletado para permitir ganar tiempo, est# disponible para /indos / indos y 0inu*, es gratuito $1&, etc. 2ste es el que usaremos en este curso introductorio. (so sí, no e*iste un est#ndar claro en cuanto a pseudocódigo, puede que la sinta*is que empleen en tu uni!ersidad o centro de estudios sea ligeramente diferente a la que !eremos aquí. un así, esperamos poder ayudarte a coger con facilidad las nociones b#sicas. $1& P+(- realmente es "de código abierto") cualquiera puede !er cómo est# creado, de forma que incluso si su autor perdiera el interés por el proyecto, otras personas podrían retomarlo, lo que le garantiza una !ida mucho mayor.
P+(- se puede descargar desde http)33pseint.sourceforge.net3
¿Y si me atrevo con el inglés? Psent es una herramienta %til y que, tras un perídodo de aparente abandono, ha sido retomada por su autor original, quien le ha a'adido nue!as posibilidades que la modernizan. +i aun así quieres llegar m#s all# y no te asusta el inglés, bien porque lo conozcas o bien porque estés dispuesto a aprender 45 palabras, est#s de suerte) el pseudocódigo en inglés se parece a !arios lenguajes de programación, así que podrías aprender los conceptos b#sicos usando "entornos reales".
Posiblemente Pascal sería el lenguaje que m#s se parecería al pseudocódigo pseudocódigo,, y por eso durante mucho tiempo se ha considerado un lenguaje muy adecuado para aprender, pero hoy en día est# un tanto anticuado. Una alternati!a m#s moderna es Python, bien dise'ado y que est# disponible para muchos sistemas operati!os. +i quieres aprender cualquier de ellos dos, en mi eb podr#s encontrar cursos de ambos) tanto de Python Pythoncomo como Pascal Pascal..
2 - Toma Toma de contact contacto o 6amos 6a mos a empezar por lo m#s sencillo) escribir en pantalla. +i queremos crear un programa que escriba algo en pantalla, usaremos la orden (+7898. continuación continuación de esta palabras, entre comillas, escribiremos el te*to que queremos que aparezca en pantalla. Escribir "Hola"
7rear un programa que escriba :ola en la pantalla usando P+(- también es igual de simple. (n el caso de P+(-, cada programa debe encerrarse entre las palabras "Proceso" $para indicar dónde comienza& y ";inProceso" $para se'alar dónde termina&. Pero eso no a'ade ninguna dificultad, porque cuando entramos a P+(-, ese ese esqueleto de programa ya aparece escrito)
-uestro programa debería tener un nombre) se nos propone que se llame "sin
7uando terminamos la palabra "(scribir", se nos propone que escribamos una o m#s e*presiones, separadas por comas> en nuestro caso, ser# la palabra ":ola", entre comillas)
-uestro programa est# completo) podemos comprobar su funcionamiento pulsando el botón que recuerda al "Play " de los equipos de m%sica)
? entonces aparecer# una nue!a !entana que nos muestra el resultado de nuestro programa $por supuesto, se trata de la palabra :ola&)
Por supuesto, no sólo podemos escribir te*tos prefijados. Podemos usar nuestro ordenador como calculadora, que nos muestre el resultado de una operación aritmética) Proceso Ejemplo002 Escribir 20+30 FinProceso
ambién podemos incluir comentarios, aclaraciones, que nos ayuden a e*plicar la lógica del programa o cualquier detalle que no sea e!idente. (n el caso de Psent, cualquier línea que comience con una doble barra $33& se considerar# un comentario y no se tendr# en cuenta en el momento de analizar nuestro programa) // Ejemplo de comentario en un fuente de PseInt
(n el pró*imo apartado puntualizaremos un poco m#s lo que hemos hecho en este %ltimo programa y poco después !eremos cómo comprobar condiciones. Ejercicio de repaso propuesto 2.1: 7rea un programa que escriba "7omienzo
a aprender"
Ejercicio de repaso propuesto 2.2: 7rea un programa que escriba el
resultado de multiplicar 1@4 por 14A $pista) el símbolo de la multiplicación normalmente ser# el "asterisco"&
3 - aria!les 6amos a hacer algo un poco m#s complejo) !amos a sumar dos n%meros que no estén prefijados dentro del programa, sino que deber# teclear el usuario. Para eso, usaremos la orden "0eer", que nos permite leer lo que el usuario teclee y dejarlo guardado para utilizarlo después. =ebemos dar un nombre temporal a estos datos que leemos del usuario. Parece razonable que el primer n %mero que teclee el usuario se llame algo como " primer-umero", y el segundo sea algo como "segundo-umero ". (l resultado que queremos obtener ser# la suma de ese primer n%mero y ese segundo n%mero, así que nuestro programa podría quedar así) Proceso Ejemplo003 Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero Escribir "Su suma es " primerNumero + segundoNumero FinProceso
(sas dos palabras, "primer-umero" y "segundo-umero" representan a n%meros que no tienen un !alor prefijado. (so es lo que llamaremos "varia!les". (n las !ariantes de pseudocódigo que emplean en muchas uni!ersidades y centros de estudio $ya habíamos a!isado de que no e*iste ning%n est#ndar totalmente asentado& debemos " declarar las !ariables" antes de usarlas) decir qué tipo de dato es el que querremos representar con ese nombre. (n nuestro ejemplo anterior se trataba de dos n%meros enteros, así que el programa sería) Proceso Ejemplo003!
Definir primerNumero como Entero Definir segundoNumero como Entero
Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero Escribir "Su suma es " primerNumero + segundoNumero FinProceso
(sto se debe a que en la mayoría de lenguajes de programación "reales" es necesario detallar qué tipo de datos querremos guardar en cada !ariable, para que la herramienta de programación sepa e*actamente qué cantidad de memoria ser# necesaria para guardar ese dato. nsisto) no es el caso de P+(-> con esta herramienta no es necesario declarar las !ariables, el propio entorno presupone de qué estamos hablando.
Por otra parte, no siempre querremos que el !alor de una !ariable lo introduzca el usuario. :abr# !eces que seamos nosotros mismos los que demos el !alor inicial a una !ariable desde nuestro programa, bien para usarlo en una serie de c#lculos posteriores, o bien por legibilidad $es m#s f#cil entender algo como "longitud7ircunferencia B @ C pi C radio" que algo como "longitud7ircunferencia B D.@E C radio". 0a forma de dar un !alor a una !ariable es con la secuencia de símbolos "FG") radio # 3 longitud$ircunferencia # 2 % pi % radio
$esos símbolos representan una flecha, para indicar que el !alor 4 se !a a guardar en el espacio de memoria reser!ado para la !ariable llamada "radio"&.
H? qué ocurre si usamos una !ariable sin haberle dado !alorI (sto pasa a !eces por despiste, si tecleamos mal el nombre de una !ariable, como en este fragmento de programa) primerNumero # 2 Escribir primerNmero
+i lees ese fragmento con cuidado, !er#s que el nombre de la !ariable que aparece en la segunda línea es incorrecto, falta la letra "u". HJué sucede en ese casoI (n algunos lenguajes $pocos, afortunadamente& se da por sentado que es una !ariable nue!a, y se le da el !alor 5> en el caso de Psent, igual que en la mayoría de lenguajes actuales, obtendremos un mensaje de error que nos dir# que estamos usando una !ariable que no tenía !alor. Ejercicio de repaso propuesto 3.1: 7rea un programa que escriba el
resultado de multiplicar los dos n%meros que introduzca el usuario Ejercicio de repaso propuesto 3.2: 7rea un programa que calcule la
superficie de un rect#ngulo a partir de su base y su altura, y que después muestre el !alor de dicha superficie. Ejercicio de repaso propuesto 3.3: 7rea un programa que calcule la
superficie de un círculo a partir de su radio $la fórmula es "P C r adio@"& y que después muestre el !alor de dicha superficie $pista) para calcular el cuadrado de un n%mero basta con multiplicar el n%mero por él mismo) * @B*C*&.
" - #ompro!ando condiciones $1: %i& (n casi cualquier secuencia de instrucciones para un ordenador, ser# !ital poder comprobar si se cumple alguna condició n. Una primera forma b#sica de comprobar condiciones es con la orden "+". +u uso b#sico sería Si condicion Entonces pasos_a_dar_si_es_verdadero Si No
pasos_a_dar_si_es_falso FinSi
(l bloque "+i -o" es opcional) podemos optar por no indicar lo que queremos que se haga cuando no se cumpla la condici ón. Para ayudarnos a planificar el comportamiento de una secuencia de instrucciones, se suele usar como ayuda los llamados "diagramas de flujo". (n estos diagramas, una condición se representa como un rombo, del que salen dos flechas) una para la secuencia de acciones a realizar si se cumple la condición y otra para cuando no se cumple)
sí, si en P+ent hacemos clic en el icono de la parte derecha que representa la condición +, aparece un esqueleto de programa casi completo, para que hagamos los cambios que nos interesen)
+ólo tenemos que escribir la condición que realmente nos interesa, y la serie de pasos a dar si se cumple y si no se cumple, de modo que nuestro programa podría quedar as í) Proceso Ejemplo00&
Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero
Si primerNumero ' segundoNumero Entonces
Escribir "El primero es ma(or" Sino Escribir "El segundo es ma(or" FinSi
FinProceso
+u resultado sería éste)
(n ese ejemplo hemos comparado si un !alor es mayor que el otro $ K&. 0os operadores de comparación que tenemos disponibles son) Operador relacional
Significado
Ejemplo
K
Layor que
4K@
F
Lenor que
"97"F"abc"
B
gual que
AB4
FB
Lenor o igual que
"a"FB"b"
KB
Layor o igual que
AKBM
Ejercicio de repaso propuesto ".1: 7rea un programa que pida un n%mero al
usuario y diga si es positi!o, negati!o o cero. ambién podemos comprobar !arias condiciones a la !ez, 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 ". 0os operadores lógicos que de los que disponemos son) Operador lógico
Significado
Ejemplo
Nó?
7onjunción $y&.
$OKA& N $@B1& 33falso
óQ
=isyunción $o&.
$1B1 @B1& 33!erdadero
R ó -Q
-egación $no&.
R$@FM& 33falso
Ejercicio de repaso propuesto ".2: 7rea un programa que pida un n%mero al
usuario dos n%meros y diga cu#ntos de ellos son positi!os. Ejercicio de repaso propuesto ".3: 7rea un programa que pida un n%mero al
usuario dos n%meros y muestre su di!isión si el segundo no es cero, o un mensaje de a!iso en caso contrario.
' - #ompro!ando condiciones $2: %egun& (s frecuente tener que comprobar m#s de una condició n a la !ez, o bien !arias condiciones consecuti!as. (n concreto, un caso espercialmente habitual es el de que una !ariable pueda tomar distintos. Por ejemplo, ciertas notas numéricas tienen " nombres" en espa'ol) un M es un aprobado, un S y un 15 son sobresaliente, etc. +i queremos hacer un programa que con!ierta de la nota numérica a su equi!alente escrito, podrí amos emplear !arias órdenes ;, una tras la otra. Pero en muchos lenguajes de programación $y por tanto,
también en muchas !ariantes de pseudocódigo& e*iste una alternati!a m #s compacta y m#s legible) la orden "+(TU-". (sta órden permite hacer unas cosas u otras seg%n el !alor que tome una !ariable. +u uso sería así) Segun variable Hacer valor1: pasos_a_dar_si_es_el_valor1 valor2: pasos_a_dar_si_es_el_valor2 valor3: pasos_a_dar_si_es_el_valor3 e !tro "odo: pasos_a_dar_si_es_otro_valor FinSegun
(l bloque "=e Qtro Lodo" es opcional) si detallamos todos los !alores posibles, no sería necesario utilizarlo. (l n%mero de !alores que podemos probar es indefinido) no tiene por qué ser 4, sino que pueden ser menos casos o muchos m#s. +eg%n la !ariante de pseudocódigo $o el lenguaje de programación& que empleemos, puede haber restricciones en el tipo de datos que es aceptable. Por ejemplo, en el caso de Psent, la !ariable tiene que tener un !alor numérico, no puede ser un te*to. l igual que ocurría con la orden +, e*iste un sí mbolo que podemos usar en los diagramas de flujo para ayudarmos a planificar nuestro programa $aunqe este símbolo est# menos e*tendido que el de +&)
sí, si en Psent hacemos clic en el icono de la parte derecha que representa la condición +, aparece un esqueleto de programa casi completo, para que hagamos los cambios que nos interesen)
+ólo tenemos que escribir la condición que realmente nos interesa, y la serie de pasos a dar si se cumple y si no se cumple, de modo que nuestro programa podría quedar as í) Proceso Ejemplo$asos Escribir "Introdu)ca la nota" * Leer nota* Segun nota Hacer
0,
Escribir "Ha o!tenido un so!resaliente alto" *
-, Escribir "Ha o!tenido un so!resaliente !ajo" *
., Escribir "Ha o!tenido un nota!le alto" *
, Escribir "Ha o!tenido un nota!le !ajo" *
, Escribir "Ha o!tenido un apro!ado alto" *
1, Escribir "Ha o!tenido un apro!ado" * De Otro Modo , Escribir "Ha suspendido"* FinSegun FinProceso
+u resultado sería éste)
Pero no siempre habr# que comprobar condiciones una %nica !ez. (s muy frecuente que haya que hacerlo de forma repetiti!a. Por ejemplo, "pedir una contrase'a al usuario hasta que sea la correcta", o a%n m#s cercano al mundo
real, "pedir una contrase'a al usuario hasta que sea la correcta o agote sus intentos". =e eso hablaremos en la pró*ima entrega. Ejercicio de repaso propuesto '.1: 7rea un programa que pida un n%mero al
usuario un n%mero de mes $por ejemplo, el A& y escriba el nombre del mes correspondiente $por ejemplo, "abril"&.
( - #ondiciones repetitivas $1: )ientras& :abitualmente, una condición se deber# comprobar m#s de una !ez. Por ejemplo, una condición de error puede repetirse) el usuario que introduce mal una contrase'a por primera !ez puede equi!ocarse en una segunda ocasión. Por eso, igual que cualquier lenguaje de programación tiene una orden "si", la gran mayoría de ellos tendr# una orden "mientras", que permite que un fragmento de un programa se repita mientras una cierta condición se siga cumpliendo $por ejemplo, mientras la contrase'a que teclee el usuario sea incorrecta, el usuario deber# !ol!er a introducirla&. ambién e*iste un símbolo habitual en los diagramas de flujo para representar este tipo de condiciones repetiti!as, en las que si se cumple la condición, se realiza una serie de acciones y se !uel!e a comprobar la condición, y así sucesi!amente hasta que la condición no se cumpla)
? en el caso de Psent, ese icono generaría un esqueleto de programa como éste)
Por ejemplo, un programa capaz de sumar muchos n%meros, todos los que el usuario quisiera, y en el que hubiera que escribir "5" para indicar que queremos terminar, podría ser así) Proceso ientras0 Escribir "Dime un numero"* Leer *
suma # 0* Mientras ' 0 Hacer
suma # suma + * Escribir "Hasta a4ora la suma es " suma* Escribir "Dime otro numero"* Leer * FinMientras Escribir "5erminado"* FinProceso
? su ejecución mostraría algo como)
:ay m#s formas de comprobar condiciones repetiti!as. Pronto las !eremos... Ejercicio de repaso propuesto (.1: 7rea un programa que genere dos
n%meros al azar entre el 5 y el 155, y pida al usuario que calcule e introduzca su suma. +i la respuesta no es correcta, deber# !ol!er a pedirla tantas !eces como sea necesario hasta que el usuario acierte. Pista) como !er#s en el apartado 15, para generar un n%mero al azar del 5 al 155 puedes hacer numero FG 8$151&
* - #ondiciones repetitivas $2: +epetir,asta& (s también muy frecuente que un bloque de programa que quiz # se repita, deba ejecutarse al menos una !ez. Por ejemplo, si queremos pedir un dato al usuario, quiz# e*ista alg% n error y haya que insistir, pero al menos deberemos pedí rselo una primera !ez.
(n estos casos, la estructura "mientras" no es la m #s adecuada) no podemos comprobar la condición al principio, sino después de haber pedir el !alor. (n estos casos $que son muy frecuentes&, sería m#s razonable usar otra estructura de programación en la que la condici ón se compruebe después de dar ciertos pasos. (sa estructura es "repetir... hasta") +u representación en un diagrama de flujo sería)
? en el caso de Psent, ese icono generaría un esqueleto de programa como éste)
Por ejemplo, un programa que pida al usuario una cla!e de acceso, y que no le permita seguir hasta que la introduzca correctamente, se podría hacer así) Proceso 6epetir0 Repetir Escribir "Dime tu cla7e de acceso" * Leer cla7e* Si cla7e ' 23& Entonces Escribir "$la7e incorrecta"* FinSi Hasta Que cla7e823& Escribir "9ien7enido:"* FinProceso
7uyo resultado sería)
Jueda otra forma de repetir fragmentos de programa. Pronto estaremos con ella...
- +epetir un cierto nmero de veces: Para (n muchas ocasiones, no querremos que algo se repita mientras se cumpla una condición, sino un cierto n%mero de !eces. Por ejemplo, para escribir ":ola" 4 !eces en pantalla e*iste una orden m#s cómoda que la orden "mientras" o la orden "repetir... hasta". (s la orden "para", que hace que una !ariable tome una serie de !alores que se !an incrementando. Por ejemplo, una estructura como "para * con !alores desde @ hasta A" haría que un bloque de programa se repitiera 4 !eces. (n la primera repetición, la !ariable "*" tendría el !alor @, en la segunda tendría el !alor 4 y en la tercera tendría el !alor A. 0a sinta*is e*acta en Psent es) " Para variable FG valorInicial :asta valorFinal :acer"
+u representación en un diagrama de flujo sería)
? en el caso de Psent, ese icono generaría un esqueleto de programa como éste)
Por ejemplo, un programa que mostrara los n%meros del 1 al 15, podría ser) Proceso Para0 Para # Hasta 0 Hacer
Escribir * FinPara FinProceso
7uyo resultado sería)
+i no queremos a!anzar de uno en uno, podemos indicar otro tama'o de "paso") Proceso Para02 Para # 0 Hasta 20 Con Paso 2 Hacer Escribir * FinPara FinProceso
? obtendríamos)
:emos !isto casi todas las construcciones que podremos encontrar en los lenguajes de programación con!encionales $y, por tanto, al planificarlos usando pseudocódigo&. (n la pró*ima entrega !eremos alguna otra posibilidad, como el manejo de matrices y las funciones matem#ticas, para pasar después a algunos ejemplos completos. Ejercicio de repaso propuesto .1: 7rea un programa que escriba los
m%ltiplos del 4, desde el 4 hasta el 45. Ejercicio de repaso propuesto .2: 7rea un programa que escriba los
n%meros del @5 al 15, descendiendo. Ejercicio de repaso propuesto .3: 7rea un programa que escriba la tabla de
multiplicar del M) desde "M * 5 B 5" hasta "M * 15 B M5"
/ - )atrices 7uando necesitamos manejar muchos datos, generalmente hay soluciones m#s efecti!as que tener muchas !ariables. Por ejemplo, si hay que guardar 155 n%meros, suele ser m#s eficiente almacenar esos 155 datos "juntos", formando una "matriz", en !ez de usar 155 !ariables distintas.
0a palabra "matriz" es una traducción del inglés "array". lgunos autores lo traducen alternati!amente como tabla, !ector o incluso "arreglo". -ormalmente, en una matriz podremos acceder indi!idualmente a cada uno de sus elementos usando corchetes) el primer dato ser ía algo como "datoV1W". 6amos a !er un ejemplo que nos pida D datos y luego los muestre en orden contrario al que se han introducido) Proceso ostrar;l6e7es
Dimension datos<=
Para i # Hasta Hacer Escribir "Dime el dato numero " i Leer datos
Escribir ">os datos al re7es son, " Para i # Hasta Con Paso # Hacer Escribir datos
FinProceso
Jue mostraría algo como)
$:aremos ejemplos m#s a!anzados como parte de los ejercicios& Ejercicio de repaso propuesto /.1: 7rea un programa que pida un n%mero al
usuario un n%mero de mes $por ejemplo, el A& y diga cu#ntos días tiene $por ejemplo, 45&. =ebes usar una matriz.
10 - unciones matemticas. 7asi cualquier lenguaje de programación tiene incorporadas ciertas funciones matem#ticas, de modo que nos permita calcular raíces cuadradas, logaritmos, senos y cosenos, etc. 0o mismo ocurre en muchas !ariantes de pseudocódigo. Por ejemplo, Psent incluye las siguientes funciones matem#ticas)
Función
Significado
87$X&
8aíz 7uadrada de X
9+$X&
6alor bsoluto de X
0-$X&
0ogaritmo -atural de X
(XP$X&
;unción (*ponencial de X
+(-$X&
+eno de X
7Q+$X&
7oseno de X
-$X&
angente de X
+(-$X&
rco seno de X
7Q+$X&
rco coseno de X
-$X&
rco tangente de X
8U-7$X&
Parte entera de X
8(=Q-$X&
(ntero m#s cercano a X
8$X&
(ntero aleatorio entre 5 y *G1
$+i no sabes qué hace alguna de estas funciones, no te preocupes mucho, es se'al de que hasta ahora no la has necesitado... >G& 0as m#s importantes de ellas las probaremos directamente como parte de los ejercicios& Ejercicio de repaso propuesto 10.1: 7rea un programa que genere un
n%mero al azar entre el 1 y el 155. (l usuario tendr# O oportunidades para adi!inarlo. ras cada intento, se le dir# si se ha pasado o se ha quedado corto.
11 - Ejercicios resueltos a& Enunciados 1.G 7rear un algoritmo que escriba ":ola" cinco !eces. @.G 7rear un algoritmo que pida al usuario un n%mero y le diga si es positi!o, negati!o o cero. 4.G 7rear un algoritmo que pida al usuario M datos y muestre su suma. A.G 7rear un algoritmo que calcule la raíz cuadrada del n%mero que introduzca el usuario. +i se introduce un n%mero negati!o, debe mostrar un mensaje de error y !ol!er a pedirlo $tantas !eces como sea necesario&. M.G 7rear un algoritmo que pida al usuario un n%mero y un símbolo, y dibuje un cuadrado usando ese símbolo. (l cuadrado tendr# el tama'o que ha indicado el usuario. Por ejemplo, si el usuario introduce A como tama'o y C como símbolo, deber# escribirse algo como) CCCC CCCC CCCC CCCC
!& Ejemplos de soluciones con Psent 1.G 7rear un algoritmo que escriba ":ola" cinco !eces. // ?# $rear un algoritmo @ue escri!a "Hola" cinco 7eces?
Proceso 6esuelto0 Para # Hasta 1 Hacer Escribir "Hola"* FinPara
FinProceso
@.G 7rear un algoritmo que pida al usuario un n%mero y le diga si es positi!o, negati!o o cero. // 2?# $rear un algoritmo @ue pida al usuario un numero ( le diga si es positi7o negati7o o cero?
Proceso 6esuelto02 Escribir "Dime un numero"* Leer * Si ' 0 Entonces Escribir "Es positi7o"* Sino Si 0 Entonces Escribir "Es negati7o"* Sino Escribir "Es cero"* FinSi FinSi FinProceso
4.G 7rear un algoritmo que pida al usuario M datos y muestre su suma. // 3?# $rear un algoritmo @ue pida al usuario 1 datos ( muestre su suma? // Aorma BaC sin usar matrices
Proceso 6esuelto03
suma # 0 Para # Hasta 1 Hacer Escribir "Dime un dato"* Leer *
suma # suma + * FinPara Escribir "Su suma es " suma*
FinProceso
o de forma alternati!a, usando matrices) // 3?# $rear un algoritmo @ue pida al usuario 1 datos ( muestre su suma? // Aorma B!C usando matrices
Proceso 6esuelto03
Dimension dato<1=
Para # Hasta 1 Hacer Escribir "Dime un dato"* Leer dato<=* FinPara
suma # 0
Para # Hasta 1 Hacer
suma # suma + dato<=* FinPara
Escribir "Su suma es " suma* FinProceso
A.G 7rear un algoritmo que calcule la raíz cuadrada del n%mero que introduzca el usuario. +i se introduce un n%mero negati!o, debe mostrar un mensaje de error y !ol!er a pedirlo $tantas !eces como sea necesario&. // &?# $rear un algoritmo @ue calcule la ra) cuadrada del nmero // @ue introdu)ca el usuario? Si se introduce un nmero negati7o // de!e mostrar un mensaje de error ( 7ol7er a pedirlo // Btantas 7eces como sea necesarioC?
Proceso 6esuelto0&
Repetir Escribir "Dime un numero"* Leer * Si 0 Entonces Escribir "No puede ser negati7o" * FinSi Hasta Que '8 0
Escribir "Su rai) es " rcBC*
FinProceso
M.G 7rear un algoritmo que pida al usuario un n%mero y un símbolo, y dibuje un cuadrado usando ese símbolo. (l cuadrado tendr# el tama'o que ha indicado el usuario. (No funcionará correctamente en versiones de PseInt anteriores a agosto de 2!!" // 1?# $rear un algoritmo @ue pida al usuario un nmero ( un sm!olo // ( di!uje un cuadrado usando ese sm!olo? El cuadrado tendrF el tamaGo // @ue 4a indicado el usuario?
// No funciona con 7ersiones de PseInt de antes de ;gosto de 20 // por@ue las 7ersiones pre7ias a la 200.0 no permiten escri!ir // sin a7an)ar de linea
Proceso 6esuelto01 Escribir "Dime el lado"* Leer lado*
Escribir "Dime el sim!olo de relleno" * Leer sim!olo*
Para fila# Hasta lado Hacer
Para columna # Hasta lado Hacer Escribir Sin Saltar sim!olo * // Escri!ir sin !ajar de lnea FinPara
Escribir ""*
// ;7ance de lnea tras cada fila
FinPara
FinProceso
12 - Ejercicios propuestos 1.G 7rear un algoritmo que pida al usuario 15 datos y muestre su promedio. @.G 7rear un algoritmo que calcule la raíz cuadrada del n%mero que introduzca el usuario. +i se introduce un n%mero negati!o, debe mostrar un mensaje de error y !ol!er a pedirlo $tantas !eces como sea necesario&. 4.G 7rear un algoritmo que pida al usuario 4 datos y diga cual es el mayor de los tres. A.G 7rear un algoritmo que pida al usuario M datos, luego le pida un !alor con el que comparar, y finalmente diga cuales de esos M datos son mayores que el !alor de comparación. M.G 7rear un algoritmo que resuel!a una ecuación de segundo grado del tipo a*@Yb*YcB5. 0as soluciones son * 1 B $G b Y raiz $b@ G Aac&& 3 $@ a& , *@ B $G b G raiz $b@ G Aac&& 3 $@ a& D.G 7rear un algoritmo que genere un n%mero al azar entre el 1 y el 1555, y dé al usuario la oportunidad de acertarlo en 15 intentos. ras cada intento se le dir# si ha acertado $y en ese caso terminar# la ejecución&, si se ha quedado corto o si se ha pasado.
O.G 7rear un algoritmo que pida al usuario una cantidad no definida de datos y calcule su suma. =ebe estar preparado para un m#*imo de 155 n%meros, que pedir# de uno en uno. 7uando se introduzca un !alor 5, mostrar# la suma de todos los anteriores y terminar# la ejecución. E.G 7rear un algoritmo que pida al usuario que introduzca una frase, y diga cu#ntas !eces contiene la letra $ya sea en may%sculas o en min%sculas&.
13 - unciones de cadenas de te4to =esde octubre de @51@, Psent incluye ciertas funciones de manejo de cadenas de te*to que es habitual encontrar en casi cualquier lenguaje de programación. 0as dos m#s sencillas son las que permiten con!ertir un te*to a may%sculas y a min%sculas) Proceso $adenas0 Escribir "Dime tu nom!re" Leer nom!re
Escribir "En ma(sculas @uedara," Escribir a(usculasBnom!reC
Escribir "En minsculas @uedara," Escribir inusculasBnom!reC FinProceso
Para resol!er problemas reales de computación, hay otras dos funciones que dan mucho m#s juego) una nos dicen la longitud de una cadena y otra permite e*traer una subcadena, desde cierta posición inicial hasta cierta posición final) Proceso $adenas02 Escribir "Dime tu nom!re" Leer teto
Escribir "$on espacios @uedara," Para # Hasta >ongitudBtetoC Hacer Escribir Sin Saltar Su!cadenaBteto C Escribir Sin Saltar " " FinPara Escribir "" FinProceso
$+i dejamos las opciones de Psent sin modificar, las posiciones dentro de la cadena se empezar#n a contar desde uno> ya sabemos, como !imos en el apartado sobre "Latrices", que en muchos otros lenguajes de programación se empieza a contar desde cero&. ambién tenemos la posibilidad de "concatenar" dos cadenas, para formar una nue!a cadena a partir de esas dos seguidas. sí el quinto ejercicio resuelto se podría plantear también creando una Pero toda!ía no est# tan bien como debería) siempre estamos escribiendo @5 guiones, aunque el te*to sea m#s largo o m#s corto. (n la mayoría de lenguajes de programación se puede indicar detalles adicionales $"par#metros"& para que se puedan utilizar desde dentro de esa subrutina. Por ejemplo, en nuestro caso podríamos indicarle qué te*to queremos escribir y qué longitud queremos que tenga la secuencia de guiones) // $rear un algoritmo @ue pida al usuario un nmero ( un sm!olo // ( di!uje un cuadrado usando ese sm!olo? El cuadrado tendrF el // tamaGo @ue 4a indicado el usuario?
// ersin concatenando cadenas? // No funciona con 7ersiones de PseInt de antes de Jctu!re de 202
Proceso 6esuelto01! Escribir "Dime el lado" Leer lado
Escribir "Dime el sim!olo de relleno"
Leer sim!olo
filaDeSim!olos # "" Para columna # Hasta lado Hacer
filaDeSim!olos # $oncatenar B filaDeSim!olos sim!olo C FinPara
Para fila# Hasta lado Hacer Escribir filaDeSim!olos FinPara
FinProceso
Ejercicios propuestos: 1. 7rea un programa que pida su nombre al usuario y lo escriba al re!és $de principio a fin& @. 7rea un programa que pida su nombre al usuario y lo escriba alternando letras may%sculas y min%sculas $por ejemplo, "-acho" se mostraría como "-a7hQ" 4. 7rea un programa que pida su nombre al usuario y diga cu#ntas !ocales contiene
1" - #reación de 5unciones 6 procedimientos $su!procesos& (n muchos casos, nos encontraremos con tareas que tenemos que repetir !arias !eces en distintos puntos de nuestro programa. +i tecleamos !arias !eces el mismo fragmento de programa no sólo tardaremos m#s en escribir) adem#s el programa final resultar# menos legible, ser# m#s también ser# m#s f#cil que cometamos alg%n error alguna de las !eces que !ol!emos a teclear el fragmento repetiti!o, o que decidamos hacer una modificación y ol!idemos hacerla en alguno de los fragmentos. Por eso, con!iene e!itar que nuestro
programa contenga código repetiti!o. Una de las formas de e!itarlo es usar "subrutinas", una posibilidad que permite casi cualquier lenguaje de programación, y que en ocasiones recibe el nombre de "procedimientos" o de "funciones" $a !eces, con alg%n matiz que hace que esas palabras no sean realmente sinónimos&. Psent permite definir "subrutinas" $o "funciones"& dentro del pseudocódigo, desde la !ersión del 15 de octubre de @51@. (n su caso, se llaman "subprocesos". 6eamos un ejemplo de su uso) 6amos a empezar por crear un subproceso $o "subrutina", o "procedimiento"& que escriba @5 guiones, que podríamos utilizar para subrayar te*tos. Un programa completo que escribiera tres te*tos y los subrayara podría ser) Proceso Su!Procesos0 Escribir " Primer ejemplo" Para # Hasta 20 Hacer Escribir Sin Saltar "#" FinPara Escribir ""
Escribir " Segundo ejemplo" Para # Hasta 20 Hacer Escribir Sin Saltar "#" FinPara Escribir ""
Escribir " 5ercer ejemplo" Para # Hasta 20 Hacer Escribir Sin Saltar "#" FinPara Escribir "" FinProceso
Luy repetiti!o. +ería un poco m#s elegante si lo reescribimos así)
Proceso Su!Procesos02 Escribir " Primer ejemplo"
Su!ra(ar
Escribir " Segundo ejemplo"
Su!ra(ar
Escribir " 5ercer ejemplo"
Su!ra(ar
FinProceso
Su!proceso Su!ra(ar Para # Hasta 20 Hacer Escribir Sin Saltar "#" FinPara Escribir ""
AinSu!proceso
Lucho m#s legible. Pero toda!ía no est# tan bien como debería) siempre estamos escribiendo @5 guiones, aunque el te*to sea m#s largo o m#s corto. (n la mayoría de lenguajes de programación se puede indicar detalles adicionales $"par#metros"& para que se puedan utilizar desde dentro de esa subrutina. Por ejemplo, en nuestro caso podríamos indicarle qué te*to queremos escribir y qué longitud queremos que tenga la secuencia de guiones) Proceso Su!Procesos03
Escri!irSu!ra(adoB" Primer ejemplo" C
Escri!irSu!ra(adoB" Segundo ejemplo" C
Escri!irSu!ra(adoB" 5ercer ejemplo" C
FinProceso
Su!proceso Escri!irSu!ra(ado Bteto cantidadC Escribir teto Para # Hasta cantidad Hacer Escribir Sin Saltar "#"
FinPara Escribir ""
AinSu!proceso
unque toda!ía es un poco redundante) en general, querremos escribir tantos guiones como letras tenga el te*to, así que no ser# necesario indicar ese dato. =esde octubre de @51@, Psent incluye ciertas funciones predefinidas para manejo de cadenas de te*to> una de ellas es "0ongitud", que nos indica la cantidad de letras que tiene un te*to, de modo que nuestro programa se podría simplificar así) Proceso Su!Procesos0&
Escri!irSu!ra(adoB"Primer ejemplo"C
Escri!irSu!ra(adoB"Segundo ejemplo"C
Escri!irSu!ra(adoB"5ercer ejemplo"C
FinProceso
Su!proceso Escri!irSu!ra(ado BtetoC Escribir teto Para # Hasta >ongitudBtetoC Hacer Escribir Sin Saltar "#" FinPara Escribir ""
AinSu!proceso
ambién podemos crear funciones que realicen ciertas operaciones aritméticas y de!uel!an un resultado, como las funciones matem#ticas que !imos en el tema 15. +e puede hacer con la misma palabra "subproceso" que hemos empleado hasta ahora, pero muchos lenguajes de programación distinguen entre un "procedimiento" o "subrutina", cuando se da una serie de pasos pero no se de!uel!e ning%n !alor, y una "función", cuando sí se de!uel!e un resultado, así que usaremos esta %ltima nomenclatura. +e parece mucho a lo
que hemos hecho hasta ahora, con la diferencia de que escogeremos un nombre para la !ariable que guardar# el resultado, así) Auncion resultado # aimo B n n2C Si n ' n2
Entonces
resultado # n Sino
resultado # n2 FinSi
AinAuncion
Proceso Aunciones0 Escribir "El mFimo de 1 ( 2 es," Escribir aimoB12C* Escribir "El mFimo de 21 ( 2 es," Escribir aimoB212C* Finproceso
(ste programa crea una función que calcula cu#l es el mayor de los dos n%meros que se le indican como par#metro, y la usa dos !eces, para mostrar el m#*imo de dos !alores prefijados. -o sólo pdemos de!ol!er !alores numéricos> también podemos de!ol!er cadenas $como las funciones que !imos en el apartado 14& o "!alores de !erdad" $!erdadero, falso&. Por ejemplo, podemos crear una función que diga si un n%mero es primo o no $lo !amos a hacer de la forma m#s simple pero también de la menos eficiente) aplicar la definición, probando a di!idir entre todos los n%meros que hay entre 1 y n> si hemos encontrado dos di!isores Go menos, para el n%mero unoG, entonces el n%mero es primo&) Su!Proceso resultado # Primo B num C cantidadDi7isores # 0 Para cont # Hasta num Hacer Si num K cont 8 0 Entonces
cantidadDi7isores # cantidadDi7isores +