Sie sind auf Seite 1von 50

Pontificia Universidad Catlica Madre y Maestra Vicerrectora Acadmica Facultad Ciencias de las Ingenieras Ingeniera en Sistemas y Computacin - ISC

FUNDAMENTOS DE PROGRAMACIN
Leccin 1: Consolidacin en la Modularizacin de Programas

23-ene-13 Santiago, Rep. Dom.

CONSOLIDACIN EN LA MODULARIZACIN DE PROGRAMAS


Fundamentos de Programacin

RECORDANDO LAS BASES


El proceso de compilacin.

Qu podemos hacer en Lenguaje C?

RECORDANDO LAS BASES


El proceso de compilacin.

RECORDANDO LAS BASES


Qu podemos hacer en Lenguaje C?

float temp = 98.6; int contadorFilas = 4; temp = (temp 32) * 5 / 9;

if(eresMuyChevere) { strcpy(invitado, Estas invitado!; } else { strcpy(invitado, Lo sentimos, pero ya se lleno la fiesta.; }

while(contadorFilas > 0){ procesarFilas(); contadorFilas = contadorFilas 1; }

Escribir una Sentencia

Tomar Decisiones

Realizar Sentencias Una y Otra Vez

RECORDANDO LAS BASES


Cmo declarar una variable?

Cmo nombrar una variable?


Volvindonos expresivos Toma decisiones en lenguaje C Hazlo una y otra y otra y otra vez

RECORDANDO LAS BASES


Cmo declarar una variable?

tipo variable;
Inicializar una variable tipo nombre_variable = expresin; Duracin de una variable

Locales y Globales

RECORDANDO LAS BASES


Cmo nombrar una variable?

Regla nmero 1: Inicia el nombre de la variable con una letra o un guin bajo.
Regla nmero 2: Luego, puedes usar cualquier nmero de letras, dgitos numricos o guin bajo. Regla nmero 3: Asegrate de no usar palabras reservadas del lenguaje de programacin.

RECORDANDO LAS BASES


Palabras reservadas del lenguaje C:

auto
break case char

else
enum extern float

long
register return short

switch
typedef union unsigned

const
continue default do

for
goto if int

signed
sizeof static struct

void
volatile while _Packed

double

RECORDANDO LAS BASES


Volvindonos expresivos

Categoras Unarios Multiplicacin, Divisin y Mdulo Suma y Sustraccin Relacionales Igualdad Y lgico O lgico Asignacin

Operadores - ++ -- ! */% +< <= > >= == != && || = += -= *= /= %=

Asociacin DI ID ID ID ID ID ID DI

RECORDANDO LAS BASES


Volvindonos expresivos

(9 / 5) * tempC + 32
Cul es el resultado si tempC es 10? strcat(strcat(Numero, ), 2); Cul es la cadena resultante?

RECORDANDO LAS BASES


Volvindonos expresivos

level >= 5;
Cul es el resultado cuando level es 10? Y si level es 5? color != rosado; Cul es el resultado si color es azul? (2 * PI) * r; Cul es el resultado si r es 3?

RECORDANDO LAS BASES


Toma decisiones en lenguaje C
printf(El helado se esta acabando); } if(cucharas < 3) {

else if (cucharas > 9)


{ printf(Come rapido, o se va a derretir el helado!); } else { printf(Queda mucho helado ven y come!); }

RECORDANDO LAS BASES


Toma decisiones en lenguaje C
switch(expresion) { case 0:

instrucciones;
break; default: instrucciones; break; }

RECORDANDO LAS BASES


Hazlo una y otra y otra y otra vez

while(condicion) { sentencias;

RECORDANDO LAS BASES


do { sentencias; Hazlo una y otra y otra y otra vez

}while(condicin);

RECORDANDO LAS BASES


Hazlo una y otra y otra y otra vez

for(inicializacin; condicin; cambio) { sentencias;

RECORDANDO LAS BASES


Ejercicio: Completa los espacios en blanco.

#include <stdio.h> #include <stdlib.h> int main() { int a, b, result _____, __________; printf("Este programa permite multiplicar dos valores por el m%ctodo de sumas sucesivas.\n\n", _____); do{ printf("Digite el primer valor positivo: "); scanf(____", &a); if(a <= 0) printf("Por favor, digite un valor positivo.\n\n"); }while(a <= 0);

RECORDANDO LAS BASES


Ejercicio: Completa los espacios en blanco.

do{ printf("Digite el segundo valor positivo: "); scanf("%d", _____);

if(b <= 0) printf("Por favor, digite un valor positivo.\n\n"); }while(______);


if(a < b) { // Usamos el mtodo de burbuja para intercambiar los valores. burbuja = a; a = _____; b = burbuja; }

RECORDANDO LAS BASES


Ejercicio: Completa los espacios en blanco.

// En este punto, ya a es el valor mayor y b el menor. // Procedemos a la multiplicacin sucesiva. while(b > 0) { result+=a; ______; }

printf("El resultado es: %d", ______);


return 0; }

RECORDANDO LAS BASES


Cmo se pueden guardar mltiples valores en lenguaje C?

float tempPorHora[24];
tempPorHora[0] = 59.2; tempPorHora[1] = 60.1; tempPorHora[2] = 63;

RECORDANDO LAS BASES


Cmo se pueden usar los arreglos?

printf(A las 08:00 horas, la temperatura era de %.2f, tempPorHora[8]);

RECORDANDO LAS BASES


Ejercicio: Qu hace este programa?

while(1) { printf("%c", ((rand()%2) ? 47 : 92));

RECORDANDO LAS BASES


Ejercicio: Qu hace este programa?

int busquedaBinaria(int arr[], int valor, int limI, int limS)


{ if(limI > limS) return -1; int i, j, pivote = (limI + limS) / 2; return (valor == arr[pivote] ? pivote : (valor > arr[pivote] ? busquedaBinaria(arr, valor, pivote+1, limS)

: busquedaBinaria(arr, valor, limI, pivote-1)));


}

RECORDANDO LAS BASES


Ejercicio: Identifica los bloques de instrucciones que son permitidos:

int x = 1138;
int y = 3/8; char s[] = 3-8; x = y;

____
____ ____ ____

int n = 3 uno;

____

RECORDANDO LAS BASES


Ejercicio: Identifica los bloques de instrucciones que son permitidos:

char t[] = uno + dos;


short 3po = 1; z y; int level_ = 11;

z--;

CONTINUANDO CON LA MODULARIZACIN

CONSOLIDACIN EN LA MODULARIZACIN
Estructura de un Programa

CONSOLIDACIN EN LA MODULARIZACIN
#include #define Incluir librerias de C Definir constantes/macros

Estructura de un Programa

[declaracin de funciones] [declaracin de variables globales]


main() { declaracin de variables locales para el main; Sentencias; llamadas de funciones; } funcion_a() { declaracin de variables locales para funcin_a; Sentencias; } funcion_b() { }

Todas las sentencias deben terminar Con punto y comas (;)

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Funcin Es un segmento del programa que realiza determinadas tareas. Siempre regresa cero o un valor nico.

Una funcin puede recibir cero o ms valores de entrada, los cuales reciben el nombre de argumentos o parmetros.

Valores Introducidos

FUNCIN

Valor Regresado

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Una funcin puede ser llamada desde cualquier parte de un programa. Cuando esto sucede, el programa se detiene y pasa el control a la funcin, la cual al completarse su ejecucin retorna a la instruccin de donde fue invocada (su punto de referencia) y el programa retoma el control.

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Elementos

int maximo(int a, int b, int c) { int m; m=a; if (b > m) m=b; if (c > m) m=c; return m;

Encabezado Tipo de dato que retorna Nombre de la funcin Lista de parmetros

Cuerpo. Declaracin de variables locales. Clculos. Instruccin de retorno.

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Asociacin de Parmetros

max = maximo(int val1, int val2, int val3)


int maximo(int a, int b, int c) en la funcin

en el programa

Prototipo de una Funcin Es cuando declaramos una funcin. Contiene el tipo de dato de retorno, el nombre de la funcin y la lista de parmetros encerrados entre parntesis y terminando con un punto y coma (;).

CONSOLIDACIN EN LA MODULARIZACIN
Pase de Parmetros Por Valor: La funcin reciba una copia de los valores de los parmetros. Si se cambia el valor dentro de la funcin, este cambio slo afecta el mbito de la funcin.

Funciones

Por Referencia: La funcin puede modificar los valores de los parmetros. Aqu se pasa la direccin de memoria del valor del parmetro a la funcin.

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Pase de Parmetros Por Valor: int main() { int i = 6; func(i); return 0; 6 6 void func( int i) { printf(%d,i) i++; }

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
#include <stdio.h> #include <math.h> void pvalor(float,float); void preferencia(float *,float *); void pvalor(float x,float y) { x= x*x; y= y*y; } void preferencia(float *x,float *y) { *x= (*x) * (*x); *y= (*y) * (*y); }

int main() { float a,b; a = 5.0, b=1.0e2; printf("\n Valores Iniciales: \n "); printf("\n a = %.1f \t b = %.1f \n", a, b); pvalor(a, b); printf("\n Valores luego del pase por valor: \n "); printf("\n a = %.1f \t b = %.1f ",a,b); preferencia(&a, &b); printf("\n\n Valores luego del pase por referencia: \n "); printf("\n a = %.1f \t b = %.1f \n \n ",a,b);

CONSOLIDACIN EN LA MODULARIZACIN
Funciones
Ejercicios: Realice un programa que, utilizando una funcin con un prototipo que tiene una lista variable de argumentos permita a otra funcin consultar cul es el mximo de los valores tipo double pasados. La aplicacin deber luego imprimir dicho mximo. Realice un programa que, utilizando una librera propia haga una llamada a una funcin esPrimo() para generar los primeros N nmeros primos, segn especifique el usuario.

Consolidacin en la Modularizacin
Funciones Recursivas
Una funcin recursiva es una funcin que se llama a s misma directa o indirectamente de forma repetitiva hasta que se satisface determinada condicin de parada. Se puede utilizar como una alternativa a la iteracin.
Directa: Indirecta: Se llama a s misma desde el mismo cuerpo de la funcin. Intervienen varias funciones donde una llama a la otra.

Consolidacin en la Modularizacin
Funciones Recursivas
Tanto la iteracin como la recursin se basan en una estructura de control; la primera es repetitiva y la recursin hace llamadas repetidas a funciones (estructura de seleccin). Ambas evalan condiciones de terminacin; la primera termina cuando la condicin es falsa y la segunda cuando se reconoce el caso base (axioma, condicin de salida).
Todo problema que se puede resolver recursivamente, se puede resolver tambin iterativamente; la recursividad se ha de evitar a menos que est justificada, debido a que la misma consume memoria adicional y emplea tiempo adicional.

Se prefiere la recursividad en situaciones en que sta resulta ms natural para resolver ciertos problemas y produce un programa ms fcil de comprender y depurar.

Consolidacin en la Modularizacin
Funciones Recursivas
Para construir una funcin recursiva, es necesario considerar los siguientes tres puntos:
Caso base (condicin de parada o axioma): Es el caso de salida de la recursin, en el que se retornara algn valor puntual o se dejara de llamar recursivamente la funcin. Normalmente es sencillo y se ubica al inicio de la funcin recursiva, aunque esto ltimo no es una regla. Cuerpo de la funcin: Son las instrucciones que conforman la funcin. Notar si el cuerpo estar antes, durante o despus de la llamada recursiva, ya que esto afecta significantemente los resultados. Llamada recursiva: Se refiere a la sentencia que invocar recursivamente la funcin. Debe de promover un cambio en los argumentos o circunstancias de manera que eventualmente se acerque al caso base.

Consolidacin en la Modularizacin
Funciones Recursivas
Ej. El factorial. n! = nx(n-1)x(n-2)....x3x2x1.
1
n! =

si n=0

n(n-1)!, si n>0

long int factor(int n) { int i; if (n <= 1) return 1; return (n * factor(n -1)); }

Consolidacin en la Modularizacin
Funciones Recursivas
1
n! =

si n=0

n(n-1)!, si n>0 Ejemplo 5!


main() f(5) f(4) f(3) f(2) f(1)

n 5

5 120

n 5

4 24

n 4

3 6

n 3

2 2

n 2

1 1

n 1

Consolidacin en la Modularizacin
#include <stdio.h> #include <stdlib.h> #define EOLN '\n' void inverso(void); main() { printf("\n Digite una linea de Texto \n" ); inverso(); system("PAUSE"); } void inverso(void) { char c; int i=0; if((c=getchar()) != EOLN) inverso(); putchar(c); printf("\n llamado # %d",i++); return ; }

Funciones Recursivas
La funcin inverso procede a leer caracteres hasta se de la condicin de final de lnea (\n).

Cada llamado a la funcin hace que se lleve a la pila(cola) un nuevo carcter.


Luego se visualizan en orden: ltimo en entrar, primero en salir.

Consolidacin en la Modularizacin
Funciones Recursivas
Ej. El fibonacci
0, 1,
F(n-1)+F(n-2),

Fn =

si n=0 si n=1 si n>1

long fibor(int n) { if (n < 2) return n; return fibor(n-1)+fibor(n-2); }

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que permita imprimir una lnea de texto de manera inversa utilizando una funcin recursiva sin emplear arreglos.

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que capture un arreglo de valores enteros de tamao N y los invierta utilizando una funcin recursiva void inverso_arreglo(int[], int, int); La aplicacin deber al final imprimir el contenido invertido de dicho arreglo.

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que dado una cadena de enteros permita realizar una bsqueda binaria recursiva, recibiendo en la funcin recursiva: - El arreglo a recorrer. - El elemento que se desea consultar. - El ndice inferior de la bsqueda. - El ndice superior de la bsqueda. Deber retornar el ndice del elemento encontrado, o -1 si no se encontr.

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Programar un algoritmo recursivo que permita sumar los elementos de una matriz de enteros.

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Realice un programa que permita invertir una matriz de datos ya sea por filas o por columnas, utilizando un algoritmo recursivo en una funcin que reciba un enum para la alternativa (invertir por fila o por columna), cantidad total de filas y de columnas y la posicin actual.

Consolidacin en la Modularizacin
Funciones Recursivas
Ejercicios:
Algoritmos de ordenamiento: BubbleSort SelectionSort InsertionSort MergeSort QuickSort

Das könnte Ihnen auch gefallen