82
PROGRAMACIÓN PROGRAMACIÓN Curso 0: Programación Alberto Sánchez <[email protected]> Alberto Sánchez <[email protected]> Escuela Técnica Superior de Ingeniería Informática 1

Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez Escuela Técnica Superior de Ingeniería Informática 1

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

PROGRAMACIÓNPROGRAMACIÓN

Curso 0: Programación

Alberto Sánchez <[email protected]>Alberto Sánchez <[email protected]>

Escuela Técnica Superior de Ingeniería Informática 1

Page 2: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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

Page 3: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 4: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares4

Page 5: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 6: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 7: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares7

Page 8: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 9: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 10: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 11: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 12: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 13: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 14: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 15: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 16: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 17: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares17

Page 18: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 19: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 20: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 21: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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;}

Page 22: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 23: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 24: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 25: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 26: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 27: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares27

Page 28: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 29: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 30: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 31: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 32: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares32

Page 33: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 34: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 35: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 36: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 37: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 38: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares38

Page 39: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 40: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 41: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 42: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 43: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 44: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 45: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 46: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 47: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 48: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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);

Page 49: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 50: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 51: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 52: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 53: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 54: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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;

Page 55: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 56: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares56

Page 57: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 58: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 59: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 60: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 61: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 62: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 63: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 64: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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 )

Page 65: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 66: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 67: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 68: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares68

Page 69: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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;}

Page 70: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 71: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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);

Page 72: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 73: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 74: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 75: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  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 modulares75

Page 76: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 77: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 78: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 79: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 80: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 81: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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

Page 82: Curso 0: Programación · PROGRAMACIÓN Curso 0: Programación Alberto Sánchez  Escuela Técnica Superior de Ingeniería Informática 1

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