Beruflich Dokumente
Kultur Dokumente
2 - Toma de contacto
Vamos a empezar por lo ms sencillo: escribir en pantalla.
Si queremos crear un programa que muestre algn en pantalla, en la mayora de
versiones de pseudocdigo usaremos la orden ESCRIBIR (en otras versiones puede
ser IMPRIMIR o MOSTRAR). A continuacin de esta palabras, entre comillas,
detallaremos el texto que deseamos que aparezca en pantalla.
Escribir "Hola"
Hacerlo usando PSEINT tambin es casi 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:
que PSEINT se da cuenta de que se trata de una orden que conoce, y nos recuerda
cmo es la orden exacta, incluso cuando apenas llevamos unas pocas letras:
Podemos terminar de teclear la palabra, o bien pulsar Intro para que se complete
automticamente. En cualquier caso, tras terminar la palabra "Escribir", se nos
propone que escribamos "una o ms expresiones, separadas por comas"; en nuestro
caso, ser ser la palabra "Hola", entre comillas:
Mientras que estamos tecleando, PseInt mostrar un mensaje de aviso que nos
recuerda que no ser correcto hasta que terminemos de escribir el texto y cerremos
las comillas:
Y entonces aparecer una nueva ventana que nos muestra el resultado de nuestro
programa (por supuesto, se trata de la palabra Hola):
Un programa puede estar formado por ms de una orden, claro. Bastar con pulsar
Intro despus del final de la orden "Escribir", para crear una nueva lnea en blanco. De
hecho, ni siquiera es necesario teclear la orden, porque PseInt permite utilizar las
estructuras de programacin ms habituales simplemente haciendo clic en el
correspondiente botn del panel derecho:
En ese caso, aparecer un panel inferior, que nos recordar detalles adicionales sobre
esa orden:
8
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
la divisin con /. Una operacin menos habitual, el resto de la divisin, tambin tiene
un smbolo asociado: %. Lo usaremos con frecuencia para saber si un nmero es
mltiplo de otro (por ejemplo, ser mltiplo de 10 si su resto entre 10 es 0, o ser
impar si su resto entre 2 es 1).
Proceso Ejemplo002b
Escribir 15%2
FinProceso
Se puede escribir varios textos en la misma lnea si se emplea la orden ESCRIBIR SIN
SALTAR (o Escribir Sin Bajar), como en este ejemplo:
Proceso Ejemplo002c
Escribir Sin Saltar "9876 * 54321 = "
Escribir 9876 * 54321
FinProceso
11
3 - Variables
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 obtener un dato que el usuario
teclee y dejarlo guardado para utilizarlo despus. Deberemos 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
12
FinProceso
(Nota: Esa es la apariencia de PseInt funcionando sobre Linux, muy similar a la que
muestra cuando se utiliza en Windows).
El resultado de este programa debera ser algo como (dependiendo de los datos que
se introduzcan):
13
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
14
(esos smbolos representan una flecha, para indicar que el valor 3 se va a guardar
dentro del espacio de memoria reservado para la variable llamada "radio").
Y qu ocurre si usamos una variable sin haberle dado valor? Esto sucede 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.
Ejercicio de repaso propuesto 3.1: Crea un programa que escriba el resultado de
multiplicar los dos nmeros que introduzca el usuario
Ejercicio de repaso propuesto 3.2: Crea un programa que calcule la superficie de un
rectngulo a partir de su base y su altura, y que despus muestre el valor de dicha
superficie.
Ejercicio de repaso propuesto 3.3: Crea un programa que calcule la superficie de un
crculo a partir de su radio (la frmula es "PI * radio2") y que despus muestre el valor
de dicha superficie (pista: para calcular el cuadrado de un nmero puedes usar la
opercin "potencia": x^2, o bien multiplicar el nmero por l mismo: x2=x*x).
15
El bloque "SiNo" es opcional: podemos optar por no indicar lo que queremos que se
haga cuando no se cumpla la condicin.
16
Slo tenemos que escribir la condicin que realmente nos interesa, y la serie de pasos
que se deben dar si se cumple y si no se cumple, de modo que nuestro programa
podra quedar as:
Proceso Ejemplo004
Escribir "Dime un numero"
17
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
En ese ejemplo hemos comparado si un valor es mayor que el otro (>). Los
operadores de comparacin que tenemos disponibles son:
Operador relacional
Significado
Ejemplo
>
Mayor que
3>2
<
Menor que
2<3
Igual que
3=3
<=
5<=5
>=
6>=5
18
Ejercicio de repaso propuesto 4.1: Crea un programa que pida dos nmeros al
usuario y responda si son iguales o no lo son.
Tambin es posible comprobar varias condiciones a la vez, para hacer construcciones
ms complejas, 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
Ejemplo
&Y
Conjuncin (y).
|O
Disyuncin (o).
~ NO
Negacin (no).
~(2<5) //falso
Si primerNumero > 0
primerNumero = 0 Entonces
FinProceso
Ejercicio de repaso propuesto 4.2: Haz una variante del ejemplo 004b, usando el
operador ">=".
19
Ejercicio de repaso propuesto 4.3: Crea un programa que pida un nmero al usuario
y diga si es positivo, negativo o cero.
Ejercicio de repaso propuesto 4.4: Haz un programa que pida al usuario dos
nmeros y diga cuntos de ellos son positivos.
Ejercicio de repaso propuesto 4.5: Crea un programa que pida al usuario dos
nmeros y muestre su divisin si el segundo no es cero, o un mensaje de aviso en
caso contrario.
Ejercicio de repaso propuesto 4.6: Prepara un programa que pida al usuario tres
nmeros y diga cul es el mayor de los tres.
El bloque "De Otro Modo" es opcional: si detallamos todos los valores posibles, no
sera necesario utilizarlo.
20
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 haberrestricciones 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 (aunque este
smbolo est menos extendido que el de SI):
As, si en PseInt hacemos clic en el icono del panel derecho que representa la
condicin SEGUN, aparece un esqueleto de programa casi completo, para que
hagamos los cambios que nos interesen:
21
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;
22
23
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.
Ejercicio de repaso propuesto 5.1: Haz un programa que pida un nmero al usuario
un nmero de da de la semana (del 1 al 7) y escriba el nombre de ese da (por
ejemplo, "martes" para el da 2). Debes emplear la orden SEGUN.
Ejercicio de repaso propuesto 5.2: Crea una variante del ejercicio 5.1, en la que
emplees varios SI-ENTONCES en vez de SEGUN.
Ejercicio de repaso propuesto 5.3: Crea un programa que pida un nmero al usuario
un nmero de mes (por ejemplo, el 4) y escriba el nombre del mes correspondiente
(por ejemplo, "abril"). Debes usar la orden SEGUN.
Ejercicio de repaso propuesto 5.4: Crea una variante del ejercicio 5.3, en la que
emplees varios SI-ENTONCES en vez de SEGUN.
24
25
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
26
27
28
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
29
Queda otra forma de repetir fragmentos de programa. Pronto estaremos con ella...
Ejercicio de repaso propuesto 7.1: Crea un programa que pida al usuario un cdigo
de usuario y una contrasea. Deber repetirse hasta que el cdigo sea "1" y la
contrasea sea "1234".
Ejercicio de repaso propuesto 7.2: Haz un programa que permita calcular la suma
de pares de nmeros. Pedir dos nmeros al usuario y mostrar su suma, volviendo a
repetir hasta que ambos nmeros introducidos sean 0. Esta vez debers usar
"Repetir", por lo que tu solucin no ser igual que la del ejercicio 6.2, que empleaba
"Mientras".
Ejercicio de repaso propuesto 7.3: Prepara un programa que divida dos nmeros
que introduzca el usuario. Si el segundo nmero es cero, se le deber avisar y volver a
pedir tantas veces como sea necesario, hasta que introduzca un nmero distinto de
cero, momento en que se calcular y mostrar el resultado de la divisin
30
Por ejemplo, un programa que mostrara los nmeros del 1 al 10, podra ser:
31
Proceso Para01
Para x <- 1 Hasta 10 Hacer
Escribir x;
FinPara
FinProceso
Y obtendramos:
32
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.
Ejercicio de repaso propuesto 8.1: Crea un programa que escriba los nmeros del 5
al 15, ambos incluidos.
Ejercicio de repaso propuesto 8.2: Crea un programa que escriba los mltiplos del 3,
desde el 3 hasta el 30, usando un paso de tamao 3.
Ejercicio de repaso propuesto 8.3: Crea un programa que escriba los mltiplos del 3,
desde el 3 hasta el 30, contando del uno al diez pero mostrando ese contador
multiplicado por tres.
Ejercicio de repaso propuesto 8.4: Crea un programa que escriba los nmeros del
20 al 10, descendiendo.
Ejercicio de repaso propuesto 8.5: Crea un programa que escriba la tabla de
multiplicar del 5: desde "5 x 0 = 0" hasta "5 x 10 = 50"
Ejercicio de repaso propuesto 8.6: Tambin se puede contar usando una orden
"mientras" o una orden "repetir", si usas una variable como contador e incrementas (o
33
FinPara
FinProceso
Ejercicio de repaso propuesto 8.7: A partir del ejemplo que dibuja un rectngulo de
asteriscos, crea un que dibuje un cuadrado (deber pedir slo un dato, el lado, y
ambas rdenes "para" debern tener ese valor como lmite).
Ejercicio de repaso propuesto 8.8: Dibuja un tringulo creciente de asteriscos, del
tamao que indique el usuario. Por ejemplo, si escoge 4, el resultado debera ser:
*
**
***
****
34
9 - Matrices
Cuando necesitamos manejar muchos datos, generalmente hay soluciones ms
efectivas que tener muchas variables. Por ejemplo, si hay que guardar 10 nmeros,
resultar incmodo usar 10 variables llamadas n1, n2, n3, n4, n5, n6, n7, n8, n9, n10;
si se trata de 100 nmeros, puede pasar de resultar incmodo a ser totalmente
inviable. En esos casos, ser ms eficiente almacenar esos 100 datos "juntos",
formando lo que se conoce como 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]".
Como primer contacto, se puede crear una matriz de 3 elementos, guardar datos en
sus 3 posiciones y mostrar el primer dato y el tercero as:
Proceso Matriz3
Dimension datos[3]
datos[1] <- 10
datos[2] <- 25
datos[3] <- 50
FinProceso
Como una matriz puede contener muchos datos, es frecuente recorrerlas de forma
repetitiva, empleando una orden "para". As un ejemplo que nos pida 6 datos y luego
los muestre en orden contrario al que se han introducido podra ser:
35
Proceso MostrarAlReves
Dimension datos[6]
FinProceso
sus valores y calcule la suma de ambos vectores (su primera componente ser x1+y1,
la segunda ser x2+y2 y as sucesivamente).
Ejercicio de repaso propuesto 9.5: Si has estudiado lo que es un vector, prepara un
programa que reserve espacio para dos vectores de 3 componentes, pida al usuario
sus valores y calcule su producto escalar (x1y1+ x2y2+x3y3).
Ejercicio de repaso propuesto 9.6: Haz un programa que pida al usuario 7 nmeros
enteros y calcule (y muestre) cul es el mayor de ellos. Nota: para calcular el mayor
valor de una matriz, hay que comparar cada uno de los valores que tiene almacenados
con el que hasta ese momento es el mximo provisional. El valor inicial de este
mximo provisional no debera ser cero (porque el resultado sera incorrecto si todos
los nmeros son negativos), sino el primer elemento de la matriz.
Ejercicio de repaso propuesto 9.7: Crea un programa que prepare un array con 10
datos prefijados, luego pregunte al usuario qu dato desea buscar, avise si ese dato no
aparece, y que en caso contrario diga cuntas veces se ha encontrado.
Tambin se pueden crear arrays "de dos dimensiones" (por ejemplo, 3 filas y dos
columnas), que se acercan ms al concepto matemtico de matriz:
Proceso Matriz32
Dimension datos[3,2]
datos[1,1] <- 10
datos[2,1] <- 25
datos[3,1] <- 50
datos[1,2] <- 11
datos[2,2] <- 26
datos[3,2] <- 51
37
FinProceso
Ejercicio de repaso propuesto 9.8: Crea un programa que pida al usuario dos
bloques de 10 nmeros cada uno (usando un array de dos dimensiones). Despus
deber mostrar el mayor dato que se ha introducido en cada uno de esos dos bloques.
Ejercicio de repaso propuesto 9.9: Si has estudiado lgebra matricial, haz un
programa que calcule el determinante de una matriz de 2x2, a partir de datos que
introduzca el usuario.
Ejercicio de repaso propuesto 9.10: Si has estudiado lgebra matricial, prepara un
programa que calcule el determinante de una matriz de 3x3.
38