Introducción:

Así como cuando un escultor va a hacer una escultura, primero hace un dibujo o boceto y luego hace un modelo en cera o arcilla de la escultura, antes de pasar a trabajar en la verdadera escultura, o, en la construcción primero se dibuja el plano del edificio a construirse y luego se hace una maqueta del mismo, en programación se sigue un procedimiento parecido.

Antes de comenzar con la programación propiamente dicha, generalmente se hace un diagrama del programa; en un segundo paso se hace una simulación en pseudo código y, finalmente, y siguiendo los lineamientos surgidos de los pasos anteriores, se comienza con la programación.

Se puede decir que el diagrama es el plano del programa y el pseudo código es la maqueta del mismo.

La diagramación y el pseudo código forman lo que se conoce como documentación del programa y sirve para que cuando, pasado el tiempo, ese programa requiera reformas y/o mejoras o que lo tenga que revisar un programador distinto al que lo escribió y diseñó, haya una guía a la que recurrir para explorar su lógica y funcionamiento.

Estos dos pasos, diagrama y pseudo código, son fundamentales en la programación estructurada y, aunque en menor medida, en la programación visual o por eventos ya que un objeto de programa o evento de programación es, en realidad, un programa en sí mismo y como tal se lo debe de tratar.

Diagramación

En programación de computadores un diagrama Nassi-Shneiderman (o NSD por sus siglas en inglés), también conocido como diagrama de Chapin es una representación gráfica que muestra el diseño de un programa estructurado.

Fue desarrollado en 1972 por Isaac Nassi y Ben Shneiderman. Este diagrama también es conocido como estructograma, ya que sirve para representar la estructura de los programas. Combina la descripción textual del pseudocódigo con la representación gráfica del diagrama de flujo.

Basado en un diseño top-down (de lo complejo a lo simple), el problema que se debe resolver se divide en subproblemas cada vez más pequeños – y simples – hasta que solo queden instrucciones simples y construcciones para el control de flujo. El diagrama Nassi-Shneiderman refleja la descomposición del problema en una forma simple usando cajas anidadas para representar cada uno de los subproblemas.

Gráficos

Bloques de procesos El bloque de proceso representa el paso mas simple y no requiere ningún análisis específico. Cuando un bloque de proceso es encontrado, la acción dentro del bloque se realiza, y pasamos directamente al siguiente bloque

Condicionales

Hay dos tipos de estos bloques. El primero y más sencillo de ellos es el bloque verdadero-falso el cual ofrece al programa dos caminos para tomar, dependiendo de si una determinada condición ha sido especificada.

Condicional Compuesto: Este tipo de bloque es utilizado cuando la condición deriva en otra condición y no es posible o no alcanza utilizar operadores como Y u O. Básicamente es un condicional dentro de otro.

Selección Múltiple o Menú: Este tipo de bloque es utilizado cuando se necesita la selección de un caso en un programa . El bloque suele contener una pregunta o una variable. El bloque le da al programa una cadena de oportunidades que es usado para determinar la acción a seguir.

Ciclos: los ciclos o bucles son bloques que permiten al programa repetir un bloque o un conjunto de bloques hasta que una determinada condición se haya cumplido.

Hay dos tipos de estos bloques: de testeo inicial y testeo final. La única diferencia entre los dos es el orden en el cual se completan los pasos involucrados en el proceso.

En los de testeo inicial, cuando el programa encuentra el bloque, testea si la condición necesaria se cumple, si no, comienza a repetir las instrucciones hasta que se cumpla dicha condición. En el nivel que se cumpla la condición, el programa detiene la ejecución del bucle y el programa continua.

Por ejemplo, un ciclo de este tipo seria útil cuando es necesario dar de alta legajos cuyo registro comienza con un numero de legajo y no es posible saber de antemano cuantos legajos se darán de alta por vez. Entonces, se ingresa el numero del primer legajo, el programa hace que el ciclo testee si es un numero distinto de cero y, si lo es comienza a repetir las acciones de alta de legajos hasta que se ingresa 0

 

En los de testeo final, cuando el programa encuentra el bloque, ejecuta las instrucciones POR LO MENOS UNA VEZ y testea si la condición necesaria se cumple; si no se cumple, recién ahí  comienza a repetir las instrucciones hasta que se cumpla dicha condición. En el nivel que se cumpla la condición, el programa detiene la ejecución del bucle y el programa continua.

Este tipo de ciclo ejecutará las instrucciones contenidas en el mismo, por lo menos una vez. Un ejemplo seria un ingreso por teclado de datos que se validan para que no se ingrese algo no permitido. La principal desventaja de este tipo de ciclo es que si se entra al mismo por error, es preciso ejecutar las instrucciones por lo menos una vez.

Este tipo de ciclos son ilimitados, es decir se ejecutarán en tanto se cumpla la condición rectora.

Para los casos en que un ciclo debe cumplirse exactamente una determinada cantidad de veces existen los llamados ciclos “desde hasta” que, a través de una variable que se autoincrementa o autodecrementa, llega al límite previamente establecido ya sea por instrucción o por una variable.

Cuando el programador establece el valor inicial de la variable, valor que puede ser 0,1,2 o cualquier otro valor, ya sea ingresado por teclado, por una variable o constante o por el resultado de una operación el ciclo se ejecutará hasta llegar al valor límite, valor que puede ser cualquier valor superior al inicial, ya sea ingresado por teclado, por una variable o constante o por el resultado de una operación.

Hay un caso especial en que si el valor inicial es superior al valor límite el ciclo se ejecutará en forma descendente pero, siempre, ejecutando las instrucciones contenidas en el ciclo.

En cualquiera de los dos casos se debe de indicar cuanto es el paso del ciclo en caso de que se quiera que la variable contador se incremente o decremente en mas de una unidad.

Este tipo de diagramas se complementa con un gráfico de principio y/o fin de programa que no contiene instrucciones pero sí simboliza las operaciones de declaración e inicialización de variables, de preparación y restauración del entorno, etc y que se representa con

Teniendo en su interior las palabras inicio o fin según la posición que ocupen en el diagrama.

Variables y constantes:

 

Variables

Una variable en un algoritmo es una posición de memoria donde se puede almacenar información. Por ejemplo, si un programa debe obtener el área de un triángulo, la base del mismo y su altura se cargarán en memoria en dos variables para poder realizar el cálculo. El resultado, se puede asignar en otra variable luego del cálculo para luego informarlo al usuario. Como su nombre lo indica, el valor almacenado en una variable puede ir variando a medida que el programa avanza. Entonces: Una variable representa un lugar donde guardar información.

Las variables son de diversas clases o tipos: Numéricas, lógicas o de carácter.

En el caso de las numéricas, pueden, a su vez, ser enteras o reales, es decir con o sin decimales.

El nombre de la variable es el dato que le indicará al programa con que variable debe trabajar. Se le puede asignar el nombre que se quiera, siempre y cuando no sea igual a alguna palabra reservada o comando del lenguaje de programación utilizado, ejemplo: si en el lenguaje hay una sentencia o palabra copy, ninguna variable podrá llamarse copy; si podría llamarse xcopy, Copy (si el programa distingue mayúsculas y minúsculas), c_opy, entre otras posibilidades.

Por convención, llamaremos a las variables con una X mayúscula inicial seguido del nombre de la variable que deberá ser lo mas explicito posible (Xedad, Ximporte, etc.)

Veamos el ejemplo del área:

El diagrama sería:

Y el pseudocódigo:

Proceso áreatri

//este proceso calcula el area de un triangulo

//ingresando la base y la altura

Definir Xbase, Xaltura Como Entero;

Definir Xarea Como Real;

Xbase<- 0;

Xaltura<- 0;

Escribir ‘Ingrese medida de la base’;

Leer Xbase;

Escribir ‘Ingrese medida de la altura’;

Leer Xaltura;

Xarea<-(Xbase*Xaltura)/2;

Escribir ‘El area es, ‘+CONVERTIRATEXTO(Xarea)+ ” cm2″;

 

FinProceso

Analizando el ejemplo puede verse que la variable debe, primero, definirse o declararse; esto es indicarle al proceso como se va a llamar esa variable y de que tipo va a ser. En este caso, la base y la altura son dos números enteros (aunque podrían ser reales) pero el área, sí o sí debe ser real porque al intervenir una división, no necesariamente, el cociente tendría que ser entero.

Luego de la definición, viene la etapa de inicialización.

Inicializar una variable quiere decir asignarle un valor inicial que puede ser 0 para las numéricas, “” espacio en blanco para las de tipo carácter y, verdadero para las lógicas (a menos que tengan que arrancar en falso).

Esto se hace para evitar que la zona de memoria que el sistema le asigna a esa variable, ya esté ocupada por restos de otras variables (lo que se conoce como “basura”) lo que puede resultar en un error de programa o, lo que es peor, que el mismo arranque con un valor erróneo.

En el tipo de variables de este ejemplo, no importaría pero, en el caso de una variable con funciones de contadora o acumuladora, podría ser un error muy serio que el conteo o el acumulado no arrancaran del valor inicial.

 

En el caso del ejemplo, inicializamos las variables Xbase y Xaltura en 0. ¿Por qué no se inicializa Xarea?. Por prolijidad debería hacerse pero, al no ser una variable inicial, no es necesario porque cada vez que el programa calcule el área con los datos almacenados en Xbase y Xaltura, sobreescribirá cualquier dato que haya quedado en Xarea.

 

Comenzado el programa, el lenguaje “escribe” en pantalla un mensaje pidiendo que el usuario ingrese el dato correspondiente a la base y, al “leerlo”, asigna a la variable Xbase ese valor, sobreescribiendo el valor inicial. Igual proceder tiene con la variable Xaltura.

Luego, aplica ambos datos ingresados por teclado por el usuario a la fórmula del área de un triángulo, asigna ese resultado a la variable Xarea y “escribe” en pantalla un mensaje informando ese resultado y el programa finaliza.

Nótese que para poder unir el texto con un resultado numérico, se necesita convertir ese número a texto, funciones que realiza el mismo lenguaje.

 

De esta manera, actúan las variables: se les asigna un valor inicial y ese valor va cambiando (variando) a lo largo del desarrollo del programa.

 

Constantes

 

Las constantes son, igual que las variables, una posición de memoria donde se puede almacenar información pero, a diferencia de las variables, a la constante se le asigna un valor inicial y este valor NO CAMBIARÁ a lo largo del desarrollo del programa a menos que, a propósito, se le asigne un nuevo valor.

La forma de declaración y asignación es igual que la de las variables y se deben de tomar las mismas precauciones para el nombre.

Por convención, llamaremos a las constantes con una K mayúscula inicial seguido del nombre de la variable que deberá ser lo mas explicito posible (Kiva, Kprecio, etc.)

¿Cuál es su ventaja en el uso?.

Supongamos que tenemos un programa que calcula el precio de una entrada a un espectáculo, según la ubicación, pero que la entrada tiene un precio de base, un abono fijo y sobre ese abono se recargan porcentajes preacordados, según la ubicación para luego multiplicarlos por la cantidad de entradas para tal ubicación e informar el precio a abonar.

Supongamos, también que esas operaciones se repiten varias veces a lo largo del programa.

Sería muy engorroso y muy sujeto a error que cada vez que se tuviera que modificar el abono y/o algún porcentaje hubiera que ir cambiándolo línea por línea en todo el programa. Siempre habría algún error u omisión

Pero si se declararan, por ejemplo, una constante Kabono, otra KporcentA, otra KporcentB y así sucesivamente, con todos los porcentajes y, en el programa se hiciera referencia a esas constantes, en caso de cambio, sólo habría que ir al área de constantes y modificar el valor asignado.

 

El diagrama seria:

Y el pseudocódigo:

Proceso entradas

//calcula entradas segun la ubicación

//*****define tipos de variables y constantes********

definir Xprecio como real;

definir Xcantidad, Xubicacion como entero;

definir Kabono, Kporcenta,Kporcentb, Kiva Como Entero;

//********asigna valores constantes****

Kabono<-1000;

Kiva<-19;

Kporcenta<-20;

Kporcentb<-30;

//********asigna valores variables******

Xprecio<-0;

Xcantidad<-0;

Xubicacion<-0;

//************************************************

Escribir “Ingrese cantidad de entradas”;

Leer Xcantidad;

Escribir “Ingrese ubicacion (1 o 2)”;

leer Xubicacion;

Mientras Xubicacion <>1 y Xubicacion <>2 Hacer

Escribir “Ingrese ubicacion (1 o 2)”;

leer Xubicacion;

Fin Mientras

Si Xubicacion=1 Entonces

Xprecio<-(Kabono+((Kabono*Kporcenta)/100)+((Kabono*Kiva)/100))*Xcantidad;

SiNo

Xprecio<-(Kabono+((Kabono*Kporcentb)/100)+((Kabono*Kiva)/100))*Xcantidad;

Fin Si

Escribir “Importe a pagar: $” + ConvertirATexto(Xprecio);

FinProceso

 

Como puede verse, en caso de tener que cambiar el valor del abono o de los porcentajes o el iva, solo habría que ir a esa parte del código y modificar los valores a ser cambiados.


Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *