You are on page 1of 38

Tutorial PSEINT

En este tutorial veremos los siguientes temas:

Definicin de un algoritmo
Tipos de datos
Representaciones de un algoritmo Lenguaje natural Pseudocdigo Diagrama de flujo
Lenguaje de programacin Pseint Tipos de datos Expresiones Acciones secuenciales Estructuras de control Arreglos Notaciones Ejercicios

Donde Descargar el programa


Si buscas en google el pseint te dirige al sitio de sourceforge
http://pseint.sourceforge.net/index.php?page=descargas.php
debes descargar la version para windows (bandera de 4 colores de microsoft)
luego de descargar un archivo de extension .exe, al hacer clic este se instala en tu computadora
Actualmente existe la version 20131008 que esta en el nombre del archivo descargado.
1. DEFINICIN DE UN ALGORITMO
Un algoritmo es una lista de operaciones o acciones (instrucciones) para poder encontrar la solucin
a un problema. Estas instrucciones deben estar ordenadas, estar bien definidas (no ser ambiguas, que
cada instruccion tenga un solo significado), finitas (un numero especifico de las mismas para poder
finalizar la tarea)
Esta compuesto por operaciones, mtodos y variables.
Entre las operaciones se conocen las matemticas: +, -, /, *, funciones trigonometricas, raiz cuadrada,
etc.
Los mtodos son las funciones disponibles: Mostrar en pantalla. Pedir un dato
Las variables pueden ser de diversos tipos: por ejemplo la variable entera de nombre dato puede
contener los valores -1, 2, 3, etc. La variable booleana (logica) llamada nombre puede contener los
valores V o F (Verdadero o Falso). Una variable de tipo cadena o string llamada palabra puede contener
los valores aaaaaa, "Hola Mundo", etc. La variable de tipo caracter llamada vocal puede contener los
valores 'a', 'b', '$', etc.

2. TIPOS DE DATOS
Numerico: representa un numero, dentro de este tipo de dato pueden existir:
los enteros: numeros como el 12, 1 , -5, etc
los reales (con coma decimal), como el 1.3, 5.4, -1.33, etc
Booleano: representa un valor logico que solo puede ser verdadero o falso
Caracter: representa a una sola letra del sistema alfanumerico ascci, como por ejemplo 'a', '@', '$',
'3',etc
String o cadena de caracteres: representa una palabra entera, como ser: "Hola Mundo", "Jose", "a", etc
3. REPRESENTACIONES DE UN ALGORITMO
Todo algoritmo puede ser representado por:
Lenguaje natural
Pseudocdigo
Diagramas de flujo
Lenguajes de programacin
4. LENGUAJE NATURAL
Problema : Sumar 2 nmeros.
Representacin mediante Lenguaje natural:
Inicio Suma
Ingresar primer nmero
Guardar nmero en variable a
Ingresar segundo nmero
Guardar nmero en variable b
Sumar a y b
Guardar resultado en R
Mostrar R
Fin
Desventajas: Ambiguo y Extenso
5. PSEUDOCDIGO
Es una forma de representar un algoritmo, que se acerca a los lenguajes de programacin y con
elementos del lenguaje natural.
El pseudocdigo se compone de:
Cabecera
Declaraciones
Cuerpo
La cabecera es la parte del algoritmo que posee el nombre de ste.
Las declaraciones son las variables y constantes que utilizar el algoritmo para resolver el problema.
El cuerpo son el conjunto de instrucciones o acciones que estn entre el Inicio y el Fin.

6. PSEUDOCDIGO
La estructura del pseudocdigo es la siguiente:
Proceso SinTitulo
accion1;
accion2;
....
accionN;
FinProceso
La seccin Proceso SinTitulo es la cabecera del algoritmo, aqui debe estar el nombre del algoritmo
La seccin accin 1, accin 1, es el cuerpo del algoritmo, es la lista de intrucciones ordenadas y
separadas por el punto y coma. Donde termina un punto y coma termina una intruccion (sentencia) y
comienza la siguiente.
En este caso como utilizaremos el Pseint la seccin de declaraciones del algoritmo no se toma en
cuenta, ya que el software se encarga de asignarle el tipo de dato a cada variable dependiendo del uso
que se le d.
PSEUDOCDIGO: Representacin mediante Pseudocdigo
El ejemplo anterior de sumar dos numeros, en pseudocodigo de Pseint se veria como:
Proceso suma
Escribir "Ingrese primer numero" ;
Leer a;
Escribir "Ingrese segundo numero" ;
Leer b;
c <- a + b;
Escribir "La suma es: " c;
FinProceso
La Asignacin
La instruccin de asignacin permite almacenar una valor en una variable.
<variable > <- <expresin> ;
Al ejecutarse la asignacin, primero se evala la expresin de la derecha y luego se asigna el
resultado a la variable de la izquierda. El tipo de la variable y el de la expresin deben coincidir.
Si la variable de la izquierda no exista previamente a la asignacin, se crea. Si la variable exista se
pierde su valor anterior y toma el valor nuevo, razn por la cual se dice que la asignacin es
"destructiva" (destruye el valor que tena la variable de la izquierda). Los contenidos de las variables
que intervienen en la expresin de la derecha no se modifican.
Existen dos operadores de asignacin alternativos que pueden utilizarse indistintamente en cualquier
caso, pero la habilitacin del segundo (=) depede del perfil de lenguaje seleccionado.
<variable> := <expresin> ;
<variable> = <expresin> ;

Lectura
La instruccin Leer permite ingresar informacin desde el ambiente.
Leer <variablel> , <variable2> , ... ,
<variableN> ;
Esta instruccin toma N valores desde el ambiente (en este caso el teclado) y los asigna a las N
variables mencionadas. Pueden incluirse una o ms variables, por lo tanto el comando leer uno o ms
valores.
Si una variable donde se debe guardar el valor ledo no existe, se crea durante la lectura. Si la variable
existe se pierde su valor anterior ya que tomar el valor nuevo, razn por la cual se dice que la lectura
es "destructiva" (destruye el valor que tena previamente la variable).
Si se utiliza sintaxis flexible se permite opcionalmente separar las variables a leer simplemente con
espacios en lugar de comas. Esto se configura en el cuadro de Opciones del PSeudocdigo.
El ejemplo Suma muestra un programa muy simple que lee dos nmeros y calcula y muestra la suma
de los mismos.
Escritura
La instruccin Escribir permite mostrar valores al ambiente.
Escribir <exprl> , <expr2> , ... , <exprN> ;
Esta instruccin informa al ambiente (en este caso escribiendo en pantalla) los valores obtenidos de
evaluar N expresiones. Dado que puede incluir una o ms expresiones, mostrar uno o ms valores. Si
hay ms de una expresin, se escriben una a continuacin de la otra sin separacin, por lo que el
algoritmo debe explicitar los espacios necesarios para diferenciar dos resultados si as lo requiere.
Si en algun punto de la linea se encuentran las palabras clave "SIN SALTAR" o "SIN BAJAR" los
valores se muestran en la pantalla, pero no se avanza a la linea siguiente, de modo que la prxima
accin de lectura o escritura continuar en la misma linea. En caso contrario, se aade un salto de lnea
luego de las expresiones mostradas.
Escribir Sin Saltar <exprl> , ... , <exprN>;
Escribir <exprl> , ... , <exprN> Sin Saltar;
Puede utlizarse indistantemente las palabras Imprimir y Mostrar en lugar de Escribir si su perfil de
lenguaje permite sintaxis flexible. Adems, en este caso se permite opcionalmente separar las
expresiones a mostrar simplemente con espacios en lugar de comas. Esto se configura en el cuadro de
Opciones del PSeudocdigo.
El ejemplo Suma muestra un programa muy simple que lee dos nmeros mostrando con la
instruccin Escribir las indicaciones para el usuario y el resultado de sumar los mismos.
Consideraciones
Todas las acciones (instrucciones) deben estar entre Proceso y FinProceso. Como se deben sumar dos
numeros entonces necesitamos de dos variables que se llamarn a y b respectivamente de tipo
numerico. Para mostrar una leyenda pidiendo que se ingrese un numero se utiliza la instruccion
Escribir, que permite mostrar informacion en al pantalla. Para ingresar un dato se utiliza la instruccion
Leer.
Y finalmente para asignar la suma de a y b a otra variable c se utiliza la instruccion de asignacin <que permite almacenar un valor en una variable.
Se pueden introducir comentarios luego de una instruccin, o en lneas separadas, mediante el uso de la
doble barra ( // ). Todo lo que precede a //, hasta el fin de la lnea, no ser tomado en cuenta al
interpretar el algoritmo. No es vlido introducir comentario con /* y */.

No puede haber instrucciones fuera del proceso (antes de PROCESO, o despus de FINPROCESO),
aunque s comentarios.
Las estructuras no secuenciales pueden anidarse. Es decir, pueden contener otras adentro, pero la
estructura contenida debe comenzar y finalizar dentro de la contenedora.
Los identificadores, o nombres de variables, deben constar slo de letras, nmeros y/o guin_bajo (_),
comenzando siempre con una letra.
Los tipos de datos de las variables no se declaran explicitamente, sino que se infieren a partir de su
utilizacin.
Las constantes de tipo carcter se escriben entre comillas ( " ).
En las constantes numricas, el punto ( . ) es el separador decimal.
Las constantes lgicas son Verdadero y Falso.
Actualmente este pseudolenguaje no contempla la creacin de nuevas funciones o subprocesos.
Nota: Considera como se debera crear otros procesos para realizar la resta, la divisin y la
multiplicacin.

Estructuras en pseint
Las estructuras en Pseint se dividen en condiciones y repetitivas:
Condicionales
Condicional Si-Entonces
La secuencia de instrucciones ejecutadas por la instruccin Si-Entonces-Sino depende del valor de
una condicin lgica.
Si <condicin>
Entonces
<instrucciones>
Sino
<instrucciones>
FinSi
Al ejecutarse esta instruccin, se evala la condicin y se ejecutan las instrucciones que
correspondan: las instrucciones que le siguen al Entonces si la condicin es verdadera, o las
instrucciones que le siguen al Sino si la condicin es falsa. La condicin debe ser una expresin lgica,
que al ser evaluada retorna Verdadero o Falso.
La clusula Entonces debe aparecer siempre, pero la clusla Sino puede no estar. En ese caso, si la
condicin es falsa no se ejecuta ninguna instruccin y la ejecucin del programa contina con la
instruccin siguiente.
El ejemplo Triangulo lee las medidas de los tres lados de un tringulo y utiliza esta estructura para
determinar cual es el mayor de los tres, y verificar luego si se trata de un tringulo rectngulo o no.

Seleccin Multiple
La secuencia de instrucciones ejecutada por una instruccin Segn depende del valor de una variable
numrica.
Segun <variable> Hacer
<nmero1>: <instrucciones>
<nmero2>,<nmero3>: <instrucciones>
<...>
De Otro Modo: <instrucciones>
FinSegun
Esta instruccin permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor
almacenado en una variable de tipo numrico. Al ejecutarse, se evala el contenido de la variable y se
ejecuta la secuencia de instrucciones asociada con dicho valor.
Cada opcin est formada por uno o ms nmeros separados por comas, dos puntos y una secuencia
de instrucciones. Si una opcin incluye varios nmeros, la secuencia de instrucciones asociada se debe
ejecutar cuando el valor de la variable es uno de esos nmeros.
Opcionalmente, se puede agregar una opcin final, denominada De Otro Modo, cuya secuencia de
instrucciones asociada se ejecutar slo si el valor almacenado en la variable no coincide con ninguna
de las opciones anteriores.
Repetitivas
Lazos Mientras
La instruccin Mientras ejecuta una secuencia de instrucciones mientras una condicin sea verdadera.
Mientras <condicin> Hacer
<instrucciones>
FinMientras
vAl ejecutarse esta instruccin, la condicin es evaluada. Si la condicin resulta verdadera, se ejecuta
una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecucin del
cuerpo del ciclo se vuelve a evaluar la condicin y, si es verdadera, la ejecucin se repite. Estos pasos
se repiten mientras la condicin sea verdadera.
Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera
vez la condicin resulta ser falsa.
Si la condicin siempre es verdadera, al ejecutar esta instruccin se produce un ciclo infinito. A fin de
evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instruccin que modifique la o las
variables involucradas en la condicin, de modo que sta sea falsificada en algn momento y as
finalice la ejecucin del ciclo.
El ejemplo AdivinaNumero le da al usuario 10 intentos para adivinar un nmero generado
aleatoriamente, utilizando esta estructura para verificar si el usuario acierta el nmero o si se agotan los
intentos.
Lazos Repetir
La instruccin Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condicin sea
verdadera.

Repetir
<instrucciones>
Hasta Que <condicin>
Al ejecutarse esta instruccin, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta
una vez y luego se evala la condicin. Si la condicin es falsa, el cuerpo del ciclo se ejecuta
nuevamente y se vuelve a evaluar la condicin. Esto se repite hasta que la condicin sea verdadera.
Note que, dado que la condicin se evala al final, las instrucciones del cuerpo del ciclo sern
ejecutadas al menos una vez.
Adems, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instruccin que
modifique la o las variables involucradas en la condicin de modo que en algn momento la condicin
sea verdadera y se finalice la ejecucin del ciclo.
Si se utiliza sintaxis flexible (ver Opciones del PSeudocdigo) se permite opcionalmente utilizar
Mientras Que en lugar de Hasta Que, de modo que el conjunto de acciones contenidas en el bucle se
ejecuta mientras que la condicin sea verdadera. Notar que la palabra Que es la que diferencia el uso de
la palabra Mientras en la estructura repetir de la estructura Mientras. Es decir, si se omite la palabra que
se considera como el comienzo de un bucle Mientras en lugar de el final de un bucle Repetir.
Lazos Para
La instruccin Para ejecuta una secuencia de instrucciones un nmero determinado de veces.
Para <variable> <- <inicial> Hasta <final> Con Paso <paso> Hacer
<instrucciones>
FinPara
Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de
instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso>
unidades y se evala si el valor almacenado en <variable> super al valor <final>. Si esto es falso se
repite hasta que <variable> supere a <final>. Si se omite la clusula Con Paso <paso>, la variable
<variable> se incrementar en 1.
Si se habilita la sintaxis flexible en las configuracin del lenguaje se pueden utilizar dos alternativas.
La primer variante consiste en reemplazar el operador de asignacin por la palabra clave Desde:
Para <variable> Desde <inicial> Hasta <final> Con Paso <paso> Hacer ...
De esta forma, la lectura de la sentencia resulta ms obvia. Adems, con sintaxis flexible, si no se
especifica el paso pero el valor final es menor al inicial, el bucle recorrer los valores en orden inverso
como si el paso fuera -1. La segunda variante solo sirve para recorrer arreglos de una o ms
dimensiones. Se introduce con la construccin Para Cada seguida de un identificador, la palabra clave
De y otro identificador:
Para Cada <elemento> De <Arreglo> Hacer ...
El segundo identificador debe corresponder a un arreglo. El primero ser el que ir variando en cada
iteracin. El ciclo realizar tantas iteraciones como elementos contenga el arreglo y en cada uno el
primer identificador servir para refererirse al elemento del arreglo en cuestin.
El ejemplo Promedio utiliza un bucle de este tipo para leer N valores numricos con los cuales
calcula un promedio.
El ejemplo Para utiliza las tres variantes de este tipo de bucles para recorrer un arreglo.

Tipos de Datos Simples y Arreglos


1. Tipos de Datos Simples
Existen tres tipos de datos bsicos:
Numrico: numeros, tanto enteros como reales. Para separar decimales se utiliza el punto.
Ejemplos: 12 23 0 -2.3 3.14
Lgico: solo puede tomar dos valores: VERDADERO o FALSO.
Caracter: caracteres o cadenas de caracteres encerrados entre comillas (pueden ser dobles o
simples). Ejemplos 'hola' "hola mundo" '123' 'FALSO' 'etc'
Los tipos de datos simples se determinan automticamente cuando se crean las variables. Las dos
acciones que pueden crear una variable son la lectura(LEER) y la asignacion(<-). Por ejemplo, la
asignacin "A<-0;" est indicando implcitamente que la variable A ser una variable numrica. Una
vez determinado el tipo de dato, deber permanecer constante durante toda la ejecucin del proceso; en
caso contrario el proceso ser interrumpido.
Opcionalmente, se puede declarar una variable numrica como entera con la instruccin DEFINIR. En
este caso, todo valor no entero que se lea o asigne a la misma ser truncado
Definicin de variables
La instruccin definir permite explicitar el tipo de una o ms variables. Esta definicin puede ser
opcional u obligatoria dependiendo de la configuracin del lenguaje. La sintaxis es:
Definir <varl> , <var2> , ... , <varN> Como [REAL/ENTERO/LOGICO/CARACTER];
Una variable debe definirse antes de ser utilizada por primera vez. Los arreglos, se definen utilizando
su identificador (sin subndices ni dimensiones) antes o despus de dimensionarlos, y el tipo aplica para
todos los elementos del mismo (ya que se trata de una estructura de datos homognea).
Los tipos posibles son NUMERO, NUMERICO, REAL, ENTERO, LOGICO, CARACTER,
TEXTO, CADENA.
NUMERO, NUMERICO y REAL son sinnimos para el tipo de datos numrico bsico, que puede
almacenar tanto nmeros reales como enteros. El tipo ENTERO es una especializacin que slo
permite almacenar valores enteros; cualquier valor no entero que se lea o asigne en una variable de este
tipo ser truncado.
Una variable de tipo LOGICO slo puede tomar los valores VERDADERO y FALSO, pero cuando
se lee una variable ya definida como lgica, el usuario puede ingresar tambin las abreviaciones V y F,
o 0 y 1.
CARACTER, TEXTO y CADENA son sinnimos para definir variables de tipo caracter. Estas
pueden contener cero, uno o ms caracteres arbitrarios y no tienen una longitud mxima. Si se declara
una variable de este tipo y en una lectura el usuario ingresa un nmero o un valor lgico, se asignar
una cadena que contiene el texto ingresado (ejemplo: "1", "VERDADERO", etc).
Si se intenta asignar a una variable ya definida un dato de un tipo incorrecto se producir un error en
tiempo de ejecucin.

2. Arreglos
Los arreglos son estructuras de datos homogneas (todos sus datos son del mismo tipo) que permiten
almacenar un determinado nmero de datos bajo un mismo identificador, para luego referirse a los
mismos utilizando uno o ms subndices. Los arreglos pueden pensarse como vectores, matrices, etc.
Para poder utilizar un arreglo, primero es obligatorio su dimensionamiento; es decir, declarar los rangos

de sus subndices, lo cual determina cuantos elementos se almacenarn y como se acceder a los
mismos.
Dimensionamiento
La instruccin Dimension permite declarar un arreglo, indicando sus dimensiones.
Dimension <identificador> (<maxl>,...,<maxN>);
Esta instruccin define un arreglo con el nombre indicado en <indentificador> y N dimensiones. Los
N parmetros indican la cantidad de dimensiones y el valor mximo de cada una de ellas. La cantidad
de dimensiones puede ser una o ms, y la mxima cantidad de elementos debe ser una expresin
numrica positiva.
Si se utilizan arreglos en base 0, al declarar un arreglo de, por ejemplo 15 elementos, los ndices de
elementos vlidos van de 0 a 14; mientras que si se utilizan arreglos en base 1 los ndices vlidos van
de 1 a 15. Esto se configura en el cuadro de Opciones del PSeudocdigo.
Se pueden declarar ms de un arreglo en una misma instruccin, separndolos con una coma (,).
Dimension <ident1> (<max11>,...,<max1N>),..., <identM> (<maxM1>,...,<maxMN>)
Por ejemplo declarar un arreglo de 10 posiciones:
Dimension A [10]
Ejemplo de un arreglo de 10 enteros que son cargados en el mismo y luego mostrados:
Proceso Arreglo
Dimension A[10];
Definir A Como Entero;
Definir i Como Entero;
Para i<-1 Hasta 10 Con Paso 1 Hacer
Escribir "De un numero";
Leer A[i];
FinPara
Para i<-1 Hasta 10 Con Paso 1 Hacer
Escribir "El numero en la posicion: " i " es: " A[i];
FinPara
FinProceso

Ejemplos en Pseint
En el siguiente ejemplo se intenta caclular el promedio de 10 numeros, observa bien el codigo,
copialo a Pseint y luego fijate si es correcto sino identifica los problemas y resuelvelos:
Proceso Promedio
//Calcula el promedio de una lista de numeros
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;

Escribir "Ingrese un numero:";


Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
//Declaro una variable promedio para asignarle el promedio
promedio<-n1+n2+n3+n4+n5+n6+n7+n8+n9+n10 / 10;
//Muestro el promedio
Escribir "El promedio es: ",promedio;
FinProceso
2. En este otro ejemplo se trata de mostrar los primeros 50 numeros pares, haz lo mismo que en el
ejemplo anterior, copia el codigo en pseint y fijate si es correcto.
Proceso NumerosPares
//Muestra los numeros pares del 0 al 50
Escribir "Ingrese un numero:";
Leer x;
Repetir
//la funcion MOD calcula el resto de la division por 2, si es cero entonces es par
Si x MOD 2 = 0 Entonces
Escribir "Numero: ",x;
FinSi
Hasta Que x = 50
Escribir "Ultimo Numero: ",x;
Escribir "Fin de listado";
FinProceso
3. Este algoritmo intenta mostrar los numeros del 1 al 100, hace lo mismo que en los ejemplos
anteriores, fijate si es correcto
Proceso Repetir1al100
//Hacer un pseudocodigo que imprima los numeros del 1 al 100
c <- 0
MIENTRAS c < 100 HACER
ESCRIBIR c;
FINMIENTRAS
ESCRIBIR "ultimo ciclo: " c;

ESCRIBIR "Fin de repeticion";


FinProceso
4. Este codigo es el mismo que el ejercicio anterior pero utiliza la estructura Repetir - Hasta,
Funciona?,
haz lo mismo que en los ejercicios anteriores, busca los errores
Proceso Repetir1al100conRepetir
//Hacer un pseudocodigo que imprima los numeros del 1 al 100
c <- 0
Repetir
ESCRIBIR c;
Hasta Que c < 100
ESCRIBIR "ultimo ciclo: " c;
ESCRIBIR "Fin de repeticion";
FinProceso
5. En el siguiente codigo se quiere mostrar los numeros del 100 al 0, haz lo mismo busca los errores
Proceso Repetir1al100conRepetir
//Hacer un pseudocodigo que imprima los numeros del 100 al 0 en orden decreciente
c <- 100
Repetir
ESCRIBIR c;
Hasta Que c <= 0
ESCRIBIR "ultimo ciclo: " c;
ESCRIBIR "Fin de repeticion";
FinProceso
6. Realizar un algoritmo que pida 3 numeros, verifique que sean positivos, luego calcule el promedio y
busque el mayor de todos.
7. Realizar un algoritmo que pida un numero y luego calcule la raiz cuadrada del mismo.
8. Realizar un algoritmo que muestre los primeros 50 numeros pares.
Una persona debe realizar un muestreo con N personas para determinar el promedio de
//peso de los nios, jvenes, adultos y viejos que existen en su zona habitacional. Se
//determinan las categoras con base en la siguiente tabla:
Proceso PesoPromedio
//Inicializo a 0 los contadores para edad y peso
numeroNios<-0;
numeroAdolescentes<-0;
numeroJovenes<-0;
numeroAdultos<-0;

numeroViejos<-0;
pesoNios<-0;
pesoAdolescentes<-0;
pesoJovenes<-0;
pesoAdultos<-0;
pesoViejos<-0;
pesoPromedioNios <-0;
pesoPromedioAdolescentes <-0;
pesoPromedioJovenes <-0;
pesoPromedioAdultos <-0;
pesoPromedioViejos <-0;
numeroPersonas<-0;
Escribir "Ingresar cantidad de personas:"
Leer N
Repetir
//Pido el peso y la edad de la persona
Escribir 'De el peso de la persona';
Leer peso;
Escribir 'De la edad de la persona';
Leer edad;
//Veo en que categoria de edad esta la persona
Si (edad >= 0 y edad <=10) Entonces
numeroNios<-numeroNios + 1; //aado 1 nio a esta categoria
pesoNios<-pesoNios + peso; //sumo al contador de peso de los nios el nio encontrado
FinSi
Si (edad >= 11 y edad <=17) Entonces
numeroAdolescentes<-numeroAdolescentes + 1; //aado 1 adolescente a esta categoria
pesoAdolescentes<-pesoAdolescentes + peso; //sumo al contador de peso de los adolescentes el
adolescente encontrado
FinSi
Si (edad >= 18 y edad <=29) Entonces
numeroJovenes<-numeroJovenes + 1; //aado 1 Jovenes a esta categoria
pesoJovenes<-pesoJovenes + peso; //sumo al contador de peso de los Jovenes el Jovenes encontrado
FinSi
Si (edad >= 30 y edad <=59) Entonces
numeroAdultos<-numeroAdultos + 1; //aado 1 Jovenes a esta categoria
pesoAdultos<-pesoAdultos + peso; //sumo al contador de peso de los Jovenes el Jovenes encontrado
FinSi
Si (edad >= 60) Entonces
numeroViejos<-numeroViejos + 1; //aado 1 Viejos a esta categoria
pesoViejos<-pesoViejos + peso; //sumo al contador de peso de los Viejos el Viejos encontrado
FinSi

numeroPersonas<-numeroPersonas + 1;
Hasta Que numeroPersonas = N
//Calculo el promedio de cada categoria
Si numeroNios > 0 Entonces
pesoPromedioNios <- pesoNios / numeroNios;
FinSi
Si numeroAdolescentes > 0 Entonces
pesoPromedioAdolescentes <- pesoAdolescentes / numeroAdolescentes;
FinSi
Si numeroJovenes > 0 Entonces
pesoPromedioJovenes <- pesoJovenes / numeroJovenes;
FinSi
Si numeroAdultos > 0 Entonces
pesoPromedioAdultos <- pesoAdultos / numeroAdultos;
FinSi
Si numeroViejos > 0 Entonces
pesoPromedioViejos <- pesoViejos / numeroViejos;
FinSi
Escribir 'Peso Promedio nios: ' pesoPromedioNios;
Escribir 'Peso Promedio nios: ' pesoPromedioAdolescentes;
Escribir 'Peso Promedio nios: ' pesoPromedioJovenes;
Escribir 'Peso Promedio nios: ' pesoPromedioAdultos;
Escribir 'Peso Promedio nios: ' pesoPromedioViejos;
FinProceso
Matrices en Pseint
Matrices en pseint
Tal como en excel que existen filas y columnas por cada celda que contiene un valor, tambien en pseint
se puede crear una matriz, para lo cual se deben crear dos indices para saber cual es la fila y columna
donde se ubicara un valor.
Proceso Matriz
//Primero se crea la matriz de 2 x 2 y se define su tipo, asi como los dos indices para la fila y columna
Dimension M [2,2];
Definir M,I,J como Entero;
// Leer valores, aqui se cargan los valores en cada celda
Para J<-1 Hasta 2 Hacer
Para I<-1 Hasta 2 Hacer
Escribir 'Ingrese valor para indice ',I,', en columna ',J,':'
Leer M[I,J]
FinPara
FinPara

// Mostrar valores de cada celda


Para I<-1 Hasta 2 Hacer
Para J<-1 Hasta 2 Hacer
Escribir 'El valor para indice ',I,', en columna ',J,'es :' M[I,J];
FinPara
FinPara
FinProceso
Trabajo Practico de Pseint
1. Escribir un pseudocdigo que escriba Hola Mundo.
2.
Escribir un Pseudocdigo de un programa que permita leer la edad y peso de una persona y
posteriormente imprimirla.
3. Escribir un Pseudocdigo que calcule el rea de un tringulo recibiendo como entrada el valor de
base y altura.
4. Escribir Pseudocdigo que calcule el rea de un crculo.
5. Escribir Pseudocdigo que dados 2 valores de entrada imprima siempre la divisin del mayor entre
el menor.
6. Escribir Pseudocdigo que lea de entrada 3 nmeros y que indique cual es el mayor de ellos.
7.
Escribir un Pseudocdigo que lea 3 nmeros los cuales significan una fecha (da, mes, ao).
Comprobar que sea vlida la fecha, si no es vlido que imprima un mensaje de error, y si es vlida
imprimir el mes con su nombre.
8. Escribir un Pseudocdigo que pida la edad y el sexo y dependiendo si es hombre o mujer y si puede
votar o no.
9. Escribir un algoritmo que realice un men de opciones, utilizando la estructura
SegnHacer,
para realizar este algoritmo se debe consultar la ayuda , esto es ir al men Ayuda dentro del rbol de
ayuda a la opcin Pseudocodigo, luego Expresiones y elegir Funciones, all hay una lista de las
funciones que se pueden aplicar.
Se debe pedir un nmero para realizar clculos con las opciones y un nmero de opcin
para elegir una de las funciones y mostrarla en pantalla. El algoritmo debe pedir un nmero de
opcin y un nmero para realizar el clculo, luego con la estructura segn se debe mostrar
Si es la opcin 1 la raz cuadrada de ese nmero pedido
Si es la opcin 2 la valor absoluto de ese nmero pedido
Si es la opcin 3 la logaritmo natural de ese nmero pedido
Si es la opcin 4 la Exponencial de ese nmero pedido
Si es la opcin 5 la redondeo de ese nmero pedido
Si no es ninguna de las opciones anteriores entonces se muestra un nmero al azar.
1.
Se debe mostrar los 50 primeros nmeros pares pero en orden inverso utilizando las estructuras
repetitivas, Para, Mientras y Repetir.
2.
Se desea convertir las calificaciones alfabticas A, B, C y D a calificaciones numricas 4, 5, 6 y
7, respectivamente. (Utilizar Segun Hacer)
13. Dado un valor introducido por teclado, escribir el nombre del da de la semana, de forma que
represente su posicin dentro de la semana.
14.Leer un nmero entre uno y diez y visualizar si es par o impar.

15. Calcular las soluciones de una ecuacin de segundo grado. ((-b+raz(b*b-4*a*c))/2*a);


16.Contar los nmeros positivos introducidos mediante teclado. Detener el algoritmo al leer un n cero
o negativo.
17. Escribir los nmeros del uno al cien, al derecho y al revs utilizando las estructuras de control:
Repetir, Para y Mientras
18. Introducir las notas de 40 alumnos y obtener el porcentaje de aprobados. (Bucle controlado por
contador).
19. Algoritmo que calcule el cubo de un entero dado
20. Obtener el seno y el coseno de un ngulo expresado en radianes, mediante el uso de funciones.
21. Desarrolle un algoritmo que realice la sumatoria de los nmeros enteros comprendidos entre el 1 y
el 10, es decir, 1 + 2 + 3 + . + 10.
22. Crear un arreglo llamado nmeros que almacene los siguientes datos: 20, 14, 8, 0, 5, 19 y 4
23. Crear un arreglo de 5 posiciones y llnelo con los nmeros que el usuario desee.
24. Crear un arreglo llamado nombres y que almacene los siguientes nombres de personas: Juan, Pedro,
mara, Humberto y Oscar.
25. Llenar un arreglo con nombres de personas. Preguntar al usuario cuantos datos desea ingresar.
26. Crear un arreglo de 10 nmeros llamado arreglo1, luego crear otro arreglo de 10 nmeros llamado
arreglo2, almacenar los 10 nmeros en cada arreglo. Luego sumar los dos arreglos, el resultado se debe
guardar en otro arreglo llamado resultado.
27. Llenar un vector de 10 posiciones con nmeros aleatorios entre 1 y 100
28. Llenar un vector con nmeros enteros (nmeros positivos negativos). Mostrar la cantidad de
nmeros positivos que hay en dicho arreglo.
29. Crear un arreglo de 10 nmeros llamado arreglo1, luego crear otro arreglo de 10 nmeros llamado
arreglo2, almacenar los 10 nmeros en cada arreglo. Luego multiplicar los dos arreglos, el resultado se
debe guardar en otro arreglo llamado resultado.
30. Crear un arreglo de 10 nmeros llamado arreglo1, luego crear otro arreglo de 10 nmeros llamado
arreglo2, almacenar los 10 nmeros en cada arreglo. Luego restar los dos arreglos, el resultado se debe
guardar en otro arreglo llamado resultado.
31. Crear un arreglo de 10 nmeros llamado arreglo1, luego crear otro arreglo de 10 nmeros llamado
arreglo2, almacenar los 10 nmeros en cada arreglo. Luego dividir los dos arreglos, el resultado se debe
guardar en otro arreglo llamado resultado.
32. En el siguiente ejemplo se intenta calcular el promedio de 10 nmeros, observa bien el cdigo,
copialo a Pseint y luego fjate si es correcto sino identifica los problemas y resulvelos:
Proceso Promedio
//Calcula el promedio de una lista de nmeros
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;

Escribir "Ingrese un numero:";


Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
Escribir "Ingrese un numero:";
Leer n;
//Declaro una variable promedio para asignarle el promedio
promedio<-n1+n2+n3+n4+n5+n6+n7+n8+n9+n10 / 10;
//Muestro el promedio
Escribir "El promedio es: ",promedio;
FinProceso
33. En este otro ejemplo se trata de mostrar los primeros 50 nmeros pares, haz lo mismo que en el
ejemplo anterior, copia el codigo en pseint y fjate si es correcto.
Proceso NumerosPares
//Muestra los nmeros pares del 0 al 50
Escribir "Ingrese un numero:";
Leer x;
Repetir
//la funcin MOD calcula el resto de la division por 2, si es cero entonces es par
Si x MOD 2 = 0 Entonces
Escribir "Numero: ",x;
FinSi
Hasta Que x = 50
Escribir "Ultimo Numero: ",x;
Escribir "Fin de listado";
FinProceso
34. Este algoritmo intenta mostrar los nmeros del 1 al 100, hace lo mismo que en los ejemplos
anteriores, fjate si es correcto
Proceso Repetir1al100
//Hacer un pseudocodigo que imprima los nmeros del 1 al 100
c <- 0
MIENTRAS c < 100 HACER
ESCRIBIR c;

FINMIENTRAS
ESCRIBIR "ultimo ciclo: " c;
ESCRIBIR "Fin de repeticion";
FinProceso
35. Este cdigo es el mismo que el ejercicio anterior pero utiliza la estructura Repetir - Hasta,
Funciona?,
haz lo mismo que en los ejercicios anteriores, busca los errores
Proceso Repetir1al100conRepetir
//Hacer un pseudocodigo que imprima los nmeros del 1 al 100
c <- 0
Repetir
ESCRIBIR c;
Hasta Que c < 100
ESCRIBIR "ultimo ciclo: " c;
ESCRIBIR "Fin de repeticion";
FinProceso
36. En el siguiente cdigo se quiere mostrar los nmeros del 100 al 0, haz lo mismo busca los errores
Proceso Repetir1al100conRepetir
//Hacer un pseudocodigo que imprima los nmeros del 100 al 0 en orden decreciente
c <- 100
Repetir
ESCRIBIR c;
Hasta Que c <= 0
ESCRIBIR "ultimo ciclo: " c;
ESCRIBIR "Fin de repeticion";
FinProceso
37. Realizar un algoritmo que pida 3 nmeros, verifique que sean positivos, luego calcule el promedio
y busque el mayor de todos.
38. Realizar un algoritmo que pida un nmero y luego calcule la raz cuadrada del mismo.
39. Realizar un algoritmo que muestre los primeros 50 nmeros pares.

Datos y Variables
Datos y tipos de datos
Objetivos
Los problemas resueltos anteriormente slo buscan representar un conjunto de acciones a tomar
dependiendo de la situacin actual. Este es el objetivo de las estructuras de control. A travs de ellas
puede decidirse, durante el algoritmo, cul es el rumbo de accin a seguir.
Sin embargo, existen situaciones en las que es preciso representar informacin adicional
especfica del problema a resolver. Por ejemplo, podra resultar de inters saber la cantidad de veces
que se apag el horno mientras se estaba horneando una pizza o la cantidad de pasos realizados por el
robot hasta encontrar una flor.
El objetivo de este captulo es incorporar las herramientas necesarias para lograr representar y utilizar
esta informacin.
Temas a tratar

Conceptos de Control y Datos.


Representacin de los Datos.
Variables
Sintaxis para la declaracin de variables.
Tipos de datos.
Tipo de dato numrico (numero).
Tipo de dato lgico (boolean).
Esquema de un Programa en Visual Da Vinci.
Modificacin de la informacin representada.
Ejemplos.
Comparaciones.
Representacin de ms de un dato dentro del programa.
Conclusiones.
Ejercitacin.

3.1 Conceptos de Control y Datos


Hasta ahora se ha insistido en las instrucciones que constituyen un algoritmo. El orden de lectura de
dichas instrucciones, constituye el control del algoritmo. Normalmente la lectura del control de un
algoritmo, que tambin puede representarse grficamente, indica el orden en que se irn ejecutando las
instrucciones y como consecuencia de ello, qu es lo que ese algoritmo hace.
Retomemos el ejemplo del captulo 2, ejercicio 9.
Ejemplo 2.9: Escriba un programa que le permita al robot recorrer la avenida 7 hasta encontrar una
esquina que no tiene flores. Al finalizar debe informar en qu calle qued parado. Por simplicidad,
suponga que esta esquina seguro existe.
programa Cap2Ejemplo9
comenzar
iniciar

Pos(7,1)
mientras HayFlorEnLaEsquina
mover
Informar( PosCa )
Fin
Si quisiramos saber cuntas cuadras recorri el robot, necesitaramos considerar dicha cantidad como
un dato.
Un dato es un elemento u objeto de la realidad que los algoritmos representan y son capaces de
modificar y procesar.
Cuando se resuelven problemas con computadora, muchas veces se modelizan los objetos reales
mediante objetos ms abstractos, representables y entendibles sobre una computadora.
Es importante entender que el mecanismo de resolucin de problemas involucra generalmente una
transformacin o un procesamiento de los datos, manejado por el control del algoritmo.
3.2 Representacin de los Datos
Como se dijo anteriormente, los algoritmos modifican objetos de la realidad. La representacin de
dichos objetos estar dada por sus caractersticas principales o por la informacin que nos interese
conocer de ellos.
En el caso del ltimo ejemplo visto, slo nos concentramos en representar las cuadras recorridas por el
robot, y dejamos de lado la cantidad de flores y papeles de cada esquina visitada. Es decir, los datos a
representar son aquellos de inters especfico para resolver ese problema.
Si adems de contar la cantidad de cuadras recorridas, necesitramos contar la cantidad de flores en
todas las esquinas visitadas, sera necesario representar esta informacin dentro del algoritmo.
Por lo tanto, se comenzar extendiendo la notacin empleada en el algoritmo para dar lugar a las
declaraciones de los datos que resultan relevantes al problema.
3.3 Variables
Adems de su capacidad de movimiento y de recoger o depositar flores y papeles, el robot posee la
habilidad de manejar datos que le permiten representar ciertos atributos de los problemas que debe
resolver. Por ejemplo, es capaz de calcular la cantidad de flores que lleva en su bolsa o recordar si en
una esquina dada haba ms flores que papeles.
En general, durante la ejecucin de un programa es necesario manipular informacin que puede
cambiar continuamente. Por este motivo, es imprescindible contar con un elemento que permita variar
la informacin que se maneja en cada momento. Este elemento es lo que se conoce como variable.
Una variable permite almacenar un valor que puede ser modificado a lo largo del programa.
Dicho valor representa un dato relevante para el problema a resolver. Dentro de un mismo programa
pueden utilizarse tantas variables como sean necesarias.
3.3.1 Sintaxis para la declaracin de variables
Se denominan identificadores a los nombres descriptivos que se asocian a los datos (variables) para
representar, dentro del programa, su valor.
En el lenguaje del robot, existe una seccin dentro del programa donde se declaran las variables que se
van a utilizar. La sintaxis es la siguiente:
programa nombre del programa

variables
{indique aqu las variables a utilizar}
comenzar
{sentencias que indican el recorrido del robot}
Fin
Notemos que se ha incorporado una seccin para la declaracin de las variables entre la lnea que
contiene el nombre del programa y la palabra comenzar. El esquema de un programa, en Visual Da
Vinci, que utiliza variables sera el siguiente:
programa Cap2Ejemplo9
variables
nombreVariable
comenzar
{sentencias}
fin
Ahora quedan distinguidos dentro del programa dos sectores: un sector superior donde se declaran las
variables de inters y un sector inferior donde se detallan las instrucciones del programa.
Si en el ejemplo antes visto se quisiera contar la cantidad de cuadras recorridas hasta encontrar una
esquina sin flor, entonces deberamos modificar el programa agregando en la zona de declaracin de
variables un dato que permita manejar y procesar esa informacin. Veamos como quedara:
programa Cap2Ejemplo9
variables
cantidadCuadras (*)
comenzar
{sentencias}
Fin
(*) Tener en cuenta que esta declaracin de variables es an incompleta dado que nos quedan por ver
algunos temas adicionales antes de completarla.
3.4 Tipos de datos
Independientemente del lenguaje de programacin que se utilice, la definicin de un tipo de dato
implica considerar tres aspectos fundamentales que lo caracterizan:
Identificar cules son los valores que puede tomar un dato.
Definir cules son las operaciones que pueden aplicarse sobre los datos de este tipo.
Indicar cules son las relaciones de orden que permiten compararlos.
Se utilizar este mecanismo para definir los dos tipos de datos con los que trabaja Visual
DaVinci.
3.4.1 Tipo de dato numrico (nmero)
Los elementos de este tipo de dato son los nmeros enteros
-3, -2, -1, 0, 1, 2, 3, ... .

Una computadora slo puede representar un subconjunto finito de valores, con lo cual existir un
nmero mximo y un nmero mnimo. Dichos valores estarn determinados por la cantidad de
memoria que se utilice para representarlo. En el ambiente Visual DaVinci, el nmero mximo que se
puede representar es 231 = 2147483647 y el mnimo es -231 = -2147483647.
Las operaciones vlidas para los nmeros son: suma, resta, multiplicacin y divisin entera. Estas
operaciones en el lenguaje Visual Da Vinci se simbolizan como: +, -, *, / respectivamente.
Si el resultado de alguna operacin sobrepasara el lmite superior permitido para los elementos del tipo
numero, se dice que ocurre un overflow y si se encuentra por debajo del mnimo se dice que ocurre
underflow.
Figura 3.1: Overflow
Algunos lenguajes detectan el overflow y el underflow como error, otros lo ignoran convirtiendo el
valor resultado en un valor vlido dentro del rango. En el caso del Visual Da Vinci esto se manifiesta a
travs de mensajes como el de la figura 3.1.
Las relaciones de orden entre nmeros son: igual, menor, mayor, menor o igual, mayor o igual y
distinto. En la tabla 3.1 se indica la sintaxis de cada uno de ellos as como un ejemplo de aplicacin.
Relacin Sintaxis
Ejemplo
Igualdad
=
A=B
Menor
<
3*C<D
Mayor
>
C>2*B
Menor o igual <=
A < (2 * C + 4)
Mayor o igual >=
(B + C) > D
Distinto
<>
A <> B
Tabla 3.1: Relaciones de Orden para nmeros
Tener en cuenta que en la tabla 3.1 A, B, C y D son variables numricas.
Para declarar una variable numrica deber utilizarse el sector de declaraciones.
En el ejemplo de contar las cuadras (programa cap2Ejemplo9), para completar la declaracin del dato
cantidadCuadras que nos haba quedado pendiente, ahora realizamos lo siguiente:
programa Cap2Ejemplo9
variables
cantidadCuadras: numero
comenzar
{sentencias}
Fin
Donde numero indica al lenguaje del robot que la variable ser de tipo numrico, y esto implica que sus
valores entrarn en el rango especificado anteriormente y que podr utilizar cualquiera de las
operaciones vlidas para el tipo numero.
Dado que el robot es capaz de realizar clculos con sus variables numricas, veamos otro ejemplo
donde se declaran dos variables numricas:
programa numerico
variables
nro1 : numero

nro2 : numero
comenzar
iniciar
nro1 := 23 (1)
nro2 := 30 (2)
Informar ( nro1 * nro2 ) (3)
Informar ( 25 / 3 ) (4)
fin
La lnea marcada con (1) utiliza el operador de asignacin que veremos en una seccin posterior.
El operador de asignacin en el lenguaje Visual Da Vinci se representa con un dos puntos igual (:=) y
permite dar valor a una variable. En el caso de (1) le est dando el valor 23, y en el caso de(2) le est
dando el valor 30. En la lnea marcada con (3) se abrir en pantalla una ventana mostrando el valor 690
(resultante de la instruccin Informar) y la lnea (2) visualizar el valor 8.
Notemos que la divisin es entera por lo que la parte fraccionaria, sin importar su valor, ser ignorada.
En la mayora de los programas que se resolvern a lo largo de este curso, el uso de las variables
numricas se ver restringido a operaciones sobre nmeros enteros positivos como por ejemplo:
informar cantidad de pasos dados, cantidad de flores recogidas, cantidad de veces que ocurri un
determinado hecho, etc.
3.4.2 Tipo de dato lgico (boolean)
Este tipo de dato lgico puede tomar uno de los dos siguiente valores: Verdadero o Falso. En Visual
DaVinci estn denotados por V y F. Si se utilizan variables de tipo booleano se puede asignar en ellas el
resultado de cualquier expresin lgica o relacional.
programa variablesLogicas
variables
esPositivo : boolean
identicos : boolean
comenzar
iniciar
identicos := (PosCa = PosAv)
esPositivo := (PosCa > 1)
fin
En este ejemplo, la variable identicos guardar el valor V (verdadero) si el robot se encuentra ubicado
en una esquina en la cual el valor de la avenida coincide con el valor de la calle y guardar F (falso)
para cualquier otra situacin. Del mismo modo, la variable esPositivo guardar el valor F si est
ubicado sobre la calle 1 y en cualquier otro caso, guardar V.
Veamos el siguiente problema que permite ejemplificar el uso de este tipo de variables.
Ejemplo 3.1: El robot debe ir de (1,1) a (1,2) y debe informar si en (1,1) hay flor o no.
programa Cap3Ejemplo1
variables
habiaFlor : boolean
comenzar
iniciar
{registremos si hay flor o no en (1,1) }

habiaFlor := HayFlorEnLaEsquina
mover
Informar (habiaFlor)
fin
En este caso la variable lgica permite registrar V o F segn si en (1,1) hay flor o no. Luego, al
posicionar el robot en (1,2) el valor almacenado es informado.
El objetivo de este sencillo ejemplo es mostrar la posibilidad de la variable lgica de guardar el
resultado de la evaluacin de una condicin (en este caso HayFlorEnLaEsquina) para usarlo con
posterioridad. Esto tambin puede aplicarse a cualquier proposicin ya sea atmica o molecular.
Analicemos el siguiente ejemplo:
Ejemplo 3.2: Recoger todas las flores de la esquina (11,1). Si logra recoger al menos una flor, ir a
(10,10) y vaciar de flores la bolsa; sino informar que no se ha recogido ninguna flor en (11,1).
En este caso no se requiere conocer la cantidad de flores recogidas. Slo se necesita saber si se ha
recogido alguna flor en (11,1) o no. Por lo tanto, en lugar de utilizar una variable numrica, se utilizar
una variable booleana para representar esta situacin.
Realizaremos un esquema del algoritmo a utilizar para este problema:
programa Cap3Ejemplo2
comenzar
{antes de empezar a recoger, analizar y recordar si en (11,1) hay flor o no}
{tomar todas las flores de (11,1)}
si (originalmente en (11,1) haba flor)
{ir a (10,10) y vaciar la bolsa}
sino {informar que no se recogi ninguna flor}
fin
En el lenguaje del robot esto se escribe de la siguiente forma:
programa Cap3Ejemplo2
variables
florEn11: boolean
comenzar
iniciar
Pos(11,1)
{antes de empezar a recoger, analizar y recordar si en (11,1) hay flor o no}
florEn11 := HayFlorEnLaEsquina
{tomar todas las flores de (11,1)}
mientras HayFlorEnLaEsquina
tomarFlor
si florEn11
{ir a (10,10) y vaciar la bolsa}
Pos(10,10)
mientras HayFlorEnLaBolsa
depositarFlor
sino
{informar F indicando que no se recogi ninguna}
Informar (florEn11)

Fin
3.5 Modificacin de la informacin representada
Hasta ahora slo se ha manifestado la necesidad de conocer expresamente cierta informacin.
Para tal fin se ha asociado un nombre, tambin llamado identificador, a cada dato que se desee
representar.
Cada uno de estos identificadores ser utilizado como un lugar para almacenar la informacin
correspondiente. Por lo tanto, ser necesario contar con la posibilidad de guardar un valor
determinado y posteriormente modificarlo.
Se utilizar como lo indicamos en los ejemplos de la seccin anterior la siguiente notacin:
Identificador := valor a guardar
El operador := se denomina operador de asignacin y permite registrar o guardar" el valor que
aparece a derecha del smbolo en el nombre que aparece a izquierda de dicho smbolo.
En el ejemplo Cap2Ejemplo9 al comenzar el recorrido debe indicarse que no se ha caminado
ninguna cuadra. Para esto se utilizar la siguiente notacin:
cantidadCuadras := 0
A partir de esta asignacin el valor del dato cantidadCuadras representar (o contendr) el valor
0.
En ocasiones ser necesario recuperar el valor almacenado para ello se utilizar directamente el
identificador correspondiente.
Por ejemplo, la instruccin
Informar (cantidadCuadras)
permitir informar el ltimo valor asignado a cantidadCuadras.
Tambin, puede utilizarse el operador de asignacin para modificar el valor de un identificador
tomando como base su valor anterior (el que fue almacenado previamente). Por ejemplo:
cantidadCuadras := cantidadCuadras + 1
Como se explic anteriormente, el operador := permite asignar el valor que aparece a la derecha
del smbolo al identificador que est a la izquierda del mismo. Sin embargo, la expresin que
ahora aparece a derecha no es un valor constante sino que debe ser evaluado ANTES de realizar
la asignacin. El lado derecho indica que debe recuperarse el valor almacenado en
cantidadCuadras y luego incrementarlo en 1. El resultado de la suma ser almacenado
nuevamente en cantidadCuadras.
Utilizando lo antes expuesto el ejemplo del Cap2Ejemplo9 se reescribe de la siguiente manera:
programa Cap2Ejemplo9
variables
cantidadCuadras: numero
comenzar
iniciar
{ Hasta ahora no se camino ninguna cuadra }
cantidadCuadras:=0 (1)
mientras (hayFlorEnLaEsquina)
{ Incrementar en 1 la cantidad de cuadras dadas }
cantidadCuadras:= cantidadCuadras + 1 (2)
mover
{ Informar la cantidad de cuadras dadas}
Informar(cantidadCuadras)
fin
Notemos que la instruccin (1) se encuentra fuera de la iteracin por lo que se ejecutar una nica

vez al comienzo del algoritmo. Esta asignacin inicial tambin se denomina inicializacin del
identificador.
La instruccin (2) se ejecuta cada vez que el robot avanza una cuadra. Su efecto es recuperar el
ltimo valor de cantidadCuadras, incrementarlo en 1 y volver a guardar este nuevo valor en
cantidadCuadras. De esta forma, el ltimo valor almacenado ser una unidad mayor que el valor
anterior.
Observemos la importancia que tiene para (2) la existencia de (1). La primera vez que (2) se
ejecuta, necesita que cantidadCuadras tenga un valor asignado previamente a fin de poder realizar
el incremento correctamente. Finalmente, (3) permitir conocer la cantidad de cuadras recorridas
una vez que el robot se detuvo.
3.6 Ejemplos
Ejemplo 3.3: El robot debe recorrer la avenida 1 hasta encontrar una esquina con flor y papel. Al
finalizar el recorrido se debe informar la cantidad de cuadras recorridas hasta encontrar dicha
esquina. Suponga que la esquina seguro existe.
Para poder resolverlo es necesario identificar los datos u objetos que se desean representar a
travs del algoritmo.
En este caso interesa conocer la cantidad de cuadras hechas, y por lo tanto, es preciso registrar la
cantidad de cuadras que se van avanzando hasta encontrar la esquina buscada. El algoritmo
tendra la siguiente forma:
programa Cap3Ejemplo3
variables
cuadras: numero
comenzar
iniciar
cuadras:=0 (1)
mientras ~(hayFlorEnLaEsquina) | ~(hayPapelEnLaEsquina) (2)
{anotar que se camin una cuadra mas}
cuadras:=cuadras+1 (3)
mover
Informar (cuadras) (4)
fin
En (1) indicamos que no se ha recorrido ninguna cuadra hasta el momento (por eso se le asigna el
valor cero a la variable cuadras). En (2), se indica que mientras no haya flor no haya papel en la
esquina, el recorrido debe continuar, esto es, la iteracin terminar cuando encuentre una esquina
con flor y papel. En (3) indicamos que se ha recorrido una cuadra ms. En (4) informamos el
ltimo valor que qued almacenado en cuadras, lo cual representa la cantidad de cuadras hechas
en el recorrido.
Cmo modifico el algoritmo anterior si la esquina puede no existir?
Ejemplo 3.4: Recoger e informar la cantidad de flores de la esquina (1,1).
Para poder resolverlo es necesario identificar los datos u objetos que se desean representar en el
algoritmo.
En este caso interesa conocer la cantidad de flores de la esquina (1,1) y por lo tanto es preciso
registrar la cantidad de flores que se van tomando hasta que la esquina queda sin flores. El
algoritmo tendra la siguiente forma:
programa Cap3Ejemplo4
variables

flores: numero
comenzar
iniciar
flores:=0 (1)
mientras (hayFlorEnLaEsquina)
tomarFlor
{registramos que se tom una flor}
flores:= flores+1 (2)
Informar (flores) (3)
fin
En (1) indicamos que no se ha recogido ninguna flor hasta el momento. En (2) indicamos que se
ha recogido una nueva flor de la esquina. En (3) informamos el ltimo valor que qued
almacenado en flores. Hay que recordar que el punto (2) y la instruccin tomarFlor estn dentro
de una estructura de control de iteracin (mientras) y esto se repetir hasta que no haya ms flores
en la esquina, con lo cual en cada vuelta de esta iteracin se incrementar en uno el valor de la
variable flores.
Ejemplo 3.5: Contar e informar la cantidad de flores de la esquina (1,1).
En este caso slo nos interesa saber la cantidad de flores de la esquina, a diferencia del ejercicio
anterior en donde debamos adems recoger las flores de la esquina (es decir dejar la esquina sin
flores). Por lo tanto, se debe tener en cuenta que para poder contar las flores vamos a tener que
tomarlas, y una vez que tomamos todas las flores de la esquina, debemos volver a depositarlas
para que no se modifique la cantidad original de flores de la esquina.
Inicialmente el algoritmo tendra la siguiente forma:
programa Cap3Ejemplo5
variables
flores:numero
comenzar
iniciar
flores:=0
mientras (hayFlorEnLaEsquina)
tomarFlor
{registramos que se tom una flor}
flores:= flores+1
{***Debemos depositar las flores juntadas de la esquina***} (1)
Informar (flores)
fin
En (1) debemos encontrar la forma de poder depositar todas las flores que juntamos de la esquina.
Para esto podemos ver que si en la esquina, por ejemplo, hubo 5 flores, entonces la variable flores
tiene el valor 5, por lo tanto la variable flores contiene la cantidad de flores que debo depositar en
la esquina.
Resumiendo, sabemos cuntas flores hay que depositar en la esquina, esta cantidad es la que ha
quedado almacenada en la variable flores. El programa se reescribir de la siguiente manera:
programa Cap3Ejemplo5
variables
flores:numero
comenzar
iniciar
flores:=0 (1)

mientras (hayFlorEnLaEsquina)
tomarFlor
{registramos que se tom una flor}
flores:= flores+1 (2)
{ depositamos las flores juntadas de la esquina}
repetir flores (3)
depositarFlor
Informar (flores) (4)
fin
En (1) indicamos que no se ha recogido ninguna flor hasta el momento. En (2) indicamos que se
ha recogido una nueva flor de la esquina.
Para que puedas comprender la instruccin (3), tenemos que tener en cuenta dos cuestiones. La
primera es que en (3) se utiliza una estructura de control repetitiva para depositar la cantidad de
flores. Esto se puede hacer ya que conocemos el valor que queremos usar en la estructura repetir,
ese valor ser el almacenado en flores. La segunda es que esta instruccin repetitiva debe
ubicarse fuera del mientras, ya que de lo contrario, por cada flor que recoge el robot volvera a
depositar y por lo tanto la estructura de control mientras nunca terminara. Otro efecto negativo
de poner el repetir dentro del mientras es que la variable flores quedara finalmente con un valor
incorrect
En (4) informamos el valor que contiene la variable flores. En este punto debemos prestar
atencin que haber utilizado la variable flores en el repetir no implica que la misma se haya
modificado, esto es as, porque la nica forma de modificar el contenido de una variable es por
medio del operador:=.
Puede ocurrir que el valor de flores permanezca en cero?
Si el valor de flores es cero, que ocurre con el repetir?
Se puede reemplazar la estructura de repeticin repetir flores, por
mientrasHayFlorEnLaBolsa depositarFlor?
Ejemplo 3.6: Recoger todos los papeles de la esquina (1,1) e informar la cantidad de papeles
recogidos slo si se han recogido al menos 5 papeles.
En este caso nos interesa saber la cantidad de papeles de la esquina, a diferencia del ejercicio
anterior. Una vez que el robot ha juntado todos los papeles, si la cantidad de papeles obtenida es
mayor o igual a 5 (al menos 5), debemos informar la cantidad recogida. El algoritmo sera el
siguiente:
programa Cap3Ejemplo6
variables
papeles:numero
comenzar
iniciar
papeles:=0
mientras (hayPapelEnLaEsquina)
tomarPapel
{registramos que se tomo un papel}
papeles:=papeles+1
si (papeles >= 5)
Informar (papeles) (1)
fin
Debemos tener en cuenta que la instruccin (1) est dentro de una instruccin de seleccin y por
lo tanto slo se ejecuta si la condicin es verdadera, es decir, si la variables papeles qued en un

valor >=5.
Ejemplo 3.7: Recoger e informar todos los papeles de la avenida 1.
En este caso nos interesa saber la cantidad de papeles de la avenida. Una vez que hemos juntado
todos los papeles de la avenida, debemos informar la cantidad recogida. El algoritmo sera el
siguiente
programa Cap3Ejemplo7
variables
papeles:numero
comenzar
iniciar
papeles:=0
repetir 99 (1)
mientras (hayPapelEnLaEsquina) (2)
tomarPapel
{registramos que se tomo un papel}
papeles:=papeles+1
mover
{procesamos la ltima esquina}
mientras (hayPapelEnLaEsquina) (3)
tomarPapel
{registramos que se tomo un papel}
papeles:=papeles+1
Informar (papeles) (4)
fin
En (1) indicamos la estructura de control para recorrer toda una avenida. Como se sabe la
cantidad de cuadras de una avenida completa es 99.
En (2) contamos todos los papeles de la esquina en donde se encuentra parado el robot.
En (3) contamos los papeles de la ltima esquina, es decir, la (1,100).
En (4) informamos el valor de todos los papeles recogidos en el recorrido, el cual se encuentra
almacenado en papeles.
Qu modificara en el algoritmo si se quisiera informar los papeles de cada
esquina?
3.7 Representacin de ms de un dato dentro del algoritmo
En las secciones anteriores se present la necesidad de almacenar informacin adicional para
responder a los requerimientos del problema. Es importante reconocer que los algoritmos
desarrollados en los captulos 1 y 2, slo se referan al funcionamiento de las estructuras de
control y no al manejo de los datos.
Contar con la posibilidad de asociar un identificador a un valor es equivalente a poder registrar"
un dato para recuperarlo o modificarlo posteriormente.
Como resumen de todo lo visto hasta el momento se presentar un ejemplo ms complejo,
repitiendo la explicacin del proceso de modificacin de la informacin y las posibles
comparaciones a utilizar.
Ejemplo 3.8: El robot debe recoger e informar la cantidad de flores y papeles de la esquina (1,1).
En este ejercicio debemos representar dos datos, la cantidad de flores de la esquina y la cantidad
de papeles de la esquina. Para esto, vamos a necesitar dos variables una que nos permita contar la
cantidad de flores de la esquina y otra que nos permita contar la cantidad de papeles. El algoritmo
quedara de la siguiente forma:

programa Cap3Ejemplo8
variables
papeles:numero
flores:numero
comenzar
iniciar
papeles:=0 (1)
flores:=0 (2)
mientras (hayPapelEnLaEsquina) (3)
tomarPapel
{registramos que se tom un papel}
papeles:=papeles+1
mientras (hayFlorEnLaEsquina) (4)
tomarFlor
{registramos que se tom una flor}
flores := flores + 1
Informar (flores) (5)
Informar (papeles) (6)
fin
En (1) indicamos que no se ha recogido ningn papel todava. Lo mismo ocurre con las flores en
(2).
En (3) contamos todos los papeles que existen en la esquina. Lo mismo hacemos en (4) pero para
las flores. En este punto podemos ver que la cantidad de papeles de la esquina va almacenndose
en la variable papeles y la cantidad de flores en la variable flores.
En (5) y (6) se informa el valor de flores y papeles de la esquina respectivamente.
Ejemplo 3.9: Modifique el ejercicio anterior para que el robot evale cual de las cantidades
(flores y papeles) result mayor e informe dicha cantidad.
Siguiendo el razonamiento anterior, luego de recoger y contar las flores y los papeles, deberemos
analizar cul de los dos valores obtenidos es el mayor e informar dicho valor. El algoritmo
quedara de la siguiente forma:
programa Cap3Ejemplo9
variables
papeles:numero
flores:numero
comenzar
iniciar
papeles:=0
flores:=0
mientras (hayPapelEnLaEsquina)
tomarPapel
papeles:=papeles+1
mientras (hayFlorEnLaEsquina)
tomarFlor
flores := flores + 1
Expresin de Problemas y Algoritmos
U. N. L. P.
{comparamos las cantidades recogidas}
si (flores>papeles) (1)
Informar(flores)

sino
Informar(papeles)
fin
En (1) se verifica si la cantidad de flores es mayor a la de papeles, por medio de una estructura de
seleccin, en caso que la condicin resulte verdadera se informa la cantidad de flores, en cambio,
si la condicin es falsa se informa la cantidad de papeles.
Qu informa si ambas variables contienen el mismo valor?
3.8 Conclusiones
Hasta aqu se ha presentado la sintaxis de un algoritmo que utiliza datos para la solucin de un
problema. Tambin se ha mostrado cmo crear, inicializar y modificar estos datos en una
solucin.
Contar con la posibilidad de representar informacin adicional al problema mejora la potencia de
expresin del algoritmo, ya que los atributos de los objetos con los que opera podrn estar
reflejados en su interior.
Tambin vimos que para representar esta informacin el lenguaje Visual da Vinci nos provee dos
tipos de datos: el tipo numero y el tipo logico.
Hasta aqu se han presentado los elementos que componen un algoritmo: el control y los datos.
De todo lo visto, entonces, podemos concluir que un algoritmo es una secuencia de instrucciones
que utiliza y modifica la informacin disponible con el objetivo de resolver un problema.
Ejercitacin DAtos y Variables
1. Indique que hacen los siguientes programas considerando las diferentes situaciones que
podran presentarse:
(a) i. todas las esquinas de la avenida 6 tienen al menos 1 flor
ii. slo la esquina (6,20) tiene flor.
iii. ninguna esquina de la avenida 6 tiene flor
programa QueHace1
comenzar
iniciar
Pos(6,1)
mientras HayFlorEnLaEsquina & (PosCa < 100)
mover
tomarFlor
fin
(b) i. todas las esquinas de la avenida tienen al menos 1 flor y 1 papel.
ii. slo la esquina (6,20) tiene flor y ningn papel, las dems estn vacas.
iii. slo la esquina (6,20) tiene papel y no tiene ninguna flor, las dems estn vacas.
iv. ninguna esquina de la avenida 1 tiene flor ni papel
programa QueHace3
variables
nro : numero
comenzar
iniciar
nro := 0
repetir 10
si ~(HayFlorEnLaEsquina | HayPapelEnLaEsquina)
nro := nro + 1

mover
Informar(nro)
fin
2. Programe al robot para que informe la cantidad de flores que hay en (10,30) sin modificar el
contenido de la esquina.
3. Programe al robot para que informe la cantidad de papeles que hay en la calle 72.
(a) Recogiendo todos los papeles.
(b) Sin modificar el contenido de cada esquina.
4. Programe al robot para que informe la cantidad de esquinas vacas que hay en la ciudad.
5. Programe al robot para que recorra la avenida 72 recogiendo una flor en cada esquina. Si en
alguna esquina del recorrido no puede hacerlo
(a) debe continuar con la prxima esquina hasta completar la avenida.
(b) debe detenerse e informar en que esquina quedo parado.
6. (a) Realizar un algoritmo que permite al robot efectuar un recorrido en escalera, comenzando
en (1,1) y terminando en (100, 100). Cada escaln debe ser de una cuadra de lado.
i. Utilizando repetir para controlar el final del recorrido.
ii. Utilizando mientras para controlar el final del recorrido.
(b) Modifique a.i) para que el recorrido comience en (1,100) y termine en (51,50).
(c) Modifique a.i) para que el robot informe, al terminar el recorrido, la cantidad total de
esquinas vacas (sin flor ni papel) que encontr.
(d) Modifique c) para realizar el mismo recorrido pero ahora con escalones de 2 cuadras de
lado. En qu esquina termina el ltimo escaln completo?
7. Escriba un programa que le permita al robot caminar por la calle 7 hasta encontrar 20 flores.
Hay como mximo una flor por esquina. Seguro existen 20 flores.
8. Escriba un programa que le permita al robot caminar por la calle 7 hasta encontrar 20 flores.
Hay como mximo una flor por esquina. Pueden no haber 20 flores.
9. Escriba un programa que le permita al robot caminar por la calle 7 hasta encontrar 20 flores.
Puede haber ms de una flor por esquina. Seguro existen 20 flores.
10. El robot debe limpiar de papeles la calle 34. Al terminar el recorrido debe informar cuantas
esquinas tenan originalmente exactamente 6 papeles.
11. El robot debe limpiar la esquina (89,76) de la siguiente forma: si contiene ms papeles que
flores debe dejar solo un papel y si contiene ms flores que papeles debe dejar solo una flor.
Si originalmente la esquina est vaca o contiene igual cantidad de flores que de papeles,
debe quedar vaca.
12. Programe al robot para que recorra la calle 2 hasta encontrar al menos 10 papeles.
13. Programe al robot para que recorra la calle 2 hasta encontrar 10 papeles y 4 flores.
14. Programe al robot para que recorra la calle 2 hasta encontrar una esquina con 10 papeles y 4
flores. La esquina seguro existe.
15. Programe al robot para que recorra el permetro de la ciudad e informe la cantidad de papeles
recogidos.
16. Programe al robot para que recorra el permetro de la ciudad e informe la cantidad de papeles
recogidos en cada lado.
17. Programe al robot para que recorra el permetro de la ciudad e informe la cantidad de papeles
recogidos en cada esquina.
18. Programe al robot para que recorra el permetro de la ciudad e informe la cantidad de papeles
recogidos en todo el permetro, en cada lado y en cada esquina.

Condiciones Lgicas, el uso de la conjuncin, disyuncin y negacion


Condiciones Lgicas. Proposiciones lgicas, simbolizacin y tablas de verdad
Cuando se emplearon condiciones para definir las acciones a tomar en la seleccin y la iteracin, como
ser HayPapelEnLaBolsa, esta es una condicin simple pero en la realidad las condiciones son
compuestas y debe indicarse la forma en que pueden combinarse varias condiciones. Los ejercicios
vistos hasta el momento fueron lo suficientemente simples como para poder ser resueltos con una
pregunta sencilla. Sin embargo, en un problema real, esto no es as y se requiere combinar expresiones
para poder representar una situacin a evaluar. Por esta causa se introducirn y repasarn algunos
conceptos bsicos de la lgica proposicional que permitirn clarificar este aspecto, aplicados
especficamente a problemas con el robot.
Dos de las estructuras de control ya vistas, seleccin e iteracin, requieren para su funcionamiento, la
evaluacin de una condicin. Estas condiciones se corresponden con lo que en trminos de lgica se
conoce como proposiciones.
Una proposicin es una expresin de la cual tiene sentido decir si es verdadera o falsa, o sea es posible
asignarle un valor de verdad (verdadero o falso, pero no ambos).
Ejemplos de proposiciones
1 + 4 = 5 (Verdad)
La Pampa es una nacin. (Falso)
Un tringulo es menor que un crculo. (No se le puede asignar un valor de verdad, por lo tanto no es
proposicin)
El color azul vale menos que una sonrisa (dem anterior)
Hay una flor en la esquina (ser verdadero falso dependiendo de si la flor se encuentra o no en la
esquina)
1.

Proposiciones atmicas y moleculares


En Lgica, el trmino atmico se utiliza con su significado habitual: algo que no puede ser dividido
nuevamente.
Una proposicin es considerada atmica si no puede ser descompuesta en otras proposiciones.
Ejemplos:
La casa es roja.

Hoy es lunes.
He llegado al final del recorrido.
Estoy ubicado a 3 metros de altura.
Cuando en una expresin se unen varias proposiciones atmicas se forma una proposicin molecular
o compuesta. Dicha unin se realiza mediante conectivos lgicos trminos de enlace.
Estos trminos de enlace son de gran importancia. Tanto es as, que se estudiarn algunas reglas muy
precisas para el uso de esta clase de trminos.
Los trminos de enlace a utilizar son los siguientes: y, o, no. Los dos primeros se utilizan para
conectar proposiciones atmicas; en tanto que el conectivo no, solamente se coloca frente a una
proposicin atmica.
Ejemplos:
No es cierto que la luna est hecha de queso verde.
La vaca est cansada y no dar leche.
Hace calor hay mucha humedad.
Hay papel en la bolsa y hay papel en la esquina.
Resumiendo:
Una proposicin es atmica si no tiene conectivos lgicos, en caso contrario es molecular.
2.

Simbolizacin
As como en matemtica se simbolizan las cantidades para facilitar el planteo y solucin de problemas,
tambin en este caso es importante simbolizar las proposiciones atmicas, las moleculares y los
conectivos lgicos con el objeto de facilitar las operaciones.
Conectivo

Simbolizacin en Visual Da
Vinci

&

no

Tabla 1: Conectivos lgicos trminos de enlace


Se utilizarn letras minsculas para simbolizar las proposiciones atmicas:
Ejemplos de simbolizacin de proposiciones atmicas
Ayer fue un da ventoso.
Si se considera p = ayer fue un da ventoso, esta proposicin puede ser simbolizada como: p.
Ese pjaro vuela muy alto.
Si se llama q = ese pjaro vuela muy alto, la proposicin se simboliza como: q.
PosCa < 100.
Si se llama r = PosCa < 100, la proposicin se simboliza como: r.

A continuacin se aplicar este mecanismo de simbolizacin a las proposiciones moleculares.


El proceso para simbolizarlas consiste en:
1. Determinar cules son las proposiciones atmicas que la componen.
2. Simbolizar las proposiciones como se explic anteriormente.
3. Unir las proposiciones con los conectivos ya vistos. Por tal motivo, debe definirse un smbolo para
cada uno de los conectivos. La tabla 1 muestra la simbolizacin a utilizar en cada caso.
Ejemplos de simbolizacin de proposiciones moleculares
Juan es estudiante y es jugador de ftbol.
p = Juan es estudiante
q = Juan es jugador de ftbol
Simbolizando p & q
No es cierto que PosCa = 100.
p = PosCa=100
Simbolizando ~ p
Hay flor en la esquina y hay papel en la bolsa, o hay papel en la esquina.
p = Hay flor en la esquina
q = hay papel en la bolsa
r = hay papel en la esquina
Analicemos, para resolver correctamente el ejemplo anterior debe tenerse en cuenta la aparicin de la
coma, la cual separa las dos primeras proposiciones de la tercera. Cuando se obtiene la simbolizacin
debe respetarse ese orden. Por lo tanto la simbolizacin sera:
(p & q) | r
No hay flor en la bolsa, pero hay flor en la esquina.
p = hay flor en la bolsa
q = hay flor en la esquina
Simbolizando (~ p & q)
Notemos que la palabra pero acta como el conectivo lgico y.
3 .Tablas de verdad.
Como se explic previamente, una proposicin es una expresin de la cual tiene sentido decir si es
verdadera o falsa.
Para poder analizar cualquier proposicin molecular y decir qu valor de verdad tiene, es usual hacerlo
a travs de lo que se conoce como tabla de verdad.
La tabla de verdad de una proposicin es, como su nombre lo indica, una tabla donde se muestran todas
las combinaciones posibles de los valores de verdad de dicha proposicin.
3.1 Conjuncin. Tabla de verdad
Dadas dos proposiciones cualesquiera p y q, la proposicin molecular p & q representa la conjuncin
de p y q.
La conjuncin de dos proposiciones es cierta nicamente en el caso en que ambas proposiciones lo
sean.

Dadas dos proposiciones cualesquiera p y q, si ambas son verdaderas, entonces p & q, que representa la
conjuncin de p y q, es verdadera. Cualquier otra combinacin da como resultado una proposicin
molecular falsa. La tabla 2.4 representa la tabla de verdad de la conjuncin p & q utilizando las cuatro
combinaciones posibles de valores de verdad para p y q. Por lo tanto, si p & q es una proposicin
verdadera entonces p es verdadera y q tambin es verdadera. En Lgica se pueden unir dos
proposiciones cualesquiera para formar una conjuncin. No se requiere que el contenido de una de ellas
tenga relacin con el contenido de la otra.

p&
q

V V

V F

F V

F F

Tabla 2: Conjuncin (p & q)


Ejemplos:
6 es un nmero par y divisible por 3.
p = 6 es un numero par
q = 6 es divisible por 3
p es verdadera y q tambin, por lo tanto p & q es verdadera.
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = PosCa=1
q = PosAv=2
p es verdadera y q es falsa, por lo tanto p & q es falsa.
El siguiente ejemplo muestra la aplicacin de la conjuncin en un algoritmo:
Ejemplo 1: Hacer que el robot deposite, de ser posible, una flor en la esquina (4,4) en el caso que en
dicha esquina no haya flores.
programa Ejemplo1
{si en (4,4) no hay flor en esa esquina y hay flor en la bolsa depositar esa flor}
variables
p:boolean
q:boolean
comenzar
iniciar
Pos(4,4)
p:=HayFlorEnLaBolsa
q:=HayFlorEnLaEsquina
si ((p) & ~(q))
depositarFlor
fin

La seleccin utiliza la conjuncin de dos proposiciones que, como se explic anteriormente, para ser
verdadera necesitar que ambas proposiciones lo sean simultneamente. Esto es, basta con que una de
ellas sea falsa para que no se deposite una flor en la esquina.
3.2 Disyuncin. Tabla de verdad
Dadas dos proposiciones cualesquiera p y q, la proposicin molecular p | q representa la disyuncin de
p y q.
La disyuncin entre dos proposiciones es cierta cuando al menos una de dichas proposiciones lo es.
La disyuncin utiliza el trmino de enlace o en su sentido incluyente. Esto significa que basta con
que una de las dos proposiciones sea verdadera para que la disyuncin sea verdadera.
Dadas dos proposiciones cualesquiera p y q, su disyuncin, p | q, ser falsa cuando ambas
proposiciones sean falsas. La tabla 3 representa la tabla de verdad de la disyuncin p | q utilizando las
cuatro combinaciones posibles de valores de verdad para p y q.
p

p|
q

V V V
V F

F V V
F F

Tabla 3: Disyuncin (p v q)
Ejemplos
2 es primo o es impar
p = 2 es primo
q = 2 es impar
p es verdadera, q es falsa. Se deduce que p | q es verdadera
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = PosCa=8
q = PosAv=2
p es falsa, q es falsa. Se deduce que p | q es falsa.
El siguiente problema puede resolverse aplicando la disyuncin:
Ejemplo 2: hacer que el robot se mueva desde la esquina (4,7) a la esquina (4,11) en el caso que la
esquina (4,7) no est vaca (se considera no vaca a aquella esquina que tiene al menos una flor o un
papel).
programa Ejemplo2
{si en (4,7) hay flor o papel entonces se mueve a (4,11)}
variables
p:boolean
q:boolean

comenzar
iniciar
Pos(4,7)
p:=HayFlorEnLaEsquina
q:=HayPapelEnLaEsquina
si ((p) | (q))
repetir 4
mover
sino
Informar('Esquina vacia no me puedo mover')
fin
La seleccin utiliza la disyuncin de dos proposiciones que, como se explic anteriormente, para ser
verdadera solo requiere que una de ellas sea verdadera. Note que si la esquina (4,7) tiene flor y papel, el
robot avanza hasta la esquina (4,11). La nica forma de que el robot no avance es que la esquina est
vaca, sin flor ni papel.
3.3 Negacin. Tabla de verdad
Dada una proposicin p, su negacin ~ p, permitir obtener el valor de verdad opuesto.
El valor de verdad de la negacin de una proposicin verdadera es falso y el valor de verdad de la
negacin de una proposicin falsa es verdadero.
Dada una proposicin p, la tabla 4 representa los posibles valores de verdad de dos valores de verdad
posibles de p.
p

~p

Tabla 4: Negacin (~ p)
Ejemplos
p = El nmero 9 es divisible por 3
La proposicin p es verdadera.
La negacin de p es:
~ p = El nmero 9 no es divisible por 3
Se ve claramente que ~ p es falsa.
Suponiendo que el robot se encuentra situado en la esquina (1,1)
p = PosCa=1
La proposicin p es verdadera.
La negacin de p es: ~p= ~PosCa=1.
Se deduce que ~p es falsa.
Ejemplo 3: el robot debe recorrer la calle 1 hasta encontrar una flor que seguro existe.
programa Ejemplo2
{el robot debe recorrer la calle 1 hasta encontrar una flor que seguro existe.}
variables
p:boolean
comenzar

iniciar
derecha
p:=HayFlorEnLaEsquina
mientras ~p
mover
p:=HayFlorEnLaEsquina
fin

Note que la iteracin utiliza la negacin de la proposicin atmica hay flor en la esquina y que la
misma proposicin debe volver a evaluarse por cada esquina en que el robot se mueve
De esta forma, el robot detendr su recorrido cuando encuentre una flor.
3.4 Utilizacin del parntesis
Es frecuente encontrar proposiciones que tienen ms de un trmino de enlace. En estos casos, uno de
los trminos de enlace es el ms importante, o el trmino dominante, porque acta sobre toda la
proposicin.
El operador ~ es el que tiene mayor prioridad, es decir, es el que primero es evala; seguido por &
y |. Estos dos ltimos poseen igual prioridad. Ante una expresin que utilice varias conjunciones y/o
disyunciones, se evaluaran de izquierda a derecha.
Lo mismo ocurre en Matemtica. Si se considera la siguiente cuenta: 2 + 3 * 5, el resultado final,
como es fcil de deducir, es 17.
La primera operacin que se resuelve es el producto entre 3 y 5, y luego a su resultado se le suma 2.
Ocurre as porque el operando * (por), igual que el operando / (dividido), se resuelve antes que el
operando + (mas), o que el operando - (menos).
Dada la siguiente proposicin p & ~ q, primero se resuelve la negacin y luego la conjuncin.
En determinados casos se tiene la necesidad de alterar este orden natural de resolucin. Al igual que en
matemtica, el uso de parntesis permite resolver este problema.
Ejemplo
~ p | q es una disyuncin entre ~ p y q.
~ (p | q) es la negacin de una disyuncin.
En el ejemplo anterior se muestra la manera de convertir una disyuncin en una negacin. Es decir, el
operador de negacin se resuelve en forma posterior a la disyuncin.