Curso 0: Programación

Anuncio
PROGRAMACIÓN
Curso 0: Programación
Alberto Sánchez <[email protected]>
Alberto Sánchez Escuela Técnica Superior de Ingeniería Informática
1
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
2
Definiciones
PROGRAMACIÓN
ƒ O
Ordenador: máquina sin inteligencia propia, cuya finalidad es d
d
á i
i i t li
i
i
fi lid d
interpretar el código (instrucciones) que se les proporciona
g j
q
g j q
p
y
ƒ Lenguaje máquina: lenguaje que la computadora "entiende" y es 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ún
programador 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áquina
lenguaje máquina.
ƒ Programa: secuencia de órdenes a ser ejecutadas por el ordenador escrito en algún lenguaje de programación
ƒ Algoritmo: secuencia de instrucciones que permiten obtener un resultado en particular. Ej: receta de cocina
Escuela Técnica Superior de Ingeniería Informática
3
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
4
Características del lenguaje C
PROGRAMACIÓ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‐11
p g
ƒ 1972 Dennis Ritchie diseña el lenguaje de programación C
ƒ Fabricantes crean sus propios compiladores ‐> pérdida de p p
p
p
portabilidad
ƒ 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
Características de C
PROGRAMACIÓN
ƒ Sencillez
ƒ Estructurado: su esquema de programación es imperativo vs. Orientado a objetos (C++, Java, …). C it
Consiste en escribir una secuencia de instrucciones una ibi
i d i t
i
detrás de la otra, las cuales se ejecutarán en orden.
ƒ Compilado. Las órdenes son transformadas a lenguaje Compilado Las órdenes son transformadas a lenguaje
máquina que se almacena en un archivo ejecutable.
ƒ Potente. Aunque es un lenguaje de alto nivel, tiene Potente. 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.
lenguaje humano.
Escuela Técnica Superior de Ingeniería Informática
6
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
7
Programación estructurada
PROGRAMACIÓ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
instrucciones puede repetirse un numero determinado de i
d
ti
d t
i d d
veces ƒ Decisión: según ciertas condiciones se ejecutan o no un Decisión: según ciertas condiciones se ejecutan o no un
conjunto de instrucciones
Escuela Técnica Superior de Ingeniería Informática
8
Estructura de un programa
PROGRAMACIÓN
ƒ En la programación estructurada tiene que existir un inicio y un fin pe ecta e te de do de acue do a d ag a a de ujo de
perfectamente definido de acuerdo al diagrama de flujo del programa
ƒ Un
Un programa bien estructurado debería tener algún subprograma programa bien estructurado debería tener algún subprograma
que capture cualquier error dentro del programa
Escuela Técnica Superior de Ingeniería Informática
9
Primer programa
PROGRAMACIÓN
#include <stdio.h>
int main()
{
printf(“Hola mundo\n”);
return 0;
}
ƒ #include : es una directiva de preprocesador. Lo que p p
q
hace 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 tener una función main. Escuela Técnica Superior de Ingeniería Informática
10
Primer programa
PROGRAMACIÓN
#include <stdio.h>
int main()
{
printf(“Hola mundo\n”);
return 0;
}
ƒ printf
printf : es una llamada a una función de biblioteca, : es una llamada a una función de biblioteca,
que imprime un string en la pantalla.
ƒ “Hola
Hola mundo\n
mundo\n”:: es un string
es un string constante. El caracter constante El caracter
‘\n’ indica un salto de línea.
ƒ return: es el valor de retorno de la función.
t
l l d
t
d l f ió
Escuela Técnica Superior de Ingeniería Informática
11
Primer programa
PROGRAMACIÓN
#include <stdio.h>
int main()
{
printf(“Hola mundo\n”);
return 0;
}
ƒ Las
Las sentencias acaban en sentencias acaban en ‘;’
;
ƒ Las llaves { } se utilizan para definir bloques de código que forman el cuerpo de determinadas sentencias
que forman el cuerpo de determinadas sentencias, en este caso una función.
Escuela Técnica Superior de Ingeniería Informática
12
Comentarios
PROGRAMACIÓ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
Comentarios
PROGRAMACIÓN
#include <stdio.h>
/* Punto de entrada
del p
programa
g
*/
/
int main()
{
//Llamada a printf
printf(“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.
ƒ Con /* y */ se introducen comentarios multilínea.
C /* */
i t d
t i
ltilí
Escuela Técnica Superior de Ingeniería Informática
14
Proceso de construcción
PROGRAMACIÓN
ƒ Preprocesado: Las directrices que comienzan por # son directrices del preprocesador. Son interpretadas por el preprocesador, normalmente con sustituciones.
El código fuente ya preprocesado se
ƒ Compilación: El código fuente ya preprocesado se transforma en código máquina.
ƒ Enlazado: se integra todo el código objeto de las Enlazado: se integra todo el código objeto de las
distintas unidades compiladas en un solo programa ejecutable.
ejecutable
Escuela Técnica Superior de Ingeniería Informática
15
Proceso de construcción
PROGRAMACIÓN
ƒ El compilador que se utiliza habitualmente en entornos UNIX (como Linux) es gcc (GNU C Compiler)
ƒ Sintaxis:
ƒ gcc archivo.c –o archivo: Preprocesa, compila y enlaza archivo.c generando el ejecutable archivo
g
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
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
17
Variables y constantes
PROGRAMACIÓN
ƒ El
El ordenador sigue una serie de instrucciones. Pero d
d i
i d i
i
P
esas instrucciones tienen que operar sobre una serie de datos El ordenador típico sólo procesa una
de 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 de memoria
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 modificadas
ƒ Constantes: 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
Tipos de datos elementales
PROGRAMACIÓN
ƒ char: carácter
ƒ int : entero con signo
ƒ unsigned int : entero sin signo
: 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ío
: tipo vacío
Escuela Técnica Superior de Ingeniería Informática
19
Tipos de datos derivados PROGRAMACIÓN
ƒ Tipos enumerados
Ti
d
ƒ Rango de valores pequeño
ƒ Cada valor identificado por un nombre
p
ƒ enum tMesesAnyo {enero=1, febrero, marzo, abril, mayo, j i j li
junio, julio, agosto, septiembre, octubre, noviembre, t
ti b
t b
i b
diciembre};
ƒ Definición de tipos con typedef
ƒ Permite crear nuevos tipos de datos
ƒ Mejora legibilidad del código
ó
typedef <tipo> <alias>;
Escuela Técnica Superior de Ingeniería Informática
20
Declaración de variables
PROGRAMACIÓN
/* Variables globales */
int i;
int j = 10;
float k, l;
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
Declaración de variables
PROGRAMACIÓN
ƒ Tipos de variables
Tipos de variables
ƒ Global: si se declara fuera de cualquier f ió S
función. Se puede acceder a ella desde d
d
ll d d
cualquier función.
ƒ Local: se declaran dentro de una función, y solo son visibles desde el bloque donde se
solo son visibles desde el bloque donde se declaran.
Escuela Técnica Superior de Ingeniería Informática
22
Variables externas
PROGRAMACIÓ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 definidas
p
Escuela Técnica Superior de Ingeniería Informática
23
Variables estáticas
PROGRAMACIÓ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 que
su valor entre distintas ejecuciones del bloque al que pertenecen
ƒ Una
Una variable global estática solo es accesible desde el 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
Declaración de constantes
PROGRAMACIÓN
ƒ Varias formas de declararlas:
ƒ Usando la directiva del preprocesador #define:
#define MAX_SIZE 64
ƒ Usando un tipo enumerado:
enum{
MAX SIZE = 64,
MAX_SIZE
64
};
ƒ Usando const :
Usando const :
const int MAX_SIZE = 64;
Escuela Técnica Superior de Ingeniería Informática
25
Constantes PROGRAMACIÓN
ƒ Constantes carácter: encerrado entre apóstrofes
ƒ Uso 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
‘\ ’
‘\t’
Tabulación b l ió
HT
9
‘\b’
Espacio BS
8
‘\\’
\\
Barra invertida
Barra invertida
\
92
‘\’’
Comilla simple
‘
39
‘\”’
Doble comilla
’“
34
ƒ Cadenas de caracteres: secuencia de caracteres encerrada entre comillas “ ”. ƒ el compilador añade al final el carácter nulo ‘\0’
Escuela Técnica Superior de Ingeniería Informática
26
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
27
Operadores
PROGRAMACIÓ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 y
verdadero:
ƒ &&,
, ||, !
: 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.
menor o igual, igual, distinto.
Escuela Técnica Superior de Ingeniería Informática
28
Operadores
PROGRAMACIÓN
ƒ Asignación:
ƒ a = b : asigna a a
ƒ
ƒ
el valor de b
a++,
, ++a,
, a--,
, --a : p
postincremento, preincremento, ,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
Operadores
PROGRAMACIÓ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
p
de la variable de la izquierda
ƒ Explicita (casting)
ƒ (tipo) expresion
Escuela Técnica Superior de Ingeniería Informática
30
Operadores
PROGRAMACIÓN
ƒ Precedencia
P
d i
ƒ Prioridad de unos operadores frente a otros
operadores frente a otros
ƒ Puede modificarse con p
paréntesis
ƒ Asociatividad
ƒ define el orden de ejecución para operadores con idéntica d
dé
precedencia
Escuela Técnica Superior de Ingeniería Informática
31
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
32
Estructuras de control
PROGRAMACIÓN
ƒ P
Permiten modificar el flujo de ejecución de las it
difi
l fl j d j
ió d l
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:
ƒ Ejecutar un grupo de sentencias mientras exista una condición (while, do‐while)
ƒ Ejecutar un grupo de sentencias el número de veces indicado en Ej t
d
t i el número de eces i di d
una condición (for)
ƒ Todas las estructuras de control tienen un único punto de entrada y un único punto de salida. d
ú i
d
lid
ƒ Las estructuras de control pueden anidarse.
Escuela Técnica Superior de Ingeniería Informática
33
Estructuras de control
PROGRAMACIÓN
ƒ if – then – else
if (expresion) {
. . .
. . .
}
else {
. . .
. . .
}
ƒ Llaves
Llaves opcionales si solo hay una instrucción dentro opcionales si solo hay una instrucción dentro
del bloque (mejor poner siempre)
ƒ else
l opcional
i
l
Escuela Técnica Superior de Ingeniería Informática
34
Estructuras de control
PROGRAMACIÓN
ƒ switch‐case
switch (expresion){
case valor1:
. . .
break;
case valor2:
. . .
break;
. . . .
default:
. . .
}
ƒ Solo evalúa valores discretos.
ƒ default y break opcionales.
Escuela Técnica Superior de Ingeniería Informática
35
Estructuras de control
PROGRAMACIÓN
ƒ while y do‐while
while (expresion) {
. . .
}
do {
. . .
} while(expresion);
ƒ Mientras
Mientras la expresión sea distinto de 0 se ejecuta el la expresión sea distinto de 0 se ejecuta el
bucle.
ƒ do‐while: el bucle se ejecuta al menos una vez.
d
hil l b l
j t l
Escuela Técnica Superior de Ingeniería Informática
36
Estructuras de control
PROGRAMACIÓ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.
ƒ Actualización: expresión que modifica el valor del A
li ió
ió
difi
l l d l
iterador.
ƒ Inicialización, condición y actualización son todas Inicialización condición y actualización son todas
opcionales.
Escuela Técnica Superior de Ingeniería Informática
37
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
38
Estructuras de datos
PROGRAMACIÓN
ƒ FForma de organizar un conjunto de datos elementales con el d
i
j t d d t
l
t l
l
objetivo de facilitar su manipulación. Un dato elemental es la mínima información que se tiene en un sistema.
ƒ Una
Una estructura de datos define la organización de éstos y un conjunto de 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 para
esta 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
Arrays (Vectores)
PROGRAMACIÓN
ƒ Son variables que contienen una colección consecutiva de datos.
Se declaran entre corchetes, y su tamaño debe ser
ƒ Se declaran entre corchetes, y su tamaño debe ser fijado en tiempo de compilación.
ƒ Se accede a los elementos también entre corchetes. Se accede a los elementos también entre corchetes
Los índices comienzan en 0, y no hay comprobación.
int a[10]; //array de 10 ints
float b[2][10] //array de 2 dimensiones
. . .
a[0] = 10;
b[1][4] = 5.3;
a[20]
[20] = 123;
123 //esto
//
no da
d error de
d compilación
il ió
Escuela Técnica Superior de Ingeniería Informática
40
Arrays o vectores
PROGRAMACIÓN
ƒ Arrays
ƒ Tipos 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 elementos
0
1
2
3
4
25
1
3
4
1
vectorEnteros
vectorEnteros[0]
Tema I.5 T. de datos derivados
vectorEnteros[1]
vectorEnteros[2]
vectorEnteros[3]
Escuela Técnica Superior de Ingeniería Informática
vectorEnteros[4]
41
Arrays (Vectores)
PROGRAMACIÓN
ƒ Al declarar un array se le puede dar valores iniciales a sus elementos:
int
int
int
i t
int
a[4] = {13,
{13 1,
1 27,
27 1289};
b[] = {1, 3, 5, 7, 9};
c[4] = {23, 12}; //c[2] y c[3] sin inicializar
d[2] = {12,
{12 24,
24 91,
91 103};
103} //warning
//
i
ƒ Si
Si no se especifica el tamaño, tomará el del número no se especifica el tamaño tomará el del número
de elementos inicializados.
Si se inicializan menos del tamaño los no
ƒ Si se inicializan menos del tamaño, los no inicializados tendrán basura.
Si se inicializan más del tamaño el compilador dará
ƒ Si se inicializan más del tamaño, el compilador dará un aviso.
Escuela Técnica Superior de Ingeniería Informática
42
Punteros
PROGRAMACIÓN
ƒ Concepto de variable
ƒ Región en memoria reservada para almacenar un dato de un tipo determinado
tipo determinado
ƒ Posición de memoria inicial
ƒ Tamaño en bytes
y
0xA031
0xA032
0xA033
65
1 byte
3489
4 bytes
0xA034
char letra = ‘A’;
unsigned int entero = 3489;
0xA038
Tema I.5 T. de datos derivados
Escuela Técnica Superior de Ingeniería Informática
43
Punteros
PROGRAMACIÓ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 datoReal =123.4;
float *float *
pDatoReal = &datoReal; pDatoReal; 0xFE87A1
0 A030
0xA030
0xFE87A2
0xA031
123.4
0xFE87A6
Tema I.5 T. de datos derivados
0xFE87A2
0xF4532
4 bytes
4 bytes
0xA035
Escuela Técnica Superior de Ingeniería Informática
44
Punteros
PROGRAMACIÓ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 variable.
bl
int a = 0;
int *b;
b = &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
Punteros
PROGRAMACIÓN
ƒ Operaciones:
ƒ Los punteros se pueden sumar, restar, etc
ƒ Esas operaciones se hacen en múltiplos del tamaño del p
p
dato apuntado.
int *a = . . . . //a apunta a algún lugar
a = a + 1; //ahora apunta sizeof(int) más adelante
a = a + 4; //ahora apunta 4*sizeof(int) más adelante
Escuela Técnica Superior de Ingeniería Informática
46
Punteros – Memoria dinámica
PROGRAMACIÓ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 llamadas malloc 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 un zona de memoria de size
bytes Como devuelve un
puntero void* hay que convertirlo al tipo de puntero que se quiere usar
que se quiere usar.
ƒ void free(void *ptr): libera la zona de memoria apuntada por ptr
t d
t y obtenida previamente con malloc
bt id
i
t
ll
Escuela Técnica Superior de Ingeniería Informática
47
Punteros – Memoria dinámica
PROGRAMACIÓN
ƒ Ejemplo:
int *a, *b; // punteros a enteros
//se reserva espacio en memoria para un entero
//a apunta a ese espacio de memoria
a = (int *) malloc (1*sizeof(int));
//se reserva espacio en memoria para 16 enteros
//b apunta a ese espacio de memoria
b = (int *) malloc (16*sizeof(int));
//
//se
libera el espacio
p
del primer
p
malloc
free(a);
//se libera el espacio del segundo malloc
free(b);
Escuela Técnica Superior de Ingeniería Informática
48
Relación entre punteros y arrays
PROGRAMACIÓ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 un Un puntero al primer elemento de una colección puede usarse como un
array. int vectorEnteros[]={25,1,3,4,1};
0 A010
0xA010
0xA014
0 A018
0xA018
0xA01C
0 A020
0xA020
0xA024
25
vectoEnteros[0] o *(vectorEnteros)
1
vectoEnteros[1] o *(vectorEnteros+1)
(
)
3
vectoEnteros[2] o *(vectorEnteros+2)
4
1
[ ] (
)
vectoEnteros[3] o *(vectorEnteros+3)
vectoEnteros[4] o *(vectorEnteros+4)
…
Tema I.5 T. de datos derivados
Escuela Técnica Superior de Ingeniería Informática
49
Arrays y punteros
PROGRAMACIÓ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
,
p
lugar al que apunta.
int a[16]; //array de 16 elementos
int s1 = sizeof(a); //s1 valdrá 16*sizeof(int)
int *b = (int *) malloc (128*sizeof(int);
//b es un puntero
//
p
a una colección de 128 ints
int 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
Strings
PROGRAMACIÓ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 string
un inmediato que representa un string.
char string1[] = “Hola”;
char *string2 = “Hola”;
char *string3[]
string3[] = {‘H’
{ H , ‘o’
o , ‘l’
l , ‘a’
a , ‘\0’}
\0 }
//Los 3 strings son iguales
Escuela Técnica Superior de Ingeniería Informática
51
Strings ‐ Funciones
PROGRAMACIÓ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
Registros
PROGRAMACIÓN
ƒ Son tipos compuestos formados por elementos heterogéneos.
Dentro del registro cada elemento tiene un
ƒ Dentro del registro cada elemento tiene un identificador y un tipo.
//Declaración del registro
struct Complejo {
float real;
float imag;
};
//Declaración de variables del tipo registro
struct Complejo uncomplejo, otrocomplejo;
Escuela Técnica Superior de Ingeniería Informática
53
Registros
PROGRAMACIÓN
ƒ Para acceder a los elementos de un registro estructura se utiliza el operador punto (.)
uncomplejo.real
p j
= 1.3;
;
uncomplejo.imag = 2.7;
ƒ Si
Si se trata de un puntero a registro se puede atajar t t d
t
it
d t j
con el operador flecha (‐>)
struct Complejo *a =
(struct Complejo
p j *)malloc(sizeof(struct Complejo));
p j
;
a->real = 2.4; //lo mismo que (*a).real = 2.4;
a->imag
a
>imag = 3.14; //lo mismo que (
(*a).imag
a).imag = 3.14;
Escuela Técnica Superior de Ingeniería Informática
54
Estructuras de datos avanzadas
PROGRAMACIÓN
ƒ Listas Enlazadas Li t E l d
ƒ Listas Simples
ƒ Listas Doblemente Enlazadas
ƒ Listas Circulares
ƒ Colas (FIFO: First In ‐ First Out)
ƒ Pilas (LIFO: Last In ‐ First Out)
ƒ Árboles ƒ Árboles Binarios
Á b l Bi i
ƒ Tablas 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
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
56
Entrada/Salida
PROGRAMACIÓN
ƒ Definidas en stdio.h
ƒ Funciones disponibles para entrada/salida:
ƒ
ƒ
ƒ
ƒ
printf: permite escribir en la pantalla
printf:
permite escribir en la pantalla
getchar/putchar : leer/escribir un caracter.
scanf : para leer del teclado con formato
scanf : 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
printf
PROGRAMACIÓN
i t printf(const
int
i tf(
t char
h
*f
*format,
t . . .);
)
ƒ *format
format es el string que se imprimirá en pantalla. 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 de
será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
Entrada/Salida
PROGRAMACIÓN
ƒ Se debe especificar el formato de cada dato a utilizar
[fl
[flags]
] [
[ancho][.precisión]
h ][
i ió ] [l
[longitud]
it d] especificador_formato
ifi d
f
t
Especificador de formato Descripción
%c
%d carácter indi id al
carácter individual
%i %u
entero decimal con signo
entero decimal sin signo
g
%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
%E
d bl
double con notación exponencial
ió
i l
%g
%G
double
%p
valor de un puntero
valor de un puntero
%s
cadena de caracteres
Escuela Técnica Superior de Ingeniería Informática
59
scanf
PROGRAMACIÓN
ƒ Lectura por teclado de los datos de entrada
scanf (cadena_de_control,
_ _
&var1, &var2, …);
ƒ cadena_de_control
ƒ contiene especificadores de formato
ƒ establecen la forma de leer los datos
ƒ son los mismos que los utilizados en printf
ƒ tantos especificadores como datos a leer
int limite;
printf("Introduzca el limite superior de la serie: ");
scanf("%d",
f("%d" &limite);
&li i )
Escuela Técnica Superior de Ingeniería Informática
60
Entrada/Salida con ficheros
PROGRAMACIÓ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
fwrite: escribir datos a un fichero.
ibi d
fi h
fprintf/fscanf: igual que printf y scanf pero con ficheros en lugar de stdout y stdin.
de stdout
y stdin
ƒ fputs/fgets: escribe/lee una línea completa de un fichero.
Escuela Técnica Superior de Ingeniería Informática
61
Entrada/Salida con ficheros
PROGRAMACIÓN
ƒ Apertura de un archivo
A
d
hi
FILE* fopen(const char* nombreArchivo, const char* modo);
Modo Descripción
r
Solo lectura
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.
a+
Lectura desde comienzo y escritura desde el final. ƒ Devuelve un puntero a NULL si no se puede abrir el archivo
Tema I.7 Otros aspectos
Escuela Técnica Superior de Ingeniería Informática
62
Entrada/Salida con ficheros
PROGRAMACIÓN
ƒ Cierre de archivos
Ci
d
hi
int fclose( FILE* pf);
ƒ Importancia de cerrar un fichero
ƒ llos flujos FILE
fl j FILE llevan asociado un buffer intermedio
ll
i d
b ff i t
di
ƒ este buffer sólo se vuelca al fichero cuando esta lleno
ƒ de esta forma se consigue reducir el número de accesos a un de esta forma se consigue reducir el número de accesos a un
fichero durante la ejecución de un programa
ƒ sino 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
Tema I.7 Otros aspectos
Escuela Técnica Superior de Ingeniería Informática
63
Entrada/Salida con ficheros
PROGRAMACIÓN
ƒ Funciones de E/S de ficheros de texto
ƒ fgetc() / fputc()
int fputc(int c, FILE* pf);
int fgetc(FILE* pf);
ƒ fgets() / fputs()
int fputs (const char *cad, FILE *pf);
char* fgets(char* cad, int n, FILE *pf );
ƒ fscanf() / fprintf()
int fprintf (FILE* PF, const char* cadControl,…);
int fscanf(FILE* pf, const char* cadControl, …);
(
p
)
Tema I.7 Otros aspectos
Escuela Técnica Superior de Ingeniería Informática
64
Entrada/Salida con ficheros
PROGRAMACIÓN
ƒ Funciones de E/S de ficheros binarios
ƒ En los ficheros binarios la información se escribe tal cual se almacena en memoria
ƒ Optimiza el tamaño ocupada por un archivo
ƒ fread()
f
() / fwrite()
f
()
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);
Tema I.7 Otros aspectos
Escuela Técnica Superior de Ingeniería Informática
65
Otras utilidades
PROGRAMACIÓ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 mecanismo
ƒ La 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 error
que dejan las funciones el código de error.
ƒ La función strerror(int errno) convierte el código de error a una cadena de texto más explicativa.
d
d t t
á
li ti
Escuela Técnica Superior de Ingeniería Informática
66
Otras utilidades
PROGRAMACIÓN
ƒ Ejemplo:
#include <stdio.h>
#include
i l d <errno.h>
h //Para
//
errno
#include <string.h> //Para strerror
int
i
t main()
i ()
{
FILE *f1;
f1 = fopen(
fopen("./out.txt
/out txt", "r+");
r+ );
if(f1 == NULL)
printf("Error al abrir el fichero.\n%s\n“,strerror(errno));
else
fprintf(f1,”Hola mundo\n");
}
Escuela Técnica Superior de Ingeniería Informática
67
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
68
Funciones
PROGRAMACIÓ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ón
int media(int a, int b);
//Definición de la función
int media(int a, int b)
{
int result;
result = (a + b)/2;
return result;
}
Escuela Técnica Superior de Ingeniería Informática
69
Funciones
PROGRAMACIÓN
ƒ Sintaxis:
Nombre
Argumentos
Tipo del valor de Ti
d l l d
retorno
Inicio y fin del cuerpo de la función
int media(int a, int b)
{
int result;
result = (a + b)/2;
return result;
}
Valor de retorno
Escuela Técnica Superior de Ingeniería Informática
70
Funciones ‐ Argumentos
PROGRAMACIÓ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
void
id i
intercambia(int
bi (i
*a,
*
int
i
*b) {
int aux;
aux = *a;
* = *b;
*a
*b
*b = *aux;
}
//Llamada a la función
int x = 10, y = 20;
. . .
intercambia(&x, &y);
Escuela Técnica Superior de Ingeniería Informática
71
Funciones ‐ Recursividad
PROGRAMACIÓN
ƒ U
Una función es recursiva si durante su ejecución f ió
i
id
j
ió
tiene una llamada a si misma
ƒ Se distingue entre:
S di i
ƒ Recursividad directa
ƒ Recursividad indirecta: varias se llaman unas a otras R
i id d i di
i
ll
formando ciclos
ƒ Toda
Toda función recursiva ha de presentar al menos una función recursiva ha de presentar al menos una
condición de terminación
ƒ Ejemplos:
ƒ Cálculo del factorial mediante recursividad directa
Escuela Técnica Superior de Ingeniería Informática
72
La función main
PROGRAMACIÓN
ƒ La función main es el punto de entrada del programa.
Puede recibir argumentos que serán los argumentos
ƒ Puede 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 entrada del array es uno de los argumentos.
Escuela Técnica Superior de Ingeniería Informática
73
La función main
PROGRAMACIÓN
ƒ Ejemplo:
#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++)
i )
{
printf("Argumento %d = %s\n", i,argv[i]);
}
return 0;
}
Escuela Técnica Superior de Ingeniería Informática
74
Índice
PROGRAMACIÓN
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
ƒ
Introducción a la programación
Lenguaje C
Programación estructurada
Programación estructurada
Variables
Operadores
Estructuras de control
Estructuras de datos
Entrada/Salida
Funciones
Aplicaciones modulares
Escuela Técnica Superior de Ingeniería Informática
75
Aplicaciones modulares
PROGRAMACIÓN
ƒ La definición de un módulo en C viene dada por:
L d fi i ió d
ód l
C i
d d
ƒ Un archivo de cabecera (.h)
ƒD
Define la interfaz del módulo, es decir, qué ofrece el módulo fi l i t f d l ód l
d i
é f
l ód l
definido
ƒ Debería contener: definiciones de tipos y declaraciones de p y
funciones (prototipos)
ƒ Un archivo fuente (.c)
ƒ Define los detalles de implementación del módulo
f l d ll d
l
ó d l ód l
ƒ Inclusión de su correspondiente fichero de cabecera ( c ude)
(#include)
ƒ Definición de funciones declaradas y no declaradas en el fichero de cabecera
Escuela Técnica Superior de Ingeniería Informática
76
Aplicaciones modulares
PROGRAMACIÓ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 valores
primitivas que se pueden realizar sobre esos valores
ƒ La definición de un TAD implica la definición de:
ƒ Un interfaz público
Un 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
Librerias
PROGRAMACIÓ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
Librería estática
PROGRAMACIÓN
ƒ Creación: C
ió
ƒ 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 objeto
ƒ Crear 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
p
dice al comando ar que tiene que insertar (o reemplazar si ya están dentro) los ficheros objeto en la librería.
ƒ Compilación:
ƒ cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
L<path2> ... ‐llibreria1 ‐llibreria2 ƒ Los ‐llibreria
L llib i son para indicar que se debe coger esa librería. El prefijo i di
d b
lib í El
fij
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
Librería dinámica
PROGRAMACIÓN
ƒ Creación: C
ió
ƒ Compilar los fuentes, igual que antes, para obtener los objetos.
ƒ Crear la librería con el comando ld. Las opciones para este comando Crear 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 p
q
y
opción ‐shared le indica que debe hacer una librería y no un ejecutable (opción por defecto). ƒ Compilación:
ƒ cc ‐o miprograma miprograma.c ‐I<path1> ‐I<path2> ... ‐L<path1> ‐
i
i
I< th1> I< th2>
L< th1>
L<path2> ... ‐Bdynamic ‐llibreria1 ‐llibreria2 ƒ Definir la variable de entorno LD_LIBRARY_PATH, en la que ponemos todos los directorios donde haya librerías dinámicas de interés. d l di
i d d h
lib í di á i
d i
é
ƒ $ LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path1>:<path2>:<path3> $ export LD_LIBRARY_PATH Escuela Técnica Superior de Ingeniería Informática
80
Makefile
PROGRAMACIÓN
ƒ Para
Para simplificar el proceso de compilación lo habitual es hacer un fichero simplificar el proceso de compilación lo habitual es hacer un fichero
Makefile en el mismo directorio donde estén los fuentes y utilizar make
para compilarla
Posible 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
programa.o
o
programa.o : programa.c
ƒ Reglas patrón: %.o : %.c
$(CC) $(CFLAGS) $< -o $@
Escuela Técnica Superior de Ingeniería Informática
81
Makefile
PROGRAMACIÓN
ƒ Creación de librerias:
ƒ Librería estática: ƒ CFLAGS=‐I<path1> ‐I<path2> ...
libnombre.a: libnombre.a (objeto1.o ojbeto2.o ...)
ƒ Librería dinámica
Lib í di á i
ƒ liblibreria.so: objeto1.c objeto2.c ...
cc ‐c ‐o objeto1 o objeto1 c
cc ‐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
Descargar