Você está na página 1de 29

GUIA DE EJERCICIOS DE PROGRAMACIN

En esta gua usted debe desarrollar cada uno de los ejercicios utilizando instrucciones de:
Asignacin
Leer
Escribir
Si entoncessinofinsi
Se recomienda utilizar la ayuda de PSEINT para recordar la estructura y significado de cada una de
ellas. Adems revise cuidadosamente las FUNCIONES del pseudolenguaje que se indican a
continuacin:

Funcin

Significado

RC(X)

Raz Cuadrada de X

ABS(X)
LN(X)
EXP(X)
SEN(X)
COS(X)
TAN(X)
ASEN(X)
ACOS(X)
ATAN(X)
TRUNC(X)
REDON(X)
AZAR(X)

Valor Absoluto de X
Logaritmo Natural de X
Funcin Exponencial de X
Seno de X
Coseno de X
Tangente de X
Arcoseno de X
Arcocoseno de X
Arcotangente de X
Parte entera de X
Entero ms cercano a X
Entero aleatorio entre 0 y x-1

No es menos importante manejar adecuadamente los OPERADORES que tiene esta notacin:

OPERADOR SIGNIFICADO
>
<
=
<=
>=
<>
&Y
O
NO
+
*
/
% MOD

Mayor que
Menor que
igual
Menor igual que
Mayor igual que
Distinto que
Conjuncin
Disyuncin
Negacin
Suma
Resta
Multiplicacin
Divisin
Potenciacin
Mdulo (resto de la divisin entre enteros)

Computacin para Ingeniera

TIPO OPERADOR

RELACIONALES

LGICOS

ALGEBRAICOS

El pseudolenguaje, PSEINT, ser utilizado como una notacin para escribir algoritmos; por esta
razn, usted deber ser capaz de escribir la resolucin de problemas sin que sea absolutamente
necesario usar un computador. La dinmica que se espera es que usted desarrolle la solucin en
papel y despus, slo para corroborar la efectividad, la pruebe ingresando cada una de las
instrucciones en el ambiente PSEINT.
La evaluacin de los conocimientos adquiridos se har en una prueba escrita SIN uso de
computador.
En primera instancia desarrollaremos ejercicios simples documentndolos1 extensamente.
Proceso prueba_entero
// El objetivo de este algoritmo es comprobar si un valor ingresado por un usuario es entero o fraccionario

Escribir ingrese un valor


Leer numero
//Es importante que siempre coloquemos un escribir antes de un leer para que el usuario sepa que debe ingresar

Si numero = trunc(numero)
Entonces
Escribir el valor ingresado es entero
Sino
Escribir el valor ingresado es fraccionario
Finsi
Finproceso
Comentarios:
Es MUY IMPORTANTE escribir indentadamente de forma de visualizar fcilmente el
mbito de accin de cada instruccin. No volveremos a insistir en este tema, por eso lo
colocamos en negrita.
La accin que ejecuta el computador con la instruccin ESCRIBIR es mostrar en la pantalla
lo que hemos escrito entre comillas (tambin pueden usarse apstrofes). En el caso que
se coloque algn nombre de variable, nos mostrar el valor que ella tiene asignado.
La accin del LEER es efectuar la asignacin del valor ingresado al nombre de la variable
registrada. Supongamos que el usuario ingresa 3.5 y presiona ENTER; en la memoria del
computador se registra que NUMERO tiene asignado el valor 3.5
Si se ingres el valor 3.5, el resultado de trunc(3.5) es 3. Lo anterior implica que la
condicin lgica al ser evaluada (numero = trunc(numero)) da como resultado FALSO por
lo que se escribir: el valor ingresado es fraccionario.
Es recomendable que usted rutee2 el algoritmo ingresando otros valores.
Recordemos que en el SI slo se ejecutan las acciones que estn entre el ENTONCES y el
SINO si y slo si la evaluacin de la condicin lgica es VERDADERA. Tambin podemos
utilizar un SI sin utilizar la opcin SINO, pero sera un tanto grosero no dar mensaje alguno

Utilizaremos la notacin con que PSEINT reconoce los comentarios, es decir, comenzaremos esas
instrucciones con //
2
Haga la labor del computador escribiendo el resultado que debe entregar

Computacin para Ingeniera

si el valor ingresado no era entero. En el caso de usar un SI sin SINO, la estructura es: SI
ENTONCES FINSI.
Proceso prueba_par
// El objetivo de este algoritmo es comprobar si un valor ingresado por un usuario es par o impar

Escribir ingrese un numero


Leer valor
//Es importante que siempre coloquemos un escribir antes de un leer para que el usuario sepa que debe ingresar

Si valor / 2 = trunc(valor/2)
Entonces
Escribir el numero ingresado es par
Sino
Escribir el numero ingresado no es par
Finsi
Finproceso

Comentarios:
Ser o no necesario comprobar primero si el valor ingresado es o no fraccionario?
Ser o no necesario comprobar primero si el valor ingresado es o no positivo?
Cules sern los resultados al ingresar los siguientes valores( y solicitar la ejecucin del
programa con cada uno de ellos): 5 4 3.2 0 -2,5?
Qu cambio(s) habra que hacer si utilizamos la funcin MOD ( %)?
Qu cambio(s) habra que hacer si deseamos saber si es mltiplo de 3?
Qu cambio(s) habra que hacer si deseamos saber si es mltiplo de otro valor que
ingresemos?
Proceso prueba_tipovalor
// El objetivo de este algoritmo es comprobar si un valor ingresado por un usuario es positivo, negativo o cero

Escribir ingrese un numero


Leer valor
//Es importante que siempre coloquemos un escribir antes de un leer para que el usuario sepa que debe ingresar

Si valor > 0
Entonces
Escribir el numero ingresado es positivo
Sino
Si valor < 0
entonces
Escribir el numero ingresado es negativo
Sino
Escribir usted ingreso un cero
Finsi
Finsi
Finproceso

Computacin para Ingeniera

Comentarios:
Vemos que puede ir un SI dentro de otro SI3, por esa razn encontramos dos FINSI.
Si utilizamos slo SI ENTONCES FINSI, cmo cambiara el algoritmo?
Qu pasa si accidentalmente ingresamos una letra en vez de un nmero?
Condicional Si-Entonces

EXPLICACIN DE LA INSTRUCCIN SI EN PSEINT


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 clusula 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 cul es el mayor de los tres, y verificar luego si se trata de un tringulo rectngulo
o no.

De hecho, pueden haber varios

Computacin para Ingeniera

// Lee los tres lados de un triangulo rectangulo, determina


// si corresponden (por Pitagoras) y en caso afirmativo calcula el area
Proceso TrianguloRectangulo
// lectura (ingreso) de datos
Escribir "Ingrese el lado 1:"
Leer l1
Escribir "Ingrese el lado 2:"
Leer l2
Escribir "Ingrese el lado 3:"
Leer l3
// encontrar la hipotenusa (mayor lado)
Si l1>l2 Entonces
cat1<-l2
Si l1>l3 Entonces
hip<-l1
cat2<-l3
Sino
hip<-l3
cat2<-l1
FinSi
Sino
cat1<-l1
Si l2>l3 Entonces
hip<-l2
cat2<-l3
Sino
hip<-l3
cat2<-l2
FinSi
FinSi
// ver si cumple con Pitagoras
Si hip^2 = cat1^2 + cat2^2 Entonces
// calcular area
area<-(cat1*cat2)/2
Escribir "El area es: ", area
Sino
Escribir "No es un triangulo rectangulo."
FinSi
FinProceso

Computacin para Ingeniera

Hasta el momento, slo hemos utilizado las siguientes instrucciones secuenciales:


Tipo
Estructura
Significa
Asignacin
Var <- expresin
almacena en Var el resultado de expresin.
Escritura
Escribir rotulo, Muestra por pantalla los valores y/o literales que deben
expresin
encontrarse entre . Si queremos imprimir por
pantalla ms de un elemento, los separamos por ,
Lectura
Leer var1,var2
almacena los valores que el usuario ingresa en las
variables indicadas. Si queremos leer ms de una variable,
las separamos por ,
Condicional
Si
Dependiendo del valor de la expresin_logica que slo
(expresion_logica)
puede ser verdadero o falso, ejecuta las instrucciones que
entonces .
estn entre el entonces y el sino las que estn entre el
sino .
sino y el finsi. Puede existir un SI sin sino.
finsi
Ha llegado el momento de conocer otra instruccin llamada estructura de control repetitiva.
Utilizaremos primero la ayuda brindada por PSEINT:
Lazos Mientras
La instruccin Mientras ejecuta una secuencia de instrucciones mientras una condicin sea
verdadera.
Mientras <condicin> Hacer
<instrucciones>
FinMientras
Al 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.
A continuacin registraremos el programa AdivinaNumero a que se hace mencin y lo iremos
desglosando.

Computacin para Ingeniera

// Juego simple que pide al usuario que adivine un numero en 10 intentos


Proceso Adivina_Numero
intentos<-9
num_secreto <- azar(100)+1
Escribir "Adivine el numero (de 1 a 100):"
Leer num_ingresado
Mientras num_secreto<>num_ingresado Y intentos>0 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo"
Sino
Escribir "Muy alto"
FinSi
Escribir "Le quedan ",intentos," intentos:"
Leer num_ingresado
intentos <- intentos-1
FinMientras
Si intentos=0 Entonces
Escribir "El numero era: ",num_secreto
Sino
Escribir "Exacto! Usted adivino en ",11-intentos," intentos."
FinSi
FinProceso
Comentarios:
La primera instruccin de asignacin hace que el computador almacene el valor 9 bajo el
nombre de variable intentos.
La segunda instruccin de asignacin almacena en la variable num_secreto el resultado de
un valor entregado al azar por el computador entre el 0 y 99 y le suma 1. Recordemos que
la funcin AZAR(X) nos entrega un Entero aleatorio entre 0 y x-1, es decir, si no
sumamos 1, podra generar valores entre 0 y 99 con lo cual estaramos engaando a
nuestro usuario que confa en lo que le indicamos en nuestro: Escribir "Adivine el numero
(de 1 a 100):" . Vlidamente podramos cambiar el mensaje y colocar un valor entre 0 y 99
y no sumar el 1.
Con la instruccin de entrada Leer num_ingresado, ingresa al computador el valor
digitado y es almacenado en la variable num_ingresado.
Observacin: sugerimos colocar la instruccin Escribir num_secreto en el programa
original e ingresar ste como num_ingresado inmediatamente. Veremos que el MIENTRAS
no se ejecuta NINGUNA vez y que nos da el siguiente mensaje: Exacto! Usted adivino en 2
intentos. Est bien esto o deberamos arreglar algo? Es importante cuando estamos
programando verificar el correcto funcionamiento de nuestros cdigos en variadas
condiciones para constatar su correcto funcionamiento. Una vez que ya haya hecho la
prueba, borre o deje como comentario la instruccin Escribir que le sugerimos.

Computacin para Ingeniera

Las instrucciones que estn encerradas entre el Mientras y el finmientras se ejecutarn


s y slo si se cumplen las dos condiciones que se indicaron, es decir que el nmero que el
usuario ingres sea DISTINTO al nmero secreto Y que la variable intentos tenga un valor
mayor a 0. Recordemos que el conector lgico Y obliga a que ambas partes deben ser
verdaderas para que el resultado final sea verdadero. (Si usted desea cerciorarse del
modo de trabajo del computador, re-establezca la instruccin Escribir Num_secreto que
sugerimos en el punto anterior, cambie el Y por O en el mientras, ingrese el num_secreto
y vea que pasa).
Nos parece que ya estamos convencid@s de que se ingresa al mientras si se cumplen
ambas condiciones, veamos que sucede a continuacin:
La instruccin condicional SI nos ayuda a dar un mensaje orientador al usuario
indicndole si el valor por l ingresado es ms alto o ms bajo que el nmero
secreto.
Indicamos al usuario la cantidad de intentos que le quedan.
Colocamos otra instruccin de asignacin indicando al computador que rescate
el valor de intentos, le reste una unidad y el resultante lo almacene en intentos;
con esto despus del intento fallido, la variable intentos quedar con valor 8.
El finmientras hace un rol de boomerang o de frontn y obliga a que el
computador quiebre la secuencia y ejecute nuevamente la instruccin mientras.
El SI que est despus del ciclo mientras nos permite dar el mensaje final al usuario.

Un pequeo resumen:
Mientras finmientras encierran instrucciones que se pueden ejecutar ninguna, una, un
nmero finito o un nmero infinito de veces.
Es nuestra responsabilidad hacer que un ciclo mientras finalice alguna vez.
Es absolutamente necesario que dentro del mientras se manipule la condicin lgica para
que sta deje de ser verdadera.
A continuacin registraremos pequeos trozos de cdigo que nos permitan visualizar con mayor
claridad el uso de mientras.
proceso crea_tabla_multiplicar
multiplicador <- 1
Escribir "Ingrese el valor de la tabla de multiplicar que requiere"
leer valor
mientras multiplicador <= 12 Hacer
resul <- multiplicador * valor
escribir valor, " * ",multiplicador," es: ",resul
multiplicador <- multiplicador + 1
FinMientras
FinProceso
Comentarios:
PSEINT, de la forma en que lo configuramos, inicializa todas las variables numricas en 0,
por eso debemos colocar la asignacin en 1 de nuestro multiplicador.
Solicitamos al usuario que nos ingrese slo un valor, por eso est fuera del mientras.

Computacin para Ingeniera

La condicin que indicamos es que cada vez compare el valor que tiene almacenada la
variable multiplicador con respecto a 12 y que ejecute el ciclo hasta que exceda ese valor.
En otras palabras, habra sido similar colocar multiplicador < 13 en vez de >= 12.
Asignamos a resul el resultado de multiplicar el valor ingresado por el usuario por el
contenido de multiplicador (la primera vez vale 1).
Damos a conocer al usuario de una forma grficamente conveniente el resultado.

Asignamos a la variable multiplicador una unidad ms de la que tena, despus de haber


impreso; en caso contrario estaramos deformando en vez de informando. Recordemos
que es imperativo que debemos hacer que alguna vez finalice el ciclo, por eso debemos
hacer que el contenido de la variable que est controlando el ciclo, cambie su valor.
Les invitamos a pensar los siguientes cambios:
1. Qu hay que hacer si inicializamos multiplicador en 12?
2. Cmo entregar adems el resultado del valor de la multiplicacin elevada al
cuadrado?

OBSERVACIN IMPORTANTE:
Si deseamos ir contando, de una en una, una cierta condicin debemos
utilizar una instruccin de asignacin como la siguiente:
valor_inicial4 <- valor_inicial + 1
Recordemos que PSEINT inicializa automticamente valor_inicial en 0.

Este es un nombre de variable ficticio, usted use siempre alguno nemotcnico

Computacin para Ingeniera

Sigamos revisando las instrucciones que conocemos para confeccionar otro pequeo programa.
Confeccionar un programa que lea una lista de n nmeros entregada por el usuario y entregue la
cantidad de positivos y su promedio y la cantidad de negativos y su promedio.
En este caso, solicitamos al usuario que primero nos indique con cuantos valores va a trabajar y
luego nos vaya entregando stos de 1 en 1.
proceso positivo_negativo
Escribir "Digite la cantidad de valores que nos ingresara para que le indiquemos"
escribir "cuantos son positivos y su promedio"
Escribir "y cuantos son negativos y su promedio"
leer cantval
// en cantval almacenaremos el valor primero que nos ingresa el usuario y que se supone es la de la lista de sus valores
Mientras cantval > 0 hacer
escribir "ingrese un valor"
leer valor
si valor > 0 Entonces
cantpos <- cantpos + 1 //sumamos 1 mas a los positivos que comenzaron en cero
sumpos <- sumpos + valor // sumamos a la variable sumpos el valor positivo recien leido
FinSi
//no ponemos un sino ya que tambin considerariamos los 0
si valor < 0 Entonces
cantneg <- cantneg + 1 //sumamos 1 mas a los negativos que comenzaron en cer
sumneg <- sumneg + valor // sumamos a la variable sumneg el valor negativo recien leido
FinSi
cantval <- cantval - 1 // "rebajamos" 1 unidad de la cantidad de valores
FinMientras
//entregamos resultados solo al final ya que ahora tenemos el estadistico requerido
si cantpos > 0 Entonces
//si no hacemos esta consulta corremos el riesgo de que haya un error de division por 0
escribir "Ingreso ", cantpos, " valores positivos y su promedio es: ", sumpos / cantpos
Sino
Escribir "no hubo ingreso de positivos"
FinSi
si cantneg > 0 Entonces
//si no hacemos esta consulta corremos el riesgo de que haya un error de division por 0
escribir "Ingreso ", cantneg, " valores negativos y su promedio es: ", sumneg / cantneg
Sino
Escribir "no hubo ingreso de negativos"
FinSi
FinProceso

Comentarios:
Como colocamos varios comentarios (//) dentro del programa, no analizaremos las
instrucciones una a una, sino slo lo ms relevante.
Pruebe que pasa si como primer valor se entrega un negativo; tambin si se entrega un 0.
Pruebe ingresar 2 en el primer ingreso y posteriormente slo dos positivos; haga lo mismo
ingresando slo 2 negativos.

10

Computacin para Ingeniera

Confeccionemos otro programa que permita que un(a) docente de la Universidad Mayor
ingrese las tres ponderaciones de sus evaluaciones parciales, el nmero de sus alumnos y,
posteriormente, el nombre de cada uno de ellos y sus tres notas parciales. El programa le
entregar la nota de presentacin y, de acuerdo al reglamento de los alumnos, la indicacin de
la calidad de eximido (nota presentacin mayor igual a 5 y cada una de las parciales azules),
reprobado (nota de presentacin menor a 3.5) o si debe rendir examen. Adems
entregaremos un estadstico con cantidad de eximidos, cantidad de reprobados, cantidad que
van a examen y porcentaje actual de reprobados del curso.
Proceso calculo_notas
escribir "ingrese las tres ponderaciones en formato 0. y el porcentaje"
escribir "Por ejemplo 0.3 indica el 30 % "
leer pond1, pond2, pond3
escribir "ingrese la cantidad de alumnos"
leer cantalu
mientras cantalu > 0 Hacer
escribir "ingrese nombre del alumno y sus tres notas"
leer nomalu,nota1, nota2, nota3
np <- (nota1 * pond1) + (nota2 * pond2) + (nota3 * pond3)
escribir "el(la) alumno(a): ",nomalu," tiene como nota presentacion un: ",np
si np < 3.5 Entonces
escribir "esta reprobado"
rep <- rep + 1
Sino
si np >= 5 Y nota1 >= 4 Y nota2 >= 4 y nota3 >= 4 Entonces
escribir "esta eximido"
exi <- exi + 1
Sino
escribir "debe dar examen"
exa <- exa + 1
FinSi
FinSi
cantalu <- cantalu - 1
FinMientras
escribir "la cantidad de eximidos es: ", exi
escribir "la cantidad de reprobados es: ", rep
escribir "la cantidad que rinde examen es: ", exa
escribir "el porcentaje actual de reprobacion es: ", (rep / (exi + rep + exa)) * 100
FinProceso

11

Computacin para Ingeniera

Comentarios:
En este programa se da a conocer dentro del mientras lo que sucede con cada
estudiante y al final de l, las estadsticas.
Reiteramos la importancia de usar variables nemotcnicas.
Tambin se pueden hacer varios SI sin utilizar sino, pero resulta ms largo y engorroso.
si np < 3.5 Entonces
escribir "esta reprobado"
rep <- rep + 1
FinSi
si np >= 3.5 y np < 5 Entonces
escribir "debe dar examen"
exa <- exa + 1
FinSi
si np >= 5 Y (nota1 < 4 O nota2 < 4 O nota3 < 4)
escribir "debe dar examen"
exa <- exa + 1
FinSi
si np >= 5 Y nota1 >= 4 Y nota2 >= 4 y nota3 >= 4 Entonces
escribir "esta eximido"
exi <- exi + 1
FinSi

12

Computacin para Ingeniera

Veamos otro enunciado y su desarrollo.


A una fiesta acude gran cantidad de invitados; a la entrada un portero digita el sexo (F M) y la
edad. Cuando llega la ltima persona, el portero ingresa la letra N (de No ms). Usted debe
confeccionar un programa que permita el ingreso segn lo especificado adems de las siguientes
estadsticas: cantidad de varones, cantidad de damas, varones entre 18 y 30 aos y damas entre
22 y 25 aos.
proceso fiesta
Escribir "Ingrese sexo de la persona (F M) o digite N si no va a hacer ms ingresos"
leer sexo
Mientras sexo <> "N" Hacer
//si queremos estar seguros que funciona tambien con minuscula debemos colocar
//Mientras sexo <> "N" Y sexo <> "n" Hacer
escribir "ingrese edad"
leer edad
si sexo = "F" Entonces
//si queremos estar seguros que funciona tambien con minuscula debemos colocar
//si sexo = "F" O sexo = "f" Hacer
damas <- damas + 1
si edad > 21 y edad < 26 Entonces
damas22_25 <- damas22_25 + 1
FinSi
FinSi
si sexo = "M" entonces
varones <- varones + 1
si edad > 17 y edad < 31 Entonces
varones18_30 <- varones18_30 + 1
FinSi
FinSi
//Debemos repetir el leer sexo para que se actualice este valor
Escribir "Ingrese sexo de la persona (F M) o digite N si no va a hacer ms ingresos"
leer sexo
FinMientras
escribir "ingresaron: ", damas," damas y entre 22 y 25: ",damas22_25
escribir "ingresaron: ", varones," varones y entre 18 y 30: ",varones18_30
FinProceso

Comentarios:
En este caso utilizamos la misma variable para marcar el fin de datos.
Miremos con detencin el porqu, si nos interesara trabajar indistintamente con
minsculas o maysculas, en un caso debemos usar O y en el otro Y.

13

Computacin para Ingeniera

Sigamos ejercitndonos: Confeccionar un programa que lea una lista de valores que finaliza al
ingresar el valor 0. Se pide que su programa entregue: cantidad de enteros y su promedio;
cantidad de decimales y su multiplicatoria; cantidad de pares y cuntos son divisibles por 8; la
mnima cantidad ingresada y la cantidad total de valores ingresados.
Ufff, cuntas cosas. Recordemos ir resolviendo las interrogantes de a una
proceso numeros_variados
multfrac <- 1 // es OBLIGATORIO inicializarlo en 1 que es el neutro de la multiplicacion
Escribir "Ingrese un valor; cuando no desee seguir, ingrese un 0"
leer numero
min <- numero //si hubiese un solo valor, obvio seria el menor de todos
mientras numero <> 0 Hacer
cantnum <- cantnum + 1 //"cuenta" los valores ingresados
si numero = trunc(numero) entonces //prueba que Es Entero
cantent <- cantent + 1 //adiciona un entero mas
sument <- sument + numero //suma el actual entero a los anteriores
//aprovecharemos de ver la cantidad de pares
si numero mod 2 = 0 entonces //tambien podriamos usar numero/2 = trunc(numero/2)
pares <- pares + 1
//y si estamos en los pares, veamos de inmediato si es divisible por 8
si numero mod 8 = 0 Entonces
div8 <- div8 + 1
FinSi
FinSi
Sino
//si se ejecuta esto es porque el numero es fraccionario
cantfrac <- cantfrac + 1
multfrac <- multfrac * numero
FinSi
si numero < min entonces //el ultimo valor leido es mas chico
min <- numero
FinSi
Escribir "Ingrese un valor; cuando no desee seguir, ingrese un 0"
leer numero
FinMientras
si cantnum = 0 entonces //no ingreso ningun valor valido
Escribir "si desea usar el programa no debe ingresar 0 al principio"
Sino
Escribir "Se ingresaron: ",cantnum," numeros"
Escribir "el valor minimo ingresado es: ",min
si cantfrac = 0 Entonces
escribir "no hubo ingreso de fraccionarios"
Sino
escribir "Se ingresaron: ",cantfrac, " fraccionarios y su multiplicatoria es: ",multfrac
FinSi
si cantent = 0 Entonces
escribir "no hubo ingreso de enteros"
Sino
Escribir "se ingresaron: ", cantent," enteros los que promedian: ",sument / cantent
Escribir "con ",pares, " pares y ",div8," multiplos de 8"
FinSi
FinSi
FinProceso

14

Computacin para Ingeniera

Veamos ahora un ejemplo de remuneraciones:


Una empresa le solicita confeccionar un programa para calcular sueldos y le explica que los datos
que se ingresan de cada persona son los siguientes:

Nombre.
Sueldo base.
Cantidad cargas familiares (si el sueldo base es < $ 300.000 se cancelan a razn de $ 5.500
cada una; si est entre $ 300.000 y menor a $ 500.00 se cancelan a razn de $ 3.500 cada
una y si es mayor o igual a $ 500.000 no implican cancelacin).
Cdigo asignacin profesional (0: no tiene; 1: si tiene; sta es un 80 % del sueldo base).
Cantidad de horas extras (las que se pagan a razn de 1/44 del sueldo base),
Usted debe entregar, adems de la remuneracin a cancelar a cada persona, lo siguiente:
Indicacin de cmo se finalizar el ingreso de datos.
Monto total de dinero para la cancelacin de remuneraciones.
Cantidad de personas y de cargas familiares que no se cancelan.
Cantidad de personas con y sin asignacin profesional.

15

Computacin para Ingeniera

Proceso calculo_sueldos
Escribir " ingrese cantidad de funcionarios"
leer cantfun
mientras cantfun > 0 Hacer
escribir "ingrese datos del trabajador: nombre, sbase, carfam, cap,chex"
leer nom, sbase, carfam, cap, hrsex
//en primer lugar calcularemos el monto de cada asignacion por carga
si sbase < 300000 Entonces
moncarga <- 5500 * carfam
Sino
si sbase >= 300000 y sbase < 500000 Entonces
moncarga <- 3500 * carfam
Sino
moncarga <- 0
sinpagocar <- sinpagocar + 1
totcarnopag <- totcarnopag + carfam
FinSi
FinSi
remuneracion <- sbase + moncarga + ( 0.80 * sbase * cap) + (hrsex * (1/44) * sbase)
//fijemonos que si no tiene asignacion titulo, el codigo es 0 por lo cual toda la
//multiplicacion se hace cero, lo mismo pasa si tiene 0 horas extras.
//QUE IMPORTANTE ES USAR BIEN LOS CODIGOS!!
totalrem <- totalrem + remuneracion
si cap = 0 Entonces
sinasignacion <- sinasignacion + 1
Sino
conasignacion <- conasignacion + 1
FinSi
escribir "el(la) funcionario(a), ",nom, " debe recibir un pago de: ", remuneracion
cantfun <- cantfun -1
FinMientras
Escribir "el total para remuneraciones es: ",totalrem
escribir "hay un total de: ",sinasignacion , " funcionarios sin asignacion de titulo"
escribir "hay un total de: ",conasignacion , " funcionarios con asignacion de titulo"
escribir "No se cancelan cargas a: ",sinpagocar," funcionarios, con un total de: ",totcarnopag," cargas"

FinProceso

16

Computacin para Ingeniera

17

Computacin para Ingeniera

Una muy buena alternativa de poder probar los algoritmos que hemos confeccionado, ya sea en
lenguaje coloquial o utilizando un seudolenguaje como Pseint, es hacer el ruteo o trazabilidad del
programa confeccionado.
Probemos con el siguiente:
Proceso cuendig
escribir "ingrese un valor entero"
leer valor
cuenta <- 0
//podriamos no haber hecho la asignacin anterior si el lenguaje que utilizamos
// inicializa automticamente las variables numricas en 0
mientras valor > 0 Hacer
cuenta <- cuenta + 1
valor <- trunc(valor/10)
FinMientras
escribir "la cantidad de digitos es: ",cuenta
FinProceso
En el cdigo hemos utilizado las constantes ingrese un valor entero; 0 ; 1; 10 y la cantidad de
digitos es:.
Como dato de entrada tendremos la cantidad que el usuario digitar ante nuestro pedido, el que
se almacenar en la variable valor y, como salida, entregaremos el valor de la variable cuenta.
Crearemos una pequea tabla en que registraremos los cambios de los valores de variables que se
van sucediendo si nuestro usuario nos ingresa el nmero 5432.
valor
5432
543
54
5
0

cuenta
0
1
2
3
4

Esta tabla muestra la ruta o traza que nos muestra el cambio de valores que van sufriendo
nuestras variables. Este programa sirve para contar la cantidad de dgitos que tiene un valor
positivo ingresado por el usuario. Es bueno probarlo con un valor fraccionario y tambin con uno
negativo.
La salida que nos muestra el computador es:
la cantidad de digitos es: 4

18

Computacin para Ingeniera

Examinemos otro ejemplo:


Proceso invierte_valor
escribir "ingrese un valor entero"
leer valor
mientras valor > 0 Hacer
dig <- valor mod 10
final <- final * 10 + dig
valor <- trunc(valor/10)
FinMientras
escribir "el numero con los digitos invertidos es: ",final
FinProceso
Previo a confeccionar nuestra tabla, recordaremos lo que hacen trunc y mod en el seudolenguaje
Pseint.
Trunc(x) deja slo la parte entera de x, es decir de la expresin que est entre parntesis. Si por
ejemplo X tiene el valor 3.141516 y se aplica trunc, el resultado es 3; si X tiene como valor 4562.9 y
se aplica trunc queda 4562
Mod est definido en Pseint como un operador algebraico que hace que se calcule el resto de una
divisin entera. Por ejemplo si tenemos 4 mod 2 el resto es 0; si tenemos 5 mod 2, el resto es 1.
Es bueno tener presente que si no se utilizan enteros con mod, el lenguaje marca un error y no
calcula la expresin.
valor
9456
945
94
9
0

dig
6
5
4
9

final
05
6
65
654
6549

La salida de este programa es:


el numero con los digitos invertidos es: 6549

Este valor 0 lo asigna automticamente el computador cuando utiliza la variable final la primera vez al lado
derecho de la instruccin final <- final * 10 + dig

19

Computacin para Ingeniera

Ahora le mostraremos un programa para que usted revise las constantes, variables y haga el
ruteo si se ingresan los valores 5, 99, 98, 99, 5, 3, -2
Proceso edades
escribir "ingrese Edad o un negativo para finalizar"
leer edad
min <- edad
max <- edad
mientras edad >= 0 Hacer
si edad < min Entonces
min <- edad
FinSi
si edad > max Entonces
max <- edad
FinSi
edades <- edades + 1
escribir "ingrese Edad o un negativo para finalizar"
leer edad
FinMientras
si edades = 0 Entonces
escribir "no ingreso ningun valor valido"
Sino
escribir "la edad maxima es: ",max," la edad minima es: ",min," usted ingreso:
",edades," valores"
FinSi
FinProceso

20

Computacin para Ingeniera

Confeccionemos ahora un programa que nos permita calcular para una serie de valores, el
cuadrado, el cubo, la raz cuadrada y la raz cbica.
Proceso calculos
escribir "ingrese valor inicial, final y el incremento"
leer ini,final,incre
mientras ini <= final Hacer
si ini < 0 Entonces
rcua <- rc(abs(ini))
explic <- " imaginaria "
Sino
rcua <- rc(ini)
explic <- " "
FinSi
cua <- ini * ini
cubo <- cua * ini
rcub <- ini ^ (1/3)
escribir "valor: ",ini," cuadrado: ",cua," cubo: ",cubo," raiz cuadrada: ",rcua,explic,"
raiz cubica: ",rcub
ini <- ini + incre
FinMientras
FinProceso
Podemos probar este programa ingresando tros de valores como:
4, 2, 8
-2, 5, 0.2
Debemos fijarnos que nos preocupamos especialmente en manejar que no se incurriera en un
error al forzar el clculo de una raz cuadrada negativa; en esos casos calculamos la raz del valor
absoluto y le pusimos el mensaje imaginaria.

21

Computacin para Ingeniera

RUTEOS O TRAZAS DE ALGORITMOS


Una de las formas de comprender el trabajo que ejecuta el computador es
el ruteo o traza que consiste en ir haciendo el seguimiento de lo que ocurre
en la memoria del computador respecto al valor que se va asignando a cada
una de las variables. Tambin se utiliza la instruccin de salida, escribir,
para visualizar lo que entrega el computador.
Revisaremos algunos programas desarrollados con Pseint.
1.

Indique qu imprime el siguiente algoritmo:


Proceso sin_titulo
DATO <- 312
VAR <- 317
AUX <- 318
Si DATO < VAR Entonces
Si VAR > AUX Entonces
Escribir "DATO"
Sino
Escribir "VAR"
FinSi
Sino
Escribir "AUX"
FinSi
FinProceso

Las primeras tres instrucciones de asignacin permiten establecer el


valor 312 para la variable DATO, el 317 para la variable VAR y 318 para
AUX.
A continuacin hay una instruccin condicional que consulta si DATO es
menor que VAR; como 312 es menor que 317, el resultado de la
consulta es VERDADERO y se contina con la siguiente instruccin que
tambin es condicional y consulta si VAR (317) es mayor que AUX (318),
el resultado de esta consulta es FALSO, por ende, la prxima instruccin
que se ejecuta es la que est en el SINO del SI: Escribir VAR. El
computador muestra por pantalla lo que est entre comillas, es decir,
VAR.
Si la instruccin hubiese sido Escribir VAR, habra mostrado 317 que es
el valor que tiene asignado la variable.
Un diagrama de flujo permite revisar con mayor facilidad lo expuesto:

22

Computacin para Ingeniera

Sera interesante que revisramos lo que sucedera si se asignara a DATO el valor 318, a
VAR el 312 y a AUX el 317.
Como DATO es mayor que VAR el resultado de la comparacin es FALSO por lo que el
computador escribe AUX.
OBSERVACIONES IMPORTANTES:
1. Recordar la diferencia entre Escribir AUX y Escribir AUX: lo primero hace que se
muestre AUX en pantalla, lo segundo que se muestre 317.
2. Recordar que si el resultado de una comparacin en una instruccin SI es:
a. VERDADERO, se ejecutan las instrucciones que estn entre el ENTONCES y
el SINO.
b. FALSO, se ejecutan las instrucciones que estn entre el SINO y el FINSI.
c. FALSO, y no hay un SINO, no se ejecuta ninguna instruccin.

23

Computacin para Ingeniera

2.

Cuntas veces imprime el siguiente algoritmo?:


Proceso sin_titulo
CONT <- 41
TOPE <- 75
Mientras CONT < TOPE Hacer
Escribir CONT
CONT <- CONT + 10
FinMientras
FinProceso

A CONT se le ha asignado el valor 41 y a TOPE el valor 75. La siguiente instruccin


MIENTRAS, al igual que la instruccin SI, presenta una consulta o condicin en este caso
se revisa si CONT es menor que TOPE como esto es VERDADERO, el computador muestra
por pantalla el valor 41, y ejecuta la operacin que est a la derecha del signo de
asignacin, suma 41 ms 10, y este nuevo valor, 51 es asignado a la variable CONT. La
instruccin FINMIENTRAS obliga a que el computador realice nuevamente la instruccin
MIENTRAS.
La segunda vez se compara 51 con 75 y como sigue siendo menor, el resultado es
VERDADERO, el computador muestra 51, actualiza el valor de CONT a 61 y se vuelve a
consultar.
La tercera vez se compara 61 con 75, se muestra 61, se actualiza CONT a 71 y se vuelve a
consultar.
La cuarta vez se compara 71 con 75, se muestra 71, se actualiza CONT a 81; al comparar el
resultado es FALSO por lo cual la prxima instruccin a ejecutarse es el FINPROCESO.
OBSERVACIONES IMPORTANTES:
1. El FINMIENTRAS devuelve la ejecucin al MIENTRAS, se trata de un ciclo que finaliza
cuando el resultado de la comparacin es FALSO. (podra hacerse 0 vez).
2. El FINSI indica el final de esa instruccin e, independientemente si la comparacin dio
como resultado FALSO o VERDADERO, se contina con la instruccin posterior al FINSI.
3. Es recomendable escribir los ejercicios en Pseint y pedir la ejecucin paso a paso,
cuidando mover la pantalla de ejecucin a un costado de modo de visualizar la
ejecucin.
4. Podemos probar tambin cambiando el MIENTRAS HACER por un SI ENTONCES y
finalizando con un FINSI en vez de un FINMIENTRAS: comprobaremos que slo se
muestra el valor 41.

24

Computacin para Ingeniera

3.

Considerando el siguiente algoritmo, qu imprime?


Proceso sin_titulo
TOPE <- 50
AUX<- 5
Mientras AUX <= TOPE Hacer
AUX <- AUX + 12
FinMientras
Escribir AUX
FinProceso

Si hemos comprendido bien ya las instrucciones de asignacin, lo que esperamos as suceda, ya no


tenemos necesidad de indicar que TOPE tiene el valor 50 y AUX el valor 5.
La primera vez entonces, se consulta si 5 es menor o igual a 50, como esto es VERDADERO, el
computador suma 5 (el valor de AUX) ms 12, y asigna el valor 17 a AUX.
La segunda vez se consulta 17 con respecto a 50, como sigue siendo VERDADERO, el computador
suma 17 ms 12 y asigna 29 a AUX.
Como suponemos que la dinmica ya est clara, veremos los resultados en una tabla:
TOPE
50

AUX
5
17
29
41
53

AUX<=TOPE
Verdadero
Verdadero
Verdadero
Verdadero
Falso

ESCRIBIR

53

Apreciamos que el programa tiene slo dos variables (TOPE y AUX); las otras dos columnas las
hemos anexado para que observemos el desarrollo paso a paso del programa.
OBSERVACIONES IMPORTANTES:
1. Algunas veces las variables permanecen con un nico valor dentro del programa, en el
ejemplo es el caso de TOPE.
2. La variable AUX recibe 5 valores distintos.
3. La nica salida del programa es el valor 53 que es el que tena la variable AUX al finalizar el
ciclo MIENTRAS.
4. Si hubisemos querido imprimir distintos valores de AUX, deberamos haber puesto el
ESCRIBIR antes del FINMIENTRAS. Si hubisemos querido mostrar TODOS los valores de
AUX, deberamos haber puesto un ESCRIBIR antes de la instruccin MIENTRAS y el otro
antes del FINMIENTRAS.
5. Si en vez de MIENTRAS HACER FINMIENTRAS, hubiese habido un SI ENTONCES
FINSI; slo se habra mostrado el valor 17.

25

Computacin para Ingeniera

4.

Indique el orden y los valores que imprime:


Proceso sin_titulo
A<- 7342
B<- 100
C<- 10
D<- TRUNC(A/B)
R<- A MOD C
Escribir R," y ",D
FinProceso

Ya sabemos que A, B y C, comienzan con los valores 7342, 100 y 10 respectivamente.


Cmo se calcula el valor de D? Se divide 7342 por 100, de lo que se obtiene 73,42 y luego se
trunca (se deja slo la parte entera), por lo que a D se le asigna el valor 73.
Y cmo se calcula R? El operador MOD est definido en Pseint como Mdulo (resto de la
divisin entera) , entonces se divide 7342 por 10. El resultado de la divisin en su parte entera es
743 y sobran, es decir, el resto que queda, es 2.
Qu resultados se muestran?
El contenido de R, la palabra (o letra) y antecedida y precedida por un blanco y el valor de la
variable D:

2 y 73
Si hubisemos puesto la instruccin ESCRIBIR R, y ,D mostrara:

RyD
Si la salida hubiese sido ESCRIBIR D, R mostrara:

73 2

En el prximo ejercicio revisaremos ms a fondo la funcin TRUNC y el operador MOD.

26

Computacin para Ingeniera

5.

Para el nmero 345, el algoritmo permite:


Proceso sin_titulo
N <- 345
C <- 0
A <- 0
Mientras N<> 0 Hacer
C <- C + (N MOD 10)
A <- N
N <- TRUNC(N/10)
FinMientras
Escribir A
FinProceso

N
345
34
3
0

C
0
5 viene de (0 + (345 MOD 10))
9 viene de (5 + (34 MOD 10))
12 viene de (9+ (3 MOD 10))

A
0
345
34
3

N<>06
Verdadero
Verdadero
Verdadero
Verdadero
Falso

Escribir

Si probramos este programa con N <- 543, se mostrara 5.


Si ingresramos N <- 1000, se mostrara 1.
Si ingresramos N <- 879, se mostrara 8.
Este programa por tanto muestra el primer dgito del valor asignado a N.
Recomendamos ejecutar este programa al menos con los valores de prueba sugeridos y
observar a que corresponde el valor de C.

N distinto a 0

27

Computacin para Ingeniera

Revisemos otra forma de ruteo.


6. A partir del siguiente algoritmo en pseudolenguaje, se pide realizar el ruteo o traza,
suponga que el usuario ingresa el valor N=4. Debe indicar todos los valores que toman
cada una de las variables.
Proceso sin_titulo
Escribir "Ingrese N"
Leer N
I <- 1
A <- 3
B <- 4
aux<- 1
Mientras I <= N Hacer
Si aux = 1 Entonces
Escribir A
A <- A + (I + 2)
aux<- 0
Sino
Escribir B
B <- B * (I + 2)
aux<- 1
FinSi
I <- I + 1
FinMientras
FinProceso

Confeccionaremos nuestra tabla:


N
4

28

I
1

A
3

B
4

AUX
1

ESCRIBIR
Ingrese N

2
3
4
5

6
11

16
96

0
1
0
1

3
4
6
16

Computacin para Ingeniera

Revisaremos como confeccionar un algoritmo de un problema que nos presentan.


7.

Llevar el registro de los 1000 productos de una ferretera. Se ingresa el precio y la


cantidad de cada producto.
Ejemplo:

Precio unitario
1500
3750
6500
Etc.

Cantidad
300
150
9780
Etc.

Se pide:
a)
b)
c)
d)

Datos de entrada
Datos de salida
Determinar el monto total del dinero recaudado
Determinar el promedio de precio de todos aquellos productos que registren ms de
999 unidades.

a) Los datos de entrada son: el nmero de productos (100), y el precio y cantidad de cada
uno de los 100 productos.
b) Los datos de salida son: el monto total de dinero recaudado y el promedio de precio de
los productos que registren ms de 999 unidades.
c) Sabemos que debemos trabajar con 100 productos, por tanto, debemos utilizar un
MIENTRAS que nos permita hacer el proceso de lectura, de suma del total del dinero
recaudado y la consulta que nos indicar si un producto tiene ms de 999 unidades para
sumar sus precios y contabilizar la cantidad de productos para, una vez finalizado el
MIENTRAS, calcular el promedio.
Proceso ferreteria
totven <- 0
preciomas999 <- 0
cantmas999 <- 0
productos <- 100
MIENTRAS productos > 0 Hacer
escribir "ingrese precio unitario y cantidad de productos"
leer preuni, canpro
totven <- totven + (preuni * canpro
//calculamos cada vez el precio de venta y lo sumamos a lo que ya tenemos
SI canpro > 999 Entonces
//se ejecutaran estas instrucciones SOLO si canpro leida es mayor que 999
preciomas999 <- preciomas999 + preuni //sumamos los precios uno a uno
cantmas999 <- cantmas999 + 1 //sumamos cada vez UN nuevo producto
FinSi //no hay SINO
productos <- productos - 1 //debemos ir restando cada vez UN producto
FinMientras
Escribir "El monto total vendido es: ",totven
Escribir "El promedio de los ",cantmas999," vendidos es: ",preciomas999/cantmas999
FinProceso

Recomendamos probrarlo en Pseint, cambiando la asignacin de productos a 3 en vez de 100 e


ingresando los tres pares de valores que aparecen en el ejemplo.

29

Computacin para Ingeniera

Você também pode gostar