curso 0: programación - mastergraficos.com · printf : es una llamada a una función de...
Post on 08-Oct-2018
220 Views
Preview:
TRANSCRIPT
PROGRAMACIÓNPROGRAMACIÓN
Curso 0: Programación
Alberto Sánchez <alberto.sanchez@urjc.es>Alberto Sánchez <alberto.sanchez@urjc.es>
Escuela Técnica Superior de Ingeniería Informática 1
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares2
PROGRAMACIÓN
DefinicionesPROGRAMACIÓN
O d d á i i i t li i i fi lid dOrdenador: máquina sin inteligencia propia, cuya finalidad es interpretar el código (instrucciones) que se les proporcionaLenguaje máquina: lenguaje que la computadora "entiende" y g j q g j q p yes capaz de ejecutar (Os y 1s)Lenguaje de programación: medio de comunicación entre el programador y el ordenador El programador escribe en algúnprogramador y el ordenador. El programador escribe en algún lenguaje de programación y utiliza las herramientas provistas (compiladores, etc.) por ese lenguaje para transformarlo en lenguaje máquinalenguaje máquina.Programa: secuencia de órdenes a ser ejecutadas por el ordenador escrito en algún lenguaje de programaciónAlgoritmo: secuencia de instrucciones que permiten obtener un resultado en particular. Ej: receta de cocina
Escuela Técnica Superior de Ingeniería Informática 3
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares4
PROGRAMACIÓN
Características del lenguaje CPROGRAMACIÓN
C es uno de los lenguajes de programación más extendidos hoy en día
Historia de C:Historia de C:1970 Bell desarrolla un nuevo S.O. para PDP‐11 ‐> UNICS ‐> UNIX. Difícil de programar en PDP‐11p g
1972 Dennis Ritchie diseña el lenguaje de programación C
Fabricantes crean sus propios compiladores ‐> pérdida de p p p pportabilidad
1980 Estandarización de C. ANSI C
1983 surge C++, versión de C orientada a objetos (Bjarne Stroustrup)
Escuela Técnica Superior de Ingeniería Informática 5
PROGRAMACIÓN
Características de CPROGRAMACIÓN
SencillezEstructurado: su esquema de programación es imperativo vs. Orientado a objetos (C++, Java, …). C i t ibi i d i t iConsiste en escribir una secuencia de instrucciones una detrás de la otra, las cuales se ejecutarán en orden.Compilado Las órdenes son transformadas a lenguajeCompilado. Las órdenes son transformadas a lenguaje máquina que se almacena en un archivo ejecutable.Potente. Aunque es un lenguaje de alto nivel, tienePotente. Aunque es un lenguaje de alto nivel, tiene capacidades de bajo nivel
Un lenguaje es de bajo nivel cuanto más cercano esté al código máquina. Un lenguaje que es de alto nivel cuanto más cercano esté del lenguaje humano.
Escuela Técnica Superior de Ingeniería Informática
lenguaje humano.
6
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares7
PROGRAMACIÓN
Programación estructuradaPROGRAMACIÓN
La programación estructurada sigue tres reglas: Secuencia: las instrucciones del código se leen una detrás de otra
Iteración: según cierta condición, un número de i t i d ti d t i d dinstrucciones puede repetirse un numero determinado de veces
Decisión: según ciertas condiciones se ejecutan o no unDecisión: según ciertas condiciones se ejecutan o no un conjunto de instrucciones
Escuela Técnica Superior de Ingeniería Informática 8
PROGRAMACIÓN
Estructura de un programaPROGRAMACIÓN
En la programación estructurada tiene que existir un inicio y un fin perfectamente definido de acuerdo al diagrama de flujo del pe ecta e te de do de acue do a d ag a a de ujo deprograma
Un programa bien estructurado debería tener algún subprograma
Escuela Técnica Superior de Ingeniería Informática
Un programa bien estructurado debería tener algún subprograma que capture cualquier error dentro del programa
9
PROGRAMACIÓN
Primer programaPROGRAMACIÓN
#include <stdio.h>#include <stdio.h>
int main() {{printf(“Hola mundo\n”);return 0;
}
#include : es una directiva de preprocesador. Lo que
}
p p qhace es copiar todo el código del archivo stdio.h y pegarlo en esa línea.int main(): es la función que hace de punto de entrada del programa. Todo programa en C debe
Escuela Técnica Superior de Ingeniería Informática
tener una función main. 10
PROGRAMACIÓN
Primer programaPROGRAMACIÓN
#include <stdio.h>#include <stdio.h>
int main() {{printf(“Hola mundo\n”);return 0;
}
printf : es una llamada a una función de biblioteca,
}
printf : es una llamada a una función de biblioteca, que imprime un string en la pantalla.
“Hola mundo\n”: es un string constante El caracterHola mundo\n : es un string constante. El caracter ‘\n’ indica un salto de línea.
t l l d t d l f ió
Escuela Técnica Superior de Ingeniería Informática
return: es el valor de retorno de la función.
11
PROGRAMACIÓN
Primer programaPROGRAMACIÓN
#include <stdio.h>#include <stdio.h>
int main() {{printf(“Hola mundo\n”);return 0;
}
Las sentencias acaban en ‘;’
}
Las sentencias acaban en ;
Las llaves { } se utilizan para definir bloques de código que forman el cuerpo de determinadas sentenciasque forman el cuerpo de determinadas sentencias, en este caso una función.
Escuela Técnica Superior de Ingeniería Informática 12
PROGRAMACIÓN
ComentariosPROGRAMACIÓN
Comentario: líneas de texto que el compilador o el intérprete no consideran como parte del código, con lo cual no están sujetas a restricciones de sintaxis. Sirven para aclarar partes de código en posteriores lecturas y, en general, para anotar cualquier cosa que el programador considere oportuno.
Es una prioridad documentar el código fuente ya que al momento de depurar ahorra mucho tiempo de análisis para su corrección o estudio.
Escuela Técnica Superior de Ingeniería Informática 13
PROGRAMACIÓN
ComentariosPROGRAMACIÓN
#include <stdio.h>
/* Punto de entradadel programa */p g /int main() {//Llamada a printf//Llamada a printfprintf(“Hola mundo\n”);return 0;
}
Se pueden introducir comentarios dentro del código.
}
Se pueden introducir comentarios dentro del código.
Con // se introduce un comentario de una sola línea.
C /* */ i t d t i ltilí
Escuela Técnica Superior de Ingeniería Informática
Con /* y */ se introducen comentarios multilínea.
14
PROGRAMACIÓN
Proceso de construcciónPROGRAMACIÓN
Preprocesado: Las directrices que comienzan por # son directrices del preprocesador. Son interpretadas por el preprocesador, normalmente con sustituciones.
Compilación: El código fuente ya preprocesado seCompilación: El código fuente ya preprocesado se transforma en código máquina.
Enlazado: se integra todo el código objeto de lasEnlazado: se integra todo el código objeto de las distintas unidades compiladas en un solo programa ejecutableejecutable.
Escuela Técnica Superior de Ingeniería Informática 15
PROGRAMACIÓN
Proceso de construcciónPROGRAMACIÓN
El compilador que se utiliza habitualmente en entornos UNIX (como Linux) es gcc (GNU C Compiler)
Sintaxis:Sintaxis:gcc archivo.c –o archivo: Preprocesa, compila y enlaza archivo.c generando el ejecutable archivog j
gcc archivo.c –c –o archivo.o: Preprocesa y compila archivo.c generando el fichero objeto archivo.o
gcc archivo.o –o archivo: Enlaza archivo.o y genera el ejecutable archivo
Entornos de compilación completos: Visual Studio, Dev C++
Escuela Técnica Superior de Ingeniería Informática 16
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares17
PROGRAMACIÓN
Variables y constantesPROGRAMACIÓN
El d d i i d i i PEl ordenador sigue una serie de instrucciones. Pero esas instrucciones tienen que operar sobre una serie de datos El ordenador típico sólo procesa unade datos. El ordenador típico sólo procesa una instrucción a la vez, por lo que necesita 'espacios de memoria' donde guardar o depositar a modo dememoria donde guardar o depositar, a modo de cajones, los diversos datos con los que trabaja. Estos espacios de memoria corresponden:p p
Variables: pensadas para ser leídas y modificadasConstantes: para datos que no pensamos modificar (ej: valor Pi para calcular el perímetro o área de un círculo). No puedan ser reescritas.
Escuela Técnica Superior de Ingeniería Informática 18
PROGRAMACIÓN
Tipos de datos elementalesPROGRAMACIÓN
char: carácter
int : entero con signo
unsigned int : entero sin signounsigned int : entero sin signo
long : entero largo con signo
unsigned long : entero largo sin signo
float : número en coma flotante, precisión simple
double : número en coma flotante, doble precisión
void : tipo vacíovoid : tipo vacío
Escuela Técnica Superior de Ingeniería Informática 19
PROGRAMACIÓN
Tipos de datos derivados PROGRAMACIÓN
Ti dTipos enumeradosRango de valores pequeñoCada valor identificado por un nombrep
enum tMesesAnyo {enero=1, febrero, marzo, abril, mayo, j i j li t ti b t b i bjunio, julio, agosto, septiembre, octubre, noviembre, diciembre};
Definición de tipos con typedefPermite crear nuevos tipos de datos
óMejora legibilidad del códigotypedef <tipo> <alias>;
Escuela Técnica Superior de Ingeniería Informática 20
PROGRAMACIÓN
Declaración de variablesPROGRAMACIÓN
/* Variables globales */int i;int i;int j = 10;float k, l;static char m;static char m;
int funcion() {{/* Variables locales */char c;char d = ‘A’;static int e;. . .. . .
return 0;
Escuela Técnica Superior de Ingeniería Informática 21
return 0;}
PROGRAMACIÓN
Declaración de variablesPROGRAMACIÓN
Tipos de variablesTipos de variablesGlobal: si se declara fuera de cualquier f ió S d d ll d dfunción. Se puede acceder a ella desde cualquier función.
Local: se declaran dentro de una función, y solo son visibles desde el bloque donde sesolo son visibles desde el bloque donde se declaran.
Escuela Técnica Superior de Ingeniería Informática 22
PROGRAMACIÓN
Variables externasPROGRAMACIÓN
Variables globales: visibles por todas las funciones de un mismo fichero
Variables externas: para compartir variables globales entre diferentes ficheros, han de ser declaradas en los ficheros donde se desea como compartir como variables extern con el mismo nombre y tipo.
Esta declaración no reserva memoria: variables declaradas pero no definidasp
Escuela Técnica Superior de Ingeniería Informática 23
PROGRAMACIÓN
Variables estáticasPROGRAMACIÓN
Se declaran al principio de un bloque con static
Son visibles dentro de ese bloque
Al finalizar el bloque no se destruyen, conservando su valor entre distintas ejecuciones del bloque al quesu valor entre distintas ejecuciones del bloque al que pertenecen
Una variable global estática solo es accesible desde elUna variable global estática solo es accesible desde el fichero donde está declarada.
Una variable local estática conserva el valor entre distintas llamadas a la función.
Escuela Técnica Superior de Ingeniería Informática 24
PROGRAMACIÓN
Declaración de constantesPROGRAMACIÓN
Varias formas de declararlas:Usando la directiva del preprocesador #define:#define MAX_SIZE 64
Usando un tipo enumerado:enum{
MAX SIZE 64MAX_SIZE = 64,
};
Usando const :Usando const :const int MAX_SIZE = 64;
Escuela Técnica Superior de Ingeniería Informática 25
PROGRAMACIÓN
Constantes PROGRAMACIÓN
Constantes carácter: encerrado entre apóstrofesUso de \ para caracteres especiales
Representación Descripción Carácter Descripción ASCII
‘\n’ Nueva línea LF 10
‘\r’ Retorno de carro CR 13
‘\ ’ b l ió‘\t’ Tabulación HT 9
‘\b’ Espacio BS 8
‘\\’ Barra invertida \ 92\\ Barra invertida \ 92
‘\’’ Comilla simple ‘ 39
‘\”’ Doble comilla ’ “ 34
Cadenas de caracteres: secuencia de caracteres encerrada entre comillas “ ”.
Escuela Técnica Superior de Ingeniería Informática
el compilador añade al final el carácter nulo ‘\0’
26
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares27
PROGRAMACIÓN
OperadoresPROGRAMACIÓN
Aritméticos:+, -, *, /, % : suma, resta, multiplicación, división y resto de la división entera.
Lógicos: no existe un tipo de datos boolean. En C se utilizan enteros. 0 es falso y distinto de 0 es yverdadero:
&&, ||, ! : and, or y not., ||, , y
Relacionales (devuelven un entero: 0 ‐> falso, distinto de 0 ‐> verdadero):de 0 > verdadero):
>, >=, <, <=, ==, != : mayor, mayor o igual, menor, menor o igual, igual, distinto.
Escuela Técnica Superior de Ingeniería Informática
menor o igual, igual, distinto.
28
PROGRAMACIÓN
OperadoresPROGRAMACIÓN
Asignación:a = b : asigna a a el valor de b
a++, ++a, a--, --a : postincremento, preincremento, , , , p , p ,postdecremento, predecremento
+=, -=, *=, /= : suma, resta, multiplicación y división con asignación.
Ejemplo: a += b; es equivalente a: a = a + b;
Otros:sizeof(variable o tipo): tamaño en memoria de la variable o tipo
Escuela Técnica Superior de Ingeniería Informática 29
PROGRAMACIÓN
OperadoresPROGRAMACIÓN
Conversión de tipos: Implícita:
En expresiones el tipo mas bajo promociona al mas alto long double > double > float > unsigned long long > long long > unsigned long > long > unsigned int > int > unsigned short >unsigned long > long > unsigned int > int > unsigned short > short > unsigned char > char
En asignaciones el valor del lado derecho se convierte al tipo g pde la variable de la izquierda
Explicita (casting)(tipo) expresion
Escuela Técnica Superior de Ingeniería Informática 30
PROGRAMACIÓN
OperadoresPROGRAMACIÓN
P d iPrecedenciaPrioridad de unos operadores frente a otrosoperadores frente a otrosPuede modificarse con paréntesisp
Asociatividaddefine el orden de ejecución para
d déoperadores con idéntica precedencia
Escuela Técnica Superior de Ingeniería Informática 31
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares32
PROGRAMACIÓN
Estructuras de controlPROGRAMACIÓN
P it difi l fl j d j ió d lPermiten modificar el flujo de ejecución de las instrucciones de un programa.Con las estructuras de control se puede hacer:Con las estructuras de control se puede hacer:
Selección: De acuerdo a una condición, ejecutar un grupo u otro de sentencias (if‐then‐else, switch‐case)Iteración:Iteración:
Ejecutar un grupo de sentencias mientras exista una condición (while, do‐while)Ej t d t i el número de eces i di dEjecutar un grupo de sentencias el número de veces indicado en una condición (for)
Todas las estructuras de control tienen un único punto de d ú i d lidentrada y un único punto de salida.
Las estructuras de control pueden anidarse.
Escuela Técnica Superior de Ingeniería Informática 33
PROGRAMACIÓN
Estructuras de controlPROGRAMACIÓN
if – then – elseif (expresion) {
. . . . . .
}else {
. . .
. . .}
Llaves opcionales si solo hay una instrucción dentro
}
Llaves opcionales si solo hay una instrucción dentro del bloque (mejor poner siempre)
l i l
Escuela Técnica Superior de Ingeniería Informática
else opcional
34
PROGRAMACIÓN
Estructuras de controlPROGRAMACIÓN
switch‐caseswitch (expresion){
case valor1: . . .break;case valor2:. . .break;. . . .default:. . .
}
Solo evalúa valores discretos.
}
Escuela Técnica Superior de Ingeniería Informática
default y break opcionales.35
PROGRAMACIÓN
Estructuras de controlPROGRAMACIÓN
while y do‐while
while (expresion) {. . .
}
do {. . .
} while(expresion);
Mientras la expresión sea distinto de 0 se ejecuta el
} while(expresion);
Mientras la expresión sea distinto de 0 se ejecuta el bucle.
d hil l b l j t l
Escuela Técnica Superior de Ingeniería Informática
do‐while: el bucle se ejecuta al menos una vez.
36
PROGRAMACIÓN
Estructuras de controlPROGRAMACIÓN
for
for(inicialización; condición; actualización) {. . .. . .
}
Inicialización: expresión que da un valor inicial al iterador del bucle.Condición: expresión de permanencia en el bucle. Cuando la condición no se cumple, se sale del bucle.A li ió ió difi l l d lActualización: expresión que modifica el valor del iterador.Inicialización condición y actualización son todas
Escuela Técnica Superior de Ingeniería Informática
Inicialización, condición y actualización son todas opcionales.
37
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares38
PROGRAMACIÓN
Estructuras de datosPROGRAMACIÓN
F d i j t d d t l t l lForma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
Una estructura de datos define la organización de éstos y un conjunto deUna estructura de datos define la organización de éstos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones básicas son:
Alta, adicionar un nuevo valor a la estructura.,Baja, borrar un valor de la estructura.Búsqueda, encontrar un determinado valor en la estructura para realizar una operación con este valor, en forma secuencial o binario (siempre y cuando los datos estén ordenados)datos estén ordenados).
Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma la elección de la estructura de datos apropiada paraesta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos.
Escuela Técnica Superior de Ingeniería Informática 39
PROGRAMACIÓN
Arrays (Vectores)PROGRAMACIÓN
Son variables que contienen una colección consecutiva de datos.
Se declaran entre corchetes, y su tamaño debe serSe declaran entre corchetes, y su tamaño debe ser fijado en tiempo de compilación.
Se accede a los elementos también entre corchetesSe accede a los elementos también entre corchetes. Los índices comienzan en 0, y no hay comprobación.
int a[10]; //array de 10 intsfloat b[2][10] //array de 2 dimensiones . . .a[0] = 10;b[1][4] = 5.3;[20] 123 // d d il ió
Escuela Técnica Superior de Ingeniería Informática 40
a[20] = 123; //esto no da error de compilación
PROGRAMACIÓN
Arrays o vectoresPROGRAMACIÓN
ArraysTipos elementales (char, int, float...)
Tipos derivados (punteros, arrays, estructuras…)
Los elementos del array son accesibles a través de un í diíndice
valor entero entre 0..N‐1, siendo N el máximo número de elementoselementos
0 1 2 3 4
25 1 3 4 1vectorEnteros[0] vectorEnteros[1] vectorEnteros[2] vectorEnteros[3] vectorEnteros[4]
vectorEnteros
Escuela Técnica Superior de Ingeniería Informática 41Tema I.5 T. de datos derivados
PROGRAMACIÓN
Arrays (Vectores)PROGRAMACIÓN
Al declarar un array se le puede dar valores iniciales a sus elementos:
int a[4] = {13 1 27 1289};int a[4] = {13, 1, 27, 1289};int b[] = {1, 3, 5, 7, 9};int c[4] = {23, 12}; //c[2] y c[3] sin inicializari t d[2] {12 24 91 103} // i
Si no se especifica el tamaño tomará el del número
int d[2] = {12, 24, 91, 103}; //warning
Si no se especifica el tamaño, tomará el del número de elementos inicializados.Si se inicializan menos del tamaño los noSi se inicializan menos del tamaño, los no inicializados tendrán basura.Si se inicializan más del tamaño el compilador dará
Escuela Técnica Superior de Ingeniería Informática
Si se inicializan más del tamaño, el compilador dará un aviso.
42
PROGRAMACIÓN
PunterosPROGRAMACIÓN
Concepto de variableRegión en memoria reservada para almacenar un dato de un tipo determinadotipo determinado
Posición de memoria inicial
Tamaño en bytes 0xA031y
650xA032
0xA0331 byte
3489
0xA034
4 bytes
char letra = ‘A’;
unsigned int entero = 3489;3489
0xA038
4 bytes
Escuela Técnica Superior de Ingeniería Informática 43Tema I.5 T. de datos derivados
PROGRAMACIÓN
PunterosPROGRAMACIÓN
Punteros:Variable que representa una posición de memoria que contiene un dato.
Se declaran anteponiendo un * al nombre de la variable.
tipo * identificador;
float * pDatoReal; float datoReal =123.4;
0xFE87A1
float * pDatoReal = &datoReal;
0 A0300 A0300xFE87A1
0xFE87A2
0xA030
0xA031
0xA030
0xA031
123.4 4 bytes
0xFE87A6
0xFE87A2 4 bytes
0xA035
0xF4532 4 bytes
0xA035
Escuela Técnica Superior de Ingeniería Informática 44Tema I.5 T. de datos derivados
PROGRAMACIÓN
PunterosPROGRAMACIÓN
Operaciones:El operador * dereferencia el puntero. Es decir, se accede al valor apuntado.
El operador & devuelve la dirección de memoria donde se encuentra una variable. Es decir se obtiene un puntero a la
blvariable.
int a = 0;int a 0;int *b;
b = &a; // b apunta a la dirección donde está ab = &a; // b apunta a la dirección donde está a*b = 127; // se guarda 127 en la dir. apuntada por b//En este punto la variable a tiene valor 127
Escuela Técnica Superior de Ingeniería Informática 45
PROGRAMACIÓN
PunterosPROGRAMACIÓN
Operaciones:Los punteros se pueden sumar, restar, etc
Esas operaciones se hacen en múltiplos del tamaño del p pdato apuntado.
int *a = . . . . //a apunta a algún lugara = a + 1; //ahora apunta sizeof(int) más adelantea = a + 4; //ahora apunta 4*sizeof(int) más adelante
Escuela Técnica Superior de Ingeniería Informática 46
PROGRAMACIÓN
Punteros – Memoria dinámicaPROGRAMACIÓN
Cuando se declara una variable de tipo puntero, no apunta a ningún sitio “válido”, y no hay memoria reservada para esa variable.
Para manejar memoria de forma dinámica, se utilizan las llamadasmalloc y free.las llamadas malloc y free.
void *malloc(size_t size): devuelve un puntero a una zona de memoria de size bytes Como devuelve unzona de memoria de size bytes. Como devuelve un puntero void* hay que convertirlo al tipo de puntero que se quiere usarque se quiere usar.
void free(void *ptr): libera la zona de memoria t d t bt id i t ll
Escuela Técnica Superior de Ingeniería Informática
apuntada por ptr y obtenida previamente con malloc
47
PROGRAMACIÓN
Punteros – Memoria dinámicaPROGRAMACIÓN
Ejemplo:int *a, *b; // punteros a enteros
//se reserva espacio en memoria para un entero//se reserva espacio en memoria para un entero//a apunta a ese espacio de memoriaa = (int *) malloc (1*sizeof(int));
//se reserva espacio en memoria para 16 enteros//b apunta a ese espacio de memoriab = (int *) malloc (16*sizeof(int));
//se libera el espacio del primer malloc// p pfree(a);
//se libera el espacio del segundo malloc
Escuela Técnica Superior de Ingeniería Informática 48
//se libera el espacio del segundo mallocfree(b);
PROGRAMACIÓN
Relación entre punteros y arraysPROGRAMACIÓN
Los arrays se pueden comportar como punteros, y los punteros como arrays.
Una variable de tipo array es un puntero al primer elemento del array.
Un puntero al primer elemento de una colección puede usarse como unUn puntero al primer elemento de una colección puede usarse como un array.
int vectorEnteros[]={25,1,3,4,1};
0 A010251
vectoEnteros[0] o *(vectorEnteros)
vectoEnteros[1] o *(vectorEnteros+1)
0xA010
0xA014
0 A01834
( )
vectoEnteros[2] o *(vectorEnteros+2)
vectoEnteros[3] o *(vectorEnteros+3)
0xA018
0xA01C
0 A0201…
[ ] ( )
vectoEnteros[4] o *(vectorEnteros+4)
0xA020
0xA024
Escuela Técnica Superior de Ingeniería Informática 49Tema I.5 T. de datos derivados
PROGRAMACIÓN
Arrays y punterosPROGRAMACIÓN
Diferencias:Un array tiene un tamaño asociado, un puntero no:
Un array es un puntero estático, no se puede cambiar el y p , plugar al que apunta.
int a[16]; //array de 16 elementosint s1 = sizeof(a); //s1 valdrá 16*sizeof(int)
int *b = (int *) malloc (128*sizeof(int);//b es un puntero a una colección de 128 ints// pint s2 = sizeof(b); //s2 valdrá 4 u 8, que es el//tamaño de una dirección
Escuela Técnica Superior de Ingeniería Informática 50
PROGRAMACIÓN
StringsPROGRAMACIÓN
En C no existe un tipo de datos para strings.
Se utilizan arrays de char acabados con el caracter ‘\0’\0
Una cadena de caracteres entre comillas dobles es un inmediato que representa un stringun inmediato que representa un string.
char string1[] = “Hola”;char *string2 = “Hola”;char *string3[] = {‘H’ ‘o’ ‘l’ ‘a’ ‘\0’}char string3[] = { H , o , l , a , \0 }//Los 3 strings son iguales
Escuela Técnica Superior de Ingeniería Informática 51
PROGRAMACIÓN
Strings ‐ FuncionesPROGRAMACIÓN
Algunas funciones de biblioteca para manejo de strings:
strlen: devuelve la longitud del string.g g
strcat: concatena dos strings.
strcpy: copia un string sobre otro.py p g
strdup: duplica un string.
strchr: busca un carácter en el string.g
Escuela Técnica Superior de Ingeniería Informática 52
PROGRAMACIÓN
RegistrosPROGRAMACIÓN
Son tipos compuestos formados por elementos heterogéneos.
Dentro del registro cada elemento tiene unDentro del registro cada elemento tiene un identificador y un tipo.
//Declaración del registro struct Complejo {
float real;float real;float imag;
};
//Declaración de variables del tipo registrostruct Complejo uncomplejo, otrocomplejo;
Escuela Técnica Superior de Ingeniería Informática 53
PROGRAMACIÓN
RegistrosPROGRAMACIÓN
Para acceder a los elementos de un registro estructura se utiliza el operador punto (.)
uncomplejo.real = 1.3;
Si t t d t i t d t j
p j ;uncomplejo.imag = 2.7;
Si se trata de un puntero a registro se puede atajar con el operador flecha (‐>)
struct Complejo *a = (struct Complejo *)malloc(sizeof(struct Complejo));p j p j ;
a->real = 2.4; //lo mismo que (*a).real = 2.4;a->imag = 3.14; //lo mismo que (*a).imag = 3.14;
Escuela Técnica Superior de Ingeniería Informática 54
a >imag 3.14; //lo mismo que ( a).imag 3.14;
PROGRAMACIÓN
Estructuras de datos avanzadasPROGRAMACIÓN
Li t E l dListas Enlazadas Listas SimplesListas Doblemente EnlazadasListas Circulares
Colas (FIFO: First In ‐ First Out)Pilas (LIFO: Last In ‐ First Out)Árboles
Á b l Bi iÁrboles BinariosTablas Hash (asocia claves con valores). Funciona transformando la clave con una función hash en un hash, ,un número que la tabla hash utiliza para localizar el valor deseado.
Escuela Técnica Superior de Ingeniería Informática 55
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares56
PROGRAMACIÓN
Entrada/SalidaPROGRAMACIÓN
Definidas en stdio.h
Funciones disponibles para entrada/salida:printf: permite escribir en la pantallaprintf: permite escribir en la pantalla
getchar/putchar : leer/escribir un caracter.
scanf : para leer del teclado con formatoscanf : para leer del teclado con formato.
gets : para leer una línea del teclado (PELIGROSA. Mejor usar fgets).usar fgets).
puts: para escribir una línea en la pantalla.
Escuela Técnica Superior de Ingeniería Informática 57
PROGRAMACIÓN
printfPROGRAMACIÓN
i t i tf( t h *f t )
*format es el string que se imprimirá en pantalla
int printf(const char *format, . . .);
format es el string que se imprimirá en pantalla. Admite una serie de caracteres de sustitución que serán reemplazados en orden por el resto deserán reemplazados en orden por el resto de argumentos e la función.
char dia[] = “Domingo”;int hora = 12;int min = 30;
printf(“Hoy es %s y son las %d:%d\n”, dia, hora, min);
Escuela Técnica Superior de Ingeniería Informática 58
PROGRAMACIÓN
Entrada/SalidaPROGRAMACIÓN
Se debe especificar el formato de cada dato a utilizar[fl ] [ h ][ i ió ] [l it d] ifi d f t[flags] [ancho][.precisión] [longitud] especificador_formato
Especificador de formato Descripción
%c carácter indi id al%c carácter individual
%d %i entero decimal con signo
%u entero decimal sin signog
%o %ou entero octal con y sin signo
%x %X entero hexadecimal con signo
%xu %Xu entero hexadecimal sin signo
%f %F double con notación decimal‐punto
% %E d bl ió i l%e %E double con notación exponencial
%g %G double
%p valor de un puntero
Escuela Técnica Superior de Ingeniería Informática 59
%p valor de un puntero
%s cadena de caracteres
PROGRAMACIÓN
scanfPROGRAMACIÓN
Lectura por teclado de los datos de entradaLectura por teclado de los datos de entrada
scanf (cadena_de_control, &var1, &var2, …);
cadena_de_controlcontiene especificadores de formato
_ _
contiene especificadores de formatoestablecen la forma de leer los datosson los mismos que los utilizados en printfson los mismos que los utilizados en printf
tantos especificadores como datos a leerint limite;int limite;
printf("Introduzca el limite superior de la serie: ");f("%d" &li i )
Escuela Técnica Superior de Ingeniería Informática
scanf("%d", &limite);
60
PROGRAMACIÓN
Entrada/Salida con ficherosPROGRAMACIÓN
Las operaciones de E/S vienen precedidas de la creación de un stream o flujo de datos. Un stream nos permite establecer una conexión (entre un origen y un destino) a través de la cual circula información:
FILE : es un tipo de datos que representa un fichero abierto
Funciones y tipos de datos para el manejo de ficheros:fopen: abre un fichero.
fclose: cierra un fichero.
fread: leer datos de un fichero.
f i ibi d fi hfwrite: escribir datos a un fichero.
fprintf/fscanf: igual que printf y scanf pero con ficheros en lugar de stdout y stdin
Escuela Técnica Superior de Ingeniería Informática
de stdout y stdin.
fputs/fgets: escribe/lee una línea completa de un fichero.61
PROGRAMACIÓN
Entrada/Salida con ficherosPROGRAMACIÓN
A d hiApertura de un archivoFILE* fopen(const char* nombreArchivo, const char* modo);
Modo Descripción
r Solo lecturar Solo lectura.
w Trunca el fichero para escritura.
a Escritura al final del fichero.
r+ Lectura y escritura.
w+ Lectura y escritura. Fichero creado si no existe.
Devuelve un puntero a NULL si no se puede abrir el archivo
a+ Lectura desde comienzo y escritura desde el final.
Escuela Técnica Superior de Ingeniería Informática 62Tema I.7 Otros aspectos
PROGRAMACIÓN
Entrada/Salida con ficherosPROGRAMACIÓN
Ci d hiCierre de archivos
int fclose( FILE* pf);
Importancia de cerrar un ficherol fl j FILE ll i d b ff i t dilos flujos FILE llevan asociado un buffer intermedioeste buffer sólo se vuelca al fichero cuando esta llenode esta forma se consigue reducir el número de accesos a unde esta forma se consigue reducir el número de accesos a un fichero durante la ejecución de un programasino se cierra un archivo puede que no se guarden los últimos cambios hechosúltimos cambios hechos.
Devuelve un cero si el archivo se cerró con éxito
Escuela Técnica Superior de Ingeniería Informática 63Tema I.7 Otros aspectos
PROGRAMACIÓN
Entrada/Salida con ficherosPROGRAMACIÓN
Funciones de E/S de ficheros de textofgetc() / fputc()
int fputc(int c, FILE* pf); int fgetc(FILE* pf);
fgets() / fputs()int fputs (const char *cad, FILE *pf);
fscanf() / fprintf()
char* fgets(char* cad, int n, FILE *pf );
int fprintf (FILE* PF, const char* cadControl,…);
int fscanf(FILE* pf, const char* cadControl, …);
Escuela Técnica Superior de Ingeniería Informática 64Tema I.7 Otros aspectos
( p )
PROGRAMACIÓN
Entrada/Salida con ficherosPROGRAMACIÓN
Funciones de E/S de ficheros binariosEn los ficheros binarios la información se escribe tal cual se almacena en memoria
Optimiza el tamaño ocupada por un archivo
f () / f ()fread() / fwrite()
size_t fwrite(const void* ptr, size_t tam, size_t n, FILE* pf);
size_t fread(void* ptr, size_t tam, size_t n, FILE* pf);
Escuela Técnica Superior de Ingeniería Informática 65Tema I.7 Otros aspectos
PROGRAMACIÓN
Otras utilidadesPROGRAMACIÓN
Control de errores:muchas de las funciones de biblioteca y llamadas al sistema proporcionan un código de error si no han conseguido realizar su propósito.
La biblioteca estándar proporciona un mecanismoLa biblioteca estándar proporciona un mecanismo para controlar estos errores y convertirlos en algo “legible”.legible .
Por un lado está la variable global errno que es en la que dejan las funciones el código de errorque dejan las funciones el código de error.
La función strerror(int errno) convierte el código de d d t t á li ti
Escuela Técnica Superior de Ingeniería Informática
error a una cadena de texto más explicativa.
66
PROGRAMACIÓN
Otras utilidadesPROGRAMACIÓN
Ejemplo:
#include <stdio.h>i l d h //#include <errno.h> //Para errno
#include <string.h> //Para strerror
i t i ()int main(){FILE *f1;f1 fopen(" /out txt" "r+");f1 = fopen( ./out.txt , r+ );if(f1 == NULL)
printf("Error al abrir el fichero.\n%s\n“,strerror(errno));elseelse
fprintf(f1,”Hola mundo\n");}
Escuela Técnica Superior de Ingeniería Informática 67
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares68
PROGRAMACIÓN
FuncionesPROGRAMACIÓN
Las funciones se pueden “declarar”, para que en el resto del código se sepa que existen y como es su interfaz (prototipo).
Las funciones se deben “definir“ en alguna parte, implementando su funcionalidad (cuerpo).implementando su funcionalidad (cuerpo).
//Declaración de la funciónint media(int a, int b);
//Definición de la funciónint media(int a, int b){{
int result;result = (a + b)/2;return result;
Escuela Técnica Superior de Ingeniería Informática 69
return result;}
PROGRAMACIÓN
FuncionesPROGRAMACIÓN
Sintaxis:
Ti d l l d
Nombre Argumentos
int media(int a, int b){
Tipo del valor de retorno
{int result;result = (a + b)/2;
Inicio y fin del cuerpo de la función result = (a + b)/2;
return result;}
función
Valor de retorno
Escuela Técnica Superior de Ingeniería Informática 70
PROGRAMACIÓN
Funciones ‐ ArgumentosPROGRAMACIÓN
Los argumentos siempre se pasan por valor.
Si se quiere pasar un argumento por referencia se deben usar punteros.deben usar punteros.//Ejemplo de paso de argumentos por referencia//Función
id i bi (i * i *b) {void intercambia(int *a, int *b) {int aux;aux = *a;* *b*a = *b;*b = *aux;
}
//Llamada a la funciónint x = 10, y = 20;
Escuela Técnica Superior de Ingeniería Informática 71
. . . intercambia(&x, &y);
PROGRAMACIÓN
Funciones ‐ RecursividadPROGRAMACIÓN
U f ió i i d j ióUna función es recursiva si durante su ejecución tiene una llamada a si mismaS di iSe distingue entre:
Recursividad directaR i id d i di i llRecursividad indirecta: varias se llaman unas a otras formando ciclos
Toda función recursiva ha de presentar al menos unaToda función recursiva ha de presentar al menos una condición de terminaciónEjemplos:Ejemplos:
Cálculo del factorial mediante recursividad directa
Escuela Técnica Superior de Ingeniería Informática 72
PROGRAMACIÓN
La función mainPROGRAMACIÓN
La función main es el punto de entrada del programa.
Puede recibir argumentos que serán los argumentosPuede recibir argumentos que serán los argumentos que se le pasen por línea de comandos a la hora de ejecutar el programa.ejecutar el programa.
int main(int argc, char *argv[])
argc: es un entero que indica el número de argumentos recibido.
*argv[]: es un puntero a un array de strings. Cada
Escuela Técnica Superior de Ingeniería Informática
entrada del array es uno de los argumentos.73
PROGRAMACIÓN
La función mainPROGRAMACIÓN
Ejemplo:
#include <stdio.h>#include <stdio.h>
int main(int argc, char *argv[]){{
printf("Se han recibido %d argumentos\n",argc);int i;for(i 0; i argc; i )for(i = 0; i < argc; i++){
printf("Argumento %d = %s\n", i,argv[i]);}}
return 0;}
Escuela Técnica Superior de Ingeniería Informática 74
PROGRAMACIÓN
ÍndicePROGRAMACIÓN
Introducción a la programación
Lenguaje C
Programación estructuradaProgramación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/SalidaEntrada/Salida
Funciones
Escuela Técnica Superior de Ingeniería Informática
Aplicaciones modulares75
PROGRAMACIÓN
Aplicaciones modularesPROGRAMACIÓN
L d fi i ió d ód l C i d dLa definición de un módulo en C viene dada por:Un archivo de cabecera (.h)
D fi l i t f d l ód l d i é f l ód lDefine la interfaz del módulo, es decir, qué ofrece el módulo definidoDebería contener: definiciones de tipos y declaraciones de p yfunciones (prototipos)
Un archivo fuente (.c)f l d ll d l ó d l ód lDefine los detalles de implementación del módulo
Inclusión de su correspondiente fichero de cabecera (#include)( c ude)Definición de funciones declaradas y no declaradas en el fichero de cabecera
Escuela Técnica Superior de Ingeniería Informática 76
PROGRAMACIÓN
Aplicaciones modularesPROGRAMACIÓN
La posibilidad de definir módulos en C va permitir:Definición de nuevos tipos de datos junto con sus operaciones (TADs)
Colección de valores legales de datos y operaciones primitivas que se pueden realizar sobre esos valoresprimitivas que se pueden realizar sobre esos valores
La definición de un TAD implica la definición de:Un interfaz públicoUn interfaz público
Representación privada o implementación
En C no se puede ocultar la representación del TAD
La creación de bibliotecas de funciones
Escuela Técnica Superior de Ingeniería Informática 77
PROGRAMACIÓN
LibreriasPROGRAMACIÓN
Librería estática (libnombre.a): "se copia" en el ejecutable cuando lo compilamos. Sólo se copia aquella parte de la librería que se necesite.
Librería dinámica (libnombre.so): NO se copia en nuestro programa al compilarlo. Cuando se ejecuta e ejecutable, cada vez que el código necesite algo de la librería, irá a buscarlo a ésta.
Escuela Técnica Superior de Ingeniería Informática 78
PROGRAMACIÓN
Librería estáticaPROGRAMACIÓN
C ióCreación: Obtener los ficheros objeto (.o) de todos nuestros fuentes (.c). Para ello se compilan con gcc ‐c fuente.c ‐o fuente.o. La opción ‐c le dice al compilador que no cree un ejecutable, sino sólo un fichero objetoCrear la librería (.a). Para ello se usa el comando ar con los siguientes parámetros: ar ‐rv libnombre.a fuente1.o fuente2.o ... La opción ‐r le p pdice al comando ar que tiene que insertar (o reemplazar si ya están dentro) los ficheros objeto en la librería.
Compilación:Compilación:cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐L<path2> ... ‐llibreria1 ‐llibreria2 L llib i i di d b lib í El fijLos ‐llibreria son para indicar que se debe coger esa librería. El prefijo lib y la extensión .a ya la pone automáticamente el compilador. Ojo: es necesario ponerlas por orden.
Escuela Técnica Superior de Ingeniería Informática 79
PROGRAMACIÓN
Librería dinámicaPROGRAMACIÓN
C ióCreación: Compilar los fuentes, igual que antes, para obtener los objetos.Crear la librería con el comando ld. Las opciones para este comandoCrear la librería con el comando ld. Las opciones para este comando serían ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared. La opción ‐o liblibreria.so le indica el nombre que queremos dar a la librería. La opción ‐shared le indica que debe hacer una librería y no un p q yejecutable (opción por defecto).
Compilación:i i I< th1> I< th2> L< th1>cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
L<path2> ... ‐Bdynamic ‐llibreria1 ‐llibreria2 Definir la variable de entorno LD_LIBRARY_PATH, en la que ponemos d l di i d d h lib í di á i d i étodos los directorios donde haya librerías dinámicas de interés. $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path1>:<path2>:<path3> $ export LD_LIBRARY_PATH
Escuela Técnica Superior de Ingeniería Informática 80
PROGRAMACIÓN
MakefilePROGRAMACIÓN
Para simplificar el proceso de compilación lo habitual es hacer un ficheroPara simplificar el proceso de compilación lo habitual es hacer un fichero Makefile en el mismo directorio donde estén los fuentes y utilizar makepara compilarlaPosible definición de variables:Posible definición de variables:
CFLAGS=-I<path1> -I<path2> ...CC=gcc
Ordenados en forma de reglas:objetivo: dependencias
comandos
Reglas virtuales: sin dependencias clean :
rm *.o *~
Reglas implicitas: programa : programa oprograma : programa.oprograma.o : programa.c
Reglas patrón: %.o : %.c
Escuela Técnica Superior de Ingeniería Informática
$(CC) $(CFLAGS) $< -o $@
81
PROGRAMACIÓN
MakefilePROGRAMACIÓN
Creación de librerias:Librería estática:
CFLAGS=‐I<path1> ‐I<path2> ...libnombre.a: libnombre.a (objeto1.o ojbeto2.o ...)
Lib í di á iLibrería dinámicaliblibreria.so: objeto1.c objeto2.c ...cc ‐c ‐o objeto1 o objeto1 ccc ‐c ‐o objeto1.o objeto1.c cc ‐c ‐o objeto2.o objeto2.c ... ld ‐o liblibreria.so objeto1.o objeto2.o ... ‐shared rm objeto1.o objeto2.o ...
Escuela Técnica Superior de Ingeniería Informática 82
top related