viernes, 7 de septiembre de 2012

martes, 4 de septiembre de 2012

Ejercicios Pseint

Ya enseñé como utilizar el programa Pseint, así que para que prueben sus habilidades, traigo algunos problemas resueltos por mi, intenten resolverlos y probarlos en Psint. Si descargan una versión muy antigua deben fijarse en poner todas las variables en un principio, ya que Psint buscara el primer termino de la variable y no lo encontrará, en las versiones mas actuales no es necesario poner todas las variables con un valor inicial, solo aquellas que parten en un proceso y no algunas en las que se ingresa el valor. A continuación los ejercicios.

1)Se desea ingresar a un computador para procesarla, la siguiente información de alumnos de la Universidad:

  Número de matrícula
  Nombre
  Sexo 1 = masculino
           2 = femenino
           3 = fin de datos
  Edad
  Ingreso familiar

Confeccione un algoritmo que emita un listado con la siguiente información:

· Cuántos hombres poseen un ingreso familiar que esté comprendido entre $ 350.000 y $ 1.800.000.
· Cuántas mujeres cuya edad fluctúa entre 19 y 22 años, tienen un ingreso familiar superior a $ 700.000.
· La edad promedio de las mujeres y de los hombres.

* en este problema el programa debe finalizar cuando el usuario escriba 3 en la variable de sexo








2)Para efectos de contabilización y cálculo de las ventas diarias de un supermercado, se ideó la siguiente entrada de datos:

Código de producto
Unidades vendidas.
Tipo de envase 1 = envase de 3 kilos
                        2 = envase de 5 kilos
                        3 = envase de 9 kilos
                        4 = fin de datos

Los precios de venta dependen del tipo de producto y son los que se detallan a continuación:
                            
Tipo 1 $ 18,00 el kilo
Tipo 2 $ 16,00 el kilo
Tipo 3 $ 15,00 el kilo

El empresario requiere un listado diario que contenga la siguiente información:

· Un listado con código de producto, unidades vendidas, cantidad de kilos vendidos y el ingreso.
· Los ingresos totales obtenidos diarios así como los kilos vendidos.
· Se requiere saber cuál fué la cantidad más alta de kilos vendidos y a que código pertenece.









Solución a los problemas:

Si tienen alguna duda pueden probarlos en Pseint, ambos funcionan perfectamente. Recuerden que los ejercicios se pueden resolver de mas de una manera, ya que es un conjunto de ordenes lógicas, así que puede que algunos utilicen mas o menos lineas si se sabe como ahorrar espacio de manera lógica. Las respuestas que entrego no son absolutas:

Ejercicio 1:


Proceso Informacion_U
numero<-0
nombre<-" "
s<-0
edad<-0
ingreso<-0
h<-0
m<-0
eh<-0
em<-0
promh<-0
promm<-0
Mientras s<>3 Hacer
Escribir "Ingrese Numero de matricula"
Leer numero
Escribir "Ingrese Nombre del alumno"
leer nombre
Escribir "Ingrese Sexo del alumno, 1 hombre, 2 mujer, 3fin de datos"
Leer s
Escribir "Ingrese Edad del alumno"
Leer edad
Escribir "Ingrese Ingreso familiar del alumno"
leer ingreso
Si s=1 Entonces
cth<-cth+1
eh<-eh+edad
si ingreso<=1800000 y ingreso>=350000 Entonces
h<-h+1
FinSi
FinSi
si s=2 Entonces
ctm<-ctm+1
em<-em+edad
si edad<=22 y edad>=19 y ingreso>700000 Entonces
m<-m+1
FinSi
FinSi
FinMientras
si cth<>0 Entonces
promh<-eh/cth
FinSi
si ctm<>0 Entonces
promm<-em/ctm
FinSi
Escribir "la cantidad de hombres que poseen un ingreso familiar entre 350.000 y 1.800.000 es:", h
Escribir "la cantidad de mujeres con un ingreso superior a 700.000, entre los 19 y 22 años es:", m
Escribir "El promedio de edad de las mujeres es ", promm " y el promedio de edad de los hombres es ", promh
FinProceso


Ejercicio 2:

Proceso Kilos
codigo<-0
unidades_vendidas<-0
tipo_envase<-0
may<--100
codigomay<-0
ct1<-0
ct2<-0
ct3<-0
kg1<-0
kg2<-0
kg3<-0
mientras tipo_envase<>4 hacer
escribir "ingrese el codigo del producto"
leer codigo
escribir "ingrese unidades vendidas"
leer unidades_vendidas
escribir "ingrese tipo de envase del producto"
escribir "1=3kg; 2=5Kg; 3=9Kg; 4=Fin de datos"
leer tipo_envase
escribir ""
si tipo_envase=1 Entonces
ct1<-ct1+1
kg1<-kg1+3*unidades_vendidas
FinSi
si tipo_envase=2 Entonces
ct2<-ct2+1
kg2<-kg2+5*unidades_vendidas
FinSi
si tipo_envase=3 Entonces
ct3<-ct3+1
kg3<-kg3+9*unidades_vendidas
FinSi
si tipo_envase=1 y may<kg1 Entonces
may<-kg1
codigomay<-codigo
FinSi
si tipo_envase=2 y may<kg2 Entonces
may<-kg2
codigomay<-codigo
FinSi
si tipo_envase=3 y may<kg3 Entonces
may<-kg3
codigomay<-codigo
FinSi
escribir "el codigo es ",codigo," las unidades vendidas son de ",unidades_vendidas," unidades"
escribir "la cantidad de kilos vendidas son ",kg1+kg2+kg3," kilos"
escribir "el ingreso es de $",ct1*3*18+ct2*5*16+ct3*9*15
escribir ""
finmientras
ingresos_totales<-ct1*3*18 + ct2*5*16 + ct3*9*15
kg_totales_vendidos<-kg1+kg2+kg3
escribir ""
escribir ""
escribir "los ingresos totales son de $",ingresos_totales," y los kg totales vendidos son ",kg_totales_vendidos
escribir ""
escribir "la cantidad mas alta de kilos vendidos es de ",may," kilos, cuyo codigo es ",codigomay
FinProceso

Lenguaje Pseint

Anteriormente hablamos sobre los distintos lenguajes computacionales, entre ellos se encuentra el lenguaje del programa Pseint. Este lenguaje se basa en algoritmos, los cuales pueden formar distintos tipos de programas simples.

Pseint funciona con una serie de comandos lógicos, por lo que es simple su funcionamiento. Mientras mas se practique mas fácil se nos irá haciendo utilizarlo ya que iremos comprendiendo la lógica de este programa.

Sus comandos son

-Mientras (condición) hacer: Mientras se cumpla una condición, el programa debe hacer...
-Si (condición) Entonces: Si se cumple una condición el programa debe hacer...
-Escribir: escribir un enunciado con "" y/o una variable
-Leer: Leer una variable ingresada
- + : más
- - : menos
- < : menor
- >: mayor
- =: igual
- <>= distinto
- ^: Elevado a...
- y: para unir dos opciones
- o: para cualquiera de las dos opciones
- <-: equivalente a


Primero que todo se inicia el programa de la siguiente manera.

Programa (nombre del programa)


En este ejemplo haremos un programa que escriba los números pares del 1 al 50, para eso, necesitamos darle variables al programa, estas pueden ser cualquier letra excluyendo la "Y" ya que es un comando que se utiliza en  el lenguaje, entonces iniciamos el programa anteriormente

Programa Números

luego asignamos variables junto con un valor, como por ejemplo a x=0

Programa Números
x<-0

Para este ejercicio necesitaremos que un proceso se repita, entonces utilizaremos Mientras, esto sirve para que un proceso se repita mientras se cumplan ciertas condiciones, en este caso que los numeros sean menores o iguales al 50


Programa Números
x<-0
 Mientras x<=50 Hacer




Ahora debemos colocar el proceso que queremos, por lo tanto con una ecuación podemos darle valores pares a nuestra variable x, de la siguiente manera

Programa Números
x<-0
 Mientras x<=50 Hacer
    x<-x+2

Con esa ecuación, le estamos ordenando al programa convertir x en en el valor x y le sumamos 2, en este caso seria x=0+2, el proceso solo se hace una vez, por lo tanto x solo tomara el valor de 2. Ya tenemos nuestro primer numero, pero necesitamos que se vea el resultado, para eso usamos el comando "escribir"


Programa Números
x<-0
 Mientras x<=50 Hacer
    x<-x+2
    Escribir x

Con eso el programa mosrtará en pantalla nuestro valor de x, como ya esta listo nuestro numero finalizamos el proceso


Programa Números
x<-0
 Mientras x<=50 Hacer
    x<-x+2
   Escribir x
 FinMientras

FinMientras significa que acabo el proceso, pero nuestra x solo ha tomado el valor de 2 y le dimos la orden de trabajar mientas x sea menor a 50, por lo tanto el proceso se repetirá, y en esta ocasión nuestra ecuación sera x=2+2, ya que el valor de x no vuelve a 0, sino que queda con el ultimo valor que le dimos, por lo tanto nuestro programa esta listo, para eso le damos la orden de terminar


Programa Números
x<-0
  Mientras x<=50 Hacer
    x<-x+2
    Escribir x
  FinMientras
Finprograma

Como pueden ver es un programa que funciona con lógica. en caso de que hubiésemos querido los pares entre 10 y 50 tendríamos que haber puesto el comando Si, el cual "si es que" se cumple una condición, entonces se realiza el proceso, generalmente se ocupa dentro del mientras, ya que solo excluye ciertos términos y no vuelve a repetir el proceso, por lo tanto utilizaremos nuestro programa anterior, pero le colocaremos un si a nuestro "Escribir" ya que este solo debe funcionar con los números superiores e iguales a 10, entonces.



Programa Números
x<-0
  Mientras x<=50 Hacer
    x<-x+2
    Si x>=10 Entonces
       Escribir x
    FinSi
  FinMientras
Finprograma



Hay que recordar terminar cualquier condicionante tanto como el programa, sin el Fin, el proceso tendrá un error ya que no sabrá en que parámetros debe trabajar. En el caso que quicieramos obtener los numeros pares menores a un numero cualquiera, utilizaremos otra variable, en este caso la variable "cantidad". No es necesario que las variables sean solo una letra, estas pueden ser palabras, conjuntos de letras e incluso letras y números. Volvamos a tomar nuestro primer programa


Programa Números
x<-0
  Mientras x<=50 Hacer
    x<-x+2
    Escribir x
  FinMientras
Finprograma

Queremos que el programa escriba pares a nuestro antojo, por lo tanto cambiaremos el 50 por una variable


Programa Números
x<-0
cantidad<-0
  Mientras x<=cantidad Hacer
    x<-x+2
    Escribir x
  FinMientras
Finprograma




En este caso el programa funcionara solo 1 vez, ya que tanto x como cantidad es 0. Asi que utilizaremos el comando escribir para pedirle a nuestro usuario que ingrese hasta que numero desea tener pares.





Programa Números
x<-0
cantidad<-0
Escribir "ingrese numero limite"
  Mientras x<=cantidad Hacer
    x<-x+2
    Escribir x
  FinMientras
Finprograma







De esta manera, el usuario ingresara el limite de pares que deseé. El "Escribir" debe ir fuera del mientras, ya que solo pediremos el numero una vez, si va dentro del mientras, nos pedira cambiar la variable cada vez que se repita el proceso, pero nuestra variable sigue siendo 0 a pesar de que le pedimos al usuario que ingrese un numero, para que nuestra variable tome el valor deseado usamos el comando "leer"



Programa Números
x<-0
cantidad<-0
Escribir "ingrese numero limite"
Leer cantidad
  Mientras x<=cantidad Hacer
    x<-x+2
    Escribir x
  FinMientras
Finprograma

El comando leer, cambiara el valor de la variable por el numero que ingresemos, por lo tanto si ponemos 10, el mientras funcionara cuando x sea menor o igual a 10.

domingo, 2 de septiembre de 2012

Conversión de sistemas numéricos

Los sistemas numéricos Hexadecimal, Binario, Octal y Decimal, pueden convertirse de uno a otro de manera simple. Si no conoces estos sistemas, puedes ir al tema anterior en este mismo blog donde explico como funciona cada uno.

Una de las maneras mas simples es pasar cualquier sistema a binario y posteriormente este a cualquier otro.
A continuación haré un ejemplo en cada caso.


- De cualquier sistema a Decimal.

Probaremos primero con un termino fácil el cual ya mostré anteriormente el 4 (0100), este sistema de conversión se utiliza para números mas grandes, ya que toma mucho tiempo tener que llenar las casillas una por una.

Ej:        (0100)2 --->(4)10


Primero se separa el numero binario por casillas de la siguiente manera

 0 + 1 + 0 + 0


Luego, ya que su base es 2 (la cantidad de símbolos que utiliza el sistema) se multiplica cada casilla por su base y dependiendo de su casilla, este numero se elevará al numero de la casilla en la que se encuentra, leyendo de derecha a izquierda. En este caso seria así (^ = elevado)

0 x 2^3 + 1 x 2^2 + 0 x 2^1 + 0 x 2^0
0 + 4 + 0 + 0 = 4


Pare hacerlo mas rápido se escriben solo aquellos casilleros con 1, ya que cualquier multiplicación con 0
da 0.

Probemos ahora con un numero mas grande.

Ej:       (00110010)--->(    )10

0 + 0 + 1 + 1 + 0 + 0 + 1 + 0
0 + 0 + 1x 2^5 + 1 x 2^4 + 0 + 0 + 1 x 2^1 + 0
32 + 16 + 2 = 50

           (00110010)--->( 50 )10


Podemos hacer lo mismo con el sistema Octal o Hexadecimal, solo hay que cambiar la base por la que se multiplica. Ej.

 -De Octal a Cecimal

(10)8 --->(   )10

1 + 0
1 x 8^1 + 0
8 + 0 = 8
(10)8 --->(8)10         *Recordemos q en el sistema octal despues del numero 7 se pasa al 10, por esta                
                                      razón en el decimal queda en el 8



 -De Hexadecimal a Decimal

(34)16 ---->(  )10

3 + 4
3 x 16^1 + 3 x 16^0
48 + 3 = 51
(34)16 ---->(51)10


- De Decimal a cualquier otro sistema

En esta ocasión no es necesario expandir el numero, lo tomaremos tal cual se encuentra y lo dividiremos
Usare los mismos ejemplos anteriores para comprobar los números

- De binarios a decimales

(4)10 ----> (  )2

4/2=2  Resto=0


Como pueden ver coloque el resto de la división, esto es importante, ya que el resto es el que nos dará el resultado, sigamos dividiendo con nuestro resultado anterior, osea el 2.

2/2=1  Resto=0


Necesitamos seguir dividiendo hasta que llegar a 0, ya que de ahí en adelante nuestra división seguirá dando 0 tanto en el resultado como en el resto.

1/2=0 Resto=1


Listo, si vemos el problema completo solo necesitamos leer los restos desde abajo hacia arriba.


(4)10 ----> (  )2

4/2=2  Resto=0
2/2=1  Resto=0
1/2=0  Resto=1

Por lo tanto nuestro numero binario es 100, anteriormente vimos que este era 0100, pero es exactamente lo mismo. Al igual que en cualquier otro sistema, los 0 a la izquierda no cuentan, solo se coloco 0100 para darle un orden a los números binarios el que sera mas útil más adelante.

Sigamos con los demás ejemplos

(50)10 ---> (  )2

50/2=25 Resto=0
25/2=12 Resto=1
12/2=6   Resto=0
6/2=3     Resto=0
3/2=1     Resto=1
1/2=0     Resto=1

(50)10 ---> (110010)2    o como en el cambio anterior  (50)10 ---> (00110010)2

-De Decimal a Octal

(8)10 ---> ( )8

8/8=1  Resto=0
1/8=0  Resto=1

(8)10 ---> (10)8

-De Decimal a Hexadecimal


(51)10 --->(  )16

51/16=3 Resto=4
3/16=0   Resto=3

(51)10 --->(34)16


Existe una manera de pasar de Binario a Octal de manera rápida. Para eso ocuparemos la siguiente tabla

Binarios    Octales
0000            0
0001            1
0010            2
0011            3
0100            4
0101            5
0110            6
0111            7

Como pueden ver, los umeros binarios no pasan de los 3 dígitos (recuerden que los 0 a la izquierda no valen nada) Por lo tanto, cada vez que veamos un numero binario los dividiremos en grupos de 3 numeros y asi obtendremos el octal que deseamos, por ejemplo:

(00110010)2 --->(  )8

Separemos el binario en grupos de 3 a ver como queda. (De derecha a izquierda)

00.110.010

Ahora con la tabla anterior, podemos ver que el grupo de mas a la derecha es igual a 2, el del centro es igual a 6 y el de más a la izquierda es igual a 0, por lo tanto nuestro numero final debería ser 062 o 62, comprobemoslo con lo aprendido anteriormente, pasándolo a decimal y posteriormente de decimal a octal.
Como ya sabemos, 00110010 en decimal es 50, asi que lo haremos directamente a octal.

(00110010)2 --->(50)10

(50)10 --->(  )8

50/8=6 Resto=2
6/8=0   Resto=6

(50)10 --->(62)8


Se puede hacer lo mismo con el Hexadecimal


Binarios    Hexadecimal
0000            0
0001            1
0010            2
0011            3
0100            4
0101            5
0110            6
0111            7
1000            8
1001            9
1010            A
1011            B
1100            C
1101            D
1110            E
1111            F

Como pueden ver, aquí se ocupan 4 dígitos, asi que separaremos el numero Binario en grupos de 4, volveremos a utilizar el mismo numero para hacerlo mas rápido.

(00110010)2 ---> (  )16

0011.0010

Como podemos ver, el termino de la derecha es equivalente a 2 y el de la izquierda a 3, por lo tanto nuestro numero debería ser el 32, comprobemoslo pasándolo de decimal al hexadecimal, recuerden que este numero lo trabajamos anteriormente, así que ya esta mas comprobado que en decimal es 50.

(50)10 ---> (  )16

50/16=3 Resto=2
3/16=0   Resto=3

(50)10 ---> (32)16


Bueno, esos son los sistemas de conversión numérica, espero que les sean útiles.