Escolar Documentos
Profissional Documentos
Cultura Documentos
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)
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
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
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
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
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
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
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.
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.
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.
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
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
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
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
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
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
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
17
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
dig
6
5
4
9
final
05
6
65
654
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
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
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
22
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
2.
24
3.
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
4.
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
26
5.
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
N distinto a 0
27
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
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
29