Anda di halaman 1dari 28

Unidad 2- Primeros Diagramas

INTRODUCCIN Y ORIENTACIONES PARA EL ESTUDIO 2

OBJETIVOS ................................................................................................................... 2 ACLARACIONES PREVIAS AL ESTUDIO ................................................................................. 2

INTRODUCCIN

ESTRATEGIA DE RESOLUCIN ............................................................................................ 3 EJEMPLO 1.................................................................................................................... 4 CONSTANTES Y VARIABLES ............................................................................................... 5 INTRODUCCIN A LOS DIAGRAMAS DE NASSI-SHNEIDERMAN ................................................. 9 OPERADORES............................................................................................................... 11 OPERADORES ARITMTICOS ................................................................................................11 OPERADORES DE RELACIN.................................................................................................12 OPERADORES LGICOS ......................................................................................................12 EJERCICIO OPERADORES .................................................................................................14

DIAGRAMAS NASSI-SHNEIDERMAN. CONDICIONALES Y CICLOS

15

DECISIONES SIMPLES. S CONDICIONAL O IF ELSE...................................................................15 DECISIONES MLTIPLES. SENTENCIA SWITCH ...........................................................................17 ALGUNOS CONCEPTOS SOBRE CICLOS REPETITIVOS ....................................................................18 CICLO MIENTRAS. WHILE ...................................................................................................19 CICLO HACER - MIENTRAS. DO WHILE ................................................................................20 CICLOS REPETITIVOS EXACTOS. FOR ......................................................................................22 AUTO EVALUACIN: COMPLETE VERDADERO O FALSO Y JUSTIFIQUE. ....................................... 26 SNTESIS .................................................................................................................... 27 GLOSARIO .................................................................................................................. 28
Elaboracin Gabriel F. Stancanelli Damin A. Asman
Este material pertenece a la materia Programacin I, de la Carrera de Analista de Sistemas de Computacin del INSTITUTO DE TECNOLOGA ORT. Todos los derechos reservados. No esta permitida la reproduccin total o parcial de este apunte, ni su tratamiento informtico, ni la transmisin de ninguna forma o por cualquier medio, ya sea electrnico, mecnico, por fotocopia, por registro u otros mtodos, sin el permiso previo de los titulares. 2da edicin Octubre de 2007.

Programacin I/Mdulo II

Introduccin y orientaciones para el estudio


En el desarrollo de este mdulo abordaremos:

Estructuras simples de datos como constantes y variables. Resolucin de problemas utilizando pseudocdigo (lenguaje natural). Uso de las estructuras aprendidas en el mdulo I de la materia. Armado de diagramas de Nassi-Shneiderman para modelar la solucin hecha en pseudocdigo. Tipos de datos bsicos.

Objetivos
Pretendemos que al finalizar de estudiar esta unidad, el alumno logre:

Utilizar correctamente los diagramas de Nassi-Shneiderman Realizar el anlisis de problemas de baja y mediana complejidad Dar la informacin necesaria para completar la gua nmero 1 de trabajos prcticos. Utilizar correctamente las estructuras de control de flujo de un programa. Entender y usar variables y constantes.

Aclaraciones previas al estudio


En este mdulo, el alumno encontrar:

Contenidos Conceptualizaciones centrales Bibliografa Referencia de material bibliogrfico recomendado Actividades

Usted debe tener presente que los contenidos presentados en el mdulo no ahondan profundamente en el tema, sino que pretenden ser un recurso motivador para que, a travs de la lectura del material, la bibliografa sugerida, y el desarrollo de las actividades propuestas alcance los objetivos planteados en el presente mdulo. Cada mdulo constituye una gua cuya finalidad es facilitar su aprendizaje.

Programacin I/Mdulo II

Introduccin
En el mdulo I, hemos descrito los pasos para resolver algn problema de la vida cotidiana en un lenguaje natural y ordenado. Esta clase de esquema la llamamos pseudocdigo y sirve para que cualquier persona que quiera resolver el mismo problema, lo entienda y pueda ejecutar tal solucin. Para resolver estos temas, hemos aprendido a utilizar algunas estructuras de control de flujo, como el S Condicional y el ciclo Mientras (condicin)-Hacer Fin-Mientras. En este mdulo, empezaremos a utilizar constantes y variables, es decir, estructuras de datos que nos permitan almacenar datos, cosa que nosotros hacemos naturalmente usando, o bien nuestra memoria, o bien un cuaderno, un libro como bibliografa, etc. Abordaremos el concepto de problemas desde lo computacional, buscando sus soluciones a travs de un programa de computacin. Por ltimo, comenzaremos a utilizar diagramas para modelar estas soluciones. Esta clase de diagramas es conocida a nivel mundial y su lenguaje es ms universal que un idioma como el ingls o espaol.

Estrategia de resolucin
Como trabajamos en el mdulo I, antes de escribir la resolucin del problema en trminos de un diagrama o en pseudocdigo, desarrollamos una pequea explicacin de la situacin y planteamos qu es lo que hacemos para resolver el problema. A esto lo llamamos anlisis y estrategia de solucin. Si se fijan bien, tambin identificamos los datos y agregamos las hiptesis, en caso de ser necesarias, para la resolucin del problema. Cuando transferimos los datos al plano de los programas, tenemos que diferenciarlos en dos tipos: Datos de Entrada y Datos de Salida o informacin.

Flujo de datos

Los datos de entrada ingresan a un proceso, generando informacin. Esta informacin podr ser utilizada luego para utilizar en otro proceso, es decir, utilizndola como datos de entrada y as sucesivamente. Vamos a plantear un primer ejemplo para poder identificar qu es un dato de entrada y qu un dato de salida. Luego de ver este ejemplo, haremos una declaracin formal con el concepto ms claro.

Programacin I/Mdulo II

Ejemplo 1
1 Consigna
Una consultora en sistemas, paga a sus programadores $20 la hora. Dado el nombre de un programador y la cantidad de horas trabajadas, informar el nombre y el importe total a abonarle. Claramente, el problema para la persona que debe pagar los sueldos estara planteado del siguiente modo:

Debo pagarle a mis empleados y no se cunto abonarle a cada uno.


Sin embargo, el problema en el plano de los programas, el que estamos abordando en esta materia, estara planteado as:

Dados el nombre de un programador y la cantidad de horas trabajadas, informar el nombre y el importe total a abonarle.

Como pueden observar, es similar al planteo de la primera consigna. Sin embargo, hay una parte enunciada que no se incluye en el planteo del problema: el valor de la hora nos es dado como un dato de entrada. Otro dato de entrada ser el nombre, el cual se debe ingresar al programa antes de calcular el total a abonar. Cules son entonces los datos de salida? Pensar en los datos de salida es fundamental a la hora de empezar a resolver la estrategia de resolucin, ya que son justamente lo que el proceso debe poder conseguir. En este ejemplo, los datos de salida son: Nombre, importe total a abonar.

Antes de comenzar a diagramar una solucin, es fundamental identificar los datos de entrada y los de salida, es decir, con qu datos voy a contar para poder obtener la informacin que el problema plantea.

Programacin I/Mdulo II

Ahora que identificamos los datos de entrada y de salida, debemos analizar si con esta informacin es suficiente. En caso de que no lo sea, debemos plantear las hiptesis necesarias hasta completar la descripcin. El siguiente paso es pensar el problema (anlisis y estrategia de solucin) y escribir el pseudocdigo. Siguiendo con el sistema planteado en el Modulo I, la resolucin en pseudocdigo del problema que debemos resolver en este caso ser: 1. Solicitar Nombre del programador. 2. Solicitar cantidad de horas trabajadas. 3. Multiplicar cantidad de horas trabajadas por 20. 4. Mostar por pantalla el nombre ingresado. 5. Mostrar por pantalla el importe a abonar. En algunos casos los procesos trabajan con los datos de entrada y obtienen resultados que pueden ser de entrada a nuevos procesos. En el ejemplo el dato de entrada, Nombre, tambin ser un dato de salida y el resultado (cantidad de horas trabajadas por 20) es el dato de salida, y este puede ser de entrada a otro proceso. Un ejemplo de esto sera si en el planteo anterior, mencionamos que, en caso de tener que cobrar ms de $2000, debemos informar por pantalla un cartel que indique Cobrar retencin de Impuesto a las ganancias. De esta forma, el dato de entrada para saber si hay que imprimir o no este cartel, est dado luego de realizar el primer proceso, con el cual se obtiene cunto debemos pagarle. En este mdulo vamos a trabajar con los datos, los procesos y las salidas. Definimos qu son las constantes y las variables, cmo resolver un problema a travs de un tipo especial de diagramas, y qu son las sentencias y las operaciones que se incluyen en los programas.

Constantes y Variables
Ahora bien, para poder realizar el programa planteado en la consigna 1 y en la mayora de los programas, debemos contar con ciertas herramientas que nos permitan guardar los datos para poder utilizarlos en los diferentes procesos, obteniendo as el resultado esperado. Las constantes son, como su nombre lo indica, datos que no van a cambiar durante todo el programa. En nuestro ejemplo, encontramos un valor constante, que ser el valor de la hora, que ya viene dado en el enunciado. Si releen la consigna vern que se trata del valor 20. Podemos entonces declarar1 una constante llamada VALOR_HORA y asignarle el valor 20. Si hacemos esto, nuestra solucin quedara de este modo:

1 Declarar implica indicarle al programa la utilizacin en estos casos de una constante o una variable. Bsicamente es necesario para poder compilar un programa, es decir, prepararlo para su ejecucin (ver apunte de TI)

Programacin I/Mdulo II

/*Declaracin de constantes*/ const int VALOR_HORA = 20;3

(Notemos que a la constante le asignamos y, mediante el smbolo = le asignamos un valor.) 1. Solicitar Nombre al usuario 2. Solicitar cantidad de horas trabajadas 3. Multiplicar cantidad de horas trabajadas por VALOR_HORA para calcular el importe a abonar. 4. Mostar por pantalla el nombre ingresado 5. Mostrar por pantalla el importe a abonar Notamos que hemos cambiado el valor 20 por el nombre de la constante. De esta forma, si el valor hora cambia, slo debemos modificar el valor de la constante. La ventaja de utilizar una constante en lugar del valor, puede verificarse fcilmente cuando utilizamos este mismo valor en diferentes lugares del programa. Si hubiramos utilizado el valor en cada parte del programa, deberamos cambiarlo todas las veces que apareciera. Al utilizar una constante, nos aseguramos que al cambiar ese valor, se utiliza el mismo en todo el programa y evitamos cometer errores de lgica. Las variables, en cambio, deben su nombre a que, a lo largo del programa, es posible que tomen diferentes valores. Una variable es fsicamente una porcin de la memoria de la mquina. Al declarar una variable en un programa, le estamos indicando a qu parte de la memoria debe ir a buscar o grabar el valor cada vez que la utilicemos. En nuestro ejemplo tenemos como dato de entrada el nombre y la cantidad de horas trabajadas. Estos datos van a variar cada vez que se ejecute el programa, para cada uno de los empleados. Esto nos indica que deben ser variables y no constantes. Si observan las instrucciones de las lneas 3 y 5, en la primera se realiza un clculo y en la segunda se muestra el resultado del mismo. Entonces, existe tambin una variable que ser el resultado del producto de las horas trabajadas por el valor de la hora, cuyo valor ya almacenamos en la constante VALOR_HORA. Cuando definimos una variable en un programa, es decir, cuando la estamos declarando, debemos especificar, adems del nombre, un indicador del tipo de dato que contiene. Algunos tipos de dato son: int: Nmeros enteros cuyo rango es -32.768 a 32.767 float: Nmeros reales. char: Carcter, es decir, valores alfanumricos. String: Es una cadena de cadena de caracteres (tipo char): No existe en C/C++ un formato creado para este tipo de datos, sin embargo, lo utilizaremos en esta materia y se explicar en la materia Taller I cmo hacer una declaracin correcta de este tipo.

Los comentarios en C/C++ pueden escribirse luego de dos barras // o inicializando un prrafo de comentarios con /* (barra y asterisco) y cerrndolo con la inversa */. Para ms datos, ver apunte de TI
3

Las instrucciones en C/C++ deben terminar en punto y coma (;)

Programacin I/Mdulo II

Bool: Corresponde al tipo de datos booleano, es decir, solo puede almacenar TRUE (Verdadero) o FALSE (Falso). Al igual que los strings, no existe un formato standard de este tipo en C/C++. Pueden incrementar sus conocimientos respecto de estos tipos de datos en los mdulos de la materia Taller I. La sintaxis de C/C++ para la declaracin de una variable es:

Tipo_de_dato Nombre;
Donde el tipo de dato corresponde a uno de los ya comentados. Conceptualmente, el uso de un nombre correcto para cada variable permitir al programador conocer, no solo el objetivo de sta, sino tambin que valores puede almacenar. De esta forma, utilizaremos como la primer parte del nombre, un identificador para indicar el tipo (Ejemplo: para el tipo de dato int, el identificador ser una i latina en minscula), y finalmente el nombre de la variable, empezando con mayscula. A continuacin mostramos un ejemplo de cmo declarar variables en un programa: /*Declaracin de variables*/
4

int iEdad; float fPromedio; char cSexo; String sNombre; Bool bTieneHijos;
Es importante que el nombre asignado a las variables sea representativo, o mnemotcnico5, es decir, que con slo leer su declaracin, podamos entender qu tipo de dato contiene. Para esto se debe utilizar identificadores y nombre claros. Retomemos el ejemplo y utilicemos variables /*Declaracin de constantes*/ const int VALOR_HORA = 20; /*Declaracin de variables string sNombre; float fCantHoras; float fImporteTotal; */ //Para el nombre del programador. //Para la cantidad de horas trabajadas. //Para almacenar el importe a abonarle.

1. Solicitar Nombre al usuario 2. Guardar nombre en sNombre 3. Solicitar cantidad de horas trabajadas

La declaracin de variables debe hacerse debajo de la declaracin de constantes. Para ms informacin, ver el Apndice de Estilos de la materia TI.
5

Mnemotcnico: Nombre claro que indique qu representa o para qu se utilizar una variable o constante, dentro del programa.

Programacin I/Mdulo II

4. Guardar cantidad en fCantHoras 5. fImporteTotal = fCantHoras * VALOR_HORA 6. Mostar por pantalla: El empleado , sNombre, debe cobrar: $, fImporteTotal Como vemos, a diferencia del ejemplo anterior, ahora estamos indicando a dnde almacenamos 6 los valores que nos ingresa el usuario y el resultado de la operacin, y los utilizamos, por ejemplo, en la instruccin 5.

Almacenar se refiere a la utilizacin de la memoria o archivos para no perder informacin y poder utilizarla Programacin I/Mdulo II 8

Introduccin a los diagramas de Nassi-Shneiderman 7


Como indicamos en la introduccin de este mdulo, a partir de ahora vamos a resolver los problemas utilizando los diagramas de Nassi-Shneiderman. Se basa en un diagrama de bloques que marca: comunicaciones con el usuario, tanto de entrada como de salida; la asignacin de variables; el flujo del programa, junto con sus estructuras de cotrol como los condicionales y los ciclos.

Bsicamente, es una combinacin del pseudocdigo y los diagramas de flujo8. En los diagramas no debe incluirse la declaracin de constantes y variables. Estas deben figurar previamente, para que la persona que lee el diagrama, comprenda cuando se usan: de qu tipo son y para qu sirven. Utilizando el ejemplo anterior, realicemos nuestro primer diagrama. Primer diagrama

/*Declaracin de constantes*/ VALOR_HORA = 20; /*Declaracin de variables */ string sNombre; float fCantHoras; float fImporteTotal;
Pseudocdigo

1. Solicitar Nombre al usuario 2. Guardar nombre en sNombre 3. Solicitar cantidad de horas trabajadas 4. Guardar cantidad en fCantHoras 5. fImporteTotal = fCantHoras * VALOR_HORA 6. Mostar por pantalla: El empleado , sNombre, debe cobrar: $, fImporteTotal

7
8

Nassi shneiderman. Diagrama de flujo.

Programacin I/Mdulo II

Diagrama
S

Ingresar nombre de usuario


E

sNombre
S

Ingresar cantidad de horas trabajadas


E

fCantHoras

fImporteTotal
S

fCantHoras * VALOR_HORA

El empleado, sNombre, debe cobrar: $ , fImporteTotal

Vamos ahora a descomponer el diagrama y analizarlo, de manera de poder empezar a incorporar los conocimientos sobre el cmo utilizarlo y en qu situaciones. Representar mensajes por pantalla

Para representar una salida por pantalla, debe utilizarse un rectngulo, en cuyo ngulo superior izquierdo lleve un pequeo cuadrado marcando una S de Salida. De esta forma, es simple interpretar que lo que est en el recuadro, es lo que debe imprimirse. Leer datos desde el teclado

La E en lugar de la S nos marca una Entrada, es decir, que el programa espera que el usuario ingrese un dato.

En el rectngulo, debe ir el nombre de la variable en dnde se va a almacenar el dato.Asignacin de valores a variables.

Programacin I/Mdulo II

10

fImporteTotal

fCantHoras * VALOR_HORA

Para asignarle un dato a una variable, se debe poner a la izquierda de la sentencia el nombre de la variable que va a recibir un valor, una flechita apuntndole ( ) y el valor a asignarle. Este valor puede ser: Un valor propiamente dicho. Una constante (se le asigna el valor de la constante). Una variable (se le asigna el valor de la variable). El resultado de una operacin aritmtica o lgica.

Como sucede en este caso, en el que la variable fImporteTotal recibe el resultado del producto del valor de una constante por una variable, el valor puede darse por alguna operacin aritmtica o lgica.

Salidas compuestas. Texto + variables.

Esta ltima instruccin del diagrama, sigue siendo una salida, como la S lo indica, sin embargo, sirve para mostrar que es posible combinar datos variables con un texto fijo. Como pueden observar, el texto siempre va entre comillas, y las variables se separan del texto con comas.

Operadores
Los operadores son la herramienta que tenemos para indicarle al programa que debe realizar cierta operacin. Existen operadores aritmticos, de relacin o lgicos. A continuacin, daremos una lista de los operadores bsicos junto con una breve explicacin de cada uno de ellos.

Operadores Aritmticos
Son los operadores que utilizaremos para realizar las operaciones matemticas:

Programacin I/Mdulo II

11

Operador + *

Operacin Suma. Los operandos pueden ser enteros o reales Resta. Los operandos pueden ser enteros o reales. Multiplicacin. Los operandos pueden ser enteros o reales. Divisin. Los operandos pueden ser enteros o reales. Si ambos operandos son enteros el resultado es entero. En el resto de los casos el resultado es real. Como en una calculadora, no es posible dividir por 0. Divisin entera. Sin importar que tipo de datos tengan los operandos, el resultado es la parte entera del resultado. Ej: 3 \ 2 = 1 ya que el resultado de la operacin es 1,5 y tomamos el resultado sin los decimales. Como en una calculadora, no es posible dividir por 0. Mdulo o resto de una divisin entera. Los operandos tienen que ser enteros.

Operadores de relacin
Los operadores de relacin o de comparacin permiten evaluar la igualdad y la magnitud. El resultado de una operacin de relacin es un valor verdadero o falso (1 0, tambin llamados valores booleanos9). Los operadores de relacin son: Operador < > <= >= != == Operacin Primer operando menor que el segundo? Primer operando mayor que el segundo? Primer operando menor igual que el segundo? Primer operando mayor o igual que el segundo? Primer operando distinto que el segundo? Primer operando igual que el segundo? Ejemplo Op1 < Op2 Op1 > Op2 Op1 <= Op2 Op1 >= Op2 Op1 != Op2 Op1 == Op2

Operadores lgicos10
El resultado de una operacin lgica (AND, OR, XOR y NOT) da como resultado un valor lgico, es decir, Verdadero o Falso.

Booleanos.. Para ampliar el concepto utilizado en esta seccin del apunte, puede leerse con ms detalle el apunte de Matemtica.

10

Programacin I/Mdulo II

12

Los operadores lgicos sirven para unir expresiones que devuelvan valores booleanos, como las que utilizan operadores de relacin, y obtener resultados compuestos, segn las tablas de verdad11, que seguramente vern con ms profundidad en matemtica.

Operador

Operacin AND. Da como resultado verdadero si al evaluar cada uno de los operandos el resultado es verdadero. Si uno de ellos es falso, el resultado es falso. Si el primer operando es falso, el segundo operando no es evaluado. OR. El resultado es falso si al evaluar cada uno de los operadores el resultado es falso. Si uno de ellos es verdadero, el resultado es verdadero. Si el primer operando es verdadero, el segundo operando no es evaluado. NOT. El resultado de aplicar este operador es falso si al evaluar su operando el resultado es verdadero, y verdadero en caso contrario. XOR. Da como resultado verdadero si al evaluar cada uno de los operandos el resultado de uno es verdadero y el del otro falso; en otro caso el resultado es falso.

Ejemplo

&&

Op1 && Op2

||

Op1 || Op2

! Op1

Op1 ^ Op2

11

Tablas de verdad.

Programacin I/Mdulo II

13

Ejercicio Operadores
Resuelva las expresiones indicando el valor del resultado. Enve luego el ejercicio resuelto al tutor para su correccin. Sean: a = 5; b = 8; c = 5; d = TRUE; e = FALSE; f = TRUE; Nota: Recuerde que los valores TRUE y FALSE son los valores booleanos. Los primeros ejemplos estn resueltos.

Operadores aritmticos expresin ab (a - b) * c b%c c*b+a*c a-b*c (c + a) % c (c + b) % a a+b%c valor -3

Operadores de relacin expresin a == 5 a <= b (a + b) != c (( a+c ) == 2 * a) a >= c (( b+c ) == a) (( b+c ) == a) c == (b % a) valor TRUE

Operadores lgicos expresin d || f ! (f && d) ! (e || f) e^f !d ^ f !d || (!d ^ f) ! (!e || e) && !d ! (!d || e) && f valor TRUE

Programacin I/Mdulo II

14

Diagramas de Nassi-Shneiderman. Sentencias condicionales y ciclos


Vamos a continuar ahora con el resto de los diagramas de N-S que an no conocemos. Tengan en cuenta que con cada diagrama, es posible realizar nuevos ejercicios prcticos que se encuentran en la gua de trabajos prcticos de la materia.

Decisiones simples. S condicional o if else.


Como ya hemos visto, es posible que en algn momento dentro del flujo del programa sea necesario tomar un decisin, es decir, que el flujo permita realizar algunas acciones si se cumple una condicin lgica, y otras en caso contrario. Por ejemplo, y considerando el ejercicio que venimos desarrollando, decimos que, en caso de que un empleado trabaje ms de 40 horas, el valor hora aumentara en un 15%. De esta forma, luego de pedirle al usuario que ingrese la cantidad de horas trabajadas, debemos resolver cunto es el sueldo real, antes de multiplicarlo por esta cantidad. Veamos cmo queda el diagrama /*Declaracin de constantes*/ const int VALOR_HORA_CAT1 = 20; const int VALOR_HORA_CAT2 = 30; const int TOPE_HORAS = 40; /*Declaracin de variables */ string sNombre; float fCantHoras; float fImporteTotal; // valor de la hora para la categora 1 // valor de la hora para la categora 2 // tope que marca la diferenta entre las categoras.

Pseudocdigo 1. Solicitar Nombre al usuario 2. Guardar nombre en sNombre 3. Solicitar cantidad de horas trabajadas 4. Guardar cantidad en fCantHoras 5. Si ( fCantHoras <= TOPE_HORAS ) 5.1. Entonces 5.1.1. fImporteTotal fCantHoras * VALOR_HORA_CAT1 5.2. Si no (es decir que es mayor) 5.2.1. fImporteTotal fCantHoras * VALOR_HORA_CAT2 6. fImporteTotal = fCantHoras * VALOR_HORA 7. Mostar por pantalla: El empleado , sNombre, debe cobrar: $, fImporteTotal

Y se diagrama de este modo:

Programacin I/Mdulo II

15

Este cuadro representa el si condicional.

Debajo del si esta el entonces. Debajo del no aparecen las instrucciones del sino.

Como se puede apreciar, la diferencia con el diagrama anterior pasa por el bloque de la condicin.

La condicin lgica fCantHoras <= (Menor o Igual) TOPE_HORAS slo puede devolver dos valores, verdadero o falso. En caso de que sea verdadero, entonces se ejecutaran los bloques siguientes del Si. Sino, se ejecutarn los del No.

Programacin I/Mdulo II

16

Decisiones mltiples. Sentencia switch


A diferencia de un si condicional, existen oportunidades en que se debe decidir entre ms de dos posibilidades. Las decisiones mltiples tambin se basan en una comparacin, pero que puede resolver mltiples resultados. Hasta ahora, a los programadores del ejercicio se les pagaba segn la cantidad de horas trabajadas. Vamos a cambiar esta estrategia de pago y utilizaremos algo ms real con el mundo de los sistemas. Dependiendo del Rol que cumpla, podemos decir que un programador Junior est en la categora 1, un semi-senior en la categora 2 y un senior en la categora 3. Vamos a solicitarle entonces, un dato ms al usuario. La categora del programador. De esta forma, las constantes y variables quedaran de este modo: /*Declaracin de constantes*/ const int VALOR_HORA_CAT1 = 20; const int VALOR_HORA_CAT2 = 30; const int VALOR_HORA_CAT3 = 40; /*Declaracin de variables */ string sNombre; float fCantHoras; float fImporteTotal; int iCategoria; El diagrama de decisin mltiple es el siguiente:

iCategoria nos indica qu es lo que estamos evaluando. Los nmeros 1, 2 y 3 indican las opciones posibles. Por ltimo, este diagrama incluye un valor default, el cual se ejecuta siempre y cuando la condicin o variable evaluada no corresponda con ninguna opcin. El diagrama final quedara de este modo.

Programacin I/Mdulo II

17

Para hacer las cosas de un modo correcto, utilizaremos un Si condicional para evaluar si, en efecto, pudo calcularse correctamente el importe o no. Para tener en cuenta respecto de la sentencia switch: 1. El valor que se est evaluando debe ser de tipo entero (int) o carcter (char). 2. Si el valor que se est comparando no est comprendido en ninguna de las opciones citadas y no existe la clusula default, no ocurre nada y sigue el flujo del programa. 3. La clusula default es opcional. 4. cuando se implemente una solucin con switch en C/C++, cada opcin debe terminar con una instruccin que indica el fin de la opcin. La sintaxis de la instruccin en este lenguaje es: break.

Algunos conceptos sobre ciclos repetitivos


Los ciclos repetitivos se utilizan en el momento en que es necesario repetir el mismo grupo de instrucciones una determinada cantidad de veces. Existen dos tipos de ciclos: ciclos repetitivos condicionales, que dependen de una condicin lgica para continuar repitiendo las instrucciones, o bien los ciclos repetitivos exactos, que repetirn las instrucciones una determinada cantidad de veces, previamente establecida. Programacin I/Mdulo II 18

Ciclo Mientras. While


El ciclo Mientras, que explicamos en el Mdulo I de esta asignatura, permite que una cantidad finita de instrucciones se repita mientras una condicin se cumpla. Existe la posibilidad de que nunca se ejecuten las instrucciones mencionadas. Hasta el momento, la secuencia de instrucciones que venimos manejando en el problema de los programadores, nos muestra que, con cada programador, debemos ejecutar el programa nuevamente. Vamos a hacer un cambio para que el programa sirva para calcular el sueldo de ms de un programador, por lo tanto, la toma de los datos de entrada (nombre, cantidad de horas y categora), se repita mientras el nombre del programador no sea FIN. Veamos el diagrama final y analicmoslo a continuacin.
S

Ingresar nombre de usuario


E

sNombre sNombre != FIN


S

Ingresar cantidad de horas trabajadas


E

fCantHoras
S

Ingresar categora del empleado


E

iCategoria iCategoria

Default

fImporteTotal fCantHoras * VALOR_HORA_CAT1

fImporteTotal fCantHoras * VALOR_HORA_CAT2

fImporteTotal fCantHoras * VALOR_HORA_CAT3

fImporteToal -1
S

Categora invalida

fImporteToal != -1 Si El empleado, sNombre, debe cobrar: $ , fImporteTotal


S S

No Por favor, ingrese los datos nuevamente

Ingresar nombre de usuario


E

sNombre

Hay ciertas cosas que marcar en este diagrama para que quede claro cmo es el funcionamiento de un ciclo de estas caractersticas: Programacin I/Mdulo II 19

Lectura adelantada: Debemos solicitarle al usuario que escriba el nombre del programador previamente a ejecutar el ciclo. Condicin lgica: Se indica en la parte superior del diagrama que representa el ciclo. Si la condicin se evala como verdadera, comenzar a ejecutarse el ciclo. En este ejemplo, la condicin pregunta si el contenido de la variable sNombre sea diferente que la palabra FIN". Dentro del diagrama del ciclo, hay un grupo de instrucciones que sern el proceso repetitivo. Por ltimo, generalmente ubicado como ultimas instrucciones dentro del ciclo (aunque no es necesario), se le solicita al usuario que ingrese nuevamente el nombre de un programador. Estas son las instrucciones que permitirn, en algn momento, salir del ciclo.
S

Ingresar nombre de usuario


E

Lectura Adelantada sNombre sNombre != FIN (condicin de entrada al bucle) Condicion de entrada. Si se evalua como verdadera, entra al ciclo.

(Conjunto de sentencias dentro del bucle)

Ingresar nombre de usuario


E

sNombre

Lectura repetitiva que define la salida del ciclo

Es importante notar que una caracterstica de este proceso repetitivo es el que las instrucciones que estn dentro del ciclo pueden no ejecutarse nunca. Por ejemplo, si en la lectura adelantada el usuario ingresara FIN como nombre del programador, la condicin de entrada al ciclo no se cumplira y directamente terminara el programa.

Ciclo Hacer - Mientras. Do While


A diferencia del ciclo Mientras, el Hacer-Mientras implica que un conjunto de instrucciones va a ejecutarse por lo menos una vez, antes de preguntar por la condicin. Nuevamente modificaremos el programa para incluir uno de estos ciclos. Por ejemplo, debemos asegurarnos que la cantidad de horas trabajadas es un nmero positivo. Notemos que si fuera posible ingresar un nmero negativo, posiblemente el sueldo tomara un valor errneo. Para evitarlo, se realiza una validacin, en la cul prevenimos que los datos que lleguen a la ecuacin de clculo del sueldo sean correctos. Programacin I/Mdulo II 20

El diagrama quedara de este modo.


S

Ingresar nombre de usuario


E

sNombre sNombre != FIN


S

Ingresar cantidad de horas trabajadas


E

fCantHoras fCantHoras < 0


S

Ingresar categora del empleado


E

iCategoria iCategoria

Default fImporteToal -1
S

fImporteTotal fCantHoras * VALOR_HORA_CAT1

fImporteTotal fCantHoras * VALOR_HORA_CAT2

fImporteTotal fCantHoras * VALOR_HORA_CAT3

Categora invalida

fImporteToal != -1 Si El empleado, sNombre, debe cobrar: $ , fImporteTotal


S S

No Por favor, ingrese los datos nuevamente

Ingresar nombre de usuario


E

sNombre

Veamos un poco ms detalladamente el ciclo que acabamos de incorporar.

Programacin I/Mdulo II

21

Las instrucciones que se encuentran dentro de este ciclo van a ejecutarse por lo menos una vez, debido a que la condicin de repeticin se encuentra al final. Algo importante que no debe confundirse, es que este ciclo se ejecuta Mientras se cumple la condicin y no hasta que se cumple. Deben observar como el diagrama fue evolucionando, y como los diferentes bloques de cada estructura de control fueron indicando visualmente como se ejecutar el programa.

Ciclos repetitivos exactos. For


Cuando se debe ejecutar un conjunto de instrucciones una cantidad determinada y fija de veces, en lugar de utilizar un ciclo condicional, utilizamos lo que llamaremos ciclo repetitivo exacto, ya que sabemos exactamente cuntas veces tendremos que repetir el ciclo. El tipo de ciclo que usaremos se llama For, debido a su sentencia en C/C++ (y en muchos otros lenguajes). El For utiliza una variable, generalmente de tipo entero, que debe ser declarada previamente por el programador. Esta variable se ir incrementando en el ciclo hasta llegar al tope previamente establecido. Esto marcar el fin del ciclo, continuando con el flujo del programa. Utilizar este nuevo ejemplo para demostrar como utilizar el ciclo For:

Enunciado
Un alumno recin graduado desea conocer el promedio de notas que ha sacado en la facultad. Durante 5 aos, ha cursado 6 materias por ao. Realizar un programa que le solicite al usuario las notas de todas sus materias e informar el promedio de la carrera.

Qu datos de entrada tenemos? Las notas del alumno. Qu datos provistos tenemos? El enunciado ya nos informa la cantidad de materias que curso el alumno ( 6 materias/ao x 5 aos = 30 materias) Cules son los datos de salida? El promedio de la carrera.

Hiptesis: No hay. No hacen falta ya que el enunciado es claro y preciso.

Programacin I/Mdulo II

22

/*Declaracin de constantes*/ const int CANT_MATERIAS = 30; /*Declaracin de variables */ float fNota; flota fSumaNoras: float fPromedio; int i: //esta variable la utilizaremos como indice para contra los ciclos del For

Pseudocdigo 1. fSumaNotas = 0 2. Repetir (desde i = 1 hasta CANT_MATERIAS) //Utilizo una constante. 2.1. Mostrar por pantalla: Ingresar la nota nro: , i 2.2. Guardar la nota en fNota 2.3. fSumaNotas = fSumaNotas + fNota 3. Fin Repetir. 4. fPromedio = fSumaNotas / CANT_MATERIAS 5. Mostar por pantalla: El promedio de la carrera es de , fPromedio El diagrama de la solucin ser:

Programacin I/Mdulo II

23

El ciclo en particular es la parte del diagrama representada en gris, en el siguiente grfico:

Es ciclo ira incrementando la variable i, solicitando las diferentes notas y sumndolas en fSumaNota. Noten que utilizo la variable i como salida en la solicitud de la nota, de esta forma, cuando i contenga el valor 1, solicitar la primer nota, pero una vez que realice el primer ciclo y valga 2, el cartel solicitar la nota nro 2.. y asi sucesivamente.

Programacin I/Mdulo II

24

Trabajo Prctico: Realizar los diagramas


A partir del enunciado, identifique los datos de entrada y salida y, en caso de creerlo necesario, escriba las hiptesis. Desarrolle el anlisis y la estrategia de resolucin. Complete el ejercicio generando el algoritmo utilizando pseudocdigo. Realice los diagramas de N-S.

Enve los resultados al tutor para la correccin del anlisis.

1. Ingresados dos nmeros, mostrar el resultado de la suma entre ambos.

2. Ingresar valores para las variables A y B. Una vez cargadas, intercalar los valores (que lo cargado en A quede en B, y viceversa).

3. Dados tres nmeros, informar cul de los tres es el mayor, y su valor (suponer nico mximo).

4. Pedir un nmero tantas veces como necesite, hasta que su valor est comprendido entre 1 y 10.

5. Dados dos nmeros enteros cuya relacin de valores es que el primero es menor o igual al segundo, escribir la secuencia de nmeros que existe entre ambas:

a. Incluyndolos; b. Excluyndolos. c. En la carga, debemos asegurarnos de que la relacin entre los valores es la correcta.

6. Qu pasara si este control no se tiene en cuenta? Cmo lo solucionara?

7. Leer una lista de nmeros mientras el promedio entre todos sea menor a 20. Informar la cantidad de valores ledos.

8. Ingresar N juegos de N1 valores enteros cada uno, donde N se informa al comienzo y N1 al cargar cada juego. Emitir el nmero de juego con promedio ms alto y la suma total de todos los juegos.

9. Ingresar una serie de nmeros naturales que termina con -1 e indicar cuntas veces se interrumpe el orden ascendente y cuntos nmeros hay en cada grupo ordenado.

Programacin I/Mdulo II

25

Auto evaluacin: Complete verdadero o falso y justifique.


1. Para realizar un proceso repetitivo, debo conocer que cantidad de veces deben repetirse las instrucciones. 2. Cuando utilizo un s condicional, estoy haciendo que el programa pueda tener mas de un curso de accin 3. No puedo utilizar un ciclo Mientras y un ciclo Hacer-Mientras en el mismo programa 4. Los ciclos Hacer-Mientras se utilizan exclusivamente para realizar validaciones. 5. En todos los ciclos debe cumplirse una condicin lgica para que deje de repetir las instrucciones. 6. Debo conocer la sintaxis de por lo menos un lenguaje de computacin para poder realizar diagramas de N-S. 7. Las variables se utilizan nicamente para almacenar valores temporalmente. 8. Una condicin lgica puede armarse nicamente utilizando operadores aritmticos y de relacin.

Cuadro de resultados

Nro

VF

Justificacin

Programacin I/Mdulo II

26

Sntesis
Se introdujeron en este mdulo los conceptos de Constante y Variable, estructuras de datos fundamentales que se utilizarn a partir de ahora y probablemente mientras programen. A esto, se sumaron los diagramas de Nassi-Shneiderman y su utilizacin para modelar las soluciones antes planteadas con pseudocdigo. Se hizo mencin de los operadores aritmticos, lgicos y de relacin, y se propuso una actividad para ejercitar con ellos. El alumno debe tener en cuenta que, al conocer estos operadores, las posibilidades de combinacin son infinitas. Al concepto de s condicional introducido en el mdulo I, se agrego la sentencia Switch, la cul lleva al programa por ms flujos diferentes, no solo dos. Al ciclo Mientras (condicin) Fin-Mientras, se le sumaron otras estructuras de procesos repetitivos. El Hacer-Mientras, que permite ejecutar las sentencias una vez antes de preguntar por la condicin de entrada al ciclo nuevamente y el For, el cul se utiliza al conocer la cantidad exacta de repeticiones a realizar. Se propusieron ejercicios de prctica, complementarios de la gua de trabajos prcticos para este mdulo. Nuevamente, se propuso un ejercicio simple de auto evaluacin para verificar los conceptos adquiridos.

Programacin I/Mdulo II

27

Glosario
Constante: Variable: Declaracin en c++: Mnemotecnico: Almacenar: Nassi-Sheneiderman: Diagrama de Flujo: Operador: Tablas de Verdad:

Programacin I/Mdulo II

28

Anda mungkin juga menyukai