Está en la página 1de 76

Sebastián Rivas c

Compiladores

• Son programas que transforman el lenguaje de


programación a lenguaje de máquina.
• Entre ellos tenemos a:
1. visual C++
2. Borland C++
3. Turbo C
4. Dev C++
Visualizadores

• Son programas que permiten visualizar un


PROGRAMA. Se llaman entorno de desarrollo
integrado (IDE).
• Como lo es el IDE de arduino, de visual y de dev C.
Compilación y enlace

• Se requieren tres pasos para crear un archivo


ejecutable.
1. Escriba su programa de archivo en C. se le denomina
código fuente y debe terminar con la extensión .c
2. Después, el compilador de C compila el archivo de
código fuente y crea un nuevo archivo. Del tipo
objeto, con la extensión .obj
3. No es posible ejecutar el archivo objeto, debido a que
le falta cierto código de funciones.
• Es necesario concluir el siguiente paso, el enlace.
• Este se hace invocando a un programa especial
llamado enlazador, el cual viene normalmente con el
paquete del compilador.
Enlazador

• Se emplea para vincular el archivo objeto, la


biblioteca estándar de C y otras bibliotecas
generadas por el usuario para producir un archivo
ejecutable, el código binario.
• En esta etapa, el código binario de las funciones de
biblioteca que se llaman código fuente, se combina
con el archivo objeto y el resultado se guarda en un
nuevo archivo. Denominado ejecutable. Que
termina con la extensión .exe
Depuración de un programa

• A menudo ocurren errores cuando se ejecuta un


programa. Por la falta de un paréntesis u otra cosa.
• Todos los compiladores traen un depurador. El cual
ejecuta el programa línea por línea y lo analiza en
busca de errores.
PARTES DE UN PROGRAMA

• La directiva # include
• Archivos de encabezado
• Comentarios
• La función main
• La instrucción return
• La función exit
La directiva # include

• Es una directiva de preprocesador.


• Le indica al preprocesador que busque un archivo y
coloque el contenido de ese archivo en donde la
directiva # include lo indique.
• El preprocesador es un programa que hace
algunos preparativos para el compilador de C antes
de compilar su código.
Archivo de encabezado

• Son los archivos que se incluyen mediante la


directiva # include, como stdio.h
• Significa encabezado de entrada-salida estándar.
Debido a que van en la cabeza del programa.
• Contiene prototipos y macros para realizar
operaciones de entrada o salida de programa de C.
Paréntesis angulares y comillas

• Los paréntesis angulares < >, le solicitan al


preprocesador de C que busque un archivo de
encabezado en un directorio distinto del actual.
• Si por el contrario, desea que el preprocesador de
C busque en el directorio actual antes de otro
directorio, se colocan comillas dobles “ ”.
• Por lo regular el compilador determina donde se
guardarán los archivos de encabezado, al
momento de instalarlo. A esto se le conoce como
directiva include
La función main ()

• Todo programa de C debe tener sólo una.


• La puede colocar en cualquier parte de su
programa. Pero éste, partirá de ahí. Ya que ésta, es
la primera función que se ejecuta.
• El programa concluye cuando se han ejecutado
todas las instrucciones de main ().
El carácter de nueva línea (\n)

• Cuando quiera que parte del texto a imprimir en la


pantalla se escriba en la línea siguiente debe
colocar \n. de lo contrario, se agregará a
continuación del texto anterior.
• Se conoce como salto de línea.
La instrucción return

• En C todas las funciones devuelven valores.


• La función main ( ) por si misma devuelve un valor
entero.
• Si agregamos return 0, la función devuelve un valor
entero 0 y el programa termina normalmente.
La función exit ()

• En la biblioteca de C, existe la función exit.


• Se puede utilizar para terminar un programa.
• Esta definida en el archivo de encabezado como
stdlib.h. Por lo que, debe incluir este archivo para
poder usar la función.
• Esta función no devuelve ningún valor por si
misma.
Comentarios

• La computadora no los reconoce como código.


• Sino que solamente se muestran en pantalla como
ayuda contextual.
• Se escriben con /* para inicio de comentario y */
para cerrar.
• En otros IDE se escriben como //.
Estructura de un programa de C

• encabezado
• Constantes
• Variables
• Instrucciones
• Bloques de instrucciones
• Tipos y nombre de funciones de C
• Argumentos para funciones
• El cuerpo de la función.
• Llamada a funciones
Constantes y variables

• Una constante es un valor que no cambia. Por el


contrario una variable si lo hace.
• Ejemplos
• i=1;
• i es una variable, porque puede cambiar. Pero 1 es
una valor que no cambia.
expresiones

• Es una combinación de constantes, variables y


operadores que se emplean para denotar cálculos.
• A=(2+3)*10
operadores

• Se emplean para generar cálculos aritméticos y


lógicos.
• +, -, *, /, %(residuo)
• &, ||, < >, =
identificadores

• Son caracteres que sirven para identificar


expresiones.
• Ejemplos.
• Suma_entero
• No puede usarse caracteres reservados de C.
• + - / * % # “ ! & ( ) = ? ¿ ¡.
instrucciones

• En C una instrucción completa termina con ;


• En muchos casos, Ud. puede convertir una
expresión en una instrucción, agregando ;
• i=1;
• Return 0;
• exit ();
• printf ();
Sentencias
• Existen sentencias de varios tipos, que nos permitirán
enfrentarnos a todas las situaciones posibles en
programación. Estos tipos son:
• Bloques
• Expresiones
• Llamada a función, Asignación, Nula
• Bucles
• While, do...while, for
• Etiquetas
• Etiquetas de identificación, case, default
• Saltos
• Break, continue, goto, return
• Selección
• if...else, switch
• Comentarios
Bloque de instrucciones

• Un grupo de instrucciones puede formar un bloque,


siempre y cuando comience con una llave de
apertura y termine con una de cierre.
• for (…..)
{
• S3=s1+s2;
• Mul=s3*C;
• Residuo=s3*c;
}
Anatomía de una función de C

• Las funciones son bloques de instrucciones de los


programas de C. Además de las funciones de
biblioteca estándar de C, puede utilizar en su
programa funciones hechas por Ud. mismo o por
otro programador.
• La anatomía es la siguiente:
Determinación del tipo de función

• Se emplea para indicar el tipo de valor que


devolverá dicha función.
• Int= entero.
• Float=decimal.
• Char= carácter.
Como asignar un nombre válido a
una función
• Debido a que un nombre de una función es un
identificador, al crear sus propias funciones y darles
nombre, debe seguir las reglas para crear
identificadores válidos.
• Además, no puede utilizar nombres de las
funciones estándares de C.
Paso de argumentos a las funciones
de C
• Son útiles, ya que puede llamarlas una y otra vez. Desde
cualquier parte del programa.
• Las piezas de información que se pasan a las funciones
se conocen como argumentos.
• Este siempre va entre paréntesis.
• El numero de argumentos de una función lo determina la
declaración de dicha función y la declaración termina la
tarea que va a realizar la función.
• Si una función requiere mas de un argumento, los
argumentos que se le pasen a la función deberán estar
separados por comas. Se les llama lista de argumentos.
• si no requiere pasar argumentos a la función déjela en
blanco.
Principio y fin de una función

• Las llaves de apertura y cierre marcan el cuerpo de


la función. O de un bloque de instrucciones.
Cuerpo de la función

• Es el lugar que contiene las declaraciones de


variables y otras instrucciones de C.
• La tarea de una función se lleva a cabo mediante la
ejecución de las instrucciones, una a la vez, que se
encuentran dentro de un cuerpo.
• Es importante recordar que toda declaración de
variable se debe colocar al principio del cuerpo de
la función.
Como llamar funciones

• El siguiente ejemplo indica como llamar a una


función:
ejercicios

• 1. dadas las dos instrucciones, x=3; y=5+x;


• ¿Como puede generar con ambas, un bloque de
instrucciones?
2. Escriba una función de C, que pueda multiplicar
dos enteros y devolver el resultado.
3. Escriba un programa en C, que llame a la función
de C que acaba de escribir en el ejercicio anterior,
para calcular la multiplicación de 3*5 e imprimir
después en la pantalla el valor de retorno de la
función.
Mas ejercicios
• Imprimir en pantalla los números del 1 al 100. ok

• Imprimir en pantalla los pares del 1 al 20.

• Imprimir en pantalla los impares del 1 al .

• Imprimir en pantalla los primos del 1 al 100.

• Imprimir en pantalla la serie de Fibonacci. suma al


número actual el anterior.
• 1 1 2 3 5 8 13 21…. 100
tipos de datos y palabras reservadas

Existen 4 tipos de datos en C:


1. Char
2. Int
3. float
4. double
Palabras reservadas de C

• auto const double float int


short struct unsigned break continue
• else for long signed switch
void case default enum goto
• register sizeof typedef volatile char
do extern if return static
• union while
Tipo de datos char

• Un objeto del tipo de datos char representa un solo


carácter del conjunto de caracteres que utiliza su
computadora. Por ejemplo A es un carácter y a
también lo es, pero 5 es un numero.
• Sin embargo la pc solo puede almacenar códigos
numéricos. Por tanto, los caracteres tienen un
código numérico único que utilizan las
computadoras. Por regular un carácter ocupa 8
bits.
• El código ASCII permite representar todos los
caracteres, mediante código numérico.
Variables de tipo carácter

• Una variable que puede representar diferentes


caracteres se llama variable de tipo carácter.
• Puede asignar el tipo de dato char a una variable
mediante el siguiente formato de declaración:
• char nombrevariable;
• En donde nombrevariable es el nombre que Ud.
proporciona y en el que se almacenaran los valores
de este tipo.
• Char x, y, z;
• x=‘A’;
• y=‘f’;
• z=‘7’;//se le asigna el valor de 7 que representa al
carácter y no el valor numerico.
Constantes de carácter

• Un carácter encerrado en comillas simples se llama


constantes de carácter.
• Ejemplo ‘a’
• Las cadenas de caracteres utilizan comillas dobles.
• Ejemplo “mi mundo de programación”
El carácter de escape (\)

• Se emplea para indicarle a la computadora que


sigue un carácter especial. Por ejemplo, cuando ve
\n, le indica a la computadora que tiene un salto de
línea y retorno de carro.
• \b: retroceso.
• \f :salto de pagina.
• \r: regreso al principio de línea actual.
• \t: avanza un espacio.
Impresión de caracteres.
• La función printf ( ) definida en el archivo de
encabezado como stdio.h se puede utilizar
para imprimir mensajes en la pantalla.
• El especificador de formato %c indica a la
función printf ( ) que el argumento por
imprimir es un carácter.
• Programing Street: Tabla de funciones de la librería
estandar - stdio.h (programing-street.blogspot.com)
Librerías de directorio de C

• Un directorio es un tipo exclusivo de archivo que


sólo contiene la información necesaria para
acceder a archivos o a otros directorios.
• En consecuencia, un directorio ocupa menos
espacio que otros tipos de archivos.
• Los sistemas de archivos se componen de grupos
de directorios y de los archivos que se encuentran
dentro de los directorios.
Manejo de datos

Operadores de asignación aritmética


Operadores de negación
Operadores de incremento/decremento
Operadores relacionales
Operadores de conversión.
Asignación aritmética (=)

• int sensor= potenciómetro;


• A la variable sensor se le asigna el operando
potenciómetro y éste queda grabado en la memoria
como tal.
• A=5; se le asigna a A el valor de 5;
• C=3+5;
• Al operando C, se le traspasa el operando de la
suma de 3+5.
• Si quisiera sumar x=x+y, puede reescribirse como
x+=y;
Combinación de operadores de
asignación.
• += operador de asignación suma.
• -= operador e asignación resta.
• *= operador de asignación producto.
• /= operador de asignación división.
• %= operador de asignación residuo.
• ejemplo
Incremento/decremento en una
unidad
• Son prácticos cuando se desea sumar unidades a
una variable, para contar o descontar.
• El símbolo de incremento/decremento es ++/--.
• Ejemplo
• x=x+1, como x++;
• ++x, es un pre incremento. Es decir, primero suma
1 a x y después produce el nuevo valor de x.
• El ejemplo siguiente ilustra esta situación.
Operador de conversión explicita

• La forma general del operador de conversión


explicita es:
• (Tipo de datos) x
• Aquí tipo de datos especifica el nuevo tipo de dato
que desea. X es una variable de un tipo de datos
diferente. Para formar un operador de conversión
explicita se deben incluir los paréntesis (y)
alrededor del nuevo tipo de datos.
• Ejemplo (float) 5, convierte el entero 5 a punto
flotante, 5.0
objetivo

• Conocer principios básicos de programación.


• Sentencias.
• Ciclos.
• Arreglos.
• Cadenas.
• Determinar las necesidades del cliente, en lo que
se refiere a problemas de control de procesos.
TRABAJO PRACTICO 1

• A LOS EJEMPLOS QUE SE DEN EN CLASES.


REALIZAR LAS MODIFICACIONES
SOLICITADAS.
• CONFECCIONAR UN INFORME EN FORMATO
INSTITUCIONAL, INDICANDO LOS PROBLEMAS
BASE CON SUS RESPECTIVAS
MODIFICACIONES.
• FECHA ENTREGA ………………. SUBIRLO A LA
PLATAFORMA EN PRACTICO 1.
Instrucciones condicionales.
sentencias
• La sentencia if else se le conoce como estructura de
selección simple y su función es realizar o no una
determinada acción o sentencia, basándose en el
resultado de la evaluación de una expresión (verdadero
o falso), en caso de ser verdadero se ejecuta
la sentencia.
• If(expresión)
• {
Sentencia
}
Else
{
sentencia
}
Como trabaja

• La estructura de selección if (que se muestra en la figura


5.1) trabaja de la siguiente manera: si la evaluación de
la expresión o expresiones es verdadera ( 1 ) entonces se
ejecuta la sentencia a la cual se refiere la estructura de
control if.

if (<condicion>)
{ sentencias cuando SI se cumple;
}
else
{ sentencias cuando NO se cumple;
}
ejemplo
El programa siguiente, lee el valor actual de un botón y si el valor es
alto energiza una lámpara.

int led2=3;
int BOTON=2;
void setup()
{
pinMode(BOTON, INPUT);
pinMode(led2,OUTPUT);
}
void loop()
{
if (digitalRead (BOTON)==HIGH)
{
digitalWrite(led2,HIGH);
}
else
{
digitalWrite (led2, LOW);
}
}
MODIFICACION EJEMPLO 1

• El programa siguiente, lee el valor actual de un


botón y si el valor es alto energiza una lámpara.
• Hacer que al presionar el botón:
• 1 veces la lámpara se encienda.
• 2 veces la lámpara se apague.
• Se repita el ciclo.
Ejemplo 2. contador
Este programa • int boton=2;
cuenta el número • int estado=0;
de veces que el • void setup()
botón se ha • {
• pinMode(2, INPUT);
pulsado. La idea es
• pinMode(9, OUTPUT);
que se encienda
• }
una lámpara al
• void loop()
pulsar el botón la
• {
primera vez y se
• int actual=digitalRead(boton);
apague la segunda • if(actual!=estado)
vez. • {
• if(actual==HIGH)
• {
• conta++;
• }
• }
Modificación ejemplo 2

Después de 10 ciclos de trabajo del circuito. Bloquee


el botón para que ya no comande mas la lámpara, es
decir, no se pueda encender ni apagar.
FOTOCELDA
• Este código captura valores de luminosidad
provenientes de la ldr. Y los almacena en la
variable sensor1.

int LDR =A1;


int led1 = 2;
int sensor1 = 0;
void setup()
{
Serial.begin(9600);
pinMode(led1, OUTPUT);
}

void loop()
{
Serial.println(sensor1);
sensor1 = analogRead (LDR);
}
MODIFICACION

• LA IDEA ES QUE SE ENCIENDA UN LED


CUANDO EL VALOR DE LA LUMINOSIDAD ESTE
ENTRE DETERMINADOS VALORES. POR
EJEMPLO ENTRE 300 Y 350
ciclos

• While
• Do while
• for
Ciclo for
• La forma general del ciclo for es:
• for(expresion1, expresion2, expresion3)
• Instrucción;
• Ó bien
• for(expresion1; expresion2, expresion3)
{
Instruccion1;
Instruccion2;
}
• Un ciclo for puede controlar una sola instrucción o
varias dentro de llaves.
• La primera vez que se ejecuta el ciclo, Evalúa la
primera expresión, que por lo general se usa para
inicializar una o mas variables.
• La segunda expresión actúa del mismo modo que la
condicional del while, se evalúa inmediatamente
después de la primera expresión y finalmente ejecuta la
tercera expresión.
• La tercera expresión no se evalúa la primera vez, pero
si después de cada iteración y antes de que la
instrucción verifique de nuevo la expresion2.
ejemplo
Ciclo FOR
• Este tipo de ciclo es muy útil para control de equipos
eléctricos. En este caso la lampara aumenta
paulatinamente su brillo.
int led=3;
int brillo;
int sensor=A0;
int valorsensor=0;
void setup()
{
Serial.begin(9600);
pinMode(led, OUTPUT);
}
void loop()
{
Serial.println(valorsensor);
valorsensor = analogRead(sensor);
for(brillo=0; brillo<256;brillo++)
{
analogWrite(led, brillo);
delay(10);
}
}
modificación

• A partir del ejemplo anterior. Haga que la lámpara


aumente y disminuya su brillo constantemente.
Mando servo por potenciómetro
• La idea es controlar el sentido de giro del servo con
un potenciómetro. De tal manera que si se gira el
pot a la derecha el servo gire a la derecha y
siguiente.
#include <Servo.h
Servo servo1;
int PINSERVO = 2
int PULSOMIN=1000;
int PULSOMAX=2000; int VALORPOT;
int ANGULO;
int POT=0;
void setup()
{
servo1.attach(PINSERVO, PULSOMIN, PULSOMAX); }
void loop()
{
VALORPOT=analogRead(POT);
ANGULO=map(VALORPOT, 0, 1023, 0, 180);
servo1.write(ANGULO);
delay(20);
}
modificación

• A partir del ejemplo anterior, permita que el servo


se controle con la intensidad de la luz. A través de
una ldr. Es decir, si hay mucha luz la persiana debe
cerrarse y viceversa. Manteniendo la intensidad
luminosa constante.
funciones
• Son muy útiles cuando los código son extensos y
contienen líneas repetitivas.
int LED=13; int tiempo=1000;
void setup()
{
pinMode(LED, OUTPUT);
}
void loop()
{
encender(); apagar();
}
void encender()
{
digitalWrite(LED, HIGH); delay(tiempo);
}
void apagar()
{
digitalWrite(LED, LOW); delay(tiempo);
}
Modificación

• Cuando se quiere emplear un visualizador de 7


segmentos, las líneas de código para manejar
dichos números, suelen ser extensos y llevan a
cometer errores en la programación. Una de las
formas de dar solución a esto es usar funciones
para cada numero. Por lo tanto su tarea será
emplearlas en un proyecto que incluya
visualización numérica.
while
• La finalidad, es ejecutar una instrucción una y otra vez
mientras que una condición se cumpla o sea verdadera.
• Cuando ya no lo es, el ciclo termina y continúa con la
siguiente instrucción.
• La forma general del ciclo es:
• while (expresión)
• Instrucción;
• Ejemplo Fibonacci
FOTOCELDA
• Este código captura valores de luminosidad
provenientes de la ldr. Y cuando la luminosidad
esta dentro de un determinado valor enciende una
lámpara.
int LDR =A1;
int led1 = 2;
int sensor1 = 0;
void setup()
{
Serial.begin(9600);
pinMode(led1, OUTPUT);
}

void loop()
{
Serial.println(sensor1);
sensor1 = analogRead (LDR);
}
FOTOCELDA
• Este código captura valores de luminosidad
provenientes de la ldr. Y los almacena en la
variable sensor1.
int LDR =A1;
int led1 = 2;
int sensor1 = 0;
void setup()
{
Serial.begin(9600);
pinMode(led1, OUTPUT);
}
void loop()
{
Serial.println(sensor1);
sensor1 = analogRead (LDR);
while(sensor1>=500)
{
digitalWrite(led1, HIGH);
}
}
Modificación programa anterior

• Si la luminosidad esta bajo un determinado valor


encender un led y si está sobre otro valor apagar la
lámpara.
problema

• Usando el ciclo WHILE. Diseñar un programa que


liste la serie de Fibonacci, por lo menos hasta una
cantidad de números como mínimo.
• La serie de Fibonacci suma al numero anterior el
actual y asi sucesivamente.
• 1 1 2 3 5 8 11 19 30 49
Control proporcional

• Confeccione un programa en Arduino capaz de


realizar control proporcional de temperatura o nivel.
• Debe realizar sólo la programación del código
fuente.
Operadores condicionales

• Sizeof
• Lógicos
• De manipulación de bits
• Condicional
sizeof
Para reservar memoria se debe saber exactamente el número
de bytes que ocupa cualquier estructura de datos. Tal y como
se ha comentado con anterioridad, una peculiaridad del
lenguaje C es que estos tamaños pueden variar de una
plataforma a otra. ¿Cómo sabemos, entonces, cuántos bytes
reservar para una tabla de, por ejemplo, 10 enteros? El propio
lenguaje ofrece la solución a este problema mediante la
función sizeof().
La función recibe como único parámetro o el nombre de una
variable, o el nombre de un tipo de datos, y devuelve su
tamaño en bytes. De esta forma, sizeof(int) devuelve el
número de bytes que se utilizan para almacenar un entero. La
función se puede utilizar también con tipos de datos
estructurados o uniones tal y como se muestra en el siguiente
programa (que te recomendamos que te descargues, compiles
y ejecutes):
#include <stdio.h>
#define NAME_LENGTH 10
#define TABLE_SIZE 100
#define UNITS_NUMBER 10
struct unit
{ /* Define a struct with an internal union */
int x;
float y;
double z;
short int a;
long b;
union
{ /* Union with no name because it is internal to the
struct */
char name[NAME_LENGTH];
int id;
short int sid;
}
identifier;
};
int main(int argc, char *argv[])
{ int table[TABLE_SIZE];
struct unit data[UNITS_NUMBER];
printf("%d\n", sizeof(struct unit)); /* Print size of
structure */
printf("%d\n", sizeof(table)); /* Print size of table
of ints */
printf("%d\n", sizeof(data)); /* Print size of table
Operadores lógicos

• And
• Or
• Not
sintaxis

Se usan para evaluar la veracidad, un valor diferente


de cero o la negación de una situación
El operador and
Sintaxis:
(expresion1&&expresion2)
El operador or
Sintaxis:
(expresion1||expresion2)
El operador not
Sintaxis:
(!expresión)
Control PI

• Confeccione un sistema de control de temperatura


proporcional integral. Con las mismas
características.
Trabajo practico 2

• Confeccione un sistema de control PI para una


planta de temperatura o nivel. Empleando una
plataforma de desarrollo Arduino.

También podría gustarte