Está en la página 1de 38

M.C.

Felipe Santiago Espinosa


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.

30
31
Operadores
Operador ternario
Expresin1 ? Expresin2 : Expresin3;

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

También podría gustarte