programacion

14

Click here to load reader

Transcript of programacion

Page 1: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 1

CONTADORES, ACUMULADORES Y SWITCHES

CONTADORES Una variable es un campo de memoria capaz de almacenar un valor. Este valor, dependiendo de las necesidades del programa, puede variar a lo largo del mismo. Un contador es una variable numérica cuyo valor se incrementa o decrementa con cantidades fijas, que pueden ser positivas (incremento) o negativas (decremento). La forma de incrementar/decrementar el contador es mediante una instrucción del tipo

C = C + 1 siendo e la variable contador, e 1 el incremento/decremento fijo. El valor habitual de 1 es 1, aunque no tiene por qué serlo siempre. Los contadores que se utilizan en un programa deben inicializarse con un valor, generalmente cero, que se les asigna al comienzo del mismo para limpiar la variable de posibles valores anteriores. Además, hay lenguajes que no permiten una instrucción de este tipo si el contador está sin inicializar. Un ejemplo de inicialización podría ser: C = 0; A = l; CONT = 0; etc. Una expresión del tipo C = C + I tiene como significado: .

• Añadir el valor de I al' contenido actual de C. • Dejar el nuevo valor otra vez en C.

Así, si al comienzo del programa hemos inicializado A con el valor O:

A = 0 y repetirnos tres veces la instrucción:

A = A + l Los sucesivos valores que tornaría dicha variable serían 1, 2, Y 3. Se podría afirmar, pues, que A está contando.

En general, la función más usual de un contador es la de controlar el número de iteraciones que se van realizando en un bucle y determinar cuándo salir de él. Sin embargo, también puede irse incrementando o decrementando dentro del bucle cada vez que éste se realiza, pero no intervenir en la condición para salir del mismo. Lo que sí se puede afirmar es que un contador está siempre asociado a un bucle. EJEMPLO Introducir las notas de matemáticas obtenidas por los 40 alumnos de una clase y contar cuántos de ellos han aprobado. Variables utilizadas NOTA: Variable para guardar las sucesivas notas que se vayan tecleando. C_ALUM: Contador de alumnos que controlará el número de notas introducidas. C_APRO: Contador de alumnos aprobados. Proceso Inicializar los contadores a 0. Se utilizará un bucle cuya condición de salida vendrá determinada por C_ALUM=40. Dentro de cada iteración se introducirá la nota de un alumno, se sumará por tanto 1 a C_ALUM, y si Ía nota es mayor o igual a 5 se incrementará en 1 el contador C_APRO.

Page 2: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 2

ACUMULADORES Un acumulador es una variable (campo de memoria) cuyo valor se incrementa/decrernenta con cantidades variables. Realmente, realiza la misma función que un contador con la diferencia de que en un acumulador el valor que se incrementa o decrementa no es fijo, mientras que en un contador sí lo es. Un acumulador se utiliza para calcular totales, entendiendo como total la suma acumulada de diversas cantidades. La forma de incrementar/decrementar un acumulador es mediante una instrucción del tipo:

AC = AC + S

Siendo AC el acumulador y S un valor variable.

INICIO

C_ALUM=0

C_ALUM=0

c_apro = c_apro + 1

c_alum = c_alum + 1

Introducir Nota

Introducir Nota

FINAL

Nota > 5

c_alum=40

SI NO

SI

NO

Page 3: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 3

Los acumuladores que se utilizan en un programa, al igual que los contadores, deben inicializarse al comienzo del mismo. Generalmente esta inicialización se hace a cero. Ejemplo: Hallar la suma de los 100 primeros números naturales. Variables utilizadas:

• C_NUM: Contador que varie de 1 al 100. • Acumulador que vaya sumando los diferentes valores de C_NUM.

Proceso. Se inicializan ambas variables a cero. Se utilizara una repetitiva en la que se permanecerá mientras el valor de C_NUM sea menor que 100. Por cada repetición se sumara 1 a C_NUM y se acumulara este valor sobre T_NUM.

SWITCH Un switch es una variable que solo puede tomar dos valores diferentes durante el desarrollo de un programa. Por eso se le denomina tambien conmutador o interruptor. Sus dos posibles valores los elige el programador y pueden ser, por ejemplo:0 o 1; on u off; par o impar; si o no, etc. El switch se inicializa con uno de los dos valores elegidos. A lo largo del proceso, y dependiendo de que una determinada situación se haya producido, se le modifica dicho valor. Después, en otro punto del programa, al preguntar por su estado (su valor), se puede detectar si dicha situación ha ocurrido o no. EJEMPLO Sumar por un lado los números impares y por otro los números pares comprendidos entre 1 y 100. Variables utilizadas.

• Sw: Switch para alternar los procesos con numero pares e impares.

C_NUM=0

C_NUM < 100

c_num = c_num + 1

T_num= T_num+C_num

Visualizar T_NUM FINAL

NO

SI

INICIO

T_NUN=0

Page 4: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 4

• C_num : Contador de numeros que variara entre 1 y 100. • T_par: Acumulador para la suma de los numero pares. • T_impar: Acumulador para la suma de los impares.

Proceso Se inicializa el contador y los acumuladores a 0. Se da un valor inicial al Sw, por ejemplo, “impar”. Se realizara un bucle hasta que C_num sea igual a 100. En cada iteración se aumentara en 1 el valor de C_NUM, y se pregunta por el valor de Sw. Si es Sw = “impar”, el programa bifurcara por la rama de la derecha acumulando C_num sobre el acumulador T_impar y cambiando el valor al Sw para que en la siguiente iteración pase por la otra rama. El tratamiento que se hace cuando Sw = “Par” es similar.

ALGUNAS NORMAS UTILES DE PROGRAMACION Vamos a empezar a diseñar algoritmos para resolver problemas orientados hacia la informática de gestión. Por ello, se explicará en este apunte una serie de métodos que solucionan de forma eficaz ciertas cuestiones de uso muy frecuente. CALCULO DEL MAXIMO

C_num = 0

Sw=”Impar”

T_par = T_par + C_num

Sw = “Impar”

Visualizar T_par, t_impar

FINAL

NO

SI

COMIENZO

Sw = “Impar”

T_par = 0

T_impar = 0

C_num = 100

C_num = C_num + 1

T_par = T_par + C_num

Sw = “Par”

SI

NO

Page 5: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 5

Cuando se pretende calcular el valor máximo de un conjunto de valores que irá tomando sucesivamente una cierta variable, por ejemplo VAR, se debe utilizar otra variable auxiliar, (AUX-MAX), que se inicializará a un valor muy pequeño. El proceso consiste en comparar cada uno de los valores que va tomando la variable VAR con el que esta guardado en AUX-MAX. Si el valor de VAR es mayor, éste se guardará como nuevo contenido de la variable auxiliar para poder, a partir de ahora, comparar con él. ¿Por qué se inicializa AUX-MAX con un valor pequeño? Pues bien, se hace con el fin de que ya el primer valor de VAR sea mayor que él y así tomar éste como referencia para los demás. Si los valores que puede tomar la variable VAR son numéricos y positivos, la variable auxiliar se suele inicializar a 0. Si no se sabe cómo será el rango de estos valores, se inicializa con un valor ficticio (LOW-VALUE), que la mayoría de los sistemas poseen, y que representa el valor más pequeño que puede considerar el sistema. Si el sistema o el lenguaje de programación no lo admite, se inicializa con el valor más pequeño posible en cada caso. CALCULO DEL MÍNIMO Utilizando los mismos razonamientos anteriores, para calcular el valor mínimo se necesitará una variable auxiliar, (AUX-MIN), que, en esta ocasión, se inicializará a un valor superior a cualquiera de los que pueda tomar la variable a estudiar. Si de antemano no se conoce el rango de los valores de la variable, se puede utilizar el valor (ficticio, HIGH-VALUE, que representa el valor más grande considerado por el sistema. Al igual que en el caso anterior, si el sistema o el lenguaje no lo admite, se inicializa con el valor mayor posible. ORDEN DE ANIDAMIENTO EN CONDICIONALES Una estructura condicional, se dice que esta anidada, cuando esta totalmente incluida en una de las ramas de otra condicional. Sí un proceso requiere la utilización de varias estructuras condicionales anidadas, se nos puede plantear la duda de qué condición poner en primer lugar. Pues bien, la norma que debe seguirse siempre es poner en primer lugar la pregunta que sea más excluyente. Por ejemplo, supongamos que sobre los datos de los alumnos de un colegio, se desea conocer el número de alumnos de 7° E.G.B. que tienen más de un hermano. Para cada alumno, la primera pregunta que debe hacerse, obviamente la más excluyente, es si dicho alumno es de 7° EGB y sólo si esto se cumple preguntar si tiene más de un hermano. De esta forma, la segunda cuestión se hará únicamente a los alumnos de 7° EGB. Sí se hubieran planteado las preguntas a la inversa, primero si tiene más de un hermano y luego, en caso afirmativo, si es de 7° EGB, lo más probable es que se hubiera tenido que realizar la segunda pregunta a un mayor número de alumnos, pues, si el colegio es grande, es muy posible encontrar muchos alumnos con más de un hermano en el resto de los cursos. EJERCICIOS

Page 6: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 6

Introducir un número desde el teclado y decir si es positivo, negativo o cero. Variables utilizadas

• NUM: Variable que guardará el número tecleado. Proceso Una vez introducido el número se preguntará si es mayor que O. Si la condición es cierta, es que el número es positivo. Si es falsa, aún no se podrá asegurar nada, ya que puede ser negativo o cero. Por lo tanto, en caso de no ser positivo habrá que hacer otra pregunta para saber si es negativo o cero. Es decir, se utilizará una estructura condicional anidada.

EJERCICIO. Introducir 20 números por el teclado e imprimir cuantos son positivos, cuantos negativos, cuantos cero y la suma total de todos ellos. Variables utilizadas.

• Num: Variable que guardara los sucesivos números. • C_num: Contador que variara desde 1 hasta 20 para controlar los números que se van

tecleando. • C_pos: Contador de positivos. • C_cer: Contador de ceros. • T_num: Acumulador para el total de números. • C_num: Contador de los negativos.

Nota: Se tomara como norma general de nomenclatura anteponer la letra “C” a los nombres de los contadores, y la letra “T” (de total) a los nombres de lo acumuladores. Proceso. Se inicializan todos los contadores y acumuladores a cero. Se utilizara una repetitiva controlada por C_num que finalizara cuando el valor sea 20.

Num < 0

Visualizar “Cero”

Visualizar “Negativo”

SI

SI

NO

NO

COMIENZO

Introducir Num

Num > 0

Visualizar “Positivo”

FINAL

Page 7: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 7

En cada repetición se introducirá un numero, se incrementara C_num en 1 y, de forma similar al ejercicio anterior, se comprobara si el numero es positivo, negativo o cero, para sumar 1 al contador respectivo. Ademas, se acumulara el numero sobre T_num. EJERCICIO Introducir un número desde el teclado y visualizar por pantalla su tabla de multiplicar del 1 al 9. Variables utilizadas Num: Variable que guardara el numero tecleado. C_Num: Contador que variara desde 1 hasta 9, y que hara las veces de multiplicador. Proceso

Page 8: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 8

Inicializar el contador en 0 Por cada valor C_Mul se visualizara por pantalla el resultado de multiplicar NUM * C_Mul. Se utilizara, por lo tanto, una estructura repetitiva en la que se permanecerá mientras el valor de C_Mul sea menor que 9. EJERCICIO. Visualizar la tabla de multiplicar del 1 al 9 de los 10 primero número naturales. Variables utilizadas.

• C_Num: Contador que variara desde 1 hasta 10 para contar los numeros de los que se quiere hallar su tabla de multiplicar.

• C_Mul: Contador que variara de 1 a 9 por cada valor del contador anterior. Proceso Se inicializara C_Num a cero. Este proceso requiere 2 estructuras repetitivas anidadas. La más general se realizara 10 veces; es decir, finalizara cuando el contador de numeros C_num sea igual a 10. Dentro de esta repetitiva y para cada uno de los valores de C_num, se efectuara otra para calcular su tabla de multiplicar. Fig. 3.9

Page 9: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 9

EJERCICIO. Hallar la suma de los múltiplos de 5 comprendidos entre 1 y 100. Calcular además cuantos hay, y visualizar cada uno de ellos. Variables utilizadas C_mult: Contador que ira tomando los valores 5, 10, 15 … hasta 100. C_Cont: Contador de múltiplos de 5. T_Sum: Acumulador que ira guardando las sumas parciales de los múltiplos de 5. Proceso Inicializar los contadores y el acumulador. Se utilizara una estructura repetitiva cuya condición de salida vendrá determinada por el valor de C_Mult. Ver siguiente y fig. 3.11

Page 10: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 10

Las 2 soluciones anteriores son igualmente correctas, la primera ha utilizado un bucle “tipo hasta” y esta ultima solución ha empleado un bucle “tipo Mientras”, sin que ello implique la menor variación en los resultados. Nota: Es muy importante aclarar que en programación, la solución a los problemas no es generalmente única. Dependerá del buen criterio del programador. EJERCICIO Realizar 10 veces el proceso siguiente: Introducir un número del 1 al 50 y visualizar a qué decena pertenece. Variables utilizadas

• NUM: Variable que guardará el número introducido. • C-CONT: Contador para controlar las veces que se repite el proceso.

Proceso Se utiliza una estructura repetitiva que se realiza 10 veces, dentro de la cual hay varias estructuras condicionales anidadas para averiguar a qué decena pertenece. Solución

Page 11: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 11

EJERCICIO Introducir las estaturas (en cm.) de los 40 alumnos de una clase, imprimir la mayor de ellas y la estatura media. Variables utilizadas

• ALT: Variable que guardara las sucesivas estaturas tecleadas. • C_CONT: Contador que variara de 1 a 40. • T_ALT: Acumulador para la suma de las estaturas. • MAX: Variable que guardara en cada momento la estatura mayor de las que se hayan

introducido. Proceso Inicializar a 0 el acumulador y el contador. Se utilizará una estructura repetitiva controlada por la condición C_CONT = 40.

Page 12: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 12

En cada iteración, se compara el valor de la estatura introducida con el contenido de la variable MAX. Si es mayor, se guarda como nuevo valor de MAX. Esta variable debe inicializarse antes de entrar en la repetitiva, con un valor suficientemente pequeño como para que la primera estatura introducida sea mayor que dicho valor, y así sirva como referencia para las demás. Por ejemplo, MAX = 10. EJERCICIO Introducir 10 parejas de números naturales A, B Y para cada una de ellas, visualizar su producto por el método de las sumas sucesivas, (Nota: 7*3 = 3 +3 +3 + 3+ 3 + 3 +3, es decir, se suma B, A veces). Variables utilizadas B: Variable que guardará el multiplicando. A: Variable que guardará el multiplicador. C_CONT: Contador para controlar que se repita el proceso 10 veces. C_A: Contador que tomará los valores 1, 2, etc. hasta que alcance el valor A T_PROD: Acumulador para las sumas parciales y que al final contendrá el producto.

Page 13: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 13

Proceso Se inicializará el contador C_CONT a 0. Se deberán utilizar dos estructuras repetitivas. Una de, ellas, la más general, controlará que se repita 10 veces el proceso completo de multiplicar dos números. Este último proceso implica los siguientes pasos:

• La inicialización de las variables utilizadas en la multiplicación (C_A y T_PROD) . • La introducción de los dos números a multiplicar. • El incremento en 1 del contador de números introducidos. • La comprobación de que ambos Son distintos de cero, pues en caso contrario el producto es

cero. • La realización de una segunda estructura repetitiva, que será la que realmente calcule el

producto de A y B acumulando sobre T_PROD la variable B, A veces.

Page 14: programacion

Itinerario Formativo: Programacion Segundo Año Materia: Diseño de programas y manipulación de datos

Apunte N° 5 - -Pág. 14

PROBLEMAS PROPUESTOS PROBLEMA Introducir números por el teclado hasta que la suma de todos ellos sea mayor que 1000. PROBLEMA Imprimir la suma de los múltiplos de 2 desde el 10 al 700. PROBLEMA Introducir números por el teclado hasta que se teclee el 0, e imprimir la media aritmética de los negativos y de los positivos. PROBLEMA Dada la ecuación Y = X3 + 8 * X2 + 3 * X Imprimir el valor de Y correspondiente a los valores de X múltiplos de 3, desde el 9 al 60. PROBLEMA Introducir dos números naturales e imprimir su cociente entero por el método de las restas sucesivas. PROBLEMA Se van introduciendo alternativamente por el teclado números positivos y negativos hasta un total de 100. Se pretende visualizar por pantalla la suma total de los números positivos y la suma total de los números negativos introducidos. PROBLEMAS Introducir las edades de los 35 alumnos de una clase e imprimir la edad del mas joven y la edad media de la clase. PROBLEMA Introducir tres números A, B, C y visualizar el mayor de ellos.