Sie sind auf Seite 1von 51

Pseudocdigo - 1.

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/

Y si me atrevo con el ingls?


PseInt, a pesar de ser una herramienta til, es muy limitada. De hecho, en 2010 parece estar abandonado por su autor original, quien ni siquiera responde a los mensajes, por lo que es de suponer

que sea relativamente difcil incluso que otro programador tome el proyecto en su lugar para solucionar alguno de los problemas que tiene o para aadirle ms posibilidades. Si no te asusta el ingls, bien porque lo conozcas o bien porque ests dispuesto a aprender 30 palabras, ests de suerte: el pseudocdigo en ingls se parece a varios lenguajes de programacin, as que podras aprender los conceptos bsicos usando "entornos reales". Posiblemente Pascal sera el lenguaje que ms se parecera al pseudocdigo, y por eso durante mucho tiempo se ha considerado un lenguaje muy adecuado para aprender. Pero como ya hay muchos cursos de Pascal, vamos a optar por otra alternativa ms moderna: el lenguaje Python, bien diseado y que est disponible para muchos sistemas operativos. Por eso, veremos tambin cmo dar los pasos bsicos usando Python. Para descargar Python: en muchos sistemas, como Linux, no es necesario: forma parte del sistema bsico; pero si, como la mayora, usas Windows, Python no est preinstalado en tu sistema, tendras que descargarlo (gratuitamente, claro) desde http://www.python.org/download/

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...

Y en Python?
En primer lugar, veamos la instalacin del entorno. Es poco ms que descargarlo de Internet y hacer clic en los botones de "Siguiente", pero vamos a verlo con detalle: Para descargar Python basta con entrar a su pgina oficial (python.org), dentro del apartado de Descargas (download):

Elegimos la versin que queremos descargar. En el momento de escribir este texto, las ltimas son la 3.1.2 (dentro de la "gama nueva") y la 2.7 (dentro de la "serie antigua"). Existen dos versiones paralelas porque la "serie antigua" es ligeramente incompatible con la nueva. Como nosotros no tenemos que trabajar con programas antiguos con Python, no tenemos por qu escoger la versin "antigua" y podemos optar por la versin 3, la nueva. Aun as, las capturas que incluyo a continuacin corresponden a la versin 2.7, para Windows. Descargamos el "Windows Installer" (instalador de Windows), que tendr cerca de 15 Mb de tamao:

Cuando lo recibamos, hacemos doble clic y Windows nos avisar del posible riesgo de seguridad:

Como sabemos que no es peligroso, decimos que S lo queremos "Ejecutar" y se nos preguntar si es slo para nosotros o para todos los usuarios con los que compartamos nuestro ordenador:

Y luego la carpeta en la que queremos que se instale:

Se nos preguntar qu opciones queremos instalar (basta con aceptar lo que se nos propone):

Y entonces comenzar la instalacin en s:

que debera terminar sin problemas poco despus:

Aparecer un nuevo "grupo de programas" en nuestro Men de Inicio de Windows, y en ese grupo de programas aparece IDLE, que es el editor de Python para Windows:

Y desde IDLE podemos crear y probar nuestros programas (pero no tengas prisa en entender todo lo que aparece en esta captura, lo iremos viendo poco a poco... ;-D )

Vamos a ver cmo quedaran nuestros primeros programas en Python: Para escribir, se usa la orden "print", a la que se le indica entre parntesis lo que queremos escribir. Si es un texto puro, deber estar entre comillas:
print ("Hola")

(Nota: en versiones antiguas de Python no era necesario usar parntesis en la orden "print"; en Python 3 y posteriores s lo es) En cuanto pulsemos "Intro", se muestra directamente el resultado de nuestra orden. Al contrario que en PseInt, no es necesario indicar el principio y el final del programa (o proceso). De igual modo, podemos hacer operaciones matemticas. Para escribir, se puede usar la misma orden "print" (aunque en Python existen formas an ms rpidas), pero sin comillas:

print (20+30)

Y si queremos que sea el usuario el que introduzca los datos, usaremos la orden "input". De modo que el programa que pide dos datos al usuario y muestra su resultado podra ser:
print ("Dime un numero") primerNumero = input() print ("Dime otro numero") segundoNumero = input() print ("Su suma es ") print (primerNumero + segundoNumero)

Puede que en versiones "modernas" de Python, 3.x o superiores, si introducimos los nmeros 3 y 5 se nos diga que su suma es 35. Esto se debe a que est tomando ese 3 y ese 5 como cadenas de texto, y el smbolo de suma (+) se puede utilizar tambin para unir (concatenar) varias cadenas en una. La forma de evitarlo es decirle que tome esos datos como nmeros enteros antes de sumar. Para eso, usaremos la palabra "int", e indicaremos entre parntesis lo que queremos que se trate como un nmero entero. As, la versin correcta en Python 3 del programa anterior (y que tambin funcionar correctamente en las ltimas versiones 2.x) sera:
print ("Dime un numero") primerNumero = int( input() ) print ("Dime otro numero") segundoNumero = int( input() ) print ("Su suma es ") print (primerNumero + segundoNumero)

En programas un poco ms largos, como ste, quiz no nos interese teclearlo de modo interactivo, obteniendo inmediatamente la respuesta a cada orden, sino que puede ser mejor teclear todo el programa y despus ponerlo en funcionamiento. Eso tambin es sencillo de hacer: Creamos una ventana nueva en el editor, entrando al men "File" y escogiendo la opcin "New window":

En esta ventana tecleamos nuestro fuente:

Para ponerlo en funcionamiento, entramos al men "Run" y escogemos la opcin "Run Module":

Si todava no habamos guardado en disco nuestro programa, se nos pedir que lo hagamos:

Y entonces se pondr en marcha el programa completo:

Como curiosidad poco importante, en Python se pueden fundir en un solo paso las acciones de avisar al usuario de lo que queremos y leer l dato que dicho usuario introduzca: la orden "input" permite indicar el texto de aviso, de modo que nuestro programa podra ser simplemente as, para Python 2.x:
primerNumero = input ( "Dime un numero " ) segundoNumero = input ( "Dime otro numero " ) print ("Su suma es ") print (primerNumero + segundoNumero)

y para Python 3
primerNumero = int (input ( "Dime un numero " )) segundoNumero = int (input ( "Dime otro numero " )) print ("Su suma es ") print ( primerNumero + segundoNumero )

De ahora en adelante usaremos esa ltima sintaxis (incluyendo "int") en los ejemplos, para que funcionen correctamente en cualquier versin reciente de Python.

Pseudocdigo. 3 - Ms sobre variables


Nuestro ltimo programa peda dos nmeros al usuario y mostraba su suma, as
Proceso Ejemplo003 Escribir "Dime un numero" Leer primerNumero Escribir "Dime otro numero" Leer segundoNumero Escribir "Su suma es ", primerNumero + segundoNumero FinProceso

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. En la prxima entrega veremos cmo comprobar condiciones...

Y en Python?
Se aplican las mismas ideas: se puede usar variables, y no hace falta "declararlas". Su valor lo puede introducir el usuario, si lo indicamos con la orden "input" (que vimos en el tema anterior) o lo podemos fijar desde programa usando el smbolo "=" (en vez de la flecha "<-"), as:
radio = 3 longitudCircunferencia = 2 * pi * radio

Al igual que en PseInt, si intentamos usar una variable que no tiene valor (porque no se lo hemos dado nosotros ni lo ha introducido el usuario), obtendremos un mensaje de error.

4 - Comprobando condiciones (1)


En casi cualquier secuencia de instrucciones para un ordenador, ser vital poder comprobar si se cumple alguna condicin. Una primera forma bsica de comprobar condiciones es con la orden "SI". Su uso bsico sera

Si condicion Entonces pasos_a_dar_si_es_verdadero Si No pasos_a_dar_si_es_falso FinSi

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 Escribir "El segundo es mayor" FinSi FinProceso

Su resultado sera ste:

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 Mayor o igual que

Ejemplo
3>2 'ABC'<'abc' 4=3 4>=5

Menor o igual que 'a'<='b'

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:

Operador lgico Significado


&Y |O ~ NO

Ejemplo

Conjuncin (y). (7>4) & (2=1) //falso Disyuncin (o). (1=1 | 2=1) //verdadero Negacin (no). ~(2<5) //falso

Y en Python?
La orden "si" se traduce como "if", y la orden "si no" se traduce como "else". Ambas deben terminar con el smbolo de "dos puntos" (:). Las rdenes a realizar si se cumple la condicin, o bien en caso de que no se cumpla, se DEBEN escribir un poco ms a la derecha que la orden que las precede (pero no es para que sea ms legible, como hicimos con PseInt, sino por requisito del lenguaje):
primerNumero = int(input( "Dime un numero " )) segundoNumero = int(input( "Dime otro numero " )) if primerNumero > segundoNumero: print( "El primero es mayor" ) else: print )"El segundo es mayor" )

Los operadores que podemos usar para comparar no son exactamente los mismos que en PseInt:

Operador relacional Significado


> < = = <= >= Mayor que Menor que Igual que Distinto de Mayor o igual que

Ejemplo
3>2 2<3 3 == 3 4 != 3 4 >= 5

Menor o igual que 7 <= 6

Y las condiciones se pueden enlazar usando "y" (que se escribir en ingls, "and"), "o" (que ser "or") o "no" ("not"). Ejercicio propuesto: un programa que pida al usuario 3 nmeros y diga cual es el mayor de los tres. En la prxima entrega veremos ms formas de comprobar condiciones...

5 - Comprobando condiciones (2)


Es frecuente tener que comprobar ms de una condicin a la vez, o bien varias condiciones consecutivas. En concreto, un caso espercialmente habitual es el de que una variable pueda tomar distintos. Por ejemplo, ciertas notas numricas tienen "nombres" en espaol: un 5 es un aprobado, un 9 y un 10 son sobresaliente, etc. Si queremos hacer un programa que convierta de la nota numrica a su equivalente escrito, podramos emplear varias rdenes IF, una tras la otra. Pero en muchos lenguajes de

programacin (y por tanto, tambin en muchas variantes de pseudocdigo) existe una alternativa ms compacta y ms legible: la orden "SEGUN". Esta rden permite hacer unas cosas u otras segn el valor que tome una variable. Su uso sera 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 De Otro Modo: pasos_a_dar_si_es_otro_valor FinSegun

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 "Ha obtenido un sobresaliente alto"; 9: Escribir "Ha obtenido un sobresaliente bajo"; 8: Escribir "Ha obtenido un notable alto"; 7: Escribir "Ha obtenido un notable bajo"; 6: Escribir "Ha obtenido un aprobado alto"; 5: Escribir "Ha obtenido un aprobado"; De Otro Modo: Escribir "Ha suspendido"; FinSegun FinProceso

Su resultado sera ste:

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 sea la correcta o agote sus intentos". De eso hablaremos en la prxima entrega.

Y en Python?
La orden "segn" se suele traducir como la palabra inglesa "case" o como "switch", segn el lenguaje de programacin que se utilice. Pero siendo estrictos, no es una orden necesaria: se podra imitar usando varias rdenes "si". Esa es la aproximacin que usa Python: no existe orden "segn", pero se puede imitar con varias ordenes "if...else" encadenadas. Eso tiene un problema: en Python, cada nuevo bloque "if" debera aparecer tabulado un poco ms a la derecha que el anterior, por lo que nuestro programa acabara pareciendo "una escalera", y resultando difcil de leer. Por eso, tenemos una orden "elif", como abreviatura de "else if", que no es necesario tabular. As, nuestro programa capaz de convertir de nota numrica a texto en Python quedara de la siguiente forma:
nota = int(input("Introduzca la nota ")) if nota == 10: print ("Ha obtenido un sobresaliente alto") elif nota == 9: print ("Ha obtenido un sobresaliente bajo") elif nota == 8: print ("Ha obtenido un notable alto") elif nota == 7: print ("Ha obtenido un notable bajo") elif nota == 6: print ("Ha obtenido un aprobado alto") elif nota == 5: print ("Ha obtenido un aprobado")

else: print ("Ha suspendido")

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 realizan una serie de acciones y se vuelve a comprobar la condicin, y as sucesivamente hasta que la condicion no se cumpla:

Y en el caso de PseInt, ese icono generara un esqueleto de programa como ste:

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

Y su ejecucin mostrara algo como:

Hay ms formas de comprobar condiciones repetitivas. Pronto las veremos...

Y en Python?
Sencillo: basta con saber que "mientras" se traduce a ingls como "while", y recordar que no existir nada equivalente al "FinMientras", sino que todo el bloque que se repita deber estar tabulado un poco ms a la derecha, as:
print ("Dime un numero") x = int( input ( ) ) suma = 0 while x != 0: suma = suma + x print ("Hasta ahora, la suma es ") print (suma) print ("Dime otro nmero") x = int( input ( ) ) print ("Terminado")

El resultado sera:
Dime un numero 4 Hasta ahora, la suma es 4 Dime otro numero 5 Hasta ahora, la suma es 9 Dime otro numero 7 Hasta ahora, la suma es 16 Dime otro numero 0 Terminado

Pero esto no es exactamente lo mismo que obtenemos con el programa en PseInt, porque Python avanza de lnea tras cada orden "print". Si queremos que se escriban dos cosas en la misma lnea, como en "Hasta ahora, la suma es 16", lo podemos hacer indicando que queremos usar un formato especial en el texto. Para dar este formato especial haremos lo siguiente: dentro del texto indicaremos con llaves { } la posicin en la que queremos que aparezca un dato adicional, y despus usaremos ".format" y detallaremos entre parntesis el dato que queremos que aparezca en esa posicin. Quedara as:
print ("Dime un numero") x = int( input ( ) ) suma = 0 while x != 0: suma = suma + x print ("Hasta ahora, la suma es {}".format(suma) ) print ("Dime otro numero") x = int( input ( ) ) print ("Terminado")

Ahora el resultado sera:


Dime un numero 4 Hasta ahora, la suma es 4 Dime otro numero 5 Hasta ahora, la suma es 9 Dime otro numero 7 Hasta ahora, la suma es 16 Dime otro numero 0 Terminado

7 - Condiciones repetitivas (2)


Es tambin muy frecuente que un bloque de programa que quiz se repita, deba ejecutarse al menos una vez. Por ejemplo, si queremos pedir un dato al usuario, quiz exista algn error y haya que insistir, pero al menos deberemos pedrselo una primera vez. En estos casos, la estructura "mientras" no es la ms adecuada: no podemos comprobar la condicin al principio, sino despus de haber pedir el valor. En estos casos (que son muy frecuentes), sera ms razonable usar otra estructura de programacin en la que la condicin se compruebe despus de dar ciertos pasos. Esa estructura es "repetir... hasta": Su representacin en un diagrama de flujo sera:

Y en el caso de PseInt, ese icono generara un esqueleto de programa como ste:

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

Cuyo resultado sera:

Queda otra forma de repetir fragmentos de programa. Pronto estaremos con ella...

Y en Python?
Si traducimos "repetir" como "repeat" y "hasta que" como "until", ya tenemos la construccin que se usa en algunos lenguajes de programacin, como Pascal. En otros, como C y sus derivados (C++, Java, C#, PHP...) se usa "do...while" (hacer...mientras) para comprobar la comprobacin al final. Nuevamente, no es el caso de Python: no tenemos ninguna construccin que nos permita comprobar la condicin al final, as que deberamos reescribir el program ligeramente, tpicamente dando una primera pasada antes de la zona repetitiva, as:
print ("Dime tu clave de acceso: ") clave = int(input()) while clave != 1234: clave = int(input( "Clave incorrecta. Vuelve a introducir tu clave: " )) print ("Bienvenido!")

El resultado sera:
Dime tu clave de acceso: 23 Clave incorrecta. Vuelve a introducir tu clave: 234 Clave incorrecta. Vuelve a introducir tu clave: 1234 Bienvenido!

Si queremos intentar reescribirlo de una forma un poco ms parecida al original en PseInt, podemos hacer que no se compruebe la condicin al principio (o incluso nunca), sino que se interrumpa "desde dentro" con la orden "break" (romper), as:
while True:

clave = int(input("Dime tu clave de acceso: ")) if clave != 1234: print("Clave incorrecta") else: break print ("Bienvenido!")

Ahora el resultado sera:


Dime tu clave de acceso: 23 Clave incorrecta Dime tu clave de acceso: 234 Clave incorrecta Dime tu clave de acceso: 1234 Bienvenido!

8 - Repetir un cierto nmero de veces


En muchas ocasiones, no querremos que algo se repita mientras se cumpla una condicin, sino un cierto nmero de veces. Por ejemplo, para escribir "Hola" 3 veces en 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:

Y en el caso de PseInt, ese icono generara un esqueleto de programa como ste:

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

Cuyo resultado sera:

Si no queremos avanzar de uno en uno, podemos indicar otro tamao de "paso"::


Proceso Para02 Para x <- 10 Hasta 20 Con Paso 2 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.

Y en Python?
La palabra "para" se traducira como "for", pero en vez de indicar "hasta" donde queremos llegar, le diremos qu "rango" (range) queremos recorrer. Por ejemplo, para ir del 1 al 10 usaramos "range(1,11)", porque se comienza en el primer nmero que indiquemos en el rango (1), pero no se llega a alcanzar el ltimo (11, luego se detiene en 10):
for x in range(1,11): print (x)

Mostrar los pares del 10 al 20 es casi igual de fcil: empezaremos en 10, terminaremos antes de llegar a 21, y aadimos un tercer dato que es el incremento que queremos en cada pasada (2), as
for x in range(10,21,2): print (x)

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

Que mostrara algo como:

(Haremos ejemplos ms avanzados como parte de los ejercicios)

Y en Python?
Para indicar que vamos a usar una matriz en Python, usaremos llaves: miMatriz = { } No es necesario indicar tamao. Como se empieza a numerar desde 0, y no desde 1, guardaremos los datos accediendo a la posicin "i-1", de este modo:
datos = { } for i in range(1,7): datos[i-1] = input( "Dime el dato numero {}: ".format(i) ) print ("Los datos al reves son: ") for i in range(6,0,-1): print ( datos[i-1] )

El resultado sera:

Dime el dato numero 1: 1 Dime el dato numero 2: 3 Dime el dato numero 3: 5 Dime el dato numero 4: 7

Dime el dato numero 5: 9 Dime el dato numero 6: 11 Los datos al reves son: 11 9 7 5 3 1

Como curiosidad, tambin se puede declarar el array indicando sus valores iniciales entre corchetes, as:
datos = [0,0,0,0,0,0] for i in range(1,7): datos[i-1] = input( "Dime el dato numero {}: ".format(i) ) print ("Los datos al reves son: ") for i in range(6,0,-1): print ( datos[i-1] )

10 - Funciones matemticas. Comentarios.


Casi cualquier lenguaje de programacin tiene incorporadas ciertas funciones matemticas, de modo que nos permita calcular races cuadradas, logaritmos, senos y cosenos, etc. Lo mismo ocurre en muchas variantes de pseudocdigo. Por ejemplo, PseInt incluye las siguientes funciones matemticas:

Funcin
RC(X) ABS(X) LN(X) EXP(X) SEN(X) COS(X) TAN(X) ASEN(X) ACOS(X) ATAN(X)

Significado
Raz Cuadrada de X Valor Absoluto de X Logaritmo Natural de X Funcin Exponencial de X Seno de X Coseno de X Tangente de X Arco seno de X Arco coseno de X Arco tangente de X

TRUNC(X) Parte entera de X

REDON(X) Entero ms cercano a X AZAR(X) Entero aleatorio entre 0 y x-1

(Si no sabes qu hace alguna de estas funciones, no te preocupes mucho, es seal de que hasta ahora no la has necesitado... ;-) Las ms importantes de ellas las probaremos directamente como parte de los ejercicios) En cuanto a los comentarios... casi cualquier lenguaje de programacin permite incluir aclaraciones, que nos ayuden a explicar la lgica del programa o cualquier detalle que no sea evidente. En el caso de PseInt, cualquier lnea que comience con una doble barra (//) se considerar un comentario y no se tendr en cuenta en el momento de analizar el cdigo:
// Ejemplo de comentario en un fuente de PseInt

Y en Python?
Existen bsicamente las mismas funciones (y alguna ms), pero con nombres en ingls, claro. Para usarlas antes hay que "importarlas" desde la librera de matemticas, como se ver en el siguiente ejemplo. Las funciones equivalentes a las anteriores son:

Funcin

Significado

math.sqrt(X) Raz Cuadrada de X math.fabs(X) Valor Absoluto de X math.log(X) Logaritmo Natural de X math.exp(X) Funcin Exponencial de X math.sin(X) Seno de X math.cos(X) Coseno de X math.tan(X) Tangente de X math.asin(X) Arco seno de X math.acos(X) Arco coseno de X math.atan(X) Arco tangente de X Pero tambin hay otras. Por ejemplo, "math.pow(x,y)" calcula el resultado de elevar un nmero a otro, "math.degrees(x)" convierte de radianes a grados y "math.radians(x)" de grados a radianes. Los nmeros al azar no son parte de la biblioteca "math", sino de "random": random.random() devuelve un nmero real entre 0 y 1, mientras que random.randint(1, 10) da un nmero entero entre 1 y 10 (ambos incluidos). Un ejemplo de uso de funciones matemticas sera
from math import sqrt valor = int(input( "Dime un numero: " )) print ( "Su raiz cuadrada es {}".format( sqrt(valor) ) )

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: **** **** **** ****

b) Ejemplos de soluciones con PseInt


1.- Crear un algoritmo que escriba "Hola" cinco veces.
// 1.- Crear un algoritmo que escriba "Hola" cinco veces. Proceso Resuelto01 Para x <- 1 Hasta 5 Hacer Escribir "Hola"; FinPara FinProceso

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

3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.


// 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma. // Forma (a), sin usar matrices Proceso Resuelto03 suma <- 0 Para x <- 1 Hasta 5 Hacer Escribir "Dime un dato"; Leer x; suma <- suma + x; FinPara Escribir "Su suma es ", suma; FinProceso

o de forma alternativa, usando matrices:


// 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma. // Forma (b), usando matrices Proceso Resuelto03 Dimension dato[5] Para x <- 1 Hasta 5 Hacer Escribir "Dime un dato"; Leer dato[x]; FinPara suma <- 0 Para x <- 1 Hasta 5 Hacer suma <- suma + dato[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 ""; // Avance de lnea tras cada fila FinPara FinProceso

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")

3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma.


# 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma. # Forma (a), sin usar matrices

suma = 0 for x in range(1,6): x = input ("Dime un dato ") suma = suma + x print ("Su suma es") print (suma)

o de forma alternativa, usando matrices:


# 3.- Crear un algoritmo que pida al usuario 5 datos y muestre su suma. # Forma (b), usando matrices
datos = { } for i in range(1,6): datos[i-1] = input ("Dime un dato ") suma = 0 for i in range(1,6): suma = suma + datos[i-1] print ("Su suma es") print (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).
# 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 )

12 - Ejercicios propuestos
1.- Crear un algoritmo que pida al usuario 10 datos y muestre su promedio. 2.- 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). 3.- Crear un algoritmo que pida al usuario 3 datos y diga cual es el mayor de los tres. 4.- Crear un algoritmo que pida al usuario 5 datos, luego le pida un valor con el que comparar, y finalmente diga cuales de esos 5 datos son mayores que el valor de comparacin. 5.- Crear un algoritmo que resuelva una ecuacin de segundo grado del tipo ax 2+bx+c=0. Las soluciones son x1 = (- b + raiz (b2 - 4ac)) / (2 a) , x2 = (- b - raiz (b2 - 4ac)) / (2 a) 6.- Crear un algoritmo que genere un nmero al azar entre el 1 y el 1000, y d al usuario la oportunidad de acertarlo en 10 intentos. Tras cada intento se le dir si ha acertado (y en ese caso terminar la ejecucin), si se ha quedado corto o si se ha pasado. 7.- Crear un algoritmo que pida al usuario una cantidad no definida de datos y calcule su suma. Debe estar preparado para un mximo de 100 nmeros, que pedir de uno en uno. Cuando se introduzca un valor 0, mostrar la suma de todos los anteriores y terminar la ejecucin. 8.- Crear un algoritmo que pida al usuario que introduzca una frase, y diga cuntas veces contiene la letra A (ya sea en maysculas o en minsculas).

13 - Funciones de cadenas de texto


Desde octubre de 2012, PseInt incluye ciertas funciones de manejo de cadenas de texto que es habitual encontrar en casi cualquier lenguaje de programacin.

Las dos ms sencillas son las que permiten convertir un texto a maysculas y a minsculas:
Proceso Cadenas01 Escribir "Dime tu nombre" Leer nombre Escribir "En maysculas quedara:" Escribir Mayusculas(nombre) Escribir "En minsculas quedara:" Escribir Minusculas(nombre) FinProceso

Para resolver problemas reales de computacin, hay otras dos funciones que dan mucho ms juego: una nos dicen la longitud de una cadena y otra permite extraer una subcadena, desde cierta posicin inicial hasta cierta posicin final:
Proceso Cadenas02 Escribir "Dime tu nombre" Leer texto Escribir "Con espacios quedara:" Para x <- 1 Hasta Longitud(texto) Hacer Escribir Sin Saltar Subcadena(texto, x, x) Escribir Sin Saltar " " FinPara Escribir "" FinProceso

(Si dejamos las opciones de PseInt sin modificar, las posiciones dentro de la cadena se empezarn a contar desde uno; ya sabemos, como vimos en el apartado sobre "Matrices", que en muchos otros lenguajes de programacin se empieza a contar desde cero). Tambin tenemos la posibilidad de "concatenar" dos cadenas, para formar una nueva cadena a partir de esas dos seguidas. As el quinto ejercicio resuelto se podra plantear tambin creando una Pero todava no est tan bien como debera: siempre estamos escribiendo 20 guiones, aunque el texto sea ms largo o ms corto. En la mayora de lenguajes de programacin se puede indicar detalles adicionales ("parmetros") para que se puedan utilizar desde dentro de esa subrutina. Por ejemplo, en nuestro caso podramos indicarle qu texto queremos escribir y qu longitud queremos que tenga la secuencia de guiones:
// 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. // Versin concatenando cadenas. // No funciona con versiones de PseInt de antes de Octubre de 2012 Proceso Resuelto05b Escribir "Dime el lado" Leer lado Escribir "Dime el simbolo de relleno" Leer simbolo filaDeSimbolos <- "" Para columna <- 1 Hasta lado Hacer filaDeSimbolos <- Concatenar( filaDeSimbolos, simbolo )

FinPara Para fila<-1 Hasta lado Hacer Escribir filaDeSimbolos FinPara FinProceso

Ejercicios propuestos en pseudocdigo


1. Crea un programa que pida su nombre al usuario y lo escriba al revs (de principio a fin) 2. Crea un programa que pida su nombre al usuario y lo escriba alternando letras maysculas y minsculas (por ejemplo, "Nacho" se mostrara como "NaChO" 3. Crea un programa que pida su nombre al usuario y diga cuntas vocales contiene

Y en Python?
Las manipulaciones bsicas, como convertir a maysculas o minsculas, son igual de simples como en PseInt: se aade ".upper()" o ".lower()" al texto que queremos modificar:
nombre = input( "Dime tu nombre: " ) print ( "En maysculas sera {}".format( nombre.upper() ) ) print ( "En minsculas sera {}".format( nombre.lower() ) )

Extraer una letra de una cadena es como acceder a cualquier posicin de una matriz o un vector: se indica la posicin entre corchetes, como en "nombre[i]". Para una subcadena, basta indica la posicin inicial y la final, separadas por un smbolo de dos puntos: "nombre[desde:hasta]". Hay que recordar que se empieza a contar desde cero y que se termina en la longitud ("len") menos uno:
nombre = input( "Dime tu nombre: " ) print ( "Con espacios sera" ) for i in range(0, len(nombre)): print ( nombre[i], end="" ) print ( " ", end="" )

Como se ve, en Python (versin 3 y posteriores) podemos escribir cosas en la misma lnea, indicando un segundo detalle, que es que no queremos ningn smbolo al final de cada lnea: end="" Concatenar cadenas es muy fcil en Python: basta usar el smbolo de la suma (+):
nombre = "Juan" espacio = " " apellido = "Juanez" frase = nombre + espacio + apellido print ( frase )

Pero en Python se pueden hacer muchas ms cosas con las cadenas de texto que con PseInt. Por ejemplo, usando la misma nomenclatura de corchetes, se pueden emplear posiciones negativas para indicar que queremos contar desde el final de la cadena, o dejar una posicin en blanco para decir

"desde el principio" (si es la primera) o "hasta el final" (si es la segunda), o aadir un tercer dato para indicar de cunto en cunto hay que avanzar (y puede incluso ser un nmero negativo, para retroceder):
nombre = input( "Dime tu nombre: " ) print ( "Sus dos ltimas letras son: ", end="" ) print ( nombre[-2:] ) print ( "Y a partir de la tercera: ", end="" ) print ( nombre[2:] ) print ( "Al revs sera: ", end="" ) print ( nombre[::-1] )

Ejercicios propuestos en Python


1. Crea un programa que pida su nombre al usuario y lo escriba alternando letras maysculas y minsculas (por ejemplo, "Nacho" se mostrara como "NaChO" 2. Crea un programa que pida su nombre al usuario y diga cuntas vocales contiene

14 - Creacin de funciones y procedimientos (subprocesos)


En muchos casos, nos encontraremos con tareas que tenemos que repetir varias veces en distintos puntos de nuestro programa. Si tecleamos varias veces el mismo fragmento de programa no slo tardaremos ms en escribir: adems el programa final resultar menos legible, ser ms tambin ser ms fcil que cometamos algn error alguna de las veces que volvemos a teclear el fragmento repetitivo, o que decidamos hacer una modificacin y olvidemos hacerla en alguno de los fragmentos. Por eso, conviene evitar que nuestro programa contenga cdigo repetitivo. Una de las formas de evitarlo es usar "subrutinas", una posibilidad que permite casi cualquier lenguaje de programacin, y que en ocasiones recibe el nombre de "procedimientos" o de "funciones" (a veces, con algn matiz que hace que esas palabras no sean realmente sinnimos). PseInt permite definir "subrutinas" (o "funciones") dentro del pseudocdigo, desde la versin del 10 de octubre de 2012. En su caso, se llaman "subprocesos". Veamos un ejemplo de su uso: Vamos a empezar por crear un subproceso (o "subrutina", o "procedimiento") que escriba 20 guiones, que podramos utilizar para subrayar textos. Un programa completo que escribiera tres textos y los subrayara podra ser:
Proceso SubProcesos01 Escribir " Primer ejemplo" Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" Escribir " Segundo ejemplo" Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" Escribir " Tercer ejemplo" Para x <- 1 Hasta 20 Hacer

Escribir Sin Saltar "-" FinPara Escribir "" FinProceso

Muy repetitivo. Sera un poco ms elegante si lo reescribimos as:


Proceso SubProcesos02 Escribir " Primer ejemplo" Subrayar Escribir " Segundo ejemplo" Subrayar Escribir " Tercer ejemplo" Subrayar FinProceso Subproceso Subrayar Para x <- 1 Hasta 20 Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso

Mucho ms legible. Pero todava no est tan bien como debera: siempre estamos escribiendo 20 guiones, aunque el texto sea ms largo o ms corto. En la mayora de lenguajes de programacin se puede indicar detalles adicionales ("parmetros") para que se puedan utilizar desde dentro de esa subrutina. Por ejemplo, en nuestro caso podramos indicarle qu texto queremos escribir y qu longitud queremos que tenga la secuencia de guiones:
Proceso SubProcesos03 EscribirSubrayado(" Primer ejemplo", 16) EscribirSubrayado(" Segundo ejemplo", 17) EscribirSubrayado(" Tercer ejemplo", 16) FinProceso Subproceso EscribirSubrayado(texto, cantidad) Escribir texto Para x <- 1 Hasta cantidad Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso

Aunque todava es un poco redundante: en general, querremos escribir tantos guiones como letras tenga el texto, as que no ser necesario indicar ese dato. Desde octubre de 2012, PseInt incluye ciertas funciones predefinidas para manejo de cadenas de texto; una de ellas es "Longitud", que nos indica la cantidad de letras que tiene un texto, de modo que nuestro programa se podra simplificar as:
Proceso SubProcesos04 EscribirSubrayado("Primer ejemplo") EscribirSubrayado("Segundo ejemplo") EscribirSubrayado("Tercer ejemplo") FinProceso Subproceso EscribirSubrayado(texto) Escribir texto

Para x <- 1 Hasta Longitud(texto) Hacer Escribir Sin Saltar "-" FinPara Escribir "" FinSubproceso

Tambin podemos crear funciones que realicen ciertas operaciones aritmticas y devuelvan un resultado, como las funciones matemticas que vimos en el tema 10. Se puede hacer con la misma palabra "subproceso" que hemos empleado hasta ahora, pero muchos lenguajes de programacin distinguen entre un "procedimiento" o "subrutina", cuando se da una serie de pasos pero no se devuelve ningn valor, y una "funcin", cuando s se devuelve un resultado, as que usaremos esta ltima nomenclatura. Se parece mucho a lo que hemos hecho hasta ahora, con la diferencia de que escogeremos un nombre para la variable que guardar el resultado, as:
Funcion resultado <- Maximo( n1, n2) Si n1 > n2 Entonces resultado <- n1 Sino resultado <- n2 FinSi FinFuncion Proceso Funciones01 Escribir "El mximo de 5 y 12 es:" Escribir Maximo(5,12); Escribir "El mximo de 25 y 12 es:" Escribir Maximo(25,12); Finproceso

Este programa crea una funcin que calcula cul es el mayor de los dos nmeros que se le indican como parmetro, y la usa dos veces, para mostrar el mximo de dos valores prefijados. No slo pdemos devolver valores numricos; tambin podemos devolver cadenas (como las funciones que vimos en el apartado 13) o "valores de verdad" (verdadero, falso). Por ejemplo, podemos crear una funcin que diga si un nmero es primo o no (lo vamos a hacer de la forma ms simple pero tambin de la menos eficiente: aplicar la definicin, probando a dividir entre todos los nmeros que hay entre 1 y n; si hemos encontrado dos divisores -o menos, para el nmero uno-, entonces el nmero es primo):
SubProceso resultado <- Primo ( num ) cantidadDivisores <- 0 Para cont <- 1 Hasta num Hacer Si num % cont = 0 Entonces cantidadDivisores <- cantidadDivisores + 1 FinSi Fin Para Si cantidadDivisores <= 2 Entonces resultado <- verdadero Sino resultado <- falso Fin Si Fin SubProceso Proceso PrimosDel1Al30 Para n <- 1 hasta 30 si Primo(n) Entonces Imprimir n

FinSi FinPara FinProceso

Hay ms detalles que comentar sobre funciones, pero son un poco ms avanzados, as que vamos a descansar un poco aqu de nuevos conceptos y a practicar lo que hemos visto...

Ejercicios propuestos en pseudocdigo


1. Crea un subproceso que reciba como parmetro un texto y lo escriba centrado en pantalla (suponiendo una anchura de 80 columnas) 2. Crea una funcin que reciba un nmero entero y devuelva la cantidad de divisores (por ejemplo, para el nmero 16, sus divisores son 1, 2, 4, 8, 16, luego la respuesta debera ser 5). 3. Crea un programa que pida dos nmero enteros al usuario y diga si alguno de ellos es mltiplo del otro. Crea una funcin EsMultiplo que te ayude a que el proceso principal sea legible.

Y en Python?
Los subprocesos o subrutinas se definen en Python con la palabra "def", deben tener parntesis despus del nombre (aunque estarn vacos si no hay parmetros) y la primera lnea debe terminar en "dos puntos", con todo su contenido tabulado hacia la derecha (igual que hacamos con las condiciones y con los bucles):
def subrayar(): for i in range(0, 20): print( "-", end="" ) print() print ( " Primer ejemplo" ) subrayar() print ( " Segundo ejemplo" ) subrayar() print ( " Tercer ejemplo" ) subrayar()

Como se puede ver en este ejemplo, en Python hay que declarar las funciones antes de usarlas (en PseInt no es necesario): Los parmetros, en caso de existir, se escribirn dentro del parntesis, y separados por comas:
def escribirSubrayado(texto): print(texto) for i in range(0, len(texto)): print( "-", end="" ) print() escribirSubrayado ( "Primer ejemplo" ) escribirSubrayado ( "Segundo ejemplo" ) escribirSubrayado ( "Tercer ejemplo" )

Si se trata de una funcin que devuelva valores, tambin se usar la palabra "def" para definirla, y los resultados se devolvern con la palabra "return":

def maximo(n1,n2): if n1 > n2: return n1 else: return n2 print("El mximo de 5 y 12 es:") print( maximo(5,12) ) print("El mximo de 25 y 12 es:") print( maximo(25,12) )

Y se pueden devolver valores no numricos, como cadenas o valores de verdad (verdadero, "True" o falso, "False"), de modo que as quedara la funcin que dice si un nmero es primo o no:
# Comprobacin de si un nmero es primo (ineficiente), # aplicando la definicin: divisible slo entre 1 y l mismo
def esPrimo(n): cantidadDivisores = 0 for i in range(1, n+1): if n % i == 0: cantidadDivisores = cantidadDivisores + 1 if cantidadDivisores <= 2: # Si solo hay 2 divisores, es primo return True else: # Si hay ms, no es primo return False

# Prueba: mostrar los primos del 1 al 30


for i in range(1, 31): if esPrimo(i): print(i)

Ejercicios propuestos en Python


1. Crea una funcin que reciba como parmetro un texto y lo escriba centrado en pantalla (suponiendo una anchura de 80 columnas) 2. Crea una funcin que reciba un nmero entero y devuelva la cantidad de divisores (por ejemplo, para el nmero 16, sus divisores son 1, 2, 4, 8, 16, luego la respuesta debera ser 5). 3. Crea un programa que pida dos nmeros enteros al usuario y diga si alguno de ellos es mltiplo del otro. Crea una funcin EsMultiplo que te ayude a que el cuerpo del programa sea legible.

Das könnte Ihnen auch gefallen