BASICOS DE LA PROGRAMACION VI


2 números seguidos de básicos de la programación, eso si no se llama milagro no se que es (agradezcanle todo al todo poderoso RANDOM).
Parece que gustó lo que expliqué del método del burbujeo, así que planeo hacer más adelante una nota más grande sobre métodos de ordenamiento. Pero lo que viene a esta nota es algo totalmente distinto.


SUBPROGRAMAS

Todos los algoritmos que desarrollamos hasta ahora fueron hechos dentro de un solo bloque -el principal- lo cual servía para nuestros propósitos ya que hacíamos algoritmos pequeños. El problema es cuando tenemos cosas más grandes, entonces escribir todo dentro de un solo bloque sería muy confuso, aparte si en varias partes de nuestro programa tuvieramos que realizar tareas iguales, tendríamos que copiar muchas veces el mismo código. Vale mucho más la pena hacer el programa en varios bloques e ir llamando desde el principal el bloque que necesitemos. Esto lo podemos hacer gracias a la modularidad, lo cual significa repartir el código en pequeños módulos.
Asi se estructura esto:

COMIENZO
SUBPROGRAMA 1
SUBPROGRAMA 2
SUBPROGRAMA 3
...........................
SUBPROGRAMA N
FIN

SUBPROGRAMA 1:
instrucciones
RETORNAR

SUBPROGRAMA 2:
instrucciones
RETORNAR

SUBPROGRAMA 3:
instrucciones
RETORNAR

.........................

SUBPROGRAMA N:
instrucciones
RETORNAR

Pasemos a un ejemplo práctico para que se entienda algo de esto:

Una empresa maneja sus ventas por medio de corredores: cada uno de ellos cobra un porcentaje sobre lo vendido. Si el corredor vende más de $15000 recibe un premio de $2300.
Hay cuato corredores cuyas comisiones son:

Vendedor 17%
Vendedor 25%
Vendedor 310%
Vendedor 48%

Además conocemos el apellido de los vendedores.

Entonces tenemos que sacar:
1)Ventas totales de la empresa.
2)Ventas por corredor.
3)Comisión de cada uno.
4)Cantidad de pedidos.
5)Porcentaje de ventas de cada corredor sobre el total.
6)Nro. de corredor con + ventas.
7)Apellido del corredor con menor comisión.

La carga es por pedido, ingresandose el nro. del pedido, el nro. de corredor y el monto. La carga termina con nro. de pedido = 0

COMIENZO
INICIO
CARGA
COMISION
PORCENTAJE
MAXIMO
MINIMO
IMPRESION
FIN

Acá quedó definido el bloque principal del programa y las llamadas a subprogramas que debe hacer.
El primero es INICIO que carga el apellido de los vendedores y sus comisiones aparte de inicializar el contador de cantidad de ventas y el acumulador de dinero recaudado x ventas.

INICIO:
venta(4)
pedido(4)
compor(4)
porcent(4)
comision(4)
nombre$(4)
compor(1)=0.07
compor(2)=0.05
compor(3)=0.1
compor(4)=0.08
PARA i= 1 A 4
     INGRESAR "APELLIDO: ",apellido$(i)
     venta(i)=0
     pedido(i)=0
PROXIMO
totventa=0
RETORNAR

Acá lo que hicimos fue inicializar todos los valores necesarios para el resto del programa, como el apellido, el acumulador de total de ventas, pusimos en las variables del vector compor los nrs. necesarios para el posterior cálculo de porcentajes, etc. Veanlo por ustedes mismos.

CARGA:
INGRESAR "Nro. de pedido: ",np
HACER MIENTRAS np<>0
     INGRESAR Ingresar nro. de corredor: ",nc
     INGRESAR "Monto de la venta: ",mv
     totventa = totventa + mv
     venta(nc) = venta(nc) + mv
     pedido(nc) = pedido(nc) + 1
     INGRESAR "Nro. de pedido: ",np
REPETIR
RETORNAR

Es este subprograma es donde se cocina casi todo, para empezar el punto (1) queda resuelto en la sexta linea, ya que va acumulando las ventas y al salir ya va a estar el total.
En la séptima linea vamos a tener la resolución del punto (2) y en la octava el punto (4).
Aparte estos datos son escenciales para resolver lo que queda del problema.

COMISION:
PARA i = 1 A 4
     comision(i) = venta(i) * compor(i)
     SI venta(i)>15000 ENTONCES
          comision(i) = comision(i) + 2300
     FIN SI
PROXIMO
RETORNAR

Aca sacamos por fin cual es el porcentaje que le corresponde a cada uno. No creo que haya mucho que agregar de aca en adelante. Tenemos resuelto el punto (3).

PORCENTAJE:
PARA i = 1 A 4
     porcent(i) = venta(i) / totventa * 100
PROXIMO
RETORNAR

Acá resolvimos ya el punto (5). En los últimos 2 subprogramas vamos a resolver (6) y (7) (así no sigo haciendo comentarios pelotudos).

MAXIMO:
max=venta(1)
PARA i= 2 A 7
     SI venta(i) > max ENTONCES
          max=venta(i)
     FIN SI
PROXIMO
RETORNAR

MINIMO:
PARA i= 2 A 7
min=comision(i)
     SI comision(i) < min ENTONCES
          min=comision(i)
     FIN SI
PROXIMO
RETORNAR

Y por último viene la mustra de resultados...

IMPRESION:
IMPRIMIR "Ventas totales: ",totventa
IMPRIMIR "Ventas por corredor: "
PARA i= 1 A 4
     IMPRIMIR "Corredor: ",i, "Ventas: ",venta(i)
PROXIMO
IMPRIMIR "Pedidos por corredor: "
PARA i= 1 A 4
     IMPRIMIR "Corredor: ",i, "Pedidos: ",pedido(i)
PROXIMO
IMPRIMIR "Comisión por corredor: "
PARA i= 1 A 4
     IMPRIMIR "Corredor: ",i, "Comisión: ",comision(i)
PROXIMO
IMPRIMIR "porcentaje de ventas x corredor: "
PARA i= 1 A 4
     IMPRIMIR "Corredor: ",i, "Porcentaje: ",porcent(i)
PROXIMO
IMPRIMIR "Corredores de mayor venta: "
PARA i = 1 A 4
     SI venta(i) = max ENTONCES
          IMPRIMIR "Corredor: ",i      FIN SI
PROXIMO
IMPRIMIR "Nombre de los corredores de menor comisión: "
PARA i = 1 A 4
     SI comision(i) = min ENTONCES
          IMPRIMIR nombre$(i)      FIN SI
PROXIMO
RETORNAR

Y con eso damos por terminado este tema, ya saben que cualquier cosa me escriben un mail y lo respondo.

Ingwe