Lgica de Programacin Cuatrimestre Enero-Abril 2012 Contenido del curso (temario) 1. Algoritmos 1. Algoritmos: tipos, elementos y caractersticas 2. Elaboracin de algoritmos para la solucin de problemas especficos. 2. Diagrama de flujo, estado y pseudocdigo 1. Diagramas de flujo 2. Diagramas de estados 3. Pseudocdigo 3. Introduccin al Lenguaje C 1. Datos, constantes y variables. 2. Expresiones 3. Funciones bsicas 4. Sentencias de control 2 Contenido (propuesto) Captulo 1: Introduccin a la Programacin con Lenguaje C 1.1 Solucin de Problemas con la computadora 1.2 Algoritmos, diagramas de flujo y Pseudocdigo 1.3 Tipos de Datos 1.4 Funciones de entrada y salida de datos 1.5 Operadores y expresiones 1.6 Programacin estructurada Captulo 2: Estructuras de control 2.1 Secuenciales. 2.2 Selectivas. 2.3 Repetitivas. 3 Captulo 3: Funciones. 3.1 Definicin de funciones. 3.2 Funciones con paso de parmetros por valor. 3.3 Funciones con paso de parmetros por referencia. 3.4 Funciones recursivas
Captulo 4: Arreglos 4.1 Arreglos unidimensionales 4.2 Arreglos bidimensionales 4.3 Arreglos como parmetros 4.4 Ordenamientos y bsquedas en arreglos
4 Planteamiento y solucin de problemas con la computadora 4 1.1 Introduccin a la programacin estructurada Resolucin de un problema D O C U M E N T A C I
N M A N T E N I M I E N T O Anlisis del problema Diseo del algoritmo Resolucin con la computadora Definicin del problema. Especificaciones de entrada Especificaciones de salida Diseo descendente Representacin del algoritmo Refinamiento por pasos Codificacin del programa Ejecucin y Depuracin Verificacin del programa 5 5 Anlisis del Problema El propsito del anlisis de un problema es que el programador comprenda qu va a resolver al desarrollar un programa.
Una primera lectura para comprensin general Una segunda lectura para responder las preguntas:
Qu informacin debe proporcionar la resolucin del problema? R = Especificaciones de salida
Qu datos se necesitan para resolver el problema? R = Especificaciones de entrada 6 6 Diseo del algoritmo El propsito de disear un algoritmo es indicarle a la computadora los pasos que debe seguir para resolver un problema.
1. Un problema complejo debe dividirse en varios problemas simples (divide y vencers; diseo descendente [Top-Down desing] ) Un diseo modular facilita la Comprensin del problema Simplifica las modificaciones Simplifica la comprobacin y verificacin
2. Regularmente un primer esbozo de un algoritmo muestra pasos generales, tras esta primera descripcin cada uno de esos pasos se describe ms detalladamente. A este proceso se le denomina refinamiento del algoritmo
7 Anlisis del Problema: QU SE VA A HACER? Diseo del Algoritmo: CMO SE VA A RESOLVER? 8 Algoritmos 7 Algoritmo Un Algoritmo es una secuencia ordenada de pasos para resolver un problema. Un algoritmo debe ser definido y finito.
Diagrama de flujo (flowchart) es la representacin grfica de un algoritmo por medio de smbolos estndar unidos por flechas.
El pseudocdigo es un lenguaje de especificacin de algoritmos, empleando palabras en espaol y una sintaxis menos rigurosa que la de un programa real. Pseudocdigo Cdigo Si if Mientras While Segn sea case Inicio-Fin begin-end { } 9 8 La fase de depuracin de un programa es la deteccin de errores y la posterior eliminacin de esos errores Resolucin con la computadora En la etapa de resolucin con la computadora se debe alcanzar el objetivo principal, que la computadora resuelva el problema.
1. La codificacin es la conversin del algoritmo en un lenguaje de programacin (programa)
2. Ejecucin y depuracin.- Regularmente un programa casi nunca funciona bien a la primera, entonces hay que eliminar los errores, as sucesivamente hasta dejarlo libre de errores.
Errores de sintaxis (sintaxis del leguaje) Errores de lgica (divisin entre cero)
3. Verificacin del programa.- Para saber si un programa funciona correctamente, ser preciso realizar pruebas con conjuntos de datos de muestra, cuya solucin sea conocida y correcta.
10 9 El punto de mantenimiento se fue extrado del libro: Meyer, Bertrand, Construccin de Software Orientado a Objeto, 2da edicin,, Prentice Hall, 1999. [cap,1] Documentacin La documentacin sirve para ayudar a comprender y utilizar un programa, puede ser interna al programa o externa al mismo.
1. Documentacin interna Comentarios (codificacin auto-documentada). El lenguaje C maneja comentarios de lnea y comentarios de bloque. La presentacin (sangras lneas en blanco, listados agradables)
2. Documentacin externa Manual de usuario Manual del operador Manual de mantenimiento y otros. 11 9 Cambios de los Requisitos de Usuario. Cambios de Formatos de Datos. Cambios de Hardware Mejoras de Eficiencia. Mantenimiento El mantenimiento se refiere a realizar cambios en el software debido a cambios del mundo exterior y Correccin de errores:.
12 10 Ejemplo: Leer el radio de un crculo y calcular e imprimir su rea y permetro
Entrada: Radio de un crculo (R) Salida: rea del crculo (A) Permetro del crculo (P)
rea y permetro Entrada de datos Clculo del rea Salida de Resultados Clculo del Permetro Entrada Radio (R) A = pi * R*R P = 2*pi * R Salida R Salida P Diseo Top-Down 13 11 Diagrama de Flujo
y
Pseudocdigo
1. Inicio 2. Leer (R) 3. A = 3.141592 * R * R 4. P = 2 * 3.141592 * R 5. Escribir (R, A, P) 6. Fin
inicio fin Leer (R) P 2 * pi * R A pi * R * R Escribir (R, A, P) Diagrama de flujo 14 12 Cdigo en C Comentarios de lnea Ejecucin Comentario de bloque 15 Caractersticas del lenguaje C C es un lenguaje modular, los mdulos se codifican con funciones. La funcin principal, es decir, en donde iniciar la ejecucin del programa, se denomina main, generalmente no recibe argumentos. El cuerpo de la funcin es encerrado entre llaves. main( ) { // Cuerpo de la funcin main
return 1; } El estndar de C establece que regrese un valor al sistema operativo, normalmente se regresa 1 para indicar que se concluy con xito. 16 23 Elementos del lenguaje: Variables Variables Una variable hace referencia a una localidad o localidades de memoria en donde se va a almacenar informacin para usarse en un programa.
Las variables se nombran con Identificadores.
Un identificador en C pueden ser una cadena de letras y nmeros que empiece con una letra, puede incluir al guion bajo y no puede ser una palabra reservada.
C es sensitivo a mayscula y minsculas.
El tratamiento que la computadora le da a cada variable o dato se determina por su Tipo.
17 24 Tipos de datos bsicos Tipo Longitud Rango unsigned char 8 bits 0 a 255 char 8 bits -128 a 127 unsigned int 32 bits 0 a 4, 294, 967, 295 int 32 bits -2, 147, 483, 648 a -2, 147, 483, 647 float 32 bits 3.4 x 10 -38 a 3.4 x 10 38 double 64 bits 1.7 x 10 -308 a 1.7 x10 308 long double 80 bits 3.4 x 10 -4932 a 1.1 x 10 4932 apuntador 32 bits No aplica 18 25 La declaracin de una variable inicia con la definicin de su tipo: int x; // Variable tipo entero float dato1, dato2; // Variables en punto flotante Puede realizarse una inicializacin durante la declaracin: int k = 10; // Variable inicializada
Hay variables Locales y Globales. Las variables declaradas dentro de una funcin son locales a la funcin y slo se pueden modificar en ese entorno. Por lo general se declaran al inicio de la funcin. Las variables declaradas fuera de cualquier funcin son globales y pueden ser modificadas desde cualquier funcin.
Si una variable local y una global tienen el mismo nombre, las funciones modificarn sus variables locales. 19 27 Entrada de datos con formato Entrada de Datos con Formato scanf es una funcin que lee un valor de la entrada estndar. La entrada estndar para un programa es el teclado. La funcin est incluida en la biblioteca estndar, la cual queda disponible con la sentencia: #include <stdio.h>
El prototipo de la funcin es el siguiente: int scanf( const char *format [, address, . . . ] );
El primer argumento es la cadena de formato y el segundo son las direcciones donde se van a guardar los valores ledos. 20 27 Entrada de datos con formato La cadena de formato incluye las especificaciones de conversin, es decir, para cada dato por leer se debe especificar cmo va a ser tratado dentro del programa, se tienen las especificaciones siguientes:
Identificador Formato %d Entero decimal %c Caracter simple %s Cadena de caracteres %f Punto flotante %e Punto flotante %u Entero decimal sin signo %o Entero octal sin signo %X Entero hexadecimal sin signo El identificador a usar debe corresponder con el tipo de datos de la(s) variable(s). 21 27 Ejemplos de uso de scanf Lectura de un entero: scanf(%d, &a); El smbolo & denota direccin, el dato ledo se guarda en la direccin de la variable a. Lectura de un flotante y un carcter: scanf(%f %c, &real, &car); Los espacios entre las especificaciones de conversin son ignorados. Lectura de un entero y una cadena de caracteres: scanf(%d %s, &x, cadena); En la cadena no se incluye el & porque las cadenas de antemano son referidas por su direccin. Con una llamada a la funcin scanf se pueden leer las variables que sean necesarias. 22 27 Entrada de datos con formato Salida de Datos con Formato printf es una funcin que escribe una cadena y/o el contenido de algunas variables en la salida estndar. La salida estndar para un programa es la pantalla. La funcin tambin est incluida en la biblioteca estndar, la cual queda disponible con la sentencia: #include <stdio.h>
El prototipo de la funcin es el siguiente: int printf( const char *format [, argument, . . . ] );
El primer argumento es la cadena de formato y el segundo son las variables cuyo contenido se va a enviar a la salida estndar.
23 27 Entrada de datos con formato La cadena de formato incluye las especificaciones de conversin, es decir, para cada variable se debe especificar cmo va a ser enviada a la pantalla, se tienen las especificaciones siguientes:
Identificador Formato %d Entero decimal %c Caracter simple %s Cadena de caracteres %f Punto flotante %e Punto flotante (exponencial) %u Entero decimal sin signo %o Entero octal sin signo %X Entero hexadecimal sin signo El identificador a usar debe corresponder con el tipo de datos de la(s) variable(s). 24 Con printf es posible organizar la salida o manejar informacin no imprimible, por medio de diferentes secuencias de escape, las cuales se muestran en la tabla: Secuencias de escape \a Timbre \b Retroceso de espacio \f Avance de pgina \n Salto de lnea \r Retorno de carro \t Tabulacin horizontal \v Tabulacin vertical \\ Barra inclinada \? Signo de interrogacin \ Comilla \ Comilla doble \nnn Nmero octal \xnn Numero hexadecimal 25 27 Ejemplos de uso de printf Escribe una cadena constante (sin variables): printf(Hola Mundo\n); Escribe texto y variable tipo entero: printf(resultado = %d\n, result); Escribe tres variables con caracteres constantes entre ellas: printf(%d + %d = %d\n, d1, d2, suma); Escribe una cadena constante y una variable: printf(Cadena: %-20s \n, cad); En %-20s el indica una alineacin a la derecha en 20 espacios para caracteres. Escribe dos nmeros en punto flotante: printf(a = %6.2f y b = %.3f \n, a, b); En %6.2f significa que se disponen hasta 6 dgitos para la salida, pero slo 2 despus del punto decimal. Con %.3f se tienen 3 dgitos para la parte decimal, no importa la cantidad para la parte entera.
26 Ejemplo simple: Realice un programa que sume dos nmeros enteros y muestre el resultado en pantalla.
Capture el programa en el entorno de desarrollo Dev-C++
Al final del programa, agregue la llamada a la funcin getch( ), para que se mantenga el resultado hasta que el usuario presione una tecla.
27 30 z *= 12; equivalente a z = z * 12; z /= 2; equivalente a z = z / 12 Operadores y expresiones Operadores Aritmticos Operador Descripcin Ejemplo * Multiplicacin a*b / Divisin a/b % Mdulo (residuo) a % b + Suma a + b - Resta a - b Operadores de Asignacin Operador Descripcin Ejemplo = Asignacin simple a = b *= a *= b a = a*b /= a /= b a = a/b %= a %= b a = a % b += a += b a = a + b -= a -= b a = a - b Una expresin es una combinacin de variables y operadores. Una proposicin es una expresin finalizada con ; Una proposicin compuesta o bloque debe encerrarse en llaves { } 28 Operadores de Incremento/Decremento Operador Descripcin Ejemplo ++ Incremento a++, ++a -- Decremento a--, --a En una expresin simple es equivalente: a++; <-> ++a;
Sin embargo: b = a++; // copia e incrementa b = ++a; // incrementa y copia
Operadores Relacionales Operador Descripcin Ejemplo < Menor que a < b > Mayor que a > b <= Menor o igual que a <= b >= Mayor o igual que a >= b == Igual a == b != Diferente (no igual) a != b El resultado de aplicar un operador relacional es: verdadero o falso.
Los operadores relacionales se ocupan en estructuras selectivas.
El lenguaje considera al 0 como falso y cualquier valor diferente de 0 como verdadero.
29 31 Operadores Operadores Lgicos (entre expresiones) Operador Descripcin Ejemplo && AND lgico a && b || OR lgico a || b ! NOT lgico ! a Para hacer expresiones complejas combinando expresiones simples.
Cada expresin simple ser verdadera o falsa. Por lo que la expresin resultante tambin ser: verdadera o falsa.
Tambin se ocupan en estructuras selectivas. Operadores para la manipulacin de bits Operador Descripcin Ejemplo & AND bit a bit a & b | OR bit a bit a | b ^ OR exclusivo bit a bit a ^ b << Desplazamiento a la izquierda (llena con ceros) a = a << 2 >> Desplazamiento a la derecha (llena con ceros) a = a >> 2 ~ Complemento a 1 a = ~b Las variables son secuencias de 1s y 0s.
Con estos operadores se revisan las variables bit a bit para generar informacin diferente.
Otros Operadores de Asignacin Operador Descripcin Ejemplo &= a &= b a = a & b |= a |= b a = a | b <<= a <<= b a = a << b >>= a >>= b a = a >> b ^= a ^= b a = a ^ b Los operadores de manipulacin de bits tambin se pueden combinar para hacer asignaciones nico operador con 3 operandos. Se revisa la Expresin1, si es verdadera se ejecuta la Expresin 2, pero si es falsa se ejecutar la Expresin3. 31 Precedencia y asociatividad de operadores OPERADORES ASOCIATIVIDAD ( ) [ ] -> Izquierda a derecha ! ~ ++ -- * & (tipo) sizeof (unarios) Derecha a izquierda * / % Izquierda a derecha + - Izquierda a derecha << >> Izquierda a derecha < <= > >= Izquierda a derecha == != Izquierda a derecha & Izquierda a derecha ^ Izquierda a derecha | Izquierda a derecha && Izquierda a derecha || Izquierda a derecha ?= Derecha a izquierda = += -= *= /= %= &= ^= |= <<= >>= Derecha a izquierda 32 Programacin Estructurada 13 La programacin estructurada es el conjunto de tcnicas que incorporan: Diseo descendente, Recursos Abstractos y Estructuras.
Esto significa que: Todo programa tiene un diseo modular Cada mdulo se disea con la metodologa descendente Cada mdulo se codifica utilizando las estructuras de control bsicas (secunciales, selectivas, repetitivas) (ausencia total de GOTO) En un programa estructurado slo existen dos maneras de combinar las estructuras de control y son apilndolas y anidndolas. Anidadas Apiladas Traslapadas 33 Estructuras de Control Pseudocdigo: accin_1 accin_2
accin_n Diagrama de flujo: Cdigo // Ejemplos a = conta + 5; x = y + z; contador++; Seleccin Simple Pseudocdigo: Diagrama de flujo: Cdigo si(condicin) acciones fin_si if(expresin) Proposicin
Secuenciales 34 Pseudocdigo: Diagrama de flujo: Cdigo Seleccin Mltiple Pseudocdigo: Diagrama de flujo: Cdigo Seleccin Doble si(condicin) acciones1 si_no accione2 fin_si if(expresin) proposicin1 else proposicin2 Segn_sea (expresin) valor1: acciones1 valor2: acciones2 . . . valorn: accionesN Otros valores: otras_acciones fin_segun switch (expresin){ case exp-const: proposiciones case exp-const: proposiciones default: proposiciones } 35 Pseudocdigo: Diagrama de flujo: Cdigo Repetitiva por Condicin (hacer-mientras) Pseudocdigo: Diagrama de flujo: Cdigo Repetitiva por Condicin (mientras) mientras(condicin) acciones fin_mientras hacer acciones mientras(condicin) do proposicin
while(expresin); while(expresin) proposicin 36 Pseudocdigo: Diagrama de flujo: Cdigo Repetitiva por Contador para init mientras cond con [inc|dec] acciones fin_para for (expr1; expr2; expr3)
proposicin Generalmente la expresin 1 es una inicializacin, la expresin 2 es una condicin y la expresin 3 es un incremento o decremento.
Una estructura Repetitiva por Contador debe utilizarse cuando se conoce de antemano el nmero de veces que se repetir la proposicin. 37 1. Empiece con el diagrama de flujo ms simple 2. Cualquier rectngulo de accin puede ser remplazado por dos rectngulos de accin en secuencia. 3. Cualquier rectngulo de accin puede ser sustituido por cualquier estructura de control. 4. Las reglas 2 y 3 pueden ser aplicadas tan frecuentemente como se desee y en cualquier orden. Algunas reglas para crear programas estructurados: 38