Está en la página 1de 83

Algoritmos

Introduccin a la Programacin 2005

El diseo de soluciones a la medida de nuestros problemas, requiere como en otras disciplinas una metodologa que nos ensee de manera gradual, la forma de llegar a estas soluciones.

A las soluciones creadas por computador se les conoce como programas y no son ms que una serie de operaciones que realiza el computador para llegar a un resultado, con un grupo de datos especficos. Lo anterior nos lleva al razonamiento de que un programa nos sirve para solucionar un problema especifico.
Computador: Es un dispositivo electrnico utilizado para procesar datos y obtener resultados. Los datos y la informacin se pueden introducir en el computador como entrada (input) y a continuacin se procesan para producir una salida (output).

Programa: Es el conjunto de instrucciones escritas de algn lenguaje de programacin y que ejecutadas secuencialmente resuelven un problema especifico.
Lenguaje: Es una serie de smbolos que sirven para transmitir uno o mas mensajes (ideas) entre dos entidades diferentes. A la transmisin de mensajes se le conoce comnmente como comunicacin. Lenguaje Maquina Lenguaje de Bajo Nivel (Ensamblador) Lenguaje de Alto Nivel

La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de nmeros y ecuaciones en el siglo IX. Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solucin a un problema especifico.

Lenguajes Algoritmicos Grficos No Grficos Definicin del Problema Esta fase est dada por el enunciado del problema, el cual requiere una definicin clara y precisa. Es importante que se conozca lo que se desea que realice el computador; mientras esto no se conozca del todo no tiene mucho caso continuar con la siguiente etapa. Anlisis del Problema Diseo del Algoritmo Codificacin Prueba y Depuracin Documentacin Mantenimiento

Anlisis del Problema

Una vez que se ha comprendido lo que se desea de el computador, es necesario definir: Los datos de entrada. Cual es la informacin que se desea producir (salida) Los mtodos y frmulas que se necesitan para procesar los datos.

Una recomendacin muy practica es el que nos pongamos en el lugar del computador y analicemos que es lo que necesitamos que nos ordenen y en que secuencia para producir los resultados esperados.

Diseo del Algoritmo Las caractersticas de un buen algoritmo son: Debe tener un punto particular de inicio. Debe ser definido, no debe permitir dobles interpretaciones. Debe ser general, es decir, soportar la mayora de las variantes que se puedan presentar en la definicin del problema. Debe ser finito en tamao y tiempo de ejecucin.

Codificacin La codificacin es la operacin de escribir la solucin del problema (de acuerdo a la lgica del diagrama de flujo o pseudocdigo), en una serie de instrucciones detalladas, en un cdigo reconocible por el computador, la serie de instrucciones detalladas se le conoce como cdigo fuente, el cual se escribe en un lenguaje de programacin o lenguaje de alto nivel.

Prueba y Depuracin

Los errores humanos dentro de la programacin de computadores son muchos y aumentan considerablemente con la complejidad del problema. El proceso de identificar y eliminar errores, para dar paso a una solucin sin errores se le llama depuracin.

Documentacin

Es la gua o comunicacin escrita es sus variadas formas, ya sea en enunciados, procedimientos, dibujos o diagramas. A menudo un programa escrito por una persona, es usado por otra. Por ello la documentacin sirve para ayudar a comprender o usar un programa o para facilitar futuras modificaciones (mantenimiento).

Mantenimiento

Se lleva acabo despus de terminado el programa, cuando se detecta que es necesario hacer algn cambio, ajuste o complementacin al programa para que siga trabajando de manera correcta. Para poder realizar este trabajo se requiere que el programa este correctamente documentado.

Tipos De Datos

Todos los datos tienen un tipo asociado con ellos. Un dato puede ser un simple carcter, tal como b, un valor entero tal como 35. El tipo de dato determina la naturaleza del conjunto de valores que puede tomar una variable.

Tipos de Datos Simples Datos Numricos: Permiten representar valores escalares de forma numrica, esto incluye a los nmeros enteros y los reales. Este tipo de datos permiten realizar operaciones aritmticas comunes. Datos Lgicos: Son aquellos que solo pueden tener dos valores (cierto o falso) ya que representan el resultado de una comparacin entre otros datos (numricos o alfanumricos). Datos Alfanumricos (String): Es una secuencia de caracteres alfanumricos que permiten representar valores identificables de forma descriptiva, esto incluye nombres de personas, direcciones, etc. Es posible representar nmeros como alfanumricos, pero estos pierden su propiedad matemtica, es decir no es posible hacer operaciones con ellos. Este tipo de datos se representan encerrados entre comillas.

Expresiones Las expresiones son combinaciones de constantes, variables, smbolos de operacin, parntesis y nombres de funciones especiales. Por ejemplo: a + (b + 3)/c

Cada expresin toma un valor que se determina tomando los valores de las variables y constantes implicadas y la ejecucin de las operaciones indicadas.
Una expresin consta de operadores y operandos. Segn sea el tipo de datos que manipulan, se clasifican las expresiones en: Aritmticas Relacinales Lgicas

Operadores y Operandos
Operadores: Son elementos que relacionan de forma diferente, los valores de una o ms variables y/o constantes. Es decir, los operadores nos permiten manipular valores.

Operadores Aritmticos: Los operadores aritmticos permiten la realizacin de operaciones matemticas con los valores (variables y constantes). Pueden ser utilizados con tipos de datos enteros o reales. Si ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.

Operadores Aritmticos
+ * / Mod Ejemplos: Expresin 7/2 12 mod 7 4 +2*5 Resultado 3.5 5 14 Suma Resta Multiplicacin Divisin Modulo (residuo de la divisin entera)

Prioridad de los Operadores Aritmticos

Todas las expresiones entre parntesis se evalan primero. Las expresiones con parntesis anidados se evalan de dentro hacia fuera, el parntesis mas interno se evala primero.
Dentro de una misma expresin los operadores se evalan en el siguiente orden. 1) ^ : Exponenciacin 2) *, /, mod: Multiplicacin, divisin, modulo. 3) +, - : Suma y resta. Los operadores en una misma expresin con igual nivel de prioridad se evalan de izquierda a derecha.

Ejemplos: 1) 4 + 2 * 5 = 14 2) 23 * 2 / 5 = 9.2

3) 46 / 5 = 9.2
4) 3 + 5 * (10 - (2 + 4)) = 23 5) 3 + 5 * (10 - 6) = 3 + 5 * 4 = 3 + 20 = 23 6) 3.5 + 5.09 - 14.0 / 40 = 5.09 7) 3.5 + 5.09 - 3.5 = 8.59 - 3.5 = 5.09 8) 2.1 * (1.5 + 3.0 * 4.1) = 28.98 9) 2.1 * (1.5 + 12.3) = 2.1 * 13.8 = 28.98

Operadores Relacinales: Se utilizan para establecer una relacin entre dos valores. Compara estos valores entre si y esta comparacin produce un resultado de certeza o falsedad (verdadero o falso). Los operadores relacinales comparan valores del mismo tipo (numricos o alfanumricos). Tienen el mismo nivel de prioridad en su evaluacin. Los operadores relacinales tiene menor prioridad que los aritmticos. Operadores Relacinales > Mayor que < Menor que >= Mayor o igual que <= Menor o igual que <> != Diferente, Distinto = Igual

Ejemplos: Si a = 10 ; b = 20; Falso Verdadero Falso Verdadero c = 30

a+b>c a-b<c a-b=c a*b<>c

Ejemplos de expresiones no vlidas:

a<b<c 10 < 20 < 30 True < 30 (No es vlido porque tiene diferentes operandos)

Operadores Lgicos: Estos operadores se utilizan para establecer relaciones entre valores lgicos. Estos valores pueden ser resultado de una expresin relacional. Operadores Lgicos And Or Not Y O Negacin && || !

Operador And (&&)


Operando1 T T F F Operador Operando2 AND T F T F Resultado T F F F

Operador Or ( | | ) Pipe
Operando1 T T F F Operador Operando2 OR T F T F Resultado T T T F

Operador Not ( ! )
Operando Resultado T F F T (a < b) and (b < c) (10<20) and (20<30) T and T

Ejemplos:

Prioridad de los Operadores Lgicos Not And Or Prioridad de los Operadores en General 1.- ( ) 2.- ^ 3.- *, /, Mod, Not 4.- +, -, And 5.- >, <, > =, < =, < >, =, Or Ejemplos: a = 10; 1) b = 12; c = 13; d =10

2)

3)

((a > b) or (a < c)) and ((a = c) or (a >= b)) F T F F T F F ((a >= b) or (a < d)) and (( a >= d) and (c > d)) F F T T F T F not (a = c) and (c > b)

Identificadores Representan los datos de un programa (constantes, variables, tipos de datos). Un identificador es una secuencia de caracteres que sirve para identificar una posicin en la memoria en el computador, que nos permite accesar a su contenido. Ejemplo: Nombre Num_hrs Calif2 (No confundir con variable) Reglas para formar un Identificador Debe comenzar con una letra (A a Z, maysculas o minsculas) y no deben contener espacios en blanco. Letras, dgitos y caracteres como el underscore ( _ ) estn permitidos despus del primer carcter. La longitud de identificadores puede ser de hasta 256 caracteres.

Constantes y Variables Constante: Una constante es un dato numrico o alfanumrico que no cambia durante la ejecucin del programa.

Ejemplo: PI = 3.1416
Variable: Es un espacio en la memoria del computador que permite almacenar temporalmente un dato durante la ejecucin de un proceso, su contenido puede cambiar durante la ejecucin del programa. Para poder reconocer una variable en la memoria del computador, es necesario darle un nombre con el cual podamos identificarla dentro de un algoritmo. Ejemplo: area = PI * radio ^ 2 Las variables son : el radio, el rea y la constate es PI

Clasificacin de las Variables

Por su Contenido Variable Numricas: Son aquellas en las cuales se almacenan valores numricos, positivos o negativos. Ejemplo: iva = 0.15

pi = 3.1416

costo = 2500

Variables Lgicas: Son aquellas que solo pueden tener dos valores (cierto o falso) estos representan el resultado de una comparacin entre otros datos. ok = 1 < 2 es_seguro = b > 3 Variables Alfanumricas: Esta formada por caracteres alfanumricos (letras, nmeros y caracteres especiales).

Ejemplo: letra = a

apellido = lopez

direccion = Av. Libertad #190

Por su Uso Variables de Trabajo: Variables que reciben el resultado de una operacin matemtica completa y que se usan normalmente dentro de un programa. Ejemplo: resultado = a + b / c Contadores: Se utilizan para llevar el control del numero de ocasiones en que se realiza una operacin o se cumple una condicin. Con los incrementos generalmente de uno en uno. Ejemplo: veces = veces + 1 Acumuladores: Forma que toma una variable y que sirve para llevar la suma acumulativa de una serie de valores que se van leyendo o calculando progresivamente. Ejemplo: suma = suma + b

ESTRUCTURAS ALGORITMICAS Las estructuras de operacin de programas son un grupo de formas de trabajo, que permiten, mediante la manipulacin de variables, realizar ciertos procesos especficos que nos lleven a la solucin de problemas. Estas estructuras se clasifican de acuerdo con su complejidad en:

Estructuras Secuenciales La estructura secuencial es aquella en la que una accin (instruccin) sigue a otra en secuencia. Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y as sucesivamente hasta el fin del proceso. Una estructura secuencial se representa de la siguiente forma: Inicio

Accion1 Accion2
. . AccinN Fin

Asignacin:
La asignacin consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona ser reconocida con el nombre de la variable que recibe el valor. La asignacin se puede clasificar de la siguiente forma: Simples: Consiste en pasar un valor constante a una variable (a = 15) Contador: Consiste en usarla como un verificador del numero de veces que se realiza un proceso (a = a + 1) Acumulador: Consiste en usarla como un sumador en un proceso (a = a + b) De trabajo: Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a = c + b * 2 / 4).

Lectura: La lectura consiste en recibir desde un dispositivo de entrada (el teclado) un valor. Esta operacin se representa en un pseudo cdigo como sigue: Leer a, b Donde a y b son las variables que recibirn los valores

Escritura:
Consiste en mandar por un dispositivo de salida (monitor o impresora) un resultado o mensaje. Este proceso se representa en un pseudo cdigo como sigue:

Escribir El resultado es:, R


Donde El resultado es: es un mensaje que se desea aparezca y R es una variable que contiene un valor.

Problemas Secuenciales Suponga que un individuo quiere invertir su capital en un banco y desea saber cuanto dinero ganar despus de un mes si el banco paga a razn de 2% mensual. Anlisis Datos de entrada Capital a invertir (cap_invertir) Inters pagado por el banco = 2% mensual Datos de salida Ganancia obtenida en un mes (ganancia) Algoritmo Inicio Entero cap_invertir Real ganancia Leer cap_invertir ganancia = cap_invertir * 0.02 Escribir ganancia Fin

Un vendedor recibe un sueldo base mas un 10% extra por comisin de sus ventas, el vendedor desea saber cuanto dinero obtendr por concepto de comisiones por las tres ventas que realiza en el mes y el total que recibir en el mes tomando en cuenta su sueldo base y comisiones. Anlisis Datos de entrada Sueldo base del vendedor (sueldo_base) Comision por venta = 10% de las ventas Realizo 3 ventas : Venta1, Venta2 y Venta3 Datos de salida Valor de la comision de las ventas (comision) Sueldo a recibir (sueldo_recibir)

Consideraciones Para calcular el valor de la comision, se debe concocer el total de las ventas Total de las ventas es la suma acumulativa de cada una de las ventas. La comision corresponde al 10% del total acumulado de las ventas El sueldo a recibir es la suma del sueldo base ms la comision de las ventas.

Algoritmo Inicio Entero sueldo_base, venta1, venta2, venta3 Entero total_venta Real comision, sueldo_recibir Leer sueldo_base, venta1, venta2, venta3 total_venta = venta1 + venta2 + venta3 comision = total_venta * 0.10 sueldo_recibir = sueldo_base + comision Escribir sueldo_recibir, comision Fin

Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuanto deber pagar finalmente por su compra.
Analisis Datos de entrada El total de la compra (total_compra) Descuento ofrecido por la tienda = 15% sobre el total de la compra Datos de salida Total a pagar por la compra (total_pagar) Consideraciones El descuento es el 15 del valor total comprado Descuento = total_compra * 0,15

Algoritmo Inicio Entero total_compra Real descuento, total_pagar Leer total_compra descuento = total_compra * 0.15 total_pagar = total_compra - descuento Escribir total_pagar Fin

1)Un alumno desea saber cual ser su nota final en el curso de Introduccin a la programacin. Dicha nota se compone de los siguientes porcentajes: 55% del promedio de sus tres notas parciales. 30% de la nota del examen final. 15% de la nota de un trabajo final.

2) Un profesor conoce la cantidad de hombres y mujeres del curso de Algoritmos, desea saber que porcentaje de hombres y que porcentaje de mujeres hay en su grupo de estudiantes.

1) Dada un cantidad en pesos, obtener la equivalencia en dlares, asumiendo que la unidad cambiara es un dato desconocido. 2) La presin, el volumen y la temperatura de una masa de aire se relacionan por la formula: masa = (presin * volumen)/(0.37 * (temperatura + 460)) Escribir un algoritmo que calcule dicha frmula. 3) Calcular el numero de pulsaciones que una persona debe tener por cada 10 segundos de ejercicio, si la formula es: num. pulsaciones = (220 - edad)/10 4) Calcular el nuevo sueldo de un empleado si obtuvo un incremento del 25% sobre su sueldo anterior.

5) En un hospital existen tres reas: Ginecologa, Pediatra, Traumatologa. El presupuesto anual del hospital se reparte conforme a la sig. tabla: rea Ginecologa Traumatologa Pediatra Porcentaje del presupuesto 40% 30% 30%

Obtener la cantidad de dinero que recibir cada rea, para cualquier monto presupuestado. 6) El dueo de una tienda compra un artculo a un precio determinado. Obtener el precio en que lo debe vender para obtener una ganancia del 30%. 7) Todos los lunes, mircoles y viernes, una persona corre la misma ruta y cronometra los tiempos obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una semana cualquiera. 8) Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien invierte con respecto a la cantidad total invertida.

9) Un alumno desea saber cual ser su promedio general en los tres cursos ms difciles que cursa y cual ser el promedio que obtendr en cada una de ellas. Estas materias se evalan como se muestra a continuacin:

La calificacin de Matemticas se obtiene de la sig. manera: Examen 90% Promedio de tareas 10% En esta materia se pidi un total de tres tareas. La calificacin de Fsica se obtiene de la sig. manera: Examen 80% Promedio de tareas 20% En esta materia se pidi un total de dos tareas.
La calificacin de Programacin se obtiene de la sig. manera: Examen 85% Promedio de tareas 15% En esta materia se pidi un promedio de tres tareas.

Estructuras de Condicionales Las estructuras condicionales comparan una variable contra otro(s) valor(es), para que en base al resultado de esta comparacin, se siga un curso de accin dentro del programa. Cabe mencionar que la comparacin se puede hacer contra otra variable o contra una constante, segn se necesite. Existen dos tipos bsicos, las simples y las mltiples.

Simples: Las estructuras condicionales simples se les conoce como Tomas de decisin. Si <condicin> entonces Accin(es) Fin si Dobles: Las estructuras condicionales dobles permiten elegir entre dos opciones o alternativas posibles en funcin del cumplimiento o no de una determinada condicin. Si <condicin> entonces Accin(es) si no Accin(es) Fin si Donde:
Si Condicin entonces.. accin(es) si no Indica el comando de comparacin Indica la condicin a evaluar Precede a las acciones a realizar cuando se cumple la condicin Son las acciones a realizar cuando se cumple o no la condicin Precede a las acciones a realizar cuando no se cumple la condicin

Dependiendo de si la comparacin es cierta o falsa, se pueden realizar una o mas acciones. Mltiples: Las estructuras de comparacin mltiples, son tomas de decisin especializadas que permiten comparar una variable contra distintos posibles resultados, ejecutando para cada caso una serie de instrucciones especificas. La forma comn es la siguiente: Si <condicin> entonces Accin(es) si no Si <condicin> entonces Accin(es) si no Accion(es) Fin Si Fin Si

Estructura condicional EN CASO En Caso Variable Op1: Accin(es) Op2: Accin(es) . . OpN: accin Fin En Caso

Ejemplo Seleccin Simple.


Un hombre desea saber cuanto dinero se genera por concepto de intereses sobre la cantidad que tiene en inversin en el banco. El decidir reinvertir los intereses siempre y cuando estos excedan a $7.000, y en ese caso desea saber cuanto dinero tendr finalmente en su cuenta. Datos de Entrada: Capital en Inversin (cap_inv) Valor del Inters (p_interes) Datos de Salida: Saldo en la cuenta (saldo) Consideraciones: Se debe calcular el valor del inters generado por el capital

Algoritmo Inicio Entero cap_inv Real p_interes, ineres_calculado, saldo Leer p_interes, cap_inv saldo = cap_inv interes_calculado = cap_inv * p_interes SI interes_calculado > 7000 entonces saldo = cap_inv + interes_calculado Fin Si

Escribir saldo
Fin

Determinar si un alumno aprueba a reprueba un curso, sabiendo que aprobara si su promedio de las tres calificaciones es mayor o igual a 4.0; reprueba en caso contrario.

Algoritmo Inicio Real Nota1, Nota2, Nota3 Real Promedio String Mensaje

Leer Nota1, Nota2, Nota3


Promedio = (Nota1 + Nota2 + Nota3) / 3 Si promedio >= 4.0 entonces Mensaje = Alumno Aprobado si no Mensaje = Alumno Reprobado Fin si Escribir Mensaje

Fin

En un almacn se hace un 20% de descuento a los clientes cuya compra supere los $1000 Cual ser la cantidad que pagara una persona por su compra?

Algoritmo Inicio Entero Compra Real Descuento, Tot_Pagar Leer Compra Si Compra > 1000 entonces Descuento = Compra * 0.2 si no Descuento = 0 Fin si Tot_Pagar = Compra Descuento

Escribir
Fin

Tot_pagar

Un obrero necesita calcular su sueldo, el cual se obtiene de la sig. manera:

Si trabaja 40 horas o menos se le paga $1600 por hora trabajada Si trabaja mas de 40 horas se le paga $1600 por cada una de las primeras 40 horas trabajadas y $2000 por cada hora extra.
Algoritmo Inicio Entero Hora_trabajada, Hora_extra, Sueldo Leer Hora_trabajada Si Hora_trabajada > 40 entonces Hora_extra = Hora_trabajada - 40 Sueldo = Hora_extra * 2000 + 40 * 1600 si no Sueldo = Hora_trabajada * 1600 Fin-si Escribir Sueldo Fin

Ejercicios propuestos 1) Escribir un algoritmo que lea dos nmeros y los escriba en forma ascendente. 2) Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuantas caloras consume su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido realizar son nicamente dormir o estar sentado en reposo. Los datos que tiene son que estando dormido consume 1.08 caloras por minuto y estando sentado en reposo consume 1.66 caloras por minuto. 3) Escribir un algoritmo que escriba el nombre de un articulo, clave, precio original y su precio con descuento. El descuento lo hace en base a la clave, si la clave es 01 el descuento es del 10% y si la clave es 02 el descuento es del 20% (solo existen dos claves). 4) Hacer un algoritmo que calcule el total a pagar por la compra de camisas. Si se compran tres camisas o ms se aplica un descuento del 20% sobre el total de la compra y si son menos de tres camisas un descuento del 10%

1) En un supermercado se hace una promocin, mediante la cual el cliente obtiene un descuento dependiendo de un numero que se escoge al azar. Si el numero escogido es menor que 74 el descuento es del 15% sobre el total de la compra, si es mayor o igual a 74 el descuento es del 20%. Obtener cuanto dinero se le descuenta.

2) Una compaa de seguros esta abriendo un depto. de finanzas y estableci un programa para captar clientes, que consiste en lo siguiente: Si el monto por el que se efecta la fianza es menor que $50 000 la cuota a pagar ser por el 3% del monto, y si el monto es mayor que $50 000 la cuota a pagar ser el 2% del monto. La afianzadora desea determinar cual ser la cuota que debe pagar un cliente.
3) Determinar la cantidad de dinero que recibir un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que estas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se pagan las horas normales y el resto al triple.

Estructuras Iterativas (Cclicas) Se llaman problemas repetitivos o cclicos a aquellos en cuya solucin es necesario utilizar un mismo conjunto de acciones que se puedan ejecutar una cantidad especifica de veces. Esta cantidad puede ser fija (previamente determinada por el programador) o puede ser variable (estar en funcin de algn dato dentro del programa).Los ciclos se clasifican en: Ciclos con un Numero Determinado de Iteraciones: a) Para Ciclos con un Numero Indeterminado de Iteraciones: a) Mientras b) Repetir-Hasta

Ciclos con un Numero Determinado de Iteraciones (Para) Son aquellos en que el numero de iteraciones se conoce antes de ejecutarse el ciclo. La forma de esta estructura es la siguiente: Para (Var_Control = Valor_Inicial ; Valor_Final ; Incremento_Var_Control) Accion 1 Accion 2 Fin Para Donde: Var_Control es una variable que lleva la cuenta de las iteraciones. Valor_Inicial corresponde al primer valor que tomar Var_Control. Valor_Final corresponde al ultimo valor permitido para continuar iterando. Incremento_Var_Control corresponde al avance que tendr Var_Control

Ejemplo: Calcular el promedio de un alumno que tiene 7 calificaciones en la materia de Diseo Estructurado de Algoritmos. Alternativa 1 (Sin considerar iteracin) Algoritmo Inicio Real Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7 Real Promedio Leer Nota1, Nota2, Nota3, Nota4, Nota5, Nota6, Nota7 Promedio = (Nota1+ Nota2+ Nota3+ Nota4+ Nota5+ Nota6+ Nota7)/7 Escribir Promedio

Fin

Alternativa 2 (Considerar iteracin) Algoritmo Inicio Real Nota Real Promedio, Suma Entero C_Nota, i Leer C_Nota Suma = 0 Para (i = 1 ; C_Nota ; 1) Leer Nota Suma = Suma + Nota Fin Para Promedio = Suma / C_Nota Escribir Promedio

Fin

Cual alternativa es mas interesante de implementar? Por que?

Ejemplo Leer 10 nmeros y obtener su cuadrado y su cubo.

Algoritmo Inicio Entero Numero, Cuadrado, Cubo Entero i


Para (i = 1 ; 10 ; 1) Leer Numero Cuadrado = Numero * Numero Cubo = Cuadrado * Numero Escribir Cuadrado, Cubo Fin Para

Fin

Leer 10 nmeros e imprimir solamente los nmeros positivos


Leer 20 nmeros e imprimir cuantos son positivos, cuantos negativos y cuantos neutros.

Leer 15 nmeros negativos y convertirlos a positivos e imprimir dichos nmeros.


Suponga que se tiene un conjunto de notas finales de un grupo de 40 alumnos. Escribir un algoritmo para calcule el promedio de las notas y la calificacin final ms baja de todo el grupo. Calcular y escribir la tabla de multiplicar de un numero cualquiera. Escribir el multiplicando, el multiplicador y el producto. Simular el comportamiento de un reloj digital, escribiendo la hora, minutos y segundos de un da desde las 0:00:00 horas hasta las 23:59:59 horas

Ciclos con un Numero Indeterminado de Iteraciones ( Mientras, RepetirHasta) Son aquellos en que el numero de iteraciones no se conoce con exactitud, ya que esta dado en funcin de un dato dentro del programa. Mientras: Esta es una estructura que repetir un proceso durante N veces, donde N puede ser fijo o variable. Para esto, la instruccin se vale de una condicin que es la que debe cumplirse para que se siga ejecutando. Cuando la condicin ya no se cumple, entonces ya no se ejecuta el proceso. La forma de esta estructura es la siguiente: Mientras (Condicin) Accin_1 Accin_2 Accin_N Fin Mientras

Ejemplo Leer 10 nmeros y obtener su cuadrado y su cubo. Algoritmo Inicio Entero Numero, Cuadrado, Cubo Entero i i = 1; Mientras (i <= 10) Leer Numero Cuadrado = Numero * Numero Cubo = Cuadrado * Numero Escribir Cuadrado, Cubo i=i+1 Fin Para

Fin

1)Una compaa de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana. Su poltica de remuneraciones es que un vendedor recibe un sueldo base, y un 10% extra por comisiones de sus ventas. El gerente de su compaa desea saber cuanto dinero obtendr en la semana cada vendedor por concepto de comisiones por las tres ventas realizadas, y cual ser su remuneracin final, tomando en cuenta su sueldo base y sus comisiones. 2) Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de inters. Cual ser la cantidad de dinero que esta persona tendr al cabo de un ao si la ganancia de cada mes es reinvertida?. 3) Se desea obtener el promedio de g grupos que estn en un mismo ao escolar; si cada grupo puede tener n alumnos, cada alumno puede tener m materias y que en todas las materias se promedian tres notas para obtener el promedio de la materia. Lo que se desea desplegar es el promedio de los grupos, el promedio de cada grupo y el promedio de cada alumno.

Repetir-Hasta: Esta es una estructura similar en algunas caractersticas, a la anterior. Repite un proceso una cantidad de veces, pero a diferencia del Mientras, el Repetir-Hasta lo hace hasta que la condicin se cumple y no mientras, como en el Mientras. Por otra parte, esta estructura permite realizar el proceso cuando menos una vez, ya que la condicin se evala al final del proceso, mientras que en la estructura Mientras puede ser que nunca llegue a entrar si la condicin no se cumple desde un principio. La forma de esta estructura es la siguiente:
Repetir Accin_1 Accin_2 Accin_N Hasta ( Condicin)

Repetir-Hasta: Esta es una estructura similar en algunas caractersticas, a la anterior. Repite un proceso una cantidad de veces, pero a diferencia del Mientras, el Repetir-Hasta lo hace hasta que la condicin se cumple y no mientras, como en el Mientras. Por otra parte, esta estructura permite realizar el proceso cuando menos una vez, ya que la condicin se evala al final del proceso, mientras que en la estructura Mientras puede ser que nunca llegue a entrar si la condicin no se cumple desde un principio. La forma de esta estructura es la siguiente:
Repetir Accin_1 Accin_2 Accin_N Hasta ( Condicin)

LENGUAJE C
Fue creado por Dennis Ritchie en 1972 (UNIX) Deriva del lenguaje B de Ken Thompson En 1989 se unifican criterios, Ansi C. Caractersticas Es estructurado (subrutinas y estructuras de control) Es amigable, flexible y potente (Combina elementos de lenguaje de alto nivel y elementos de ensambladores.) Es eficiente Es portable Es compilado.

Para escribir un programa en C hay que seguir los siguientes pasos:


Disear el algoritmo que resuelve el problema Escribir el Cdigo Fuente del programa (extensin .c)
Traducir de seudo lenguaje a cdigo C Esto se hace utilizando cualquier editor de texto.

Generar Cdigo Objeto del programa (extensin .obj)


El compilador traduce el programa fuente a lenguaje interno del computador El compilador comprueba si hemos cometido algn error de sintaxis.

Generar archivo ejecutable (Extensin .exe o .out)


Se ejecuta un programa llamado linker, que genera el archivo ejecutable.

LAS FUNCIONES EN C.
Las aplicaciones informticas que habitualmente suelen contener decenas y an cientos de miles de lneas de cdigo fuente. A medida que los programas se van desarrollando y aumentan de tamao, se convertiran rpidamente en sistemas poco manejables si no fuera por la modularizacin o programacin descendente, que es el proceso consistente en dividir un programa muy grande en una serie de mdulos mucho ms pequeos y manejables. A estos mdulos se les suele denominar de distintas formas (subprogramas, subrutinas, procedimientos, funciones, etc.) segn los distintos lenguajes. El lenguaje C hace uso del concepto de funcin (function). Sea cual sea la nomenclatura, la idea es sin embargo siempre la misma: dividir un programa grande en un conjunto de subprogramas o funciones ms pequeas que son llamadas por el programa principal; stas a su vez llaman a otras funciones ms especficas y as sucesivamente.

LAS FUNCIONES EN C.
Una funcin de C es una porcin de cdigo o programa que realiza una determinada tarea y est asociada con un identificador o nombre, que se utiliza para referirse a ella desde el resto del programa. POR QU SE UTILIZAN? La divisin de un programa en unidades ms pequeas o funciones presenta entre otras las ventajas siguientes:

LAS FUNCIONES EN C.
1. Modularizacin. 2. Ahorro de memoria y tiempo de desarrollo. 3. Independencia de datos y ocultamiento de informacin. Se suelen emplear subprogramas en los siguientes casos:

E n programas complejos: si un programa complejo se escribe sin subprogramas resulta difcil de entender. La divisin en subprogramas permite que nos centremos en cada momento en un problema ms pequeo que el problema original.
Cuando se repite dentro de un algoritmo algn tipo de tratamiento: de este modo describiremos como se hace el tratamiento una sola vez con un subprograma y realizaremos una llamada a ste cada vez que queramos usarlo.

DEFINICIN DE FUNCIONES
tipo_valor_retorno nombre_funcion (lista argumentos formales con tipos) { declaracin de variables y/o de otras funciones codigo ejecutable return (expresin); // optativo } La primera lnea recibe el nombre de encabezamiento (header) o cabecera, y el resto de la definicin encerrado entre llaves es el cuerpo (body) de la funcin. Cada funcin puede disponer de sus propias variables, declaradas al comienzo de su cdigo.

DEFINICIN DE FUNCIONES
Estas variables (Locales), por defecto slo son visibles dentro del bloque en el que han sido definidas, se crean cada vez que se ejecuta la funcin y permanecen ocultas para el resto del programa. Tambin se pueden hacer visibles a la funcin, variables globales definidas en otro archivo (o en el mismo archivo, (aunque no suele ser aconsejable, salvo en situaciones muy especiales).

DEFINICIN DE FUNCIONES
El cdigo ejecutable es el conjunto de instrucciones que deben ejecutarse cada vez que la funcin es llamada. La lista de argumentos con tipos, tambin llamados argumentos formales, es una lista de declaraciones de variables, precedidas por su tipo correspondiente y separadas por comas (,).

Los argumentos formales son la forma ms natural y directa para que la funcin reciba valores desde el programa que la llama, correspondindose en nmero y tipo con otra lista de argumentos los argumentos actuales (como veremos a continuacin)- en el programa que realiza la llamada a la funcin. Los argumentos formales son declarados en el encabezamiento de la funcin, pero no pueden ser inicializados en l.

DEFINICIN DE FUNCIONES
Cuando una funcin es ejecutada, puede devolver al programa que la ha llamado un valor, el valor de retorno, cuyo tipo debe ser especificado en el encabezamiento de la funcin (si no se especifica, se supone por defecto el tipo int). Si no se desea que la funcin devuelva ningn valor, el tipo del valor de retorno deber ser void.

La sentencia return permite devolver el control al programa que llama. Puede haber varias sentencias return en una misma funcin (aunque deberemos intentar que aparezca una sola vez, al final de la funcin). Si no hay ningn return, el control se devuelve cuando se llega al final del cuerpo de la funcin. Le palabra clave return puede ir seguida de una expresin, en cuyo caso sta es evaluada y el valor resultante devuelto al programa que llama como valor de retorno (si hace falta, con una conversin previa al tipo declarado en el encabezamiento). Los parntesis que engloban a la expresin que sigue a return son optativos.

Ejemplo
double valor_abs( double x ) { double abs; if (x < 0.0) abs = -x; else abs = x; return ( abs ); // archivo prueba.c }

#include <stdio.h> double valor_abs(double); // declaracin void main (void) { double z, y; y = -30.8; z = valor_abs(y) + y*y; // llamada en una expresion }

Funciones
El efecto producido por la llamada a una funcin puede resumirse como: Se evalan las expresiones que aparezcan en los argumentos (parmetros reales). Se crean las variables correspondientes a los parmetros formales. Se asignan los valores calculados en 1) a los correspondientes parmetros formales. Se crean las variables locales* al subprograma. Se ejecuta el cdigo correspondiente al subprograma.

Se destruyen las variables locales* y las correspondientes a los parmetros formales.


Se contina el programa por la instruccin siguiente a la llamada al subprograma.

DECLARACIN DE FUNCIONES.
En principio, en C, la declaracin de una funcin se puede hacer de tres maneras:

Mediante una llamada a la funcin. En efecto, cuando una funcin es llamada sin que previamente haya sido declarada o definida, esa llamada sirve como declaracin suponiendo int como tipo del valor de retorno, y el tipo de los argumentos actuales como tipo de los argumentos formales. Esta prctica es muy peligrosa (es fuente de numerosos errores) y debe ser evitada.
Mediante una definicin previa de la funcin. Esta prctica es segura si la definicin precede a la llamada, pero tiene el inconveniente de que si la definicin se cambia de lugar, la propia llamada pasa a ser declaracin como en el caso a). Mediante una declaracin explcita, previa a la llamada. Esta es la prctica ms segura y la que hay que tratar de seguir siempre. La declaracin de la funcin se hace mediante el prototipo de la funcin, bien fuera de cualquier bloque, bien en la parte de declaraciones de un bloque.

Problemas
1) Dos nmeros a y b se dice que son amigos si la suma de los divisores de a (salvo l mismo) coincide con b y viceversa. Disea un PROGRAMA (que utilice funciones) que tenga como entrada dos nmeros naturales n y m y que muestre en la pantalla todas las parejas de nmeros amigos que existan en el intervalo determinado por n y m.