introd. a la algoritmia - tema 3

Upload: miguel-moronta

Post on 04-Apr-2018

232 views

Category:

Documents


2 download

TRANSCRIPT

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    1/35

    Introduccin a la Algoritmia

    Leccin 3Lenguaje C

    Pontificia Universidad Catlica Madre y Maestra

    Vicerrectora Acadmica

    Facultad Ciencias de las Ingenieras

    Ingeniera en Sistemas y Computacin - ISC

    16-ene-13

    Santiago, Rep. Dom.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    2/35

    Lenguaje C

    Qu es el Lenguaje C?

    Es un lenguaje de programacin creado en el 1972 por Dennis M. Ritchie en los

    laboratorios Bell como evolucin del anterior lenguaje B (de Ken Thomson), a su

    vez basado en BCPL (de Martin Richards).

    Sali al pblico de manera oficial a travs de la publicacin de The C

    Programming Language, de Brian Kernighan y Dennis Ritchie.

    Definicin y Caractersticas

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    3/35

    Lenguaje C

    Definicin y Caractersticas

    Ncleo del lenguaje simple, compatible conbibliotecas.

    Es muy flexible y porttil.

    Opera con un sistema de tipos para evitaroperaciones sin sentido.

    Utiliza un lenguaje de preprocesado, para las macrosy constantes.

    Acceso de memoria a bajo nivel a travs de punteros.

    Caractersticas del Lenguaje C

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    4/35

    Lenguaje C

    Definicin y Caractersticas

    Tiene un conjunto reducido de palabrasclave.

    El paso de parmetros entre funciones se

    realiza por defecto por valor. Tipos de datos agregados (struct) para

    agrupan un conjunto de datos relacionados.

    Caractersticas del Lenguaje C

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    5/35

    Lenguaje C

    Traductores de lenguaje

    Los traductores de lenguaje son programas que traducen a su vez los programas

    fuente escritos en lenguaje de alto nivel a cdigo mquina.

    Se dividen en:

    * Compiladores:

    Es un programa que traduce los programas fuente escritos en lenguajes de

    alto nivel a lenguaje mquina en archivos objeto para que el montador los enlace.

    * Intrpretes:

    Traductor que toma un programa fuente, lo traduce y a continuacin lo

    ejecuta.

    Intrpretes y Compiladores

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    6/35

    Lenguaje C

    Compilacin

    La compilacin es el proceso de traduccin de programas fuente a programas

    objeto, el cual ha sido ya traducido a cdigo mquina.

    Como parte del proceso de compilacin, viene luego un programa llamado

    montador, enlazador o linker, el cual analiza las dependencias con otras libreras

    para unirlas con el programa objeto ya compilado y as producir un archivo nico

    ejecutable.

    Intrpretes y Compiladores

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    7/35

    Lenguaje C

    Compilacin

    Intrpretes y CompiladoresCdigoFuente

    Compilador

    ProgramaObjeto

    Montador

    Ejecutable

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    8/35

    Lenguaje C

    Compilacin

    Intrpretes y Compiladores

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    9/35

    Lenguaje C

    Constantes y Variables

    Los programas de computadoras contienen ciertos valores que no deben cambiar

    durante la ejecucin del programa. Tales valores se llaman constantes. De igual

    forma, existen otros valores que cambiarn durante la ejecucin del programa; a

    estos valores se les llama variables.

    Una constante es uma partida de datos que permanecen sin cambios durante todo el

    desarrollo del algoritmo o durante la ejecucin del programa. El tipo de umaconstante lo define el valor que tienen asignado.

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    10/35

    Lenguaje C

    Constantes y Variables

    Una variable es un objeto o partida de datos cuyo valor puede cambiar durante el

    desarrollo del algoritmo o ejecucin del programa.

    Una variable que es de un cierto tipo puede tomar nicamente valores de ese tipo.

    Una variable caracter, por ejemplo, puede tomar como valor slo caracteres,

    mientras que una variable entera puede tomar slo valores enteros. Si se intenta

    asignar un valor de un tipo a una variable de otro tipo se producira un error de tipo.

    Una variable se identifica por los atributos: nombre y tipo

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    11/35

    Lenguaje C

    Constantes y Variables

    Las variables se clasifican segn su uso en:

    De asignacin: son aquellas que guardan resultados de operaciones, valores

    iniciales y valores de otra variable.

    Contadores: son aquellas que se usan para llevar la secuencia de alguna operacin

    que se est realizando. Siempre se debe inicializar esta variable en 0 para no

    obtener valores no deseados del conteo.

    Ejemplo: Una variable que tenga cuntas lneas se han impreso en un momento

    dado. La variable linea se inicializa en cero (linea=0) y cada vez que se imprime

    una lnea se incrementa en uno (linea=linea + 1).

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    12/35

    Lenguaje C

    Constantes y Variables

    Acumuladoras: cuando se utilizan para obtener la suma de una serie de valores.

    Tambin se deben inicializar en cero.

    Ejemplo: Si se quiere saber la sumatoria de un conjunto de nmeros. La variable

    total se inicializa en cero. Cuando se captura un valor se acumula en total (total

    = total + valor).

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    13/35

    Lenguaje C

    Constantes y Variables

    Sub-ndices: manejan la referencia a una hilera de datos e indica la posicin de los

    datos. El valor correspondiente es la posicin donde se encuentra el dato que se est

    proesando. Se inicializan de acuerdo a la posicin del valor con que se empezara a

    trabajar.

    Ejemplo: Si se tiene el conjunto de nmeros 3,7,5,8,9; e iniciamos con el primer

    dato, la variable tendra el valor de 0. As, al avanzar al siguiente dato tendra elvalor de 1, y as sucesivamente...

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    14/35

    Formatos de Programas en C

    El pre-procesador C

    El preprocesador es una coleccin de instrucciones especiales,llamadas directivas, las cuales son ejecutadas al principio del procesode compilacin.

    El control del preprocesador se realiza mediante determinadas

    directivas incluidas en el fuente.

    Una directiva es una palabra que interpreta el preprocesador. Siempre vaprecedida por el smbolo # y est situada a principio del cdigo.

    Por Ej.

    #include#define

    Estructuras de Control

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    15/35

    Formatos de Programas en C

    El pre-procesador C

    La directiva #define se utiliza para definir una macro; es deciridentificadores simples que son equivalentes a expresiones oinstrucciones completas. En ese sentido una macro se parece a unafuncin, pero son tratada y definidas de forma diferentes durante el

    proceso de compilacin.

    Se define de la forma:

    #define ID secuencia. Cada ocurrencia de ID en el fuente es sustituida por

    secuencia.

    #define PI 3.141593 /*constante numrica*/

    #define NOMBRE Carlitos /* texto */

    Estructuras de Control

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    16/35

    Formatos de Programas en CEstructuras de Control

    #include #include

    #define AREA longitud * altura

    int main(int argc, char *argv[])

    {

    int longitud,altura;

    printf("\n Longitud =");

    scanf("%d",&longitud);

    printf("\n Altura =");

    scanf("%d",&altura);

    printf("\n Area = %d", AREA);

    system("PAUSE");

    return 0;

    }

    La macro AREA representa la expresin

    longitud * altura. Cuando el programa es

    compilado, la expresin longitud * altura

    reemplaz al identificador AREA dentro de

    la instruccin printf de tal manera quedicha instruccin quedar:

    printf("\n Area = %d", longitud * altura);

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    17/35

    Lenguaje C

    Tipos de Datos

    Existen datos numricos; otros son letras o caracteres. El computador necesita un

    sistema para identificar y utilizar todas estas diferentes clases de datos. En C el

    sistema consiste en reconocer algunos tipos de datos fundamentales. Si el dato es

    una constante, el compilador es capaz, generalmente, de decirnos de qu tipo se

    trata simplemente por el aspecto que tiene; por el contrario, las variables necesitan

    un anuncio previo de su tipo en la sentencia de declaracin.

    C soporta varios tipos diferentes de datos, cada uno de los cuales puede ser

    representado de forma diferente dentro de la memoria de la computadora.

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    18/35

    Lenguaje C

    Tipos de Datos

    Tipos de Datos

    char

    Un caracter (letra)

    Ej.: a, z, ?, -

    Memoria: 1 byte

    Rango: -128..127

    short

    Cantidad entera pequea

    Ej.: -15

    Memoria: 2 bytes

    Rango: -3276832767

    int

    Cantidad entera

    Ej.: 5, 6, 3872

    Memoria: 4 bytes

    Rango: -21474836482147483647

    unsigned

    int

    Cantidad entera pequea

    Ej.: 4047565324

    Memoria: 4 bytes

    Rango: 04294967296

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    19/35

    Lenguaje C

    Tipos de Datos

    Tipos de Datos

    longCantidad entera grande

    Ej.: 15

    Memoria: 8 bytes

    Rango: -92233720368547758089223372036854775807

    floatPunto flotante

    Ej.: 5.4, 3.22, 7.6543

    Memoria: 4 bytes

    Rango: 1.175494351e383.402823466e38

    doubleDoble precisin de punto flotante.

    Ej.: 6.1e12, 1.7e-19

    Memoria: 8 bytes

    Rango: 2.2250738585072014e3081.7976931348623158e308

    long

    doubleDoble precisin de punto flotante.

    Ej.: 6.1e12, 1.7e-19

    Memoria: 16 bytes

    Rango: ?

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    20/35

    Lenguaje C

    Tipos de Datos

    La cantidad de memoria usada o el tamao del dato depende del tamao de palabra

    de la mquina para la cual est hecho el compilador en que se trabaje.

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    21/35

    Lenguaje C

    Tipos de Datos

    El tipo int puede tener los prefijos short, long y signed/unsigned.

    La interpretacin de estos prefijos vara de un compilador a otro, pero en forma

    general:

    short: Usa la mitad del tamao de un entero.

    long: Usa el doble del tamao de un tipo.

    signed: Con signo, del mismo tamao, se asume por defecto.

    unsigned: Sin signo. Slo los positivos.

    Tipos de Datos

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    22/35

    Lenguaje C

    En el lenguaje C, se utilizan operadores para representaroperaciones aritmticas.

    Por ejemplo, el operador + hace que se sumen los valores situados a su izquierda y

    derecha. Si a y b son variables del tipo entero (int) con valores 10 y 3

    respectivamente:

    Operadores

    a+b = 13

    Suma

    a-b = 7

    Resta

    a*b = 30

    Multiplicacin

    a/b=3

    Divisin

    a%b=1

    Mdulo(residuo)

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    23/35

    Lenguaje C

    Supongamos ahora que v1 y v2 son variables flotantes (float) cuyos valores son

    12.5 y 2.0, respectivamente. Veamos los resultados de las siguientes expresiones:

    Operadores

    v1+v2 =14.5

    Suma

    v1-v2 =10.5

    Resta

    v1*v2 =25.0

    Multiplicacin

    v1/v2=6.25

    Divisin

    v1%v2=Error!

    Mdulo(residuo)

    El operador % (mdulo, residuo)

    es entre enteros y no est

    definido para valores decimales.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    24/35

    Lenguaje C

    Aqu, supongamos que c1 y c2 son tipo caracter con los valores P y T,

    respectivamente. Veamos los valores de las siguientes operaciones:

    Operadores

    Fjese que el caracter P tiene el

    valor 80 como decimal, segn la

    tabla ASCII y T tiene el 84 y

    5 tiene el valor 53.

    Expresin Valor

    c1 80

    c1+c2 164

    c1+c2+5 169

    c1+c2+5 217

    c1%c2 80

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    25/35

    Lenguaje C

    Operadores

    En general, el resultado final de una operacin ser expresado en el tipo de dato

    de mayor precisin, relacionado con los tipos de datos de los operandos. Las

    siguientes reglas aplican para estos casos:

    Si ambos operandos son flotantes con diferente precisin, el operando de menorprecisin ser convertido a la del otro y el resultado ser expresado en la mayor

    precisin.

    Si un operando es flotante y otro es un caracter o un entero, el entero o el caracter

    sern convertidos a flotantes y el resultado ser flotante.

    Si no hay operandos flotantes, pero uno es long int, entonces el otro ser convertidoa long int y el resultado ser en long int.

    Si no hay operandos flotantes ni long int ambos operandos sern convertidos a

    enteros y el resultado ser un entero.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    26/35

    Lenguaje C

    Supngase que i es un entero cuyo valor es 7, f es un flotante cuyo valor es 5.5 y c

    es un caracter que representa el caracter w. Veamos los resultados de las

    siguientes expresiones:

    Operadores

    0 = 48

    w = 119

    Expresin Valor Tipo

    i + f 12.5 float

    i + c 126 int

    i + c0 78 int

    (i + c)(2 * f / 5) 123.8 float

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    27/35

    Lenguaje C

    El valor de una expresin puede ser convertido a un tipo de dato en especfico si as

    se desea. Esto se conoce como conversin de tipo. Simplemente la expresin (o

    variable) debe estar precedida por el tipo de dato deseado encerrado entre

    parntesis. En algunos casos es obligatorio hacer la conversin de tipo.

    Supongamos que i es una variable tipo entero cuyo valor es 7 y f es una variable

    flotante con un valor de 8.5.

    La expresin: (i + f) % 4 es invlida, porque el primer operando es flotante.

    Pero si la expresin fuese ((int) (i+f)) % 4, se est convirtiendo el resultado de (i+f)a entero.

    Si queremos hacer una conversin de tipo la forma es: (tipo)expresion.

    Operadores

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    28/35

    Lenguaje C

    Debemos tener claro que al hacer una conversin de tipo los datos se trabajan de

    acuerdo al tipo asignado en la conversin.

    Si por ejemplo tenemos i como entero con el valor de 2, x como flotante con el

    valor de 3.12, al evaluar: i+x tenemos 2+3.12, pero al evaluar i+(int)x tenemos 2+3.

    Al evaluar (float)i+x tenemos 2.0+3.12, adems i/x es 2/3.12 = 0 (toma el tipo del

    numerador por defecto) y (float)i/x es 2.0 /3.12=0.641025

    Operadores

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    29/35

    Lenguaje C

    Operadores Unarios

    Si la variable i es de tipo entero (int) con valor de 5:

    Operadores

    -i = -5

    Cambio deSigno

    i++ ++i= 6

    Incrementoen uno

    i-- --i = 4

    Decremendoen uno

    ++ ypueden ser utilizados prefijo o

    posfijo. Si es prefijo, la variable se

    incrementa/decrementa primero y luego de

    utiliza. En posfijo, se utiliza primero y en la

    siguiente sentencia se aplican los cambios.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    30/35

    Lenguaje C

    Operadores Relacionales y Lgicos

    Operadores

    Operador Significado

    < Menor que

    Mayor que

    >= Mayor o igual que

    == Igual a

    != Diferente a

    ! Negacin

    && Y lgico

    || O lgico

    En el lenguaje C no existe el tipo

    de dato booleano propiamente,

    pero C define como verdadero todo

    valor diferente de cero y como

    falso el valor cero.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    31/35

    Lenguaje C

    Supongamos que i, j y k son variables tipo entero con los valores 1, 2 y 3

    respectivamente. Veamos los valores de las siguientes expresiones:

    Operadores

    Expresin Interpretacin Valor

    i= k Verdadero 1

    (j+k) > (i+5) Falso 0

    k != 3 Falso 0

    j == 2 Verdadero 1

    !(j==2) Falso 0

    (i>=5) || (j%3) Verdadero 1

    (i

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    32/35

    Lenguaje C

    Operadores de AsignacinOperadores

    Operador Significado

    = Asigna el valor de la derecha a la variable que est a la izquierda.

    += Asigna el valor de la variable de la izquierda ms el valor de la

    derecha a la variable de la izquierda.

    -= Asigna el valor de la variable de la izquierda menos el valor de la

    derecha a la variable de la izquierda.

    *= Asigna el valor de la variable de la izquierda por el valor de la

    derecha a la variable de la izquierda.

    /= Asigna el valor de la variable de la izquierda entre el valor de la

    derecha a la variable de la izquierda.

    %= Asigna el residuo de la divisin de la variable de la izquierda con el

    valor de la derecha a la variable de la izquierda.

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    33/35

    Lenguaje C

    Supongamos que i, j y k son variables tipo entero con los valores 1, 2 y 3

    respectivamente. Veamos los valores de las siguientes expresiones:

    Operadores

    Expresin Valor de k

    k = i + j 3

    k = ij -1

    k += i+j 6

    k *= i+j 9

    k /= i+j 1

    k %= j 1

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    34/35

    Lenguaje C

    Orden de Precedencia de Evaluacin

    (de mayor a menor)

    Operadores

    Categoras Operadores Asociacin

    Unarios - ++ -- ! DI

    Multiplicacin, Divisin y Mdulo * / % ID

    Suma y Sustraccin + - ID

    Relacionales < >= ID

    Igualdad == != ID

    Y lgico && ID

    O lgico || ID

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

  • 7/30/2019 Introd. a la Algoritmia - Tema 3

    35/35

    Lenguaje C

    Operador Ternario ?:Generalmente se usa con un operador de asignacin, pero se puede usar en otros

    casos.

    Uso: Expresin ? VERDADERO : FALSE

    Si la expresin es verdadera retorna lo que est despus del ? (signo de

    interrogacin), y si no, lo que est despus del : (dos puntos).

    Operadores

    Si i, j y k son enteros con los

    valores 5, 6 y 8 respectivamente.

    Expresin Valor de k

    k = i>5 ? 6 : 4 4

    k += i