Programación en C

Informática. Potencia y control. Compiladores. Ensambladores. Montador. Cargador. Constantes. Variables. Operadores. Asignación. Ficheros

  • Enviado por: Luixi
  • Idioma: castellano
  • País: España España
  • 88 páginas
publicidad

MAITRISE EN SISTEMAS DE POTENCIA Y CONTROL ELECTRONICO


- INTRODUCCIÓN.

1.1.- HISTORIA.

  • Creado por Denis Ritchie, de los laboratorios Bell, en 1972.

  • Muy ligado con el sistema UNIX.

  • Se deriva del lenguaje B de Thompson.

  • Se trata de un lenguaje de Medio Nivel. Está entre los de Bajo Nivel (L. Ensambladores) y los de Alto Nivel (L. Pascal, L. Basic...)

  • El C se ha utilizado para desarrollar programas como:

  • - Sistemas Operativos.

    - Compiladores

    - Ensambladores.

    - Editores de texto.

    - Programas Comunicaciones

    - Bases de datos.

    - Utilidades...

    Virtudes del C:

    - Es PORTATIL

    - Es FLEXIBLE.

    - Es POTENTE.

    • C dispone de pocos tipos de datos en comparación con otros lenguajes (Ej: Pascal)

    • En ejecución no hace chequeo de errores, es responsabilidad del programador.

    • C permite la manipulación directa de bits, bytes, palabras y punteros.

    • Sólo tiene 28 palabras clave.

    1.2.- COMPILADORES, ENSAMBLADORES E INTÉRPRETES.

    Alto Nivel.

    Medio Nivel.

    Bajo Nivel

    Bajo Nivel.

    HARDWARE

    COMPILADORES.

    • Traducen un texto, expresado en un Lenguaje de Alto (Medio) Nivel, antes de permitir la ejecución.

    • La traducción se realiza de todo el texto.

    • Se traduce a Lenguaje Máquina.

    • Al texto origen se le llama Código Fuente.

    • Al texto traducido se le llama Código Objeto.

    ENSAMBLADORES.

    • Traducen todo un texto escrito en Lenguaje Ensamblador en su equivalente en Lenguaje Máquina.

    INTÉRPRETES.

    • Traducen y Ejecutan una a una las instrucciones de un programa escrito en un Lenguaje de Alto Nivel.

    • Requiere el paso previo de traducción de cada instrucción a lenguaje máquina pero sin producir un código objeto.

    1.3.- MONTADOR, CARGADOR.

    PROGRAMA MONTADOR.

    • Convierte uno o varios módulos objeto en un único módulo ejecutable.

    • Se le asignan las funciones siguientes:

    • Reubicar módulos a su zona de ejecución.

    • Resolver las referencias externas de los módulos.

    • Desde el punto de vista de la programación es muy interesante la utilización de librerías de programas (pueden ser de uso general, operaciones aritméticas en coma flotante, operaciones trigonométricas,...)

    PROGRAMA CARGADOR.

    • Lee un fichero ejecutable de un medio de almacenamiento externo y lo traspasa a memoria principal, para proceder a su ejecución.

    • Debe trabajar con el formato de salida del montador.

    • En muchas aplicaciones interesa que el cargador sea reubicador para que pueda posicionar el programa en la zona de memoria deseada.

    • El Programa Cargador también debe tener un sistema de detección / corrección de errores para asegurar que el traspaso se produzca sin alteración de la información.

    • Los pasos que daremos para trabajar en C:

    • Utilizar un editor ASCII para escribir el programa C.

    El nombre del fichero terminará en ____ . c.

    Ejemplo: xxxx . c

    • Compilar el programa. En UNIX se tecleará.

    $ cc xxxx . c (nombre del fichero que contiene el programa)

    Se genera un programa ejecutable llamado: a . out

    Sobre DOS el proceso de compilación va en función del compilador utilizado: Turbo C, Microsoft C, Borland C, C++, ...


    CONSTANTES, VARIABLES Y TIPOS.

    2.1. IDENTIFICADORES.

    • Las variables y constantes son los objetos básicos que se manipulan en un programa.

    • Las variables y constantes se denominan por nombres. Estos se construyen con letras y dígitos. El carácter de subrayado “-“ se considera igual que una letra.

    • El primer carácter de un nombre debe ser una letra.

    • Las letras mayúsculas y minúsculas son diferentes.

    • En la práctica se utilizan:

    • Mayúsculas para nombres de constantes.

    • Minúsculas para nombres de variables.

    • Dependiendo del compilador admite más o menos caracteres para los nombres, lo habitual es 8.

    • Los nombres se seleccionan de forma que sean significativos para atender el sentido de la variable o constante.

    • Los nombres no deben coincidir con las palabras reservadas. Estas son:

    auto

    Double

    If

    Static

    break

    Else

    Int

    Struct

    case

    Entry

    Long

    Switch

    char

    Extern

    Register

    Typedef

    continue

    Float

    Return

    Union

    Default

    For

    Short

    Unsigned

    do

    goto

    sizeef

    While

    2.2. TIPOS DE DATOS.

    • Los básicos son:

    Char: Un byte (octeto) capaz de contener un carácter.

    Int: Un entero, normalmente de 16 bits.

    Float: Un número en coma flotante, normalmente de 32 bits.

    Double: Un número en coma flotante de doble precisión, normalmente de 64 bits.

    • Además hay 3 calificadores que se aplican sobre enteros:

    Short: Entero corto, se representa sobre 8 bits; Short int.

    Long: Entero largo, se representa sobre 32 bits; long int.

    Unsigned: Entero sin signo. Son siempre positivos que se gobiernan por las leyes de la aritmética de módulo 2n; unsigned int.

    • Aunque la resolución depende de la máquina, en general:

    • Tipo

      Nº bits

      Rango

      Char

      8

      0 a 255 (28 = 256)

      Int

      16

      -32.768 a 32.767

      Short int

      8

      -128 a 127

      Unsigned int

      16

      0 a 65.535

      Long int

      32

      - 4.294.967.296 a 4.294.967.295

      Float

      32

      6 o 7 cifras decimales y un rango de ±(10-37 a 1038) **

      Double

      64

      " 12 cifras decimales y un rango de ±(10-37 a 1038) **

      (**) Puede ser mayor en función del ensamblador.

      2.3. CONSTANTES.

      TIPO CHAR

      • Ejemplo: Asignar a la constante LETRA el valor A:

      Char LETRA = 65;

      Char LETRA = `A';

      TIPO INT (SHORT, LONG, UNSIGNED)

      • Ejemplos de definiciones:

      Int COLOR = 7;

      Int MESES = 12, DIAS =7, HORAS = 24;

      Short int COLOR = 7;

      Short COLOR = 7;

      Long int DATO = -41728;

      Long DATO = -41728;

      Unsigned int MAXIMO = 10000;

      Unsigned MAXIMO = 10000;

      • Si el valor de un constante int se sale de rango automáticamente el compilador la pasará a long.

      • Si el valor de una constante long se puede representar como int automáticamente lo hará el compilador. Para evitarlo se añade L. Ejemplo:

      Long DATO = 33L

      • Los números se pueden representar en otras bases:

      Hexadecimal 0x10000 o bien 0X10000

      Octal 074

      • Las siguientes definiciones son similares:

      Int DATO = 16;

      Int DATO = 0x10;

      Int DATO = 020;

      TIPOS FLOAT Y DOUBLE.

      • Algunos casos de representaciones válidas:

      3,14159 .2 4e16 .8e-5 100

      • Ejemplos de definiciones:

      Float VALOR = 32000.0;

      Double VALOR = 32000.0;

      • ¿Qué ocurre si al realizar alguna operación nos salimos de rango?. Depende del compilador, en general:

      - En exceso: detiene el programa generándose código de error.

      - Por defecto: Se sustituye por 0.

      2.4. DECLARACIONES.

      • Todas las variables deben de ser declaradas antes de utilizarlas.

      • Una declaración específica un tipo, y le sigue una lista de una o más variables de ese tipo. Ejemplos de definiciones:

      Int SUPERIOR;

      Int INFERIOR;

      Int SUPERIOR, INFERIOR, PASO =

      Int PASO;

      Char LETRA, INDICE; =

      Char LETRA;

      Float VALOR, CANTIDAD =

      Char INDICE;

      Float VALOR;

      Float CANTIDAD;

      Nota: Aunque ocupa más líneas es más conveniente porque permite añadir un comentario a cada declaración y porque es más fácil realizar modificaciones posteriores:

      • La forma de indicar comentarios es:

      /* aquí viene el comentario */

      • Las variables se pueden inicializar a un valor (igual que la definición de constantes). Ejemplo:

      Int SUPERIOR = 40;

      • Las variables no inicializadas toman valores indefinidos.

      EJERCICIOS

      1.- ¿Qué tipo de dato se utilizaría para expresar las cantidades siguientes?

      La población de Mislata.

      El peso de una pintura de Rembrandt.

      La inicial de un nombre.

      El nº de veces que aparece esa inicial en un capítulo de libro.

      2.- Seguidamente se presentan unos valores para constantes. Asignar el valor y dar nombre; seguir el criterio de ahorrar memoria:

      -12

      ABC

      C

      2.347x107

      37

      3.34

      6

      65530

      DECIMAL

      HEXAD

      LETRA

      OCTAL

      FORMATO 32 BITS

      3.- Dadas las definiciones siguientes, indicar las que son correctas e incorrectas, para estas últimas indicar cuál es el error.

      Unsigned int = 28000;

      Int nom1 = 33.24;

      Char nom2 = M;

      Double nom3 = -34e-7; /*definición de constantes/*

      Short int nom4 = 128;

      4.- Comentar si existe alguna diferencia entre las variables nom1 y nom2 cuando se ejecute la sentencia siguiente:

      int nom1, nom2 = 1000;

      2.5. OPERADORES: ARITMÉTICOS, RELACIONALES Y LÓGICOS.

      OPERADORES ARITMÉTICOS.

      • Son los siguientes:

      • Operador

        Acción

        -

        Resta y menos unitario.

        +

        Suma

        *

        Multiplicación

        /

        División

        %

        Módulo división (resto división)

        • La división entera trunca cualquier parte fraccionaria. Ejemplo:

        Int num1 = 7;

        Int num2 = 3;

        Int num3 = 6;

        7

        3

        6

        3

        1

        2

        0

        2

        El resultado de num1 / num2 es 2.

        El resultado de num3 / num2 es 2.

        El resultado de num1 % num2 es 1.

        El resultado de num3 % num2 es 0.

        • El operador % no puede utilizarse con operadores del tipo float o double.

        • Las acciones que se aplican en caso de desbordamiento (overflow) o “underflow” varían en cada compilador.

        OPERADORES RELACIONALES.

        • Son los siguientes:

        • Operador

          Acción

          >

          Mayor que

          >=

          Mayor o igual que

          <

          Menor que

          <=

          Menor o igual que

          ==

          Igual

          !=

          Distinto

          • Al evaluarse una expresión relacional se devuelve:

          1 : si la relación se cumple, es CIERTA.

          0 : si la relación NO se cumple, es FALSA.

          • Ejemplo:

          Int num1 = 7;

          Int num2 = 3;

          El resultado de num1 > num2 es 2 es.

          1

          El resultado de num1 >= num2 es 1 es.

          1

          El resultado de num1 < num2 es 2 es.

          0

          El resultado de num1 <= num2 es 0 es.

          0

          El resultado de num1 == num2 es 2 es.

          0

          El resultado de num1 = num2 es 0 es.

          1

          NOTA: En C cualquier valor " 0 se considera como VERDADERO (true), aunque lo habitual es asignar a VERDADERO el 1.

          OPERADORES LÓGICOS.

          • Son los siguientes:

          • Operador

            Acción

            &&

            AND

            ||

            OR

            !

            NOT

            • Al evaluarse una expresión lógica se devuelve:

            1 : VERDADERO.

            0 : FALSO.


            Op1

            &&

            Op2

            Resultado

            Op1

            ||

            Op2

            Resultado

            !Op1