Fund. de Programación - Tema 1

download Fund. de Programación - Tema 1

of 50

Transcript of Fund. de Programación - Tema 1

  • 7/29/2019 Fund. de Programacin - Tema 1

    1/50

    23-ene-13Santiago, Rep. Dom.

    Leccin 1: Consolidacin en la Modularizacin de Programas

    FUNDAMENTOS DE PROGRAMACIN

    Pontificia Universidad Catlica Madre y Maestra

    Vicerrectora Acadmica

    Facultad Ciencias de las Ingenieras

    Ingeniera en Sistemas y Computacin - ISC

  • 7/29/2019 Fund. de Programacin - Tema 1

    2/50

    CONSOLIDACIN EN LA MODULARIZACIN

    DE PROGRAMASFundamentos de Programacin

  • 7/29/2019 Fund. de Programacin - Tema 1

    3/50

    RECORDANDO LAS BASES

    El proceso de compilacin.

    Qu podemos hacer en Lenguaje C?

  • 7/29/2019 Fund. de Programacin - Tema 1

    4/50

    RECORDANDO LAS BASES

    El proceso de compilacin.

  • 7/29/2019 Fund. de Programacin - Tema 1

    5/50

    RECORDANDO LAS BASES

    Qu podemos hacer en Lenguaje C?

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

    Escribir una

    Sentencia

    if(eresMuyChevere){

    strcpy(invitado, Estas invitado!;

    }else{

    strcpy(invitado, Lo sentimos,pero ya se lleno la fiesta.;}

    Tomar Decisiones

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

    1;}

    Realizar

    Sentencias Una yOtra Vez

  • 7/29/2019 Fund. de Programacin - Tema 1

    6/50

    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

  • 7/29/2019 Fund. de Programacin - Tema 1

    7/50

    RECORDANDO LAS BASES

    Cmo declarar una variable?

    tipo variable;

    Inicializar una variable

    tipo nombre_variable = expresin;

    Duracin de una variable

    Locales y Globales

  • 7/29/2019 Fund. de Programacin - Tema 1

    8/50

    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 numricoso guin bajo.

    Regla nmero 3: Asegrate de no usar palabras reservadas del lenguaje deprogramacin.

  • 7/29/2019 Fund. de Programacin - Tema 1

    9/50

    RECORDANDO LAS BASES

    Palabras reservadas del lenguaje C:

    auto else long switch

    break enum register typedef

    case extern return unionchar float short unsigned

    const for signed void

    continue goto sizeof volatile

    default if static while

    do int struct _Packed

    double

  • 7/29/2019 Fund. de Programacin - Tema 1

    10/50

    RECORDANDO LAS BASES

    Volvindonos expresivos

    Categoras Operadores Asociacin

    Unarios - ++ -- ! DI

    Multiplicacin, Divisin y Mdulo * / % ID

    Suma y Sustraccin + - ID

    Relacionales < >= ID

    Igualdad == != ID

    Y lgico && IDO lgico || ID

    Asignacin = += -= *= /= %= DI

  • 7/29/2019 Fund. de Programacin - Tema 1

    11/50

    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?

  • 7/29/2019 Fund. de Programacin - Tema 1

    12/50

    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?

  • 7/29/2019 Fund. de Programacin - Tema 1

    13/50

    RECORDANDO LAS BASES Toma decisiones en lenguaje Cif(cucharas < 3){

    printf(El helado se esta acabando);

    }

    else if (cucharas > 9){

    printf(Come rapido, o se va a derretir el helado!);

    }

    else

    {

    printf(Queda mucho helado ven y come!);

    }

  • 7/29/2019 Fund. de Programacin - Tema 1

    14/50

    RECORDANDO LAS BASES Toma decisiones en lenguaje Cswitch(expresion){

    case 0:

    instrucciones;break;

    default:

    instrucciones;

    break;}

  • 7/29/2019 Fund. de Programacin - Tema 1

    15/50

    RECORDANDO LAS BASES

    Hazlo una y otra y otra y otra vez

    while(condicion)

    {

    sentencias;

    }

  • 7/29/2019 Fund. de Programacin - Tema 1

    16/50

    RECORDANDO LAS BASES

    Hazlo una y otra y otra y otra vez

    do

    {

    sentencias;

    }while(condicin);

  • 7/29/2019 Fund. de Programacin - Tema 1

    17/50

    RECORDANDO LAS BASES

    Hazlo una y otra y otra y otra vez

    for(inicializacin; condicin; cambio)

    {

    sentencias;

    }

  • 7/29/2019 Fund. de Programacin - Tema 1

    18/50

    RECORDANDO LAS BASES Ejercicio: Completa los espacios en blanco.

    #include #include

    int main(){

    int a, b, result _____, __________;

    printf("Este programa permite multiplicar dos valores por el m%ctodo de sumassucesivas.\n\n", _____);

    do{printf("Digite el primer valor positivo: ");scanf(____", &a);

    if(a

  • 7/29/2019 Fund. de Programacin - Tema 1

    19/50

    RECORDANDO LAS BASES Ejercicio: Completa los espacios en blanco.

    do{

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

    if(b

  • 7/29/2019 Fund. de Programacin - Tema 1

    20/50

    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;}

  • 7/29/2019 Fund. de Programacin - Tema 1

    21/50

    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;

  • 7/29/2019 Fund. de Programacin - Tema 1

    22/50

    RECORDANDO LAS BASES

    Cmo se pueden usar los arreglos?

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

  • 7/29/2019 Fund. de Programacin - Tema 1

    23/50

    RECORDANDO LAS BASES

    Ejercicio: Qu hace este programa?

    while(1)

    {

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

    }

  • 7/29/2019 Fund. de Programacin - Tema 1

    24/50

    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)));

    }

  • 7/29/2019 Fund. de Programacin - Tema 1

    25/50

    RECORDANDO LAS BASES

    Ejercicio: Identifica los bloques de instrucciones que son permitidos:

    int x = 1138; ____

    int y = 3/8; ____

    chars[] = 3-8; ____

    x = y; ____

    int n = 3uno; ____

  • 7/29/2019 Fund. de Programacin - Tema 1

    26/50

    RECORDANDO LAS BASES

    Ejercicio: Identifica los bloques de instrucciones que son permitidos:

    chart[] = uno + dos;

    short 3po = 1;

    z y;

    int level_ = 11;

    z--;

  • 7/29/2019 Fund. de Programacin - Tema 1

    27/50

    CONTINUANDO CON LA MODULARIZACIN

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    28/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Estructura de un Programa

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    29/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Estructura de un Programa

    #include Incluir librerias de C#define Definir constantes/macros

    [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 terminarCon punto y comas (;)

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    30/50

    CONSOLIDACIN EN LAMODULARIZACIN

    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 cualesreciben el nombre de argumentos o parmetros.

    Funciones

    Valores

    IntroducidosFUNCIN

    Valor

    Regresado

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    31/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Una funcin puede ser llamada desde cualquier parte de un programa.

    Cuando esto sucede, el programa se detiene y pasa el control a lafuncin, la cual al completarse su ejecucin retorna a la instruccin de

    donde fue invocada (su punto de referencia) y el programa retoma elcontrol.

    Funciones

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    32/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Elementos

    Funciones

    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

  • 7/29/2019 Fund. de Programacin - Tema 1

    33/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Asociacin de Parmetros

    Funciones

    Prototipo de una Funcin

    Es cuando declaramos una funcin. Contiene el tipo de dato deretorno, el nombre de la funcin y la lista de parmetros encerradosentre parntesis y terminando con un punto y coma (;).

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

    max = maximo(int val1, int val2, int val3) en el programa

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    34/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Pase de Parmetros Por Valor: La funcin reciba

    una copia de los valores delos parmetros. Si secambia el valor dentro de lafuncin, este cambio slo

    afecta el mbito de lafuncin.

    Por Referencia: La funcinpuede modificar los valoresde los parmetros. Aqu se

    pasa la direccin dememoria del valor delparmetro a la funcin.

    Funciones

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    35/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Pase de Parmetros

    Por Valor:

    int main()

    {

    int i = 6;

    func(i);

    return 0;

    }

    Funciones

    void func( int i){

    printf(%d,i)i++;

    }

    6 6

  • 7/29/2019 Fund. de Programacin - Tema 1

    36/50

    CONSOLIDACIN EN LA

  • 7/29/2019 Fund. de Programacin - Tema 1

    37/50

    CONSOLIDACIN EN LAMODULARIZACIN

    Ejercicios:

    Realice un programa que, utilizando una funcin con un prototipoque tiene una lista variable de argumentos permita a otra funcin

    consultar cul es el mximo de los valores tipo double pasados. Laaplicacin deber luego imprimir dicho mximo.

    Realice un programa que, utilizando una librera propia haga unallamada a una funcin esPrimo() para generar los primeros N

    nmeros primos, segn especifique el usuario.

    Funciones

  • 7/29/2019 Fund. de Programacin - Tema 1

    38/50

    Una funcin recursiva es una funcin que se llama a s misma directa oindirectamente de forma repetitiva hasta que se satisface determinadacondicin de parada. Se puede utilizar como una alternativa a laiteracin.

    Directa: Se llama a s misma desde el mismocuerpo de la funcin.

    Indirecta: Intervienen varias funciones donde unallama a la otra.

    Consolidacin en la Modularizacin

    Funciones Recursivas

  • 7/29/2019 Fund. de Programacin - Tema 1

    39/50

    Tanto la iteracin como la recursin se basan en una estructura decontrol; la primera es repetitiva y la recursin hace llamadas repetidas afunciones (estructura de seleccin). Ambas evalan condiciones determinacin; la primera termina cuando la condicin es falsa y lasegunda cuando se reconoce el caso base (axioma, condicin de salida).

    Todo problema que se puede resolver recursivamente, se puede resolvertambin iterativamente; la recursividad se ha de evitar a menos que estjustificada, debido a que la misma consume memoria adicional y empleatiempo adicional.

    Se prefiere la recursividad en situaciones en que sta resulta ms naturalpara resolver ciertos problemas y produce un programa ms fcil decomprender y depurar.

    Consolidacin en la Modularizacin

    Funciones Recursivas

  • 7/29/2019 Fund. de Programacin - Tema 1

    40/50

    Para construir una funcin recursiva, es necesario considerar lossiguientes tres puntos:

    Caso base (condicin de parada o axioma): Es el caso de salida de larecursin, en el que se retornara algn valor puntual o se dejara de

    llamar recursivamente la funcin. Normalmente es sencillo y se ubicaal 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 llamadarecursiva, 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 losargumentos o circunstancias de manera que eventualmente seacerque al caso base.

    Consolidacin en la Modularizacin

    Funciones Recursivas

  • 7/29/2019 Fund. de Programacin - Tema 1

    41/50

    Ej. El factorial. n! = nx(n-1)x(n-2)....x3x2x1.

    n! =1 si n=0

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

    long int factor(int n){

    int i;

    if (n

  • 7/29/2019 Fund. de Programacin - Tema 1

    42/50

    n! =1 si n=0

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

    Ejemplo 5!

    main()

    5n5

    f(5)

    5n4

    120

    f(4)

    4n3

    f(3)

    3n2

    f(2)

    2n1

    f(1)

    1n

    24 6 2 1

    Consolidacin en la Modularizacin

    Funciones Recursivas

  • 7/29/2019 Fund. de Programacin - Tema 1

    43/50

    #include

    #include #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 ;

    }

    La funcin inverso procedea leer caracteres hasta se dela condicin de final de lnea(\n).

    Cada llamado a la funcinhace que se lleve a lapila(cola) un nuevo carcter.

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

    Consolidacin en la Modularizacin

    Funciones Recursivas

  • 7/29/2019 Fund. de Programacin - Tema 1

    44/50

    Ej. El fibonacci

    Fn =0, si n=01, si n=1

    F(n-1)+F(n-2), 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

  • 7/29/2019 Fund. de Programacin - Tema 1

    45/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Realice un programa que permita imprimir una lnea de texto demanera inversa utilizando una funcin recursiva sin emplear arreglos.

  • 7/29/2019 Fund. de Programacin - Tema 1

    46/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Realice un programa que capture un arreglo de valores enteros detamao N y los invierta utilizando una funcin recursiva voidinverso_arreglo(int[], int, int);

    La aplicacin deber al final imprimir el contenido invertido de dichoarreglo.

  • 7/29/2019 Fund. de Programacin - Tema 1

    47/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Realice un programa que dado una cadena de enteros permitarealizar una bsqueda binaria recursiva, recibiendo en la funcinrecursiva:

    - 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.

  • 7/29/2019 Fund. de Programacin - Tema 1

    48/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Programar un algoritmo recursivo que permita sumar los elementosde una matriz de enteros.

  • 7/29/2019 Fund. de Programacin - Tema 1

    49/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Realice un programa que permita invertir una matriz de datos ya seapor filas o por columnas, utilizando un algoritmo recursivo en unafuncin que reciba un enum para la alternativa (invertir por fila o por

    columna), cantidad total de filas y de columnas y la posicin actual.

  • 7/29/2019 Fund. de Programacin - Tema 1

    50/50

    Consolidacin en la Modularizacin

    Funciones Recursivas

    Ejercicios:

    Algoritmos de ordenamiento: BubbleSort SelectionSort

    InsertionSort MergeSort QuickSort