Vous êtes sur la page 1sur 154

Administración de Sistemas Informáticos

Fundamentos de Programación

IES GRAN CAPITÁN


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Introducción..............................................................................................8
Conceptos de Algoritmo y Programa........................................................8
Pasos para la resolución de un problema ................................................9
Datos: tipos y características .................................................................10
Tipos de datos .............................................................................................................11
Características de las variables ...................................................................................12
Variables simples y compuestas..................................................................................12
Operadores y Expresiones.....................................................................13
Lenguaje e instrucciones........................................................................15
Evolución y clasificación de los lenguajes de programación.......................................15
Métodos de expresión de un algoritmo ........................................................................16

Tipos de instrucciones............................................................................19
1.- Instrucción de declaración de datos .......................................................................21
2.- Instrucción de Entrada............................................................................................21
3.- Instrucción de salida ...............................................................................................21
4.- Instrucción de asignación .......................................................................................22
5.- Instrucción compuesta............................................................................................22
6.- Instrucción selectiva simple ....................................................................................22
7.- Instrucción selectiva compuesta. ............................................................................23
8.- Instrucción selectiva múltiple. .................................................................................24
9.- Instrucciones de control repetitivas.........................................................................25
10.- Instrucción de salto...............................................................................................27
Elementos y características de un programa .........................................28
Variables auxiliares......................................................................................................28
Características de un programa...................................................................................29

Introducción............................................................................................31
Clasificación de los módulos ..................................................................32
En función de su situación con respecto al módulo que lo invoca ...............................32
Atendiendo al posible retorno de un valor....................................................................32
En función de cuando ha sido desarrollado .................................................................32
En función del número de módulos distintos que realizan la llamada..........................32
Ámbito de las variables ..........................................................................32
Funciones y Procedimientos ..................................................................33
Declaración de una función de usuario........................................................................33
Parámetros ..................................................................................................................33
Invocación de una función ...........................................................................................34
Paso de parámetros a una función ..............................................................................34
Recursividad ..........................................................................................34
Implementación de la recursividad...............................................................................35
Recursividad y variables locales..................................................................................36
Tipos de recursividad...................................................................................................36

Conceptos Básicos.................................................................................37
Clasificación de Tablas ..........................................................................37
Tablas Unidimensionales.............................................................................................37
Tablas bidimensionales ...............................................................................................38

Índice Página 2 de 154


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Tablas multidimensionales...........................................................................................39
Operaciones con Tablas ........................................................................39
Declaración de una tabla .............................................................................................39
Recorrido o acceso secuencial ....................................................................................39
Carga de datos ............................................................................................................40
Lectura.........................................................................................................................41
Escritura.......................................................................................................................41
Operaciones de búsqueda y ordenación en tablas ................................41
Búsqueda secuencial o lineal un vector desordenado .................................................42
Búsqueda secuencial o lineal en un vector ordenado..................................................42
Búsqueda binaria o dicotómica en un vector ordenado ...............................................42
Ordenación de un vector..............................................................................................43

Conceptos y definiciones .......................................................................44


Clasificación de registros .......................................................................45
Registros de longitud fija..............................................................................................45
Registros de longitud variable........................................................................................45
Operaciones con registros .....................................................................45
Clasificación de ficheros.........................................................................46
Permanentes ...............................................................................................................46
Temporales..................................................................................................................46
Operaciones con ficheros.......................................................................46
Organización y acceso ...........................................................................47
Ficheros de organización secuencial ..........................................................................48
Ficheros de organización relativa ................................................................................49
Organización directa ....................................................................................................49
Organización aleatoria o indirecta................................................................................50
Variantes de la organización secuencial......................................................................51
Organización secuencial encadenada .........................................................................51
Organización secuencial indexada ..............................................................................51
Organización secuencial indexada-encadenada..........................................................52
Tratamiento de ficheros secuenciales...................................................53
Definición del fichero....................................................................................................53
Asígnación física..........................................................................................................53
Apertura del fichero......................................................................................................53
Cierre del fichero..........................................................................................................54
Escritura en el fichero ..................................................................................................54
Lectura del fichero .......................................................................................................54
Consultas.....................................................................................................................54
Partición de un fichero .................................................................................................56
Rupturas de control......................................................................................................56
Actualización................................................................................................................56

Punteros.................................................................................................58
Operaciones básicas con punteros...............................................................................58
Listas......................................................................................................59
Listas enlazadas o encadenadas.................................................................................59
Listas doblemente enlazadas.......................................................................................61
Listas circulares ...........................................................................................................61
Pilas.............................................................................................................................62

Índice Página 3 de 154


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Colas............................................................................................................................62
Estructuras dinámicas no lineales..........................................................63
Árboles.........................................................................................................................63
!
Introducción............................................................................................67
Características del lenguaje C ...............................................................67
Identificadores........................................................................................67
Tipos de datos básicos...........................................................................68
Tipo entero...................................................................................................................68
Tipo de dato real..........................................................................................................68
Tipo de dato carácter...................................................................................................69
Tipo de dato vacío .......................................................................................................69
Modificadores de tipo básico..................................................................69
Modificador short .........................................................................................................70
Modificador long...........................................................................................................70
Modificados signed ......................................................................................................70
Modificador unsigned...................................................................................................70
Declaración de variables ........................................................................70
Operadores ............................................................................................71
Indicadores de expresión.............................................................................................71
Operadores aritméticos................................................................................................71
Operadores relacionales y lógicos...............................................................................72
Operadores para el tratamiento de bits........................................................................73
Operadores de asignación...........................................................................................73
Operador coma............................................................................................................73
Operador de tamaño....................................................................................................73
Operador de molde......................................................................................................74
Operador condicional...................................................................................................74
Orden de prioridad de los operadores .........................................................................74
Expresiones .................................................................................................................75
!
Introducción............................................................................................76
Directivas del preprocesador .......................................................................................77
Declaraciones globales................................................................................................77
Función main().............................................................................................................77
Funciones definidas por el usuario ..............................................................................78
Comentarios ................................................................................................................78
Creación de un programa ............................................................................................78
Depuración de un programa en C................................................................................78
Instrucciones de declaración..................................................................80
Instrucciones de asignación ...................................................................81
Instrucciones de entrada y salida ...........................................................81
Función de entrada (teclado) .......................................................................................81
Funciones de salida (pantalla) .....................................................................................83
Estructuras de control ............................................................................85
Alternativa simple.........................................................................................................85
Alternativa doble ..........................................................................................................85
Bloque de sentencias if … else-if.................................................................................86
Sentencia if … else abreviada con el operador ? :.......................................................86
Alternativa múltiple. Sentencia switch() .......................................................................86

Índice Página 4 de 154


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Estructura repetitiva while............................................................................................87


Estructura repetitiva do-while.......................................................................................88
Estructura repetitiva for................................................................................................88
Sentencia break...........................................................................................................88
Sentencia continue ......................................................................................................88
Sentencia goto.............................................................................................................89
"
Estructura de una función ......................................................................90
Definición de una función.............................................................................................90
Llamada a una función.................................................................................................91
Declaración de una función. Prototipo .........................................................................91
Parámetros de una función ....................................................................92
Paso de parámetros por valor......................................................................................92
Paso de parámetro por referencia ...............................................................................92
Parámetros const de una función ................................................................................93
Ámbito ....................................................................................................93
Ámbito del programa....................................................................................................93
Ámbito de archivo fuente .............................................................................................94
Ámbito de una función .................................................................................................94
Ámbito de bloque.........................................................................................................94
Funciones locales ........................................................................................................94
Clases de almacenamiento ....................................................................94
Variables automáticas..................................................................................................94
Variables externas .......................................................................................................94
Variables registro.........................................................................................................95
Variables estáticas.......................................................................................................95
Funciones de biblioteca..........................................................................96
#
Introducción............................................................................................97
arrays unidimensionales.........................................................................97
Declaración..................................................................................................................97
Acceso a los datos.......................................................................................................97
Carga de datos ............................................................................................................97
arrays bidimensionales...........................................................................98
Declaración..................................................................................................................98
Acceso a los datos.......................................................................................................98
Carga de datos ............................................................................................................99
Arrays multidimensionales .....................................................................99
arrays de caracteres.............................................................................100
Declaración................................................................................................................100
Acceso a datos ..........................................................................................................100
Carga de datos ..........................................................................................................100
Funciones de entrada/salida para cadenas..........................................101
Arrays indeterminados .........................................................................101
# "
Introducción..........................................................................................103
Conceptos básicos ...............................................................................103
Definición de punteros y asignación de direcciones ..................................................103
Indirección .................................................................................................................104
Operaciones con punteros ...................................................................105

Índice Página 5 de 154


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Asignación de punteros .............................................................................................105


Aritmética de punteros...............................................................................................105
Comparación de punteros..........................................................................................106
Punteros y Arrays.................................................................................106
Punteros y arrays unidimensionales ..........................................................................106
Punteros y cadenas de caracteres.............................................................................108
Punteros y arrays bidimensionales ............................................................................108
Arrays de punteros ...............................................................................108
Indirección múltiple...............................................................................109
Funciones de asignación dinámica de memoria ..................................109

Introducción..........................................................................................113
Estructuras ...........................................................................................113
Definición de variables...............................................................................................113
Referencia a elementos .............................................................................................114
Carga de datos ..........................................................................................................115
Estructuras anidadas............................................................................115
Array de estructuras .............................................................................116
Punteros y estructuras .........................................................................116
Funciones y estructuras .......................................................................117
Paso de elementos individuales.................................................................................117
Paso de la estructura completa..................................................................................117
Campos de bits ....................................................................................118
Uniones ................................................................................................119
Enumeraciones ....................................................................................120
Tipos de datos definidos por el usuario................................................122
$
Introducción..........................................................................................123
Listas enlazadas simples .....................................................................123
Creación ....................................................................................................................123
Insertar un nodo en la lista.........................................................................................123
Borrar un nodo de la lista...........................................................................................124
Recorrido de la lista en sentido ascendente ..............................................................125
Recorrido de la lista en sentido descendente ............................................................125
Búsqueda de un nodo................................................................................................126
Listas enlazadas dobles .......................................................................126
Creación ....................................................................................................................126
Insertar un nodo en la lista.........................................................................................126
Borrar un nodo de la lista...........................................................................................127
Recorrido de la lista en sentido ascendente ..............................................................128
Recorrido de la lista en sentido descendente ............................................................128
Recorrido en ambos sentidos ....................................................................................129
Listas circulares....................................................................................129
Creación ....................................................................................................................129
Insertar un nodo en la lista.........................................................................................130
Borrar un nodo en la lista...........................................................................................131
Recorrido de la lista en sentido ascendente ..............................................................132
Búsqueda de un nodo................................................................................................132
Pilas .....................................................................................................133
Creación ....................................................................................................................133

Índice Página 6 de 154


IES Gran Capitan Fundamentos de Programación – José Ramón Albendín

Apilar..........................................................................................................................133
Desapilar....................................................................................................................133
Cima de la pila ...........................................................................................................134
Búsqueda de un nodo................................................................................................134
Colas ....................................................................................................135
Creación ....................................................................................................................135
Insertar un nodo en la cola ........................................................................................135
Borrado de un nodo de la cola...................................................................................136
Recorrido de una cola................................................................................................136
Búsqueda de un nodo en la cola................................................................................136

FLUJOS ...............................................................................................138
Puntero FILE ........................................................................................138
Apertura de un archivo .........................................................................139
Modos de apertura de un archivo ..............................................................................140
NULL Y EOF..............................................................................................................141
Cierre de archivos......................................................................................................141
Creación de un archivo secuencial.......................................................142
Funciones putc () y fputc ( ) .......................................................................................142
Funciones getc () y fgetc ( ) .......................................................................................142
Funciones fputs () y fgets () .......................................................................................143
Funciones fprintf () y fscanf () ....................................................................................144
Función feof ( )...........................................................................................................145
Función rewind () .......................................................................................................146
Archivos binarios en C .........................................................................146
Función de salida fwrite ( ).........................................................................................147
Función de lectura f read ( ).......................................................................................148
Funciones para acceso aleatorio..........................................................149
Función fseek() ..........................................................................................................149
Función ftell ( ) ...........................................................................................................154

Índice Página 7 de 154


IES Gran Capitán Fundamentos de Programación

1
INTRODUCCIÓN
Metodología de la programación

%&'(&)*)+,-.

!
%&'(&)*) "
%&'(&)*)+,-.
CONCEPTOS DE ALGORITMO Y PROGRAMA
#
$ %
!

& '

& '
• &/+,0' (
• ,.,1' ( )
• '&&/+1' ( *
& !

,.01&2++,-.
3/.(2)4/ 5/ %&'(&)*)+,-.
%&'(&)*) &
!
+ ,

-
.

Tema 1 – Metodología de la Programación Página 8 de 154


IES Gran Capitán Fundamentos de Programación

'

PASOS PARA LA RESOLUCIÓN DE UN PROBLEMA


!
'
.63,0,0 ( -
'
* (
/
!
(
! ' + ,

0
!
/0'32+,-. ( 1

(0 "
0

1 (
- .

.01)3)+,-. ( & !
'
(1 )
#

2 (*

! -
)
+ ! ,
! + !
,
.17&%&/1/ ( 2
3 '

Tema 1 – Metodología de la Programación Página 9 de 154


IES Gran Capitán Fundamentos de Programación

4 ! '& !
! 2

'*%,3)5'& ( 2
! !

5 ' %

( !
!
5/%2&)+,-.
0

* (& !

6 ( ! ) ! - 1
%
! !

DATOS: TIPOS Y CARACTERÍSTICAS


7 !
)

"
"
1
! !

Tema 1 – Metodología de la Programación Página 10 de 154


IES Gran Capitán Fundamentos de Programación

Tipos de datos
0 ) !
'
2*7&,+'0 ( 1
! !
!
) !
%

8
) !
' .2*7&,+'0 ( '
(&

+9 , 1
%
:; :;
(0 :
! '! .
) '<+ , : +! ,
8 (=
0 ) ! '
'.01).1/0 ( & !
# ! &
- - % ! %

+ , + , '
& ! '9
&
' >? / @A >1B 59@ >:C<::@ >1DE*8F @
8)&,)93/0 ( & !
!
2 !
,5/.1,:,+)5'& !
! !
)0,(.)+,-.
!
+! , % + ,
1 +! , > @+ ,

! (
! ! !
( ! !

1' G > @
' > @
-
!
! !
!

Tema 1 – Metodología de la Programación Página 11 de 154


IES Gran Capitán Fundamentos de Programación

!
-
2 ! ( ! ! 0

# #H: ! # : ! #
Características de las variables
2 ! % '
'*9&/ ( ! 1
! ' -
) )
,%' ( 1 ! !
) '
* !
!
!
!
! 1
! : % ' :A
!
' ! !

8)3'& ( ! !

*9,1' ( !
- ! % !
!
> @ !

2&)+,-. ( & ! ! -

- ! ) ! > @+
,
% !
A ! + ,
+
- % ,
8,0,9,3,5)5 ( & ! ! + , -
& ! !
> @+
,
!
% ! )
!
Variables simples y compuestas
! ) ! !
!
! 0 !

Tema 1 – Metodología de la Programación Página 12 de 154


IES Gran Capitán Fundamentos de Programación

& ! ! !
! ) !
'
4#0242&28
#86FE 24 8 *4E 114D# &6#80
1 8F 148#

. 1 4 0 = 0B# 1 :<<:
! 4#0242&28 ' #86FE + , 24 8 + ,
*4E 114D# + , &6#80 + ,
! *4E 114D# ! '1 8F 14D#
+ ,
* !
# !
! ! !
0 ! ! &6#80
!
% '
4#0242&28 #86FE >. 1 @
4#0242&28 24 8 >4 0@
4#0242&28 *4E 1148# 1 > = 0B#@
4#0242&28 *4E 1148# 8F 148# >1 @
4#0242&28 &6#80 >:<<:@
# !
!
OPERADORES Y EXPRESIONES
!
'%/&)5'&/0 /;%&/0,'./0 -
! + % , ,.01&2++,'./0 %
+ ! ,
* -
B ! ! !
2 - !

0 ) '
& - 'C C; > @
! - ' I #86FE
& B ! B
- ' IH7 I(C +IJ7, B +7(5,
0 ) ! - K '
&,1*71,+)0 ( * 0
' 5H1 IJK
!
'
8 0
L JJ - : 3JJ5

Tema 1 – Metodología de la Programación Página 13 de 154


IES Gran Capitán Fundamentos de Programación

J 6 5 3J5
B *! 5 3B5
H 0 K 3H5
( E K 3(5
-

0 %
, - 0
!
- 2

3:).2*7&,+)0 ( 0
B ! B ' #86FE H
>M ! @ H
/3)+,'.)3/0 ' ''3/).)0 ( 14 E28 = 08 0

-
!
8 0
N 6 3N5
O 6 3O5
G 4 3G5
ON * 3ON5
NG 6 3NG5
OG 6 3OG5
-

8 0
#82 # +#8, : #82 3JJ5
#* 1 +7, 5 3N5 #* IG<
8E * +8, K 3N5 IG<
I8E * - ! C 3N5 I8E IG<
*
! +! , -
-

! 0 I 7
- '
I 7 I #* 7 I 8E 7 I I8E 7 #82 I #82 7
3 3 3 3 = = =
3 = = 3 3 = 3

Tema 1 – Metodología de la Programación Página 14 de 154


IES Gran Capitán Fundamentos de Programación

= 3 = 3 3 3 =
= = = = = 3 3

LENGUAJE E INSTRUCCIONES
7

%&,*,1,<)0
&
!
! !
Evolución y clasificación de los lenguajes de programación
0 ! > @ )
! > ! @

! 1 ) !
! !
/.(2)4/ *6=2,.) (
< :

! %

* ! %

/.(2)4/0 /.0)*93)5'&/0 ( !%
! (

! %
- %

+
, -
% + ! ,
-
0 % +
' K9P C9P ,
%
% '
!
/.(2)4/0 5/ )31' .,</3 ( !

+ , ! !
% ' I G + HFH1,
J180+7,BQ ! 1
!

Tema 1 – Metodología de la Programación Página 15 de 154


IES Gran Capitán Fundamentos de Programación

) - !
3/.(2)4/0 5/ > (/./&)+,-.
! ! " P<
1
+ % , !
) !
! ! )
'
1 % ( =8E2E # +=8E 2E # 4F6 :R;P,

* ( 18F8 +18 F 8 )
* * && :RP<, &
- - !
+ - ! , 0
!
18F8 !%
* ( 1+ F 2S2 :RT5, !
1 F
! &#4I
1 F "

1
-
! )
! 1
+ F #U V :RPR,
1

F 041 +F W 0 4 1 *
1 :RP;, 6 - 6 4F6 !
!
CX . ( ) "
CX 0
) !
KX .
0.F* +8E 1 ,
! ! KX .
+3 F 3 1HH ,
Métodos de expresión de un algoritmo
& -
0/25'+-5,(' (

/.(2)4/0 5/ %&'(&)*)+,-. ( -
% 0

,)(&)*)0 5/ :324' (
'

Tema 1 – Metodología de la Programación Página 16 de 154


IES Gran Capitán Fundamentos de Programación

* 8E. #4.E 6 0 ( E
6 !
!

'



• !
* 8E*4#8.E 6 0 ( E
0

'

• % !

• % !
%
• * %

8E. #4.E 6 0 8E*4#8.E 6 0


0% 0%
2 2
+
+ B0, ,
1 1 8
!
+ B0,

4 = 8
+0, ! B0

2 0
+ , !

4
+0,
%

Tema 1 – Metodología de la Programación Página 17 de 154


IES Gran Capitán Fundamentos de Programación

2 * *

+ B0,

* % *

+ B0,

1 1
#
+ B0,
0 1
#
+0,

Tema 1 – Metodología de la Programación Página 18 de 154


IES Gran Capitán Fundamentos de Programación

1
2 Programación Estructurada
" !

'
01&2+12&)0 960,+)0 (
)
K) '
(
! ( ! !

! ( ! ) )
!
/+2&0'0 )901&)+1'0 ( 1 !

)?'.)*,/.1' '5@ 'A. ( ! !


! +
, ! ! !
% ! %
0 ! !
! !

TIPOS DE INSTRUCCIONES
&
!
!
! K. '
: 4
o 4 !
5 4 !
o 4
o 4
o 4
K 4
C 4
; 4

Tema 2 – Programación Estructurada Página 19 de 154


IES Gran Capitán Fundamentos de Programación

o 4 !
o 4 !
o 4 ! )
P 4 !
o F E
o F 64 #2E 0
o F E 24E / 02
T 4
1 K.
! ! ! 2 !
-
'
Programa: NOMBRE DE PROGRAMA
Entorno:
Instrucciones de declaración de variables
Inicio:
Instrucciones
Fin
2 ! !

! 1 !
! !
- %
% *

!
'
nombre_variable_1:tipo_de_datos

variable_1, variable_2, …, variable_3:tipo_de_datos


0 !
)

!
% '

Tema 2 – Programación Estructurada Página 20 de 154


IES Gran Capitán Fundamentos de Programación

1.- Instrucción de declaración de datos


4 %
0
!
!
!
! %
! 0 - '
<nombre_variable>:<tipo>
O N 1

%
!
!
2.- Instrucción de Entrada
!
+ ,
! ! !

O! :N O! 5N O! #N
O! N

Leer <variable> Leer <var1>, <var2>, ...


<varN>
! ! !
!

! !
!
3.- Instrucción de salida
!
- !
! + ,

3 3 O - :N O - 5N
O - N O - #N

Visualizar <expresión> Visualizar <exp1>, <exp2>,


... <exp.>

'

Tema 2 – Programación Estructurada Página 21 de 154


IES Gran Capitán Fundamentos de Programación

Leer EDAD
Visualizar “Nombre completo: “ + NOMBRE + “ “ +
APELLIDOS
) !
* * - !
! !

4.- Instrucción de asignación


+ ,! ! !
- #
% - '

O! N O - N

<variable> <expresión>
O - N - O! N '
A 38
NUMERO A*2-1
NOMBRECOMPLETO NOMBRE + “ Gómez López”
! !
- 5 ! !
: ! #Y6 E8 ) !
-
! #86FE 186 28
5.- Instrucción compuesta
0

6 % !

6.- Instrucción selectiva simple


2
-
+3 E* * E8 = 08,

0
!
!
! !

Tema 2 – Programación Estructurada Página 22 de 154


IES Gran Capitán Fundamentos de Programación

+ , +! ! ,
- + ,
! + ,

0 ! 04 - #

)
! 0 - '
SI <expresión lógica> 4 :
ENTONCES 4 5
<instrucción 1>
<instrucción 2>
...
<instrucción n>
FINSI
'
ocupación = “ACTIVO”
SI edad = 65 ENTONCES
ocupación = “JUBILADO”
FINSI
Visualizar ocupación
! ! P;
! >"#$ %&'( ! 0 ! !
! P; % =4#04
! !
7.- Instrucción selectiva compuesta.
0
04 - #

0 - '
SI <expresión lógica>
ENTONCES 4 : 4 :
<instrucción 1> 4 5 4 5

<instrucción 2>
...
<instrucción n>
SINO
<instrucción 1>
<instrucción 2>
...
<instrucción n>
FINSI
'
Leer número
SI número >= 100 ENTONCES
Visualizar “Número excesivamente alto”

Tema 2 – Programación Estructurada Página 23 de 154


IES Gran Capitán Fundamentos de Programación

SINO
Visualizar “Número correcto”
FINSI
Visualizar número
8.- Instrucción selectiva múltiple.
! ) ! - !
! !

! - ! 0 - '
SEGÚN <expresión>
CASO <expresión 1>
Bloque de instrucciones 1
CASO <expresión 2>
Bloque de instrucciones 2
CASO <expresión 3>
Bloque de instrucciones 3
...
CASO <expresión n>
Bloque de instrucciones n
[OTRO CASO]
Bloque de instrucciones n + 1
FINSEGUN
1 - 0 .Y# ! ) !
O - N - 1 08 0
! - ! O - N
0 ) !
82E8 1 08
0 % '

3 : 3 5 3 # ) !

F F F F 4
4 : 4 5 4 H:

'
SEGÚN nota
CASO 5
Visualizar “Suficiente”
CASO 6
Visualizar “Bien”
CASO 7
Visualizar “Notable”
CASO 8
Visualizar “Notable”
CASO 9
Visualizar “Sobresaliente”

Tema 2 – Programación Estructurada Página 24 de 154


IES Gran Capitán Fundamentos de Programación

CASO 10
Visualizar “Matrícula de Honor”
OTRO CASO
Visualizar “Insuficiente”
FINSEGUN
! ) ! ! * !
! 0 )
! ; !
> (
# %
! 04 04#8 =4#04
'
SI nota = 5 ENTONCES
Visualizar “Suficiente” Z1 [ #8
SINO
SI nota = 6 ENTONCES
Visualizar “Bien” 04
SINO 4
SI nota = 7 OR nota = 8 ENTONCES #
Visualizar “Notable”
SINO
SI nota = 9 ENTONCES
F
Visualizar “Sobresaliente”
SINO
SI nota = 10 ENTONCES
Visualizar “Matrícula de honor”
SINO
Visualizar “Insuficiente”
FINSI
FINSI
FINSI
FINSI
1 :
FINSI
9.- Instrucciones de control repetitivas.
& 92+3/
!
1 OG#

#
2
04 )
4
)
% !

)
1 1 H: '
F E (
! !
F
+ ,

! F '

Tema 2 – Programación Estructurada Página 25 de 154


IES Gran Capitán Fundamentos de Programación

PARA Contador DE <expresión inicio> A <expresión


fin> [INC <expresión incremento>]
Bloque de instrucciones
FIN PARA
E =4# E
O N O N
! ) O N
*) 0 ! !
O +
'0 ! :<
)
PARA a de 1 a 10
Visualizar a*a
FIN PARA
2 % ! '
PARA a DE 10 A 1 INC -1
Visualizar a*a
FIN PARA
F 64 #2E 0 ( 0

! )
B !
2
) ! 0 '
MIENTRAS <expresión lógica>
Instrucciones a repetir
FIN MIENTRAS
6 O + !

'3 )
:<<
Leer número
total número
MIENTRAS total < 100
Visualizar total
Leer número
total = total + número
FIN MIENTRAS
Visualizar total
F E 24E / 02 ( 0

! 0 '
REPETIR
Instrucciones a repetir #
HASTA <expresión lógica>
O +
! 64 #2E 0

Tema 2 – Programación Estructurada Página 26 de 154


IES Gran Capitán Fundamentos de Programación

' ) !
<
REPETIR
Leer número
Visualizar número
HASTA número = 0
& - 0).(&)5' 5/ +-5,('
1
! !
+ , %
!
+ )
,
10.- Instrucción de salto
0

0 - '
SALTO <etiqueta>
* O N

- !
4
'
Programa: Salto condicional
Entorno:
Longitud: Numérico
Área: Numérico #8 Z1 [

#
Inicio:
Leer Longitud 04
SI Longitud < 0 ENTONCES
SALTO Error F
FIN SI
Área Longitud *
Longitud
Visualizar “El valor del
área es: “, Área

Error:
Visualizar “El valor introducido no es
correcto”
Fin

! "

Programa: Salto incondicional


Entorno:
Longitud: Numérico

Tema 2 – Programación Estructurada Página 27 de 154


IES Gran Capitán Fundamentos de Programación

Área: Numérico

Inicio:
Comienzo:
Leer Longitud
Área Longitud * Longitud
Visualizar “El valor del área es: “, Área
SALTO Comienzo
Fin
ELEMENTOS Y CARACTERÍSTICAS DE UN PROGRAMA
Variables auxiliares
'.1)5'& ( ! # <
!
1 ! ! %

' 5< !

Programa: Aprobados
Entorno:
Nota: numérica, Aprob: numérica
i: numérica
Inicio:
Aprob 0
PARA i DE 1 A 20
Leer Nota
SI Nota >= 5 ENTONCES
Aprob Aprob + 1
FIN SI
FIN PARA
Visualizar “Alumnos aprobados: “, Aprob
Fin
1 ! )
E
; ! 0
! %
+2*23)5'& ( 0 !
<
: ! ! ! !
' )
< ! )
:<< ) :<<
Programa: Sumatorio
Entorno:
Total1: numérica, Total2: numérica, Número:
numérica

Inicio:
Total1 0
Total2 0

Tema 2 – Programación Estructurada Página 28 de 154


IES Gran Capitán Fundamentos de Programación

REPETIR
Leer Número
SI Número >= 100 ENTONCES
Total1 Total1 + Número
SINO
Total2 Total2 + Número
FIN SI
HASTA Número = 0
Visualizar “Suma de números mayores que 100:”,
Total1
Visualizar “Suma de números menores que 100:”,
Total2
Fin
! !
) :<<
:<< % ! !
)
.1/&&2%1'& ' A,1+B ( ! ! - !
# < : 0 !

' ) <
!
Programa: Negativo
Entorno:
Neg: numérica, Número: numérica

Inicio:
Neg 0
Leer Número
MIENTRAS Número <> 0
SI Número < 0 ENTONCES
Neg 1
FIN SI
FIN MIENTRAS
SI Neg = 0 ENTONCES
Visualizar “Todos los números introducidos son
positivos”
SINO
Visualizar “Ha habido algún número negativo”
FIN SI
Fin
1 ! * !
) ) ! 0
! * !
< !
* !
Características de un programa

% > @ '

Tema 2 – Programación Estructurada Página 29 de 154


IES Gran Capitán Fundamentos de Programación

/(,9,3,5)5 ( *
'5,:,+)9,3,5)5 ( *
:,+,/.+,) ( * ! -

'&&/++,-. ( *
'523)&,5)5 ( / !

01&2+12&)+,-. ( *
!

Tema 2 – Programación Estructurada Página 30 de 154


IES Gran Capitán Fundamentos de Programación

3
INTRODUCCIÓN
Programación Modular

1 ! !
- "
"
! !

% -

!
% % !

! !
1

2
! %
'
• !

• 1

• =
F

% ! / -
! !
# !

! '
• =

• ! !
• E ! !

• 6

Tema 3 – Programación Modular Página 31 de 154


IES Gran Capitán Fundamentos de Programación

• =

6 : 6 5 6 K

6 5: 6 55 6 K:

0 : 0 5 0 K

CLASIFICACIÓN DE LOS MÓDULOS


En función de su situación con respecto al módulo que lo invoca
• .1/&.' ( 1 !
• ;1/&.' ( 1 !
Atendiendo al posible retorno de un valor
• 2.+,-. ( E ! ! !
! !
-
• &'+/5,*,/.1' ( # - % !
1 ! !
)
En función de cuando ha sido desarrollado
• / %&'(&)*) ( 0
• / 3,9&/&C) ( / !

En función del número de módulos distintos que realizan la llamada


• 29%&'(&)*) ( !
• 21,.) ' 029&21,.) ( ! !
ÁMBITO DE LAS VARIABLES
0 ! !
! ) '
• 3'9)3 ( 0 )
#
+ ! ,

Tema 3 – Programación Modular Página 32 de 154


IES Gran Capitán Fundamentos de Programación

• '+)3 ( 0
!
FUNCIONES Y PROCEDIMIENTOS

&
+
, ! ! *
!
+ ,
! !
1 '
.1/&.)0 (

;1/&.)0 (
2
1

Declaración de una función de usuario


1

)9/+/&) ( 2 - '
Función <Nombre_Función>(Par1:tipo1, Par2:tipo2, ...,
ParN:tipoN):

Tipo_Devolución
O# \= N(#
:' : 5' 5 #'2 #(
1

2 \* ! (2 ! ! !
2/&%' 5/ 3) :2.+,-. ( 1 )
! ! !
&
! ! ) !

!
+ , %
-

Parámetros
'
• '&*)3/0 ( 0
! !

• /)3/0 (
! - !

Tema 3 – Programación Modular Página 33 de 154


IES Gran Capitán Fundamentos de Programación

2 )
#
1 !
!
%
!
Invocación de una función
! -

'
• 0 ! -
• 0 !
• 0
• 0 ! ! !
! !
-
!
Paso de parámetros a una función
7 !

%'& <)3'& !

0 - !

%'& &/:/&/.+,)
+ ,

! ! 1

RECURSIVIDAD
& ! %
! 0
!

1 ! ! -
! '
• > @
• . ! + , !
& ! )
)
! 0 % ! '
Programa: Factorial
Entorno:

Tema 3 – Programación Modular Página 34 de 154


IES Gran Capitán Fundamentos de Programación

fact: numérico, i: numérico, número: numérico

Inicio:
Leer número
fact número
PARA i DE número-1 A 2 INC -1
fact fact * i
FIN PARA

Visualizar “El factorial de “, número, “ es “,


fact
Fin
) '
= + ,G J= + (:,
! ! '
Función Factorial( número:numérico ): numérico
fact: numérico

SI número > 1 ENTONCES


fact número * Factorial( número – 1 )
SINO
fact 1
FIN SI
Devolver fact
! ! !
!
! ! !
! '
• ! ! !
• ) ! !

Implementación de la recursividad
7 + , !
)
+ ,' A
A A
+ ,,
% !
"

"
!
- ! '
% !
% !
%
)
0
- % !
! %

Tema 3 – Programación Modular Página 35 de 154


IES Gran Capitán Fundamentos de Programación

-
! ! ! % >
@
Recursividad y variables locales
! - !
* ! !
! ! !
! ! ! !
E ! ! !

! !

! !

!
1 ! ! !
> @ ! !
Tipos de recursividad
/+2&0,<,5)5 5,&/+1) ( * %
Procedimiento P1
...
P1
...
Retorno
/+2&0,<,5)5 ,.5,&/+1) ( 2 *
!
Procedimiento P1
...
P2
...
Retorno

Procedimiento P2
...
P1
...
Retorno

Tema 3 – Programación Modular Página 36 de 154


IES Gran Capitán Fundamentos de Programación

4 Estructuras Estáticas Internas de


Datos: Tablas
% !
+ , %

)93)0

CONCEPTOS BÁSICOS

)93) ( )
%
3/*/.1' (
'*9&/ 5/ 1)93) (

,%' 5/ 1)93) ( 6 )
+
],
.5,+/ ( ! ! !
!
!
)*)D' 5/ 1)93) ( " ! )
- " % "
- #
++/0' ) 3'0 /3/*/.1'0 ' +'*%'./.1/0 5/ 2.) 1)93) (
!
!

,*/.0,-. 5/ 1)93) ( 3 ) %

CLASIFICACIÓN DE TABLAS
)

Tablas Unidimensionales
0
% )
!
1 !
'
*

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 37 de 154


IES Gran Capitán Fundamentos de Programación

H: H5 HK HC
/3/*/.1' /3/*/.1' $ /3/*/.1' /3/*/.1' /3/*/.1' Y
!
!
!

+ % % ,
! ! '
Nombre_Tabla(índice)
0 * - % -
) "
'3 )
8/+1'&' #)
+:, +5, +K, +C, +;, +P, ^
5 C P 9 :< :5
# ' #)
2 '#
2 " 'P
' #) +:, ! 5 #) +5, ! C
#) +K, ! P #) +C, ! 9 #) +;, ! :<
#) +P, ! :5
^ ': 5 K C ; P
* '&
) % + : P,
'F "

Tablas bidimensionales

& '
^ : 5 K ] 1
: :: :5 :K :1
5 5: 55 5K 51
]
= =: =5 =K =1

'
Nombre_Tabla(índice_fila, índice_columna)
0 * - % - . -
- )
" !
'1 *

* A
" CJ:< + J ,
)1&,?' #
: :<
^ : 5 K C ; P T 9 R :<

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 38 de 154


IES Gran Capitán Fundamentos de Programación

: E$ ! " $E$ E E$ E
5 E E$ $E ! E !E
K E$ E E !E " "E$ E$ E
C E "E$ E E !E !
# '#
2 '#
2 " ' CJ:< C :<

'# +: K, # +: R, # +K ;, # +K 9, # +C :,
^ '* : C : :<
* '*
%
'F "

Tablas multidimensionales
2

%
)
! '
Nombre_Tabla(índice1, índice2, ..., índice_n)
0 * - . !. /! ! . -
- )
)
OPERACIONES CON TABLAS
1 ! %
!
!
!
) %
Declaración de una tabla
- '
nombre_tabla(nº_elementos1 [,nº_elementos2, ...,
nº_elementos_n]): tipo
- ! 0- 1!
0- /! ! 0- - )
"

! :< % '
numeros(10): numérico
K C
% '
Nombre(3,4): alfanumérico
Recorrido o acceso secuencial
!
213 )
2*3
! !
4%5%

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 39 de 154


IES Gran Capitán Fundamentos de Programación

!! :< !
% '
PARA i de 1 a 10
Visualizar elemento(i)
FIN PARA
4%5% )
)
& %
6 * 5%7 5 4 5 8 9%7 % % '
i 1
MIENTRAS i <= 10
Visualizar elemento(i)
i i + 1
FIN MIENTRAS
1 5 4 5 8 9%7 % % '
i 1 

REPETIR
Visualizar elemento(i)
i i + 1 

HASTA i > 10
1 ! !
! 2 !
0 )
%
PARA i DE 10 A 1 INC -1
Visualizar elemento(i)
FIN PARA
1 6 * 5%7'
i 10 

MIENTRAS i >= 1
Visualizar elemento(i)
i i - 1 

FIN MIENTRAS
1 5 4 5 8 9%7 % % '
i 10 

REPETIR
Visualizar elemento(i)
i i - 1 

HASTA i = 1
Carga de datos
! !
!
'
4 (1 ! !
! ;
) % '
Pares(5): numérico (2,4,6,8,10) 

( ! %
'

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 40 de 154


IES Gran Capitán Fundamentos de Programación

nombre_tabla(índice)  <expresión>
>? @ 5X CX
% '
nombres(2,4) “José”
! ! !

! ! '
PARA i DE 1 A 10
Pares(i) 0
FINPARA
-
!
% E
PARA i DE 1 A 10
Pares(i) i * 2
FINPARA
Lectura
!
! ! ! -
-
'
Leer nombre_tabla(índice)
1 ! !
1 ! E
'
PARA i DE 1 A 10
Leer numeros(i)
FIN PARA
%
'
Leer numeros(3)
Escritura
!
! 0 - '
Visualizar nombre_tabla(índice)
!
PARA i DE 1 A 10
Visualizar numeros(i)
FIN PARA
%
! '
Visualizar numeros(8)
OPERACIONES DE BÚSQUEDA Y ORDENACIÓN EN TABLAS
) !

! )

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 41 de 154


IES Gran Capitán Fundamentos de Programación

Búsqueda secuencial o lineal un vector desordenado


!
!
% )
!
'
Leer elemento
i 1
MIENTRAS i <= N AND vector(i) <> elemento
i i + 1
FINMIENTRAS
SI i > N ENTONCES
Visualizar “Elemento no encontrado”
SINO
Visualizar “El elemento está en la posición “, i
FINSI
Búsqueda secuencial o lineal en un vector ordenado
!
!
% ! !
! -
!
'
Leer elemento
i 1
MIENTRAS i <= N AND vector(i) < elemento
i i + 1
FINMIENTRAS
SI i <= N AND vector(i) = elemento ENTONCES
Visualizar “Elemento no encontrado”
SINO
Visualizar “El elemento está en la posición “, i
FINSI
Búsqueda binaria o dicotómica en un vector ordenado
) - + -
- ,
Centro = (Ext_izq + Ext_dch) / 2
0 !
+) :1 - ;3
+ -< ) =1, ! !
!
) ! )
-< + - ;
! !
'
Leer elemento
izq 1
dch N
encontrado Falso
MIENTRAS izq <= dch AND NOT encontrado
centro (izq + dch) / 2

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 42 de 154


IES Gran Capitán Fundamentos de Programación

SI vector(centro) = elemento ENTONCES


encontrado Verdadero
Visualizar elemento, “encontrado en la
posición”, centro
SINO
SI vector(centro) < elemento ENTONCES
izq centro + 1
SINO
dch centro - 1
FINSI
FINSI
FINMIENTRAS
SI NOT encontrado ENTONCES
Visualizar “El elemento buscado no existe en el
vector”
FINSI
Ordenación de un vector

! A
% %

- !
!
! ! ) !
%
!

'
j 1
REPETIR
j j + 1
sw 0
PARA k DE N A j INC -1
SI vector(k-1) > vector(k) ENTONCES
aux vector(k-1)
vector(k-1) vector(k)
vector(k) aux
sw 1
FINSI
FINPARA
HASTA sw = 0 AND j < N
! ! -

Tema 4 – Estructuras estáticas internas de datos: Tablas Página 43 de 154


IES Gran Capitán Fundamentos de Programación

5
CONCEPTOS Y DEFINICIONES
Estructuras estáticas externas de
datos: Ficheros

,+B/&'E@ 1
"

/(,01&' 3-(,+'E@
! ! "

)*%'E@

+
, !

)*%' +3)</
) !
* + ,

! ! :
) !
!
! % -
+3)</ %&,.+,%)3 F +3)</0 0/+2.5)&,)0E
/(,01&' :C0,+' 2
B0
! "
% %
3'=2/' 5/ &/(,01&' ' &/(,01&' 93'=2/)5' & %
!
% !
B0
% %
)+1'& 5/ 93'=2/' 0
% '
G 32*.'0G '
4 2 2 "
#86FE 1 +5<, : J 5< G 5<
4*80 1 +K<, : J K< G K<
*4E 114D# 1 +C;, : J C; G C;
* * # 5
* "
5< H K< H C; H 5 G RT . 5:<
Z [ 5:<BRT G 5 :P

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 44 de 154


IES Gran Capitán Fundamentos de Programación

/(,01&' /;%).5,5'
!
-
!

CLASIFICACIÓN DE REGISTROS
1 ! "

! -

'
Registros de longitud fija

'
: 6

5 4

K 4

C *

Registros de longitud variable


0 !

OPERACIONES CON REGISTROS


• 31)0 1 !
-
• )4)0 1 !

• '5,:,+)+,'./0 1 !

• '.0231)0 !
!

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 45 de 154


IES Gran Capitán Fundamentos de Programación

CLASIFICACIÓN DE FICHEROS
0 )

Permanentes
0 !
!

• )/01&'0 2 7 0

! !
- +
- ,
• '.01).1/0 1
% !

!
• ,01-&,+'0 1

! -
Temporales
• / *'<,*,/.1' ' 1&).0)++,-.
4 (

) ! !

+ , (
& ! !
!

• / *).,'9&) ' 1&).0,1'&,'0 0 ! -

0
! !

! -
! %
& !

OPERACIONES CON FICHEROS


0

• &/)+,-.
!
(

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 46 de 154


IES Gran Capitán Fundamentos de Programación

• %/&12&)
% _
1

• ,/&&/ & !
! %

• +12)3,?)+,-.
!
-
• &5/.)+,-. ' +3)0,:,+)+,-.

• '%,)5' ' 52%3,+)5'


!
*
• '.+)1/.)+,-. 0 -

• 20,-. ' */?+3)


!

% *
!
• .1/&0/++,-. 1 !

• )&1,+,-. ' &'12&) !


%
• '*%)+1)+,-. ' /*%)=2/1)*,/.1'

-
• '.0231) !

• '&&)5' ' 5/01&2++,-. !


!
!
ORGANIZACIÓN Y ACCESO

% <
• &().,?)+,-.

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 47 de 154


IES Gran Capitán Fundamentos de Programación

! !

"

• ++/0'

'
o
!
!
o
! !

o % !
! !

o 0
%

Ficheros de organización secuencial


0 '
• & !
%

• & !

• .
A
!
)
!


(
T<<
CKK
CK5
! '
• E
%
• # ! %
-
! '
• !
%

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 48 de 154


IES Gran Capitán Fundamentos de Programación

• !
!
! %
• # !
• #
Ficheros de organización relativa
0 '
• +
- , ! !


! '
• 0 !
+ ,
! !

• 0 !
! ! !
%
%
!
'
• ! -
• + ! ,
% + ,
• !
(

• ! !
- ! !

Organización directa
!
%
!

! A

! ! - %

! -
&
- !
%

! '

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 49 de 154


IES Gran Capitán Fundamentos de Programación


o * !
o 0

• B
• 0 !
! '
• & !

! %
! (

• * + ,

! -

0
Organización aleatoria o indirecta
! ! !
! !
% !

%
! ! -
% A !

- % %

! +
,
!
!
! '
• )
!
• #
• B
!
• 0 !

! '
• - !
• * %

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 50 de 154


IES Gran Capitán Fundamentos de Programación

• 2 ! !

Variantes de la organización secuencial


- !
! ! !
A
!
%
!
Organización secuencial encadenada
0

%
0 %

!
)
! %
%
! ! _
!
! %
)
-
Organización secuencial indexada
!
! !
! + ! )

! ,
0
(

% -
• M
! !
!
# !
%

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 51 de 154


IES Gran Capitán Fundamentos de Programación

0
'
:

5 & !

• M %

%
!

• M - *
! - %

- - %

!
!
!
%

- '
: 1 %

5 & ! !

K E

C
! %
- ! $ %
-

Organización secuencial indexada-encadenada


! !
! + - ,
0 %

%
)

%
)

!
!

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 52 de 154


IES Gran Capitán Fundamentos de Programación

% !

! '
: "
% !
%
5 - - !
TRATAMIENTO DE FICHEROS SECUENCIALES
0 "

Definición del fichero


1 ! +
, ; +
, 0 5

-
'
<Nombre_fichero> Fichero <Tipo de organización>
<Nombre_Registro> Registro
<Nombre_Campo1> Tipo de Dato
<Nombre_Campo2> Tipo de Dato
...
< Nombre_CampoN> Tipo de Dato
Fin Registro
-
'1 \ # \ * \
0 % %'
F_empleado Fichero Secuencial
R_empleado Registro
Cod emp Numérico
Nomb emp Alfanumérico(20)
Dir emp Alfanumérico(30)
Sueldo emp Numérico
FinRegistro
Asígnación física
1 + ,
%

<Nombre_fichero> = "Nombre físico"

! % '
F empleado = "Emple.dat"
%

Apertura del fichero


1
% !
+ ,

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 53 de 154


IES Gran Capitán Fundamentos de Programación

-
'
( P
-
( P 0
- % - P
P:
" ( P
- 0 -
%
B ( P
! ! -
- '
Abrir <Nombre_fichero> Modo <apertura>

'
Abrir F_empleado lectura
Cierre del fichero
1
% - '
Cerrar <Nombre_fichero>
'
Cerrar F_empleado
Escritura en el fichero
1 !
0 - '
Escribir <Nombre_registro> en <Nombre_Fichero>
'
Escribir R_empleado en <F_empleado>
Lectura del fichero
1

!
) 0 - '
Leer <Nombre_registro> de <Nombre_fichero>

Leer R_empleado de F_empleado

2* ; 3!
! >
Consultas

)
)

;! 5- ;!
! ;
%
'.0231) 5/ 2. :,+B/&' 0/+2/.+,)3 5/0'&5/.)5'
1

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 54 de 154


IES Gran Capitán Fundamentos de Programación

Leer valor
Encontrado <- falso
Mientras NOT FF(Fich) y NOT encontrado
Leer R_Fich de Fich
Si campo_n = valor
Encontrado <- verdadero
FinSi
FinMientras
Si encontrado
Visualizar R_Fich
Sino
Visualizar "no encontrado"
FinSi
0
Leer valor
Encontrado <- falso
Mientras NOT FF(Fich)
Leer R_Rich de Fich
Si campo_n = valor
Visualizar R_Fich
Encontrado <- verdadero
FinSi
FinMientras
Si NOT encontrado
Visualizar "no encontrado"
FinSi
'.0231) /. 2. :,+B/&' 0/+2/.+,)3 '&5/.)5'

Leer valor
salir <- falso
Mientras NOT FF(Fich) AND NOT salir
Leer R_Fich de Fich
Si campo_n >= valor
salir <- verdadero
FinSi
FinMientras
Si salir AND campo_n = valor
Visualizar R_Fich
Sino
Visualizar "no encontrado"
FinSi
0
Leer valor
salir <- falso
encontrado <- falso
Mientras NOT FF(Fich) AND NOT salir
Leer R Fich de Fich
Si campo_n > valor
salir <- verdadero
Sino
Si campo_n = valor

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 55 de 154


IES Gran Capitán Fundamentos de Programación

Visualizar R_Fich
encontrado <- verdadero
FinSi
FinSi
FinMientras
Si NOT encontrado
Visualizar “No encontrado”
FinSi
Partición de un fichero
1 !
'
0 ' ; -
`= (: ` +
\ ! , = (5 +
,
Abrir fichero_origen Lectura
Abrir Fich-1 Escritura
Abrir Fich-2 Escritura
Leer valor
Mientas NOT FF(fichero_origen)
Leer registro_origen de fichero_origen
Si campo_n = valor
Escribir registro_origen en Fich-1
Sino
Escribir registro_origen en Fich-2
FinSi
FinMientras
Cerrar fichero_origen
Cerrar Fich-1
Cerrar Fich-2
Rupturas de control
1

)
Actualización
1 0

'
+12)3,?)+,-. %'& 3'1/0
!
!

! + ,

+12)3,?)+,-. ,.1/&)+1,<)
1
)

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 56 de 154


IES Gran Capitán Fundamentos de Programación

! 0

" )

Tema 5 – Estructuras estáticas externas de datos: Ficheros Página 57 de 154


IES Gran Capitán Fundamentos de Programación

6 Estructuras dinámicas internas de


datos
! !
0
%
! !
!

"
! 1
!
- -
!

! !
"
&
+ ,
%

PUNTEROS
& !
!

! + ,

Operaciones básicas con punteros


/:,.,+,-.
1 !
0 - '
<nombre_puntero> puntero a Tipo_Dato
O \ N ! 2 \*
!
4 ! ) ! !
! !
.,+,)3,?)+,-.
1 !
0 - '
<nombre_puntero> <- nulo
&/)+,-. 5/ 2.) <)&,)93/ 5,.6*,+)
1 !
!
!

Tema 6 – Estructuras dinámicas internas de datos Página 58 de 154


IES Gran Capitán Fundamentos de Programación

! 0
- '
Reservar (<nombre_puntero>)
O \ N !
!
/01&2++,-. 5/ 2.) <)&,)93/ 5,.6*,+)
1 !
!
0 - '
Liberar (<nombre_puntero>)
O \ N !
!
++/0' ) 2.) <)&,)93/ 5,.6*,+)
1 ! ! !
!
1 ! a3 (a +! ,
! 0 -
'
Val-<nombre_puntero>
! !
'
Val-ptr1 <- 45
0 ! C; ! :
/ !
!
!
! '
ptr1 <- ptr2
! :
! ! 5
Val-ptr1 <- Val-ptr2
! :
! ! 5
LISTAS
&
.'5'0H

Listas enlazadas o encadenadas


0

! "
1 % '
• )*%' ,.:'&*)+,-.!
• )*%' %2.1/&' 0,(2,/.1/! )

Tema 6 – Estructuras dinámicas internas de datos Página 59 de 154


IES Gran Capitán Fundamentos de Programación

! '
• 1 ! %

! #

- ! (
-

0
'
/:,.,+,-. 5/ 3) /01&2+12&) 5/ 3'0 .'5'0 5/ 3) 3,01)E
Nodo Registro
<variable_información>:Tipo Dato
<siguiente> puntero a Nodo
FinRegistro
.3)+/ ' %2.1/&' /;1/&.' ) 3) 3,01) I%&,*/& .'5'JE
<nombre_lista> puntero a Nodo
&/)& 2.) 3,01)
1 ! 1
! % ! 0 - '
<nombre_lista> <- nulo
K0=2/5) 5/ 2. /3/*/.1' /. 2.) 3,01) '&5/.)5)
)
!

D)5,& ' ,.0/&1)& 2. .'5' ) 3) 3,01)


1 !
) - !
! '
: 4

5 4 )
!
+ ) ,

K 4

Tema 6 – Estructuras dinámicas internas de datos Página 60 de 154


IES Gran Capitán Fundamentos de Programación

3,*,.)& ' 9'&&)& 2. /3/*/.1' 5/ 3) 3,01)


* - !
'
: 0 (F !
!
5 0 ) (F
)
K 0 (F
!
/+'&&,5' 0/+2/.+,)3 5/ 2.) 3,01)
1 )

Listas doblemente enlazadas


/ !
-
) +
, ! !

'

• )*%' ,.:'&*)+,-.
• )*%' %2.1/&' ).1/&,'&
+
,
• )*%' %2.1/&' 0,(2,/.1/

Listas circulares

! (
! %
!

!
!

Tema 6 – Estructuras dinámicas internas de datos Página 61 de 154


IES Gran Capitán Fundamentos de Programación

Pilas
& + ,
" -
+ , !

4=8 + 4 = 8 ,

)3*)+/.)*,/.1' + , &/+2%/&)+,-. + ,

.
!
% )
'

• /1/& ' %,3)& 0 % "

• )+)& ' /0)%,3)&


• .,+,)3,?)& %,3) & !
! %
• ,3) <)+C)
! %
• ,3) 33/.) 0
" !
+ ,

• ,*) "

& '
: &
5 6
*%3/*/.1)+,-. +'. %2.1/&'0

+ U , "
1 U ! #
! % 1 ! "
) !

Colas
&
" - += , - += ,

Tema 6 – Estructuras dinámicas internas de datos Página 62 de 154


IES Gran Capitán Fundamentos de Programación

=4=8 +=
4 = 8 ,
& !

% )
'
• .,+,)3,?)& +'3) ! % !
• .+'3)& "
• /0/.+'3)&
• '3) <)+C)
! %
• '3) 33/.) 0
" !
+ ,

& %
'
: &
5 6
)
+ ,

*%3/*/.1)+,-. +'. %2.1/&'0

- + ,
2 ,
1 ! #
! %
1 ! " Frente !
Final !
*

ESTRUCTURAS DINÁMICAS NO LINEALES


Árboles
/ !
+ ,

&

%
% '
• )C? )

• '5'

Tema 6 – Estructuras dinámicas internas de datos Página 63 de 154


IES Gran Capitán Fundamentos de Programación

• '5' 1/&*,.)3

• 312&) ' %&':2.5,5)5 !


% ! < % ! 4
% !
• .1/+/0'&

• 2+/0'&

• )*)
• /+'&&,5' ' +)*,.' 0 !
• '

2 3 4

5 6 7

8 9 10 11 12 13

14 15 16

• # % ':
• # ': 5 K C ; P :P
• # ' 9 R :< :C :5 :; :P
• ';
• #! '
o #! <' :
o #! :' 5 K C
o #! 5' ; P T
o #! K' 9 R :< :: :5 :K
o #! C' :C :; :P
• & : K P :: :C
• ; 5 9 R :<
-
-
A -
% !
&9'3 9,.)&,'
&

Tema 6 – Estructuras dinámicas internas de datos Página 64 de 154


IES Gran Capitán Fundamentos de Programación

0 /=2,3,9&)5'

+'*%3/1'
-
_
< ! %
%
!
%
%
/+'&&,5' 5/ 2. 6&9'3 9,.)&,'

!
- '
: E %&/'&5/.E
1 %
E + % ( (
,
E + % ( (
,
$E E ,.'&5/.E
E + (
% ( ,
%
E + (
% ( ,
E E %'01'&5/.E
E + (
( % ,
E + (
( % ,
%
&9'3 9,.)&,' 5/ 9K0=2/5)
!
! !
!

)
0

) '
: 1 ! ! %
5 0 ! )

K 0 ! )

Tema 6 – Estructuras dinámicas internas de datos Página 65 de 154


IES Gran Capitán Fundamentos de Programación

C E !
)
- !

13

2 21

10 17 30

19 25 33

0 ! 5;
'
1 ! ! % 5; N :K
1 ) !
5; N 5:
) ! ! !
5; N K<
1 !
)

Tema 6 – Estructuras dinámicas internas de datos Página 66 de 154


IES Gran Capitán Fundamentos de Programación

7
INTRODUCCIÓN
Lenguaje C

1 * E F :RT5

!
! 1
! 1
! :R9K
# 0 4 + #04,
1
* :R9R #04
1 ) #04 1
CARACTERÍSTICAS DEL LENGUAJE C
1
+ ! -
, 6
1

!
)

8 %

% 1 '
• -
• 6

• &#4I
• 6 ! $ !


• !
% !
! (

IDENTIFICADORES
1 %
!

Tema 7 – Lenguaje C Página 67 de 154


IES Gran Capitán Fundamentos de Programación

1
'
• * + ( (Q,
+\,
• 0
+<(R,
• ) !

• #
• ) )

1 ! !
'
auto double int struct
break else long
switch
case enum register typedef
char extern return union
const float short unsigned
continue for signed void
default goto sizeof volatile
do if static while
TIPOS DE DATOS BÁSICOS
1 '
• ,.1
• E :3')1
• E 5'293/
• 1 +B)&
• 3 % + ! , <',5
Tipo entero
0 ! ,.1 )
"
! %

• :P b(K5TP9 K5TPT_
• K5 b(5:CTC9KPC9 5:CTC9KPCT_
& % H
( 0 !
# % -
- - -
% -
- % !
) )
Tipo de dato real
0 ! :3')1 5'293/
0 ) 0
'
• bK C (K9 K C K9_

Tema 7 – Lenguaje C Página 68 de 154


IES Gran Capitán Fundamentos de Programación

• b: T (K<9 : T K<9_
'
• # 'b _
\ \
# • % - 'b _
6 - ) ) %
6 - + :<, !
-
Tipo de dato carácter
0 ! +B)&
0144
9 4 )
-
& -

- 0/+2/.+,)0 5/ /0+)%/
'
-5,(' ,(.,:,+)5'
c
c
c ! %
c
c

cW
c@
c<
cc !
1 ! !

Tipo de dato vacío


0 ! <',5
"
! 0 '
• * + !
,
• - % ) !
• *
MODIFICADORES DE TIPO BÁSICO
- !
'

Tema 7 – Lenguaje C Página 69 de 154


IES Gran Capitán Fundamentos de Programación

Modificador short
0 ) "
# - ;
- %
Modificador long
0 )
:P K5

Modificados signed
0 )

Modificador unsigned
0 )
! b< P;;KK;_ :P
b< C5RCRPT5R;_ K5
0 &
0
;
- ! )
! b(:59 :5T_ ; + 0144 T ,
b< 5;;_ ; + 0144 9 ,
DECLARACIÓN DE VARIABLES
* ! !
! 0 !
* ! !
! '
• * +! ,
• = +! ,
• + ,
- ! '
[Almacenamiento][Modificador] Tipo_dato_base
Nombre_Variable;

'
• 3)0/ 5/ 3*)+/.)*,/.1' (
! -
' ! !
+! , 1
- 1 !
• '5,:,+)5'& 5/ 1,%' ( 1
" ! +
, ! - '
! ! ;
+ ,

Tema 7 – Lenguaje C Página 70 de 154


IES Gran Capitán Fundamentos de Programación

• ,%' 5/ 5)1' 960,+' ( !

• '*9&/ 5/ 3) <)&,)93/ (
!
!
!

! !

OPERADORES
1 '
Indicadores de expresión
0 -
'
: +, '
- -

5 1 b_ ! % !
Operadores aritméticos
0 0 '
%/&)5'& C*9'3'
0 ! (
6 4 HH
* ((
0 H
E (
F 6 J
*! B
6 d
: 8 ! (0
1 %
! ! (:
5 8 4 (0 !
: - HH ! G H: HH
HH HH
)
)
K 8 (0 !
: e ! G e:
HH
C 8 (0

Tema 7 – Lenguaje C Página 71 de 154


IES Gran Capitán Fundamentos de Programación

; 8 ! ( J
B !
1 - ) %
! !
! + !
, 0
!
P ( d
!
'
( HH (( 0
JBd 6 !
H( 0
Operadores relacionales y lógicos
0
! ! 1 <
! : ! ) -
! !
'
%/&)5'& ,(.,:,+)5'
O 6
OG 6
N 6
NG 6
GG 4
fG *
G G #
G;+ ! ! ;, GG ; + ;,
'
%/&)5'& ,(.,:,+)5'
SS 1 7
gg * 8
h # + ,
SS gg %

% ) S g
8 - ! - 1 !
- ' gg F SS h+ SS F ,
'
h
N NG O OG
GG hG

Tema 7 – Lenguaje C Página 72 de 154


IES Gran Capitán Fundamentos de Programación

SS 1
gg *
Operadores para el tratamiento de bits
0 !
; '
%/&)5'& ,(.,:,+)5'
S 7 + #* ,
g 8 +8E ,
L 8 - ! +I8E ,
i 1 : +#82 ,
NN *
OO *
!
NN OO
) 1
5
! 5
Operadores de asignación
0 ! ! -

)0,(.)+,-. 0,*%3/ % G !
! -
)0,(.)+,-. +'*%2/01' %
%
% ' H ( B d OO NN S L g '?
7. - @ ! ? A?
7. - @
Operador coma
0 - - !
- ! !
-

!
) 0 '
: - !
-
5 !
Operador de tamaño
0 !
! < 1
!

<
< - !
%

Tema 7 – Lenguaje C Página 73 de 154


IES Gran Capitán Fundamentos de Programación

Operador de molde
0 ! - 0
-
! % ) !
- '2 3
Operador condicional
0 !
- 0
% [ ' ' 1B / C@
'0 ! ) 1
! ! ) /
- 1
C -
Orden de prioridad de los operadores
1 ! !
% !
!
%/&)5'& ,(.,:,+)5' 0'+,)1,<,5)5
+,
b_ 0 %
4
6
(N 6 =
f #
i 1 :
( 0
HH 4
(( * *
J 4
S * !
+ , 6
2 "
J 6
B *! 4
d 6
H 0
4
( E
NN *
4
OO *
O 6
OG 6
4
N 6
NG 6
GG 4
4
fG *
S 7 ! 4
L 8 - ! ! 4
g 8 ! 4
SS 7 4

Tema 7 – Lenguaje C Página 74 de 154


IES Gran Capitán Fundamentos de Programación

gg 8 4
[' 1 *
G HG (G JG BG
dG OOG NNG *
SG LG gG
1 4
Expresiones
- + ! !
, * -
!
1 0
!
- -

- ! '
: 1 ! ! - (0

!
!
! '
0 -
!
0 !
! ; ;
!
'
•0 !

•0 !
•0 !
•0 !

• !
5 1 ! (
! -
! !
- + ! - ,
+ - ,

Tema 7 – Lenguaje C Página 75 de 154


IES Gran Capitán Fundamentos de Programación

8
INTRODUCCIÓN
Estructura de un programa en C

1 '
#include

#define
Declaraciones globales

• Prototipos de funciones
• Variables
Función principal main

main() {

declaraciones locales

sentencias

Definiciones de otras funciones

tipo1 func1( … ) {

3 !

Tema 8 – Estructura de un programa en C Página 76 de 154


IES Gran Capitán Fundamentos de Programación

Directivas del preprocesador


1 -
! +
, ! j j
2 ! % +j,
! + ,
> #

!
! 1
!
! j ! !

! ! ;> -
1 ) 1 !
j '
#include <nombrearchivo.h>
8
#include “nombrearchivo.h”
! ! - 0144
! !
- ! !
4#1 &* ! -
1
1
!
+, +,
% '
#incluce <stdio.h>
1 ! !
4#1 &* 0 !
!
-
Declaraciones globales
4 ! %

) +, 0 !
!
!
%
Función main()
2 1 +,
0 '
main () {

instrucciones

}
-
1'

Tema 8 – Estructura de un programa en C Página 77 de 154


IES Gran Capitán Fundamentos de Programación

4 4

F
! * !

Funciones definidas por el usuario


& 1 2
2
1
) ! 0
) 1
%
Comentarios
& " !

. !

! !
!
!
1 '
: & % % BB
%
5 6 % ( -
% BJ JB
Creación de un programa
'
: - 0144 !
- !
5 1 0
+ - , & !

K &
1

Depuración de un programa en C
E ! !
+ ,
5/%2&)+,-.

%
-
* '

Tema 8 – Estructura de un programa en C Página 78 de 154


IES Gran Capitán Fundamentos de Programación

• 3 !

• "
1 !
*
% ! 2
! % -
*
! - '

0 ! -
- % '
! + ],
- %

!
- 0 !
-
&&'&/0 3-(,+'0
E "
%

& !

% 5/%2&)5'& + ,
$ " !

0
! 0 !

&&'&/0 5/ &/(&/0,-.
0
0 -

& '
; ! ! D
/.0)4/0 5/ &&'&
!

- ! ) A
'
• (0
1

Tema 8 – Estructura de un programa en C Página 79 de 154


IES Gran Capitán Fundamentos de Programación

! !
• - (0 % - %

• ! +$ ,(# 4
%
&&'&/0 /. 1,/*%' 5/ /4/+2+,-.
&
! )
% ) ! !
1
!
&2/9)0

! -
! ! 0

& !
%
+ , ! !
!
% 1
$
% % !
% ! & !
-
INSTRUCCIONES DE DECLARACIÓN

!
!

!
! !
'
: 0
5 0 !
!
K &
O6 - +
<Modificador_tipo>Tipo_básico_dato Nombre_Variable;
C 0 !

<Modificador_tipo>Tipo_básico_dato Var1, Var2, … ,


VarN;
; 8 !

<Modificador_tipo>Tipo_básico_dato Nombre_Variable
= <Valor inicial>;

Tema 8 – Estructura de un programa en C Página 80 de 154


IES Gran Capitán Fundamentos de Programación

!
! + ,

<Modificador_tipo>Tipo_básico_dato Var1 = Val1,


Var2 = Val2, … , VarN = ValN;
INSTRUCCIONES DE ASIGNACIÓN
! -
! !
1 +G,
'
Nombre_Variable = Expresión;
! !
-
!
INSTRUCCIONES DE ENTRADA Y SALIDA
0
! !
2 % > @
!%
!
%
1 1
!% !
8C) 5/ )++/0' /&,:7&,+' )0'+,)5'
+ ,
0 + ,
0 + ,
4 +E05K5,
- 0 + ,
Función de entrada (teclado)
,.1 (/&+B)&I <',5 JL
&'1'1,%'
&(2*/.1'0 #
8)3'& 5/<2/31' 1 % 8=
,.)3,5)5 !
+ ,
. ! !
+ , 4#2E8
) - ! %
% ; !
! ! 8=
+ 8 = ,
,.1 0+).:I +'.01 +B)& M:'&*)1'H 3,01) 5/ )&(2*/.1'0JL

Tema 8 – Estructura de un programa en C Página 81 de 154


IES Gran Capitán Fundamentos de Programación

&'1'1,%'
&(2*/.1'0 &
!
8)3'& 5/<2/31' #) -
,.)3,5)5 !
! !

! !
:'&*)1'
'

-5,(' ,(.,:,+)5'
d
d
d )
d )
d )
d
d ! )
d- ) -
d ! )
d
1
1
:'&*)1'

:'&*)1'

'
+,
>d 'd @
+, !
! ! !
0 % d
+,
9H5 +>d dJ d @ S : S 5,A ! 9
: ! 5
5
) %

Tema 8 – Estructura de un programa en C Página 82 de 154


IES Gran Capitán Fundamentos de Programación

! >db F1* _@
% !
>db ( _@
+,
"

Funciones de salida (pantalla)


,.1 %21+B)&I ,.1 +)&6+1/& JL
&'1'1,%'
&(2*/.1'0 3
8)3'& 5/<2/31' 3 8=
,.)3,5)5 3
!
0
+, ! !
! ! 8=
,.1 %&,.1:I +'.01 +B)& M:'&*)1'H 3,01) 5/ )&(2*/.1'0 JL
&'1'1,%'
&(2*/.1'0 )

8)3'& 5/<2/31' ) 8=
,.)3,5)5 !
!% 3,01) 5/ )&(2*/.1'0 !

:'&*)1'
! +, '
k
! !
k ) )
3,01) 5/ )&(2*/.1'0
E
! ! + ,
-
!
-
0 ! ! ) -
!
! ! 8=
'&*)1' 5/ ,(.,:,+)5'
*%&/0,-.
d 4 : + ,
d 4 5
+ ,
d 4 5 + ,

Tema 8 – Estructura de un programa en C Página 83 de 154


IES Gran Capitán Fundamentos de Programación

d 4 5 + ,
d 4 ! C + ,
d 4 ! 9 + ,
d 4 : + ,
d 4
d 4
d- 4 -
dI 4 -
d 4 ! %
d 4 ! %
d & d d ) " !
dd 3 d
d 3
d 3

)
*

'5,:,+)5'& 5/ ,(.,:,+)5'
:'&*)1'
d(#) -
d#) 4

d * 4 !

d
)
)
)
d:< K ) :< K 0
d; T ; T 0

+,
+,
"

+J,

Tema 8 – Estructura de un programa en C Página 84 de 154


IES Gran Capitán Fundamentos de Programación

+> ) ' dJ c @ \ ,A !
! ) \
! '
+> G dJ J c @ ,A
- +,
+ , + ,
- '
>@ +,
> @ d

)
> @ +,
> @ d ;
ESTRUCTURAS DE CONTROL
- !

-
1
! -
! < ! : ! A
! ! !
) !
Alternativa simple
if( expresión_condicional )
sentencia;

! !
if( expresión_condicional ) {
instrucción 1;
instrucción 2;

instrucción n;
}
! ) - 0

Alternativa doble
!
) -

if( expresión_condicional )
sentencia 1;
else
sentencia 2;
0 ! '
if( expresión_condicional ) {
instrucción1_1;
instrucción1_2;

Tema 8 – Estructura de un programa en C Página 85 de 154


IES Gran Capitán Fundamentos de Programación

instrucción1_n;
}
else {
instrucción2_1;
instrucción2_2;
instrucción2_m;
}
1 ! !
!
.) 0/.1/.+,) 0,/*%&/ =2/5)&6 )0'+,)5) +'. /3 %&/+/5/.1/ *60 %&-;,*'E
Bloque de sentencias if … else-if
) 1
0 '
if( expresión_condicional_1 ) {
bloque_instrucciones_1;
}
else if( expresión_condicional_2 ) {
bloque_instrucciones_2;
}

else if( expresión_condicional_n ) {
bloque_instrucciones_n;
}
else {
bloque_instrucciones por defecto;
}
!
-

A
!
) > @ !
Sentencia if … else abreviada con el operador ? :
0 '
expresión_condicional ? sentencia_1 : sentencia_2;
0 ! - 0 -1
-/ .
! ! '
c = ( a == 4 ) ? 2 * a : 3 * a;
0 C 5J ! ! ! ! 0
C KJ ! ! !
Alternativa múltiple. Sentencia switch()
! ]

! -
!

0 '
switch( expresión ) {
case constante_1: {
bloque_instrucciones_1;

Tema 8 – Estructura de un programa en C Página 86 de 154


IES Gran Capitán Fundamentos de Programación

break;
}
case constante_2: {
bloque_instrucciones_2;
break;
}

case constante_n: {
bloque_ instrucciones _n;
break;
}
default: {
bloque_ instrucciones por defecto;
}
}
- ! ! ! + ,
+ ; , -1! -/! E! -
-

!
1 , 0

!
,
F ;
!
-

! ) ! '
F ;
! ! F ;
F ; % -

F ; !
- )
-

1 F ;
! ! !
Estructura repetitiva while
0 '
while( expresión_condicional )
instrucción;
0 '
while( expresión_condicional ) {
bloque_instrucciones
}

Tema 8 – Estructura de un programa en C Página 87 de 154


IES Gran Capitán Fundamentos de Programación

-
) < !
!
Estructura repetitiva do-while
F; =F; ! )
-
%
! - ! 0 '
do {
bloque_instrucciones;
}while( expresión_condicional );
Estructura repetitiva for
1 !
- )
!
0 '
for( exp_inicial; exp_condicional; exp_incremento )
instrucción;
'
for( exp_inicial; exp_condicional; exp_incremento )
{
bloque_instrucciones;
}
2 '
4 (#
! !
- (

- (# !

!
% !

'
0 !
! - 0 !
0

! E 5
Sentencia break

F ;
0
! -
- !
,
Sentencia continue
!
, !

Tema 8 – Estructura de un programa en C Página 88 de 154


IES Gran Capitán Fundamentos de Programación

! -
!
! ! ! -

'
0

! -
0

F; =F; '
0

! -

Sentencia goto
0
%

!
1 !

0 '
goto etiqueta;

Tema 8 – Estructura de un programa en C Página 89 de 154


IES Gran Capitán Fundamentos de Programación

9
ESTRUCTURA DE UNA FUNCIÓN
Funciones en C

& !

1
1
! + ! ,
1 '
+ ,
Definición de una función
& 1 '
tipo_retorno nombre_función( lista de parámetros )
{

Cuerpo de la función

return expresión;
}
'
• 2 ( ! !
0
! ! + , > 0
1 ! ! ! ,.1
! %
• # (

• (0
1
0
! >
• 1 (0
! 3 !
• ( ! ! !
0 ! ! !
! 1
! ! !
0
) !

0 ! ! + > ,
!
-

Tema 9 – Funciones en C Página 90 de 154


IES Gran Capitán Fundamentos de Programación

) ! !
'
int Mayor( int a, int b ) {
int mayor;

if( a > b ) mayor = a;


else mayor = b;

return mayor;
}
Llamada a una función
> 1
-
#
*),.IJ

+ ! +l, ,
! !
0 ! ! ! !
! - 0
! ! !
! 23
#include <stdio.h>
int main() {
int a, b;

printf(“\nIntroduce a: “);
scanf(“%d”,&a);
printf(“\nIntroduce b: “);
scanf(“%d”,&b);

printf(“\nEl mayor es %d”, Mayor(a,b) );

}
1 !

Declaración de una función. Prototipo

% '
: 2
5 #
K 2

23
% '
int Mayor( int, int );
0 ! % ! >

Tema 9 – Funciones en C Página 91 de 154


IES Gran Capitán Fundamentos de Programación

PARÁMETROS DE UNA FUNCIÓN


- 1

0 '
void circulo( int x, int y, int diámetro );
1
! -
circulo(25, 40, vueltas * 4 );
Paso de parámetros por valor
0 1
! 0 !
!
0 ! ! !

#include <stdio.h>

void func( int );

int main() {
int i = 6;
func(i);

//La variable i sigue valiendo 6


printf(“\nEl valor de i es %d”);
}

void func( int a ) {


printf(“El valor de a es %d”);

//Se modifica el parámetro formal.


//No afecta a la variable i en main.
a++;
}
Paso de parámetro por referencia
1 ! ! ! !

!
! +! , !

! ! % S
! !
!
!
#include <stdio.h>

void cambia( int *, int * );

Tema 9 – Funciones en C Página 92 de 154


IES Gran Capitán Fundamentos de Programación

int main() {
int a = 6;
int b = 9;
printf(“\nLos valores de a y b son %d y %d”, a, b
);
cambia(&a, &b);

//Ahora han intercambiado sus valores


//Se han modificado en la función
printf(“\nLos valores de a y b son %d y %d”, a, b
);
}

void cambia( int * x, int * y ) {


int aux;

printf(“\nLos valores de x e y son %d y %d”, x, y


);

//Se intercambia los valores.


aux = *x;
*x = *y;
*y = aux;
}
1
!
! )

Parámetros const de una función


1 " "

void f1( const int x, int y ) {


x = 10; //Error por cambiar un objeto
constante.
}
ÁMBITO
G !
! 0 ! ! >
! ! -
' ! 0
! 2 ! !

#
! !
Ámbito del programa
! G
A ! >

Tema 9 – Funciones en C Página 93 de 154


IES Gran Capitán Fundamentos de Programación

& ! ! !
! %
!
Ámbito de archivo fuente
& !
! ! !

! 0 !
!
Ámbito de una función
& !
!
!

Ámbito de bloque
& ! G

!
A ! & !
!
Funciones locales
!
- ! +
, 1
! -
! '
• ! ) *
! 1 !
%
• ! -
)
! + ,
CLASES DE ALMACENAMIENTO

!
Variables automáticas
! + ,

Variables externas
! !
1 ! -
! *
! !
! & ! !

Tema 9 – Funciones en C Página 94 de 154


IES Gran Capitán Fundamentos de Programación

1 ! -
!
&+B,<' /;1/&.) E+ &+B,<' /;1/&.)$E+
#include <stdio.h> #include <stdio.h>

extern void leerReal(void); void leerReal(){


extern float f;
float f; printf(“\nIntroduce f:”);
scanf(“%f”,&f);
int main() { }
leerReal();
printf(“\nEl valor de
f=%f”, f);
return 0;
}

Variables registro
8 ! 1 !
! ! !
$
9<-9P
$ !

& !
! !
- 0 -
1 ! !

& % ! !
. !
1 & ! !
Variables estáticas
! !
! + ! ,
!
! ! ! 0
! ! #
!
#include <stdio.h>

void func();

int main() {
int i;

//Se llama a la función func() 100 veces.


for( i = 0; i < 100; i++ )
func();

Tema 9 – Funciones en C Página 95 de 154


IES Gran Capitán Fundamentos de Programación

void func() {
//Se declara e inicializa una vez
static int a = 1;
//Cada invocación habrá aumentado en 1.
printf(“La función se ha invocado %d veces”, a);
a++;
}
FUNCIONES DE BIBLIOTECA
2 ! 1

+ ,
! A
!
% j !

Tema 9 – Funciones en C Página 96 de 154


IES Gran Capitán Fundamentos de Programación

10
INTRODUCCIÓN
Arrays en C

1 )

%
)

ARRAYS UNIDIMENSIONALES

Declaración

!
!
"
'
tipo_básico nombre_array[tamaño];
• 2 \ (4 ! )

; ! ! 0
!

• # \ ( !

• 2 " (4 )

Acceso a los datos


% !
% + ! ,

nombre_array[expresión_índice];
-. - 2 1
< % -
! < #(: # " -
Carga de datos
'
: 4 !
1

'
tipo_básico nombre_array[tamaño] = { lista
valores };

Tema 10 – Arrays en C Página 97 de 154


IES Gran Capitán Fundamentos de Programación

* >

2 !
0
< 0 !
5 ( !
!
int vector[4];

vector[0] = 35;
vector[1] = 22;
vector[2] = 1002;
vector[3] = 98;
! !

)
! %

#include <stdio.h>
main() {

int vector[7];
int i;

//Carga del vector a 0


for( i = 0; i < 7; i++ )
vector[i] = 0;
}
ARRAYS BIDIMENSIONALES

Declaración
'
tipo_básico nombre_array [tamaño dim 1][tamaño dim
2];
* - G -
H 1 "
) H / "
)
Acceso a los datos

! %
'
nombre_array[expresión índice 1][expresión índice
2];
* . 1 . / !
% ! < #(: #
) % ! < 6(: 6
)

Tema 10 – Arrays en C Página 98 de 154


IES Gran Capitán Fundamentos de Programación

Carga de datos
'
: 4 (

0 '
tipo_básico nombre_array[T1][T2] = { lista
valores };
'
tipo_básico nombre_array[T1][T2] = { {
lista val 1 },
{ lista
val 2 },

{ lista val N }
};
1 ! !
1 !

5 ( !
!

! !

! %

#include <stdio.h>
main() {

int vector[7][5];
int i, j;

//Carga del array a 0


for( i = 0; i < 7; i++ )
for( j = 0; j < 5; j++ )
vector[i][j] = 0;
}
ARRAYS MULTIDIMENSIONALES
+ ,
'
tipo_básico nombre_array[Tamaño 1][Tamaño
2]…[Tamaño N];
! '
nombre_array[exp_ind1][exp_ind2]…[exp_indN];
1

Tema 10 – Arrays en C Página 99 de 154


IES Gran Capitán Fundamentos de Programación

%
) ! %
ARRAYS DE CARACTERES

+ ; ,

+ ! ,
Declaración
'
char nombre_cadena[tamaño + 1 ];
2
# #(:
)
'
char nombre[7];

c<
Acceso a datos

Carga de datos
'
: 4 (
'
char nombre_cadena[Tamaño] = “cadena”;
& "
-
'
char nombre_cadena[Tamaño] = { ‘c1’,‘c2’,
…,‘cN’,‘\0’};
)
)
) ! "
+ ) ,
!

0 !
! !
'
nombre_cadena[0]=’\0’;
*nombre_cadena = ‘\0’;

'
char nombres[4][7] =
{“JUAN”,”PEDRO”,”LUIS”,”MARIA”};
5 ( !

Tema 10 – Arrays en C Página 100 de 154


IES Gran Capitán Fundamentos de Programación

FUNCIONES DE ENTRADA/SALIDA PARA CADENAS


+B)& M (/10I +B)& M+)5/.) JL
&'1'1,%'
&(2*/.1'0 #
%
8)3'& 5/<2/31' %
,.)3,5)5
!

+,
) % +,
4#2E8 ! +
,
% 0
! %

0 +, ! !
% )
! !
+, % !
,.1 %210I +B)& M+)5/.) JL
&'1'1,%'
&(2*/.1'0 1 !
8)3'& 5/<2/31' ) 8=
,.)3,5)5 !
!
! % +,
+,
0 ! ! ) !
% A
! ! 8=
ARRAYS INDETERMINADOS
0
" 1
!

'
tipo_básico nombre_array[] = “Lista de valores”
'
char cadena1[]=”Acceso denegado.”;

Tema 10 – Arrays en C Página 101 de 154


IES Gran Capitán Fundamentos de Programación

2
"
-
tipo_básico nombre_array[][Tam2]…[TamN] = lista
valores;

Tema 10 – Arrays en C Página 102 de 154


IES Gran Capitán Fundamentos de Programación

11
INTRODUCCIÓN
Punteros y gestión dinámica de
memoria

& %2.1/&' ! !
! A
; > !
+ ; ! ! ! , ! + , + !
! ,
1
%
! + ! ,
1 ! '
• !


! %
'

• 8
! !
CONCEPTOS BÁSICOS
Definición de punteros y asignación de direcciones

J S
M
! '
tipo_básico *nombre_puntero;
tipo_básico *puntero1, *puntero2,…, * punteroN
1 !
J
int *pnum, num;
!

!
>
% !
1 !
!

Tema 11 – Punteros y gestión dinámica de memoria Página 103 de 154


IES Gran Capitán Fundamentos de Programación

!%
! !
int *pnum = NULL;
! N
! A !
! + ,
+ % S,
int cant;
//Se utiliza el nombre para asignar a la variable
el valor 15
cant = 15;

&cant; //Indica la dirección de la variable cant


! !
!
! - +
! , '
:
float num;
float *pnum = &num;
5
float *pnum;
pnum = &num;
! O%
+,
*
! ! !
! *
! !

float nume, contador;


float *pnum = &nume;
...
pnum = &contador;
Indirección
0 ! ! !
!
M !
!
int a = 40, b;
int *pnum = &a;
//pnum apunta a a. Ahora cambio el valor de a
accediendo con //el puntero
*pnum = 568;

//Asigno a b el valor de a. Accedo a a con el


puntero
b = *pnum;
/ ! !

Tema 11 – Punteros y gestión dinámica de memoria Página 104 de 154


IES Gran Capitán Fundamentos de Programación

OPERACIONES CON PUNTEROS


1 '

Asignación de punteros

1 )
!
int a = 5, b, c;
int *p1 = &a, *p2;

p2 = p1; //p2 se carga con la dirección contenida


en p1

b = *p1;
c = *p2;
//b y c tienen el mismo valor
Aritmética de punteros
'
2*) ' &/01) 2. .K*/&' /.1/&' ) 2. %2.1/&'
0 )
)
)

nombre_puntero + n = dirección + n * tamaño tipo de


datos
'
float num, *punt, *pnum;
punt = &num;
pnum = punt + 2;
/*
Si la dirección contenida en punt es 4274, la
dirección de
pnum es 4274 + 2 * 4 = 4282
*/
! 1
! ; )
! "
!
.+&/*/.1' F 5/+&/*/.1' 5/ %2.1/&'0
!
)
! :

" 0 HH ((
float *pnum;

pnum++;

Tema 11 – Punteros y gestión dinámica de memoria Página 105 de 154


IES Gran Capitán Fundamentos de Programación

!
) "
C

/ J HH ((

//Primero incrementa pnum y luego obtiene su valor


*pnum++

//Primero obtiene el valor apuntado por pnum y


luego lo //incrementa.
(*pnum)++
/01) 5/ 5'0 %2.1/&'0
) + ,
0

int tabula[10], d;
int *ptab1 = &tabula[1];
int *ptab2 = &tabula[4];
d = ptab1 – ptab2;
//d contiene el número de elementos separados por
los //punteros.
Comparación de punteros
0 !
! .

!
int a;
int *ptab1 = &a;
int *ptab2 = &a;
if( ptab1 == ptab2 ) printf(“Los dos punteros
apuntan a a”);
PUNTEROS Y ARRAYS
1
!
+! , )
+ ,
Punteros y arrays unidimensionales
+ % ,

int tabula[20];
//tabula es equivalente a &tabula[0]
//tabula++ es errónea, ya que no puede cambiar su
valor
0 !

Tema 11 – Punteros y gestión dinámica de memoria Página 106 de 154


IES Gran Capitán Fundamentos de Programación

//carga la dirección del primer elemento


int *ptab = tabula; //Igual a int *ptab =
&tabula[0]
//Incrementa puntero ptab (apunta al 2º elemento)
ptab++ ;
//ptab avanza cuatro elementos, apunta al sexto
elemento
ptab += 4;
!

int tabula[30], num;


int *ptab = tabula; //Puntero apunta al principio
del vector
num = *(ptab + 4); //num tiene el valor del 4º
elemento

scanf(“%d”, ptab + 4 );

printf("%d", *(ptab + 4) );
& ! -
int *ptab1 = tabula;
printf("%d", ptab[0]) // equivale a printf("%d",
*ptab);
printf("%d", ptab[8]) // equivale a printf("%d",
*(ptab+8));
- !

int a,b;
int *punt = &a;
b = punt[5]; //Error
2

int vector[10];

printf("%d", *(vector+3) );

%
+
, !
A
! ! !

int num[20], cant[8];


int *punt = num; //punt apunta al array num
...
punt = cant; //punt apunta al array cant
1 %
+ , *
-

+! % ,

Tema 11 – Punteros y gestión dinámica de memoria Página 107 de 154


IES Gran Capitán Fundamentos de Programación

! !
-
%
! '
• 6
• &
Punteros y cadenas de caracteres
&

char saludo[] = "Hola, como estás";


:T

char *psa1 = "Hola, como estás";

!
1 !

! ! !
0 )
!
char *pmens = "El número de caracteres contenido
en la línea es superior a 80
caracteres";

printf(pmens);
Punteros y arrays bidimensionales

int matriz[10][7];
int *pmat = matriz; //Equivale a int *pmat =
&matriz[0][0]

: +
, 4

*(nombre_puntero + i * c + j)

int temp[15][30];
printf( "%d", *(temp + 3 * 30 + 6) );
//Equivale a printf("%d", temp[3][6]);
ARRAYS DE PUNTEROS

0
tipo_básico *nombre_puntero[num_elementos];
'
int *apunt[15]; //Vector de 15 punteros a enteros
int cant;

Tema 11 – Punteros y gestión dinámica de memoria Página 108 de 154


IES Gran Capitán Fundamentos de Programación

apunt[6] = &cant; //El elemento 6 apunta a cant


*apunt[6] = 37; //cant vale 37, que se ha cargado
con el //puntero
printf("El valor de cant es: %d", *apunt[6]);

char *mensajes[] = { "Error de lectura",


"Error de escritura",
"Error de compilación" };
0 %
printf("%s" mensajes[1]);
0 %

char mensajes[3][21]);

)
-

INDIRECCIÓN MÚLTIPLE
)
! ! 0 '
tipo_básico **nombre_puntero;

int cant;
int *pcan = &cant;
int **ppcan = &pcan;
**pcan = 57;
print("%d", cant); //visualiza 57

char nom[35];
char *pnom = nom;
char **ppnom = &pnom;
gets(*ppnom);
printf("%s", nom );
) - !
! !
%

FUNCIONES DE ASIGNACIÓN DINÁMICA DE MEMORIA


/
"
! +
, !
-

Tema 11 – Punteros y gestión dinámica de memoria Página 109 de 154


IES Gran Capitán Fundamentos de Programación

!
! ! !
%
1 %
% #04 1
'
<',5 M+)33'+I 0,?/P1 .2*H 0,?/P1 1)*JL
&'1'1,%'
&(2*/.1'0 #) ! "

8)3'& 5/<2/31' * ! !
! #&
!

,.)3,5)5 E !

23 '
• .2*' 4 )
!
• 1)*' 4 " !
!
! !
) "
J '
#include <stdio.h>
#include <stdlib.h>

int *reserva_memoria( int num_elementos ) {

int *pt;
pt = (int *)calloc( num_elementos, sizeof(int) );
if( !pt )
printf("Imposible reservar memoria");

return pt;
}
<',5 M*)33'+I0,?/P1 1)*JL
&'1'1,%'
&(2*/.1'0 2 " !
8)3'& 5/<2/31' * ! !
! #&
!

Tema 11 – Punteros y gestión dinámica de memoria Página 110 de 154


IES Gran Capitán Fundamentos de Programación

,.)3,5)5 E !

23 '
• 1)*' 4 "
!
! 23

<',5 :&//I <',5 M%2.1/&' JL


&'1'1,%'
&(2*/.1'0

8)3'& 5/<2/31' #
,.)3,5)5
! % 23
23
! !
23 '
• %2.1/&'' 3

! 23 23
23

'
#include <stdio.h>
#include <stdlib.h>

main() {
char *nombres[50];
int j;

//Se reserva espacio para 50 nombres


for( j = 0; j < 50; j++ ) {
if( (nombres[j] = (char*)malloc(45) ) == NULL )
{
printf("Memoria insuficiente");
exit(1);
}
gets( nombres[j] );
}
//Se libera la memoria ocupada
for( j = 0; j < 50; j++ )
free( nombres[j] );
}
<',5 M&/)33'+I <',5 M%1&H 0,?/P1 .2/<'1)*JL
&'1'1,%'
&(2*/.1'0 !

Tema 11 – Punteros y gestión dinámica de memoria Página 111 de 154


IES Gran Capitán Fundamentos de Programación

" !
8)3'& 5/<2/31' * ! ! !
! #&
!

,.)3,5)5 1 "
! " >
23 '
• %1&' !
• .2/<'1)*' 3 ! "

'
#include <stdio.h>
#include <stdlib.h>

main() {
char *saludo = "Hola";
char nombre[]= "Juan";
char *pt;
int j;

//Se reserva bloque de memoria


pt = (char *) malloc(5);
if( !pt ) {
printf("Memoria insuficiente");
exit(1);
}
pt = (char *)saludo;

//Muestra el contenido de pt
for( j = 0; j < 5; j++ )
printf("%c", *(pt+j) );

//Modificar el tamaño de bloque reservado


pt = (char *)realloc( pt, 10 );
if( !pt ) {
printf("Memoria insuficiente");
exit(1);
}
strcat( pt, nombre );
printf("\n%s", pt);
free(pt);
}

Tema 11 – Punteros y gestión dinámica de memoria Página 112 de 154


IES Gran Capitán Fundamentos de Programación

12
INTRODUCCIÓN
Estructuras compuestas

! %
! 1 '

• 1
• &

-
!
ESTRUCTURAS
& !
! !

! %
! = '
struct nombre_estructura {
tipo elemento1,
tipo elemento2,

tip elementoN;
};

struct cliente {
int dni;
char nom[35];
char direc[45];
float cuenta;
};
1
!% !
!
! ! !

Definición de variables
- !
% '
struct nombre_estructura {
tipo elemento1,

Tema 12 – Estructuras compuestas Página 113 de 154


IES Gran Capitán Fundamentos de Programación

tipo elemento2,

tip elementoN;
} lista_variables;

struct cliente {
int dni;
char nom[35];
char direc[45];
float cuenta;
} client1, client2, cliente3;
1 !
! 1! /! C

-
! '
struct {
tipo elemento1,
tipo elemento2,

tip elementoN;
} lista_variables;

struct {
int dni;
char nom[35];
char direc[45];
float cuenta;
} client1, client2, client3;
1 !
! ! !
!

!
'
struct nombre_estructura lista_variables;

struct cliente client4, client5;


1 ! I J

Referencia a elementos

+ , '
nombre_variable_estructura.nombre_elemento
0 ! 1
client1.dni, client1.nom, client1.direc,
client1.cuenta
'
nombre_variable_estructura.nombre_elemento[índice]

client1.nom[3]

Tema 12 – Estructuras compuestas Página 114 de 154


IES Gran Capitán Fundamentos de Programación

gets(client1.nom);
scanf("%d",&client1.dni);
)
'
puts(client1.nom);
printf("%d", client1.dni);
printf("%c", client1.direc[1]);
Carga de datos
!
! !
! -
! '
struct cliente client1 = { 34567,
"Antonio López Gómez",
"c/ Mayor 25 – MADRID",
12500.5 };
0
!
!
! '
strcpy(client1.nom, "Antonio López Gómez");
strcpy(client1.direc, "C/ Mayor 25 – MADRID");
client1.dni = 34567;
client1.cuenta = 125000.5;
2 ! !
!
client1 = client2;
!

scanf("%d", &client1.dni);
gets(client1.nom);
gest(client1.direc);
scanf("%f", &client1.cuenta);
ESTRUCTURAS ANIDADAS
- !

! 0 '
struct nombre_estructura_1 {
tipo elemento1,
tipo elemento2,

tip elementoN;
};

struct nombre_estructura_2 {
tipo elemento_a,

Tema 12 – Estructuras compuestas Página 115 de 154


IES Gran Capitán Fundamentos de Programación

struct nombre_estructura_1 elemento_b;


tipo elemento_c,

tip elementoN;
};

struct nombre_estructura_2 nombre_variable;

struct dir {
char calle[25];
int codpos;
char poblacion[20];
};

struct cliente {
int dni;
char nom[35];
struct dir direc;
float cuenta;
};

struct cliente client1;


!

nombre_variable.elemento_b.elemento_1
'
client1.direc.calle;
ARRAY DE ESTRUCTURAS

% '
struct nombre_estructura nombre_variable[tamaño];
'
struct cliente clientetab[50];
1 :;<
% '
clientetab[5].nom

PUNTEROS Y ESTRUCTURAS

! % !
'
struct nombre_estructura *nombre_puntero;
'
struct cliente *pclient;

pclient = &client;
pclien = clientetab;

Tema 12 – Estructuras compuestas Página 116 de 154


IES Gran Capitán Fundamentos de Programación

(N %
'
pclient->nom
pclient->direc
0 '
pclient->direc.calle
*
gets(pclient->nom);
gets( (pclien + 2)->direc.calle);
scanf("%f", &((pclien + 1)->cuenta) );
*
puts(pclient->nom);
puts( (pclien + 2)->direc.calle);
printf("%f", (pclien + 1)->cuenta );
FUNCIONES Y ESTRUCTURAS

Paso de elementos individuales


1 ! !
'
func1( client1.cuenta, clien1.dni );

void func1( float cuen, int iden ) { … }


0
'
func1( &client1.cuenta, clien1.dni );
'
void func1( float *cuen, int iden ) { … }
Paso de la estructura completa
! ! 1
!
'
func1( client1 );
'
void func1( struct cliente cli ) { … }

'
func1( &client1 );
'
void func1( struct cliente * cli) { … }

'
client = func1();
'
struct cliente func1() {
struct cliente client;

return client;

Tema 12 – Estructuras compuestas Página 117 de 154


IES Gran Capitán Fundamentos de Programación

}
CAMPOS DE BITS
" -

1
!
!

- ) 0
'
struct nombre_estructura {
tipo elemento1: longitud1,
tipo elemento2: longitud2,

tip elementoN: longitudN;
}lista_variables;

" + 1 : :P , 0 :
!

struct func {
unsigned depart:4; //15 departamentos
unsigned sexo: 1; //1 varón, 0 mujer
unsigned estado:2; //01 soltero 02 casado …
unsigned situacion:1; //1 activo 0 excedencia
} funcionario;
1 ! + ,
%
9
# -
2
!
struct func {
unsigned departamento:4;
unsigned: 3;
unsigned situacion:1;
} funcionario;
!
struct func {
long dni;
char nom[35];
char direc[45];
float sueldo;
unsigned estado: 2;
unsigned situacion: 1;
} funcionario;
'
: #

Tema 12 – Estructuras compuestas Página 118 de 154


IES Gran Capitán Fundamentos de Programación

5 0

! !
K

UNIONES
&
"

!
! ! !

!
! 2.,'.
* '
unión nombre_union {
tipo elemento1;
tipo elemento2;

tipo elementoN;
};
'
union tipos_diversos{
int num;
char letra;
float importe;
};
!

unión nombre_union {
tipo elemento1;
tipo elemento2;

tipo elementoN;
} lista_variables;
'
union tipos_diversos{
int num;
char letra;
float importe;
} grupo;
0 '
union nombre_union lista_variables;
'
union tipos_diversos grupo;
1 !

grupo.num = 2;

Tema 12 – Estructuras compuestas Página 119 de 154


IES Gran Capitán Fundamentos de Programación

union tipos_diversos *pu = &grupo;


pu->letra;
!

ENUMERACIONES
&
!
!
! /.2*
enum nombre_enum{
constante1,
constante2,

constanteN
};
'
enum colores {
rojo,
amarillo,
verde,
azul
};
!
enum nombre_enum{
constante1,
constante2,

constanteN
} lista_variables;
'
enum colores {
rojo,
amarillo,
verde,
azul
} color;
0 !
enum nombre_enum lista_variables;
'
enum colores color;
4
! + ) ,

% !
4 % ! '
AK! A1! > A/ < AC
0 !
! !
'

Tema 12 – Estructuras compuestas Página 120 de 154


IES Gran Capitán Fundamentos de Programación

enum colores {
rojo,
amarillo =4,
verde,
azul
} color;
4 ! ' AK! AI! > AJ! < AL 0
! !

enum colores {
rojo = 1,
granate = 1,
amarillo = 5,
verde = 10,
azul = 15
} color;

'
if( color == verde )
printf("El color es verde \n");
& ! )

printf("El color de la pared es %s", azul );


! % ' C
0 ! !
F ;
enum arq { romanico, gotico, plateresco, neoclasico
} estilo;
switch( estilo ) {
case romanico: {
printf("romanico");
break;
}
case gotico: {
printf("gotico");
break;
}
case plateresco: {
printf("plateresco");
break;
}
case neoclasico: {
printf("neoclasico");
}
}

!
char estilos[][11] = {"romanico", "gotico",
"plateresco", "neoclasico" };
printf("El estilo es %s", estilos[estilo]);

Tema 12 – Estructuras compuestas Página 121 de 154


IES Gran Capitán Fundamentos de Programación

TIPOS DE DATOS DEFINIDOS POR EL USUARIO


1 !
- ! 1F%/5/: '
typedef tipo_dato nombre_nuevo;

typedef short float real;


1 !
- ! 0
! '
typedef long mayor_entero;
typedef long grande;
!
'
long longitud;
mayor_entero longitud;
grande longitud;
! '
"
%
! "
typedef int entero; //En máquina de 32 bits
typedef long int entero; //En máquina de 16 bits
! -
typedef float Moneda;
//Para usuario con variables que representan un
valor moneda
Importe precio;
Importe total;
2
typedef client {
long dni;
char nom[35];
char direc[45];
}Cliente;
% '
Cliente amigo;
Cliente num_clientes[120];

Tema 12 – Estructuras compuestas Página 122 de 154


IES Gran Capitán Fundamentos de Programación

13
INTRODUCCIÓN
Estructuras dinámicas internas de
datos en C

% 1
+/55, ! % P

! ! %
- !
1 ! !

! ! *
1

!
% !
! % ! '
) 0 )
% '
struct nodo {
int inf;
struct nodo *siguiente;
}
1 ! '
: ,.: ( 1
5 0,(2,/.1/ (
0
1
LISTAS ENLAZADAS SIMPLES
Creación

! #&
! %
struct nodo *lista = NULL;
Insertar un nodo en la lista
!
!
) -

void InsertarLista( struct nodo **);

Tema 13 – Estructuras dinámicas de datos Página 123 de 154


IES Gran Capitán Fundamentos de Programación

1 !
!
* %
4 !
!
! #&
!
nuevo = (struct nodo *)malloc( sizeof( struct
nodo ) );
printf("\nIntroduce el número del nuevo nodo: ");
scanf("%d", &nuevo->inf);
getchar();
nuevo->siguiente = NULO;
! !

) 3,01) /016 <)+C)E


if( *lista == NULO ) {
//Lista vacia
*lista = nuevo;
}
3 .2/<' .'5' <) /. %&,*/& 32()&
else if( (*lista)->inf > nuevo->inf ) {
nuevo->siguiente = *lista;
*lista = nuevo;
}
3 .2/<' .'5' <) /. */5,' 5/ 3) 3,01) ' )3 :,.)3
else {
anterior = *lista;
siguiente = anterior->siguiente;

while( siguiente != NULO && siguiente->inf <


nuevo->inf ) {
anterior = siguiente;
siguiente = siguiente->siguiente;
}
anterior->siguiente = nuevo;
nuevo->siguiente = siguiente;
}
Borrar un nodo de la lista
!

'
void BorrarLista( struct nodo ** );

!
!

printf("\nIntroduce el nodo a borrar: ");


scanf("%d",&inf);
getchar();

Tema 13 – Estructuras dinámicas de datos Página 124 de 154


IES Gran Capitán Fundamentos de Programación

) 3,01) /016 <)+C)


if( !(*lista) ) {
printf("\n La lista está vacia");
getchar();
}
3 .'5' /016 /. %&,*/& 32()&
else {
if( (*lista)->inf == inf ) {
anterior = *lista;
*lista = (*lista)->siguiente;
free( anterior );
}
3 .'5' /016 /. */5,' ' )3 :,.)3 5/ 3) 3,01)
else {
anterior = *lista;
siguiente = anterior->siguiente;

while( siguiente && siguiente->inf < inf ) {


anterior = siguiente;
siguiente = siguiente->siguiente;
}

if( siguiente == NULO || siguiente->inf > inf


) {
printf("\nEl nodo no está en la lista");
getchar();
}
else {
anterior->siguiente = siguiente->siguiente;
free( siguiente );
}
Recorrido de la lista en sentido ascendente
! # !
!
void VisualizarListaA( struct nodo *lista ) {

if( lista ) {
printf("%d -> ", lista->inf );
VisualizarListaA( lista->siguiente );
}
else {
printf("NULO");
}
}
Recorrido de la lista en sentido descendente
0 ! !
!
! % '
void VisualizarListaD( struct nodo *lista ) {

if( lista ) {

Tema 13 – Estructuras dinámicas de datos Página 125 de 154


IES Gran Capitán Fundamentos de Programación

VisualizarListaD( lista->siguiente );
printf("%d -> ", lista->inf );
}
}
Búsqueda de un nodo
-
- * ! ! %
% ! 0 ! ! <
int BuscarNodo( struct nodo *lista, int inf ) {
int pos = 1;
while( lista && lista->inf < inf ) {
lista = lista->siguiente;
pos++;
}
if( !(lista && lista->inf == inf) ) pos = 0;
return pos;
}
LISTAS ENLAZADAS DOBLES

* % '
struct nodo {
int inf;
struct nodo *siguiente; //Puntero al siguiente
nodo
struct nodo *anterior; //Puntero al nodo
anterior
};
Creación

0 !
struct nodo *lista = NULO;
Insertar un nodo en la lista
-
0 -

void InsertarLista( struct nodo ** );


! !

//Se reserva memoria para el nuevo nodo


nuevo = (struct nodo *)malloc( sizeof( struct nodo
) );

//Leemos el campo información


printf("\nIntroduce el número del nuevo nodo:");
scanf("%d", &nuevo->inf);
getchar();

//Por si acaso, asignamos nulo a ambos punteros


nuevo->anterior = NULO;

Tema 13 – Estructuras dinámicas de datos Página 126 de 154


IES Gran Capitán Fundamentos de Programación

nuevo->siguiente = NULO;
0 ) - !

) 3,01) /016 <)+C)E


if( !(*lista) ) { //Equivalente a if( *lista ==
NULO )
//La lista está vacia
*lista = nuevo;
}
3 .2/<' .'5' <) /. %&,*/& 32()&
else if( (*lista)->inf > nuevo->inf ) {
//Ahora comprobamos que vaya en primer lugar
nuevo->siguiente = *lista;
(*lista)->anterior = nuevo;
*lista = nuevo;
}
3 .2/<' .'5' <) /. */5,' ' )3 :,.)3 5/ 3) 3,01)
else {
//El nuevo nodo está en medio o al final
anterior = *lista;
siguiente = (*lista)->siguiente; //También
anterior->siguiente
printf("primero");

while( siguiente && siguiente->inf < nuevo->inf


) {
anterior = anterior->siguiente;
siguiente = siguiente->siguiente; //También
anterior->siguiente
}

nuevo->siguiente = siguiente;
printf("segundo");
nuevo->anterior = anterior;
printf("tercero");
anterior->siguiente = nuevo;
printf("cuarto");
if( siguiente ) {
siguiente->anterior = nuevo; // también if(
siguiente != NULO )
}
}
Borrar un nodo de la lista
6 !
" '
void BorrarLista( struct nodo ** );
4 !

printf("\nIntroduce el numero del nodo a borrar:


");
scanf("%d", &inf );

Tema 13 – Estructuras dinámicas de datos Página 127 de 154


IES Gran Capitán Fundamentos de Programación

getchar();
) 3,01) /016 <)+C)
if( !(*lista) ) { // if( *lista != NULO )
printf("\nLa lista está vacía");
getchar();
}
3 .'5' /016 /. %&,*/& 32()&
else if( (*lista)->inf == inf ) {
anterior = *lista;
*lista = (*lista)->siguiente;

if( *lista ) (*lista)->anterior = anterior-


>anterior; //Será NULO
free(anterior);
}
3 .'5' /016 /. */5,' ' )3 :,.)3
else {
anterior = *lista;
siguiente = anterior->siguiente;

while( siguiente && siguiente->inf < inf ) {


anterior = siguiente;
siguiente = siguiente->siguiente;
}

if( siguiente && siguiente->inf == inf ) {


anterior->siguiente = siguiente->siguiente;
if( siguiente->siguiente ) siguiente-
>siguiente->anterior = anterior;
free( siguiente );
}
else {
printf("\nEl nodo no está en la lista");
}
}
Recorrido de la lista en sentido ascendente
0
void VisualizarListaA( struct nodo *lista ) {
if( lista ) {
printf("%d -> ", lista->inf );
VisualizarListaA( lista->siguiente ) ;
}
else
printf("NULO");
}
Recorrido de la lista en sentido descendente
0
void VisualizarListaD( struct nodo *lista ) {
if( lista ) {
VisualizarListaD( lista->siguiente ) ;
printf("%d -> ", lista->inf );

Tema 13 – Estructuras dinámicas de datos Página 128 de 154


IES Gran Capitán Fundamentos de Programación

}
}
Recorrido en ambos sentidos

!
!
!
'
void VisualizarAmbosSentidos( struct nodo *lista,
char sentido ) {

char opc;

if( lista ) {
//El nodo no es nulo. Presenta la información
printf("%d ", lista->inf );

//Determinar si se quiere ir al siguiente o al


anterior
printf("\n¿Quiere ver el [a]nterior o el
[s]iguiente? ");
scanf("%c", &opc);
getchar();

switch( opc ) {
case 'A':
case 'a': {
VisualizarAmbosSentidos( lista->anterior,
'a' );
break;
}
case 'S':
case 's': {
VisualizarAmbosSentidos( lista->siguiente,
's' );
}
}
}
else if( sentido == 'a' )
printf("Principio de la lista");
else printf("Final de la lista");
}
LISTAS CIRCULARES

Creación
!
!
#&

Tema 13 – Estructuras dinámicas de datos Página 129 de 154


IES Gran Capitán Fundamentos de Programación

struct nodo *lista = NULO;


Insertar un nodo en la lista
)

!
#&
#& ! % '
void InsertarLista( struct nodo ** );
%
!
! !
#&
nuevo = (struct nodo *)malloc( sizeof( struct nodo
) );
nuevo->siguiente = NULO;

printf("\nIntroduce el valor del nuevo nodo: ");


scanf("%d", &nuevo->inf);
getchar();
!

) 3,01) /016 <)+C)


if( !(*lista) ) { //if( *lista == NULO )
//La lista está vacía
*lista = nuevo;
nuevo->siguiente = nuevo;
}
3 .2/<' .'5' <) /. %&,*/& 32()&
else if( (*lista)->inf > nuevo->inf ) {
//Va en primer lugar
nuevo->siguiente = *lista;
(*lista)->siguiente = nuevo;
*lista = nuevo;
}
3 .2/<' .'5' <) /. */5,' 5/ 3) 3,01) ' )3 :,.)3
else {
//Va en medio o al final
anterior = *lista;
siguiente = (*lista)->siguiente;

while( siguiente != *lista && siguiente->inf <


nuevo->inf ) {
anterior = siguiente;
siguiente = siguiente->siguiente;
}

anterior->siguiente = nuevo;
nuevo->siguiente = siguiente;
}

Tema 13 – Estructuras dinámicas de datos Página 130 de 154


IES Gran Capitán Fundamentos de Programación

Borrar un nodo en la lista

- '
void BorrarLista( struct nodo ** );
)
% )
4 !

printf("\nIntroduce el valor del nodo a borrar:


");
scanf("%d",&inf);
getchar();
) 3,01) /016 <)+C)
if( !(*lista) ) { //if( *lista == NULL )
printf("\nLista vacia. Pulse INTRO");
getchar();
}
3 .'5' /016 /. %&,*/& 32()&
else if( (*lista)->inf == inf ) {
//Se va a borrar el primer nodo de la lista
//Busca el final de la lista a partir del 2º
nodo
anterior = (*lista)->siguiente;
//Parará cuando el puntero anterior apunte al
último nodo de la lista
while( anterior->siguiente != *lista ) {
anterior = anterior->siguiente;
}

siguiente = *lista;
//Asigno el puntero del último nodo para que
apunte al principio
anterior->siguiente = (*lista)->siguiente;
//El nuevo principio es el 2º nodo
if( *lista == (*lista)->siguiente ) *lista =
NULO;
else *lista = (*lista)->siguiente;

free(siguiente);
}
3 .'5' /016 /. */5,' ' )3 :,.)3 5/ 3) 3,01)
else {
anterior = *lista;
siguiente = (*lista)->siguiente;

while( siguiente != *lista && siguiente->inf <


inf ) {
anterior = siguiente;
siguiente = siguiente->siguiente;
}

Tema 13 – Estructuras dinámicas de datos Página 131 de 154


IES Gran Capitán Fundamentos de Programación

if( siguiente->inf == inf ) {


anterior->siguiente = siguiente->siguiente;
free( siguiente );
printf("\nNodo borrado");
}
else {
printf("\nEl nodo no está en la lista");
}
}
Recorrido de la lista en sentido ascendente
0 !
! ! ! !

void VisualizarLista( struct nodo *lista ) {

struct nodo *principio = lista;

if( lista ) {
printf("%d ->", lista->inf );
lista = lista->siguiente;
while( lista != principio ) {
printf("%d ->", lista->inf );
lista = lista->siguiente;
}
}
printf("FINAL");
}

void VisualizarListaA( struct nodo *lista, struct


nodo *principio ) {

if( lista != principio ) {


printf("%d -> ", lista->inf );
VisualizarListaA( lista->siguiente, principio
);
}
else {
printf("FINAL");
}
}
Búsqueda de un nodo
2 ! !
* ! ! <
int BuscarNodo( struct nodo *lista, int inf ) {

int pos = 1;
struct nodo *principio = lista;

if( lista ) {

Tema 13 – Estructuras dinámicas de datos Página 132 de 154


IES Gran Capitán Fundamentos de Programación

while( lista->inf < inf && principio != lista-


>siguiente ) {
lista = lista->siguiente;
pos++;
}
if( lista != principio || lista->inf == inf )
return pos;
else return 0;
}
else {
return 0;
}
}
PILAS
&
- -
+,*) 5/ 3) %,3)

! % k
%
Creación
! !
#&
struct nodo *pila = NULL;
Apilar
!

void Apilar( struct nodo **pila, int inf ) {


struct nodo *nuevo;
nuevo = (struct nodo *)malloc( sizeof( struct
nodo ) );
printf("\nIntroduce el número del nuevo nodo: ");
&nuevo->inf = inf;

nuevo->siguiente = *pila;
*pila = nuevo;
}
Desapilar
) !
! !
int Desapilar( struct nodo **pila ) {
struct nodo *auxiliar;
int inf = 0;

if( *pila ) {
auxiliar = *pila;
inf = auxiliar->inf;
*pila = (*pila)->siguiente;

Tema 13 – Estructuras dinámicas de datos Página 133 de 154


IES Gran Capitán Fundamentos de Programación

free( auxiliar );
}
else {
printf("\nPila vacía");
}
return inf;
}
Cima de la pila
1 !

int Cima( struct nodo *pila ) {


if( pila ) {
return pila->inf;
}
else {
printf("\nPila vacía");
return 0;
}
}
Búsqueda de un nodo
1 !
2 %
0 %
%
- 1
! !
!
! % &
!
int BuscarNodo( struct nodo *pila, int inf ) {

struct nodo *pilaux = NULO;


int pos = 1;

while( pila && pila->inf != inf ) {


Apilar( &pilaux, Desapilar( &pila ) );
pos++;
}

if( pila ) {
while( pilaux ) Apilar( &pila, Desapilar(
&pilaux ) );
return pos;
}
else
return 0;
}

Tema 13 – Estructuras dinámicas de datos Página 134 de 154


IES Gran Capitán Fundamentos de Programación

COLAS
&
- + ,
+ ,

'
'
: & '

5 * ! '

//Estructura con el principio y el final de la cola


struct cola {
struct nodo *principio;
struct nodo *final;
};
Creación
& ! !
! #&
struct cola iniciofin;
iniciofin.principio = NULO;
iniciofin.final = NULO;
Insertar un nodo en la cola
!
- !
!
nuevo = (struct nodo *)malloc( sizeof( struct
nodo ) );
printf("\nIntroduce el valor del nuevo nodo: ");
scanf("%d", &nuevo->inf );
getchar();
nuevo->siguiente = NULO;

if( !iniciofin->principio ) { //if( iniciofin-


>principio != NULO )
iniciofin->principio = nuevo;
iniciofin->final = nuevo;
}
else {
iniciofin->principio->siguiente = nuevo;
iniciofin->principio = nuevo;
}
1 ! !%
0

Tema 13 – Estructuras dinámicas de datos Página 135 de 154


IES Gran Capitán Fundamentos de Programación

Borrado de un nodo de la cola

void BorrarCola( struct cola *iniciofin ) {

struct nodo *auxiliar;

if( iniciofin->principio ) { //if( iniciofin-


>principio != NULO )
auxiliar = iniciofin->final;
iniciofin->final = iniciofin->final->siguiente;
//auxiliar->siguiente;
free( auxiliar );

if( !iniciofin->final ) iniciofin->principio =


NULO;
}
}
1 !

Recorrido de una cola


1 ! )

!
void VisualizarCola( struct cola iniciofin ) {
struct nodo *auxiliar;
auxiliar = iniciofin.final;
printf("Cola: ");
while( auxiliar ) { //while( auxiliar !=
NULO )
printf("%d -> ", auxiliar->inf );
auxiliar = auxiliar->siguiente;
}
printf("Final");
}
Búsqueda de un nodo en la cola
1 /
0
! ! ! ! <
int BuscarNodo( struct cola iniciofin, int inf ) {

struct nodo *auxiliar;


int pos = 1;

auxiliar = iniciofin.final;
while( auxiliar && auxiliar->inf != inf ) {
auxiliar = auxiliar->siguiente;
pos++;
}

if( auxiliar ) return pos;

Tema 13 – Estructuras dinámicas de datos Página 136 de 154


IES Gran Capitán Fundamentos de Programación

else return 0;
}

Tema 13 – Estructuras dinámicas de datos Página 137 de 154


IES Gran Capitán Fundamentos de Programación

14
FLUJOS
Ficheros en C

& :324' 2 3
2 3 2 3
- - 2M N3
! -
! !
! ! /
'
extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;
!
- 0 '
( + ,
( + ,
( + ,
% +a1 6 5 a, A A
! +ad a S-, A %

! 0
! !
! A ! !
!

A %
! ! %

1 ! "
! !
1
! 1
PUNTERO FILE
! ! -
% !

+ ! ,
!
! )
%
=4 !
'
typedef struct{

Tema 14 – Ficheros en C Página 138 de 154


IES Gran Capitán Fundamentos de Programación

short level;
unsigned flags;/*estado del archivo: lectura, binario ... */
char fd;
unsigned char hold; short bsize;
unsigned char *buffer, *curp; unsigned istemp; short token;
}FILE;
=
- =4
=4 ! 6
! FILE *, y +,

0 =4 A
=4
FILE* pf;
FILE* mostrar(FILE*); /* Prototipo de una función definida por
el programador* /
1 !
=4 '
FILE *stdin, *stdout;

APERTURA DE UN ARCHIVO
! 1+ ,
! !
! - ! ! '
! !
=4 ! !
! +, '
fopen(char * nombre archivo, char *modo);
• ! (1 - !
• (1 ! !
! ! =4 !
! +, !
! ! ! =4 %
!

* ! =4
!
FILE* pf;
pf = fopen(nombre_archivo, modo);
! !
- ! ! #&

0 ! 41 #14 02
#include <stdio.h>
#include <stdlib.h>

FILE *pf;
char nm[] = "C:\LICENCIA.EST";
pf = fopen(nm, “r”);
if( pf == NULL ) {
puts(“Error al abrir el archivo”);
exit(1);
}

Tema 14 – Ficheros en C Página 139 de 154


IES Gran Capitán Fundamentos de Programación

! - ? E*4# 0 * 2

#include <stdio.h>
#include <stdlib.h>

FILE *ff;
char nm[] = "C:\LICENCIA.EST";
pf = fopen(nm, “r”);
if( pf == NULL ) {
puts(“Error al abrir el archivo”);
exit(1);
}

! - ? E*4# 0 * 2
% +,

#include <stdio.h>
#include <stdlib.h>

FILE *ff;
char* arch = "C:\AMBIENTE\JARDINES.DAT";

if ((ff = fopen(nm, "w"))==NULL) {


puts("Error al abrir el archivo para escribir.");
exit(-1);
}

+, ! '

FILE* fopen (const char* nombre-archivo, const char* modo);

Modos de apertura de un archivo


! +,
! = ! " A
- - '
6 0

$ ! ! + -

"
H ! - + B ,
$H 1 ! B + -
,
H ! + B , 0
- $H

! - 0

- - 0

Tema 14 – Ficheros en C Página 140 de 154


IES Gran Capitán Fundamentos de Programación

- )
+ ,
! - '
a a a$ a a a a H a a$H a a H a
7 ! '
a ,a a$ a a a a H a >$H a a H a

0 ! - 41 #14 02
! E 0&6 # E 1
'
#include <stdio.h>
#include <stdlib.h>

FILE *pfl, *pf2;


char org[] = "C:\LICENCIA.EST"; char dst[] = "C:\RESUMEN.REC";

pf1 = fopen (org, "rt");


pf2 = fopen(dst,"wb");
if (pfl == NULL II pf2 == NULL){
puts("Error al abrir los archivos.");
exit (1);
}
NULL Y EOF
! ! + +, +, ,
+ ,
! ! #& m ! !

% B0 !

! ! 8= ! ! 8= % !

! '
int c;
while ((c=getchar()) != EOF)
Cierre de archivos
! 1
!
!
! % ) 0
! !
!
+ \ , ! \ ! !
8=
'
int fclose(FILE* pf);

! -
#include <stdio.h>

FILE *pfl, *pf2;


pf1 = fopen("C:\DATOS.DAT","a+");
pf2 = fopen("C:\TEMPS.RET","b+");
fclose(pfl);

Tema 14 – Ficheros en C Página 141 de 154


IES Gran Capitán Fundamentos de Programación

fclose(pf2);

CREACIÓN DE UN ARCHIVO SECUENCIAL


& ! ! !
1 ! ! !
=4
!
+ ,
+ ,'
+, +, +, +, +, +, 2
! ! % +, +, +,
+, A % % !
Funciones putc () y fputc ( )
+,
! =4 * ! ! 8=
'
putc(c, puntero-archivo);
fputc(c, puntero-archivo);

0 ! 0 4* 2
& ! ! +$ , ! + =,
! =4
#include <stdio.h>

int main() {
int c;
FILE* pf;
char *salida = "SALIDA.TXT" ;
if ((pf = fopen (salida,"wt") == NULL) {
puts("ERROR EN LA OPERACION DE APERTURA");
return 1;
}
while ((c=getchar())!=EOF)
putc(c,pf);

fclose(pf);
return 0;
}

! + , + ,
'
int putc(int c, FILE* pf);
int fputc(int c, FILE* pf);
Funciones getc () y fgetc ( )
A
% +, +, m +, +,
+ , ! =4 * ! !
% 8= ! + ,
'
getc(puntero_archivo);
fgetc(puntero_archivo);

! 0 4* 2 %

Tema 14 – Ficheros en C Página 142 de 154


IES Gran Capitán Fundamentos de Programación

& ! ! -
! + 8=,
% % %
#include <stdio.h>

int main() {
int c, n=0;
FILE* pf;
char *nombre = "\\SALIDA.TXT";
if ((pf = fópen(nombre,"rt")) == NULL) {
puts("ERROR EN LA OPERACION DE APERTURA");
return 1;
}
while ((c=getc(pf))!=EOF) {
if (c == '\n')
n++; printf("\n");
else
putchar(c);
}
printf("\nNúmero de líneas del archivo: %d",n);
fclose(pf);
return 0;
}
'
int getc(FILE* pf);
int fgetc(FILE* pf);
Funciones fputs () y fgets ()
B !
+, ! ! 8=
! ! A
'
fputs(cadena, puntero_archivo);
+, ! 2
% % (:
! !
! #& '
fgets(cadena, n, puntero-archivo);

- 9< ! '
#define T 81
char cad[T];
FILE *f;
fgets(cad, T, f);

! 1 E2 0 * 2 - " ! %
% K< ! E46 E8 * 2
! ! " +a a,
! +a a, % +,
! 1 E2 0
! !
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MX 121
#define MN 30
int main() {
FILE *in, *out;

Tema 14 – Ficheros en C Página 143 de 154


IES Gran Capitán Fundamentos de Programación

char noml[]= "\\CARTAS.DAT"; char nom2[]= "\\PRIMERO.DAT";


char cad[MX];
in = fopen(nom2,"rt"); out= fopen(noml,"at");
if (in==NULL II out==NULL) {
puts("Error al abrir archivos. ");
exit(-1);
}
while (fgets(cad,MX,in)) { /*itera hasta que devuelve puntero
NULL*/
if (strlen(cad) >= MN)
fputs(cad,out);
else
puts (cad);
}
fclose(in);
fclose(out);
return 0;
}
'
int fputs(char* cad, FILE* pf);
char* fgets(char* cad, int n, FILE* pf);
Funciones fprintf () y fscanf ()
+, +, !
+d d , 1
+ ! ,
+, +, + ! ,
h ! -

0 ! - E08# 0 * 2 %

+ + , + , " + , 0144,
0
! ! % 0144
) ! !
0144 ! +,
#include <malloc.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>

/* declaración de tipo global estructura */


typedef struct {
char* nm;
int dia;
int ms;
int aa;
char mes[11];
}PERSONA;

void entrada( PERSONA* p );


char* mes_asci(short n);

int main() {

FILE *pff;
char nf[]= "\\PERSONS.DAT"; char r = 'S';
if ((pff = fopen(nf,"wt"))==NULL) {
puts("Error al abrir archivos. ");

Tema 14 – Ficheros en C Página 144 de 154


IES Gran Capitán Fundamentos de Programación

exit(-1);
}
while (toupper(r) == 'S') {
PERSONA pt;
entrada(&pt);
printf("%s %d-%d-%d %s\n",pt.nm,pt.dia,pt.ms,pt.aa,pt.mes);
fprintf(pff,"%s-%d-%d-%d %s\n", pt.nm, pt.dia, pt.ms, pt.aa,
pt.mes);
printf("Otro registro?: ");
scanf("%c%*c",&r);
}
fclose(pff);
return 0;
}
void entrada(PERSONA* p) {
char bf[81];
printf("Nombre: ");
gets(bf);
p->nm =(char*)malloc((strlen(bf)+1)*sizeof(char));
strcpy(p->nm,bf);
printf("Fecha de nacimiento(dd mm aaaa): ");
scanf("%d %d %d%*c",&p->dia,&p->ms,&p->aa);
printf("\n %s\n",mes asci(p->ms));
strcpy(p->mes,mes_asci(p->ms));
}

char* mes_asci(short n) {
static char *mes[12]= {
"Enero", "Febrero", "Marzo",
"Abril", "Mayo", "Junio",
"Julio", "Agosto",
"Septiembre", "Octubre",
"Noviembre", "Diciembre"
};

if (n >=1 && n <= 12)


return mes[n-1];
else
return "Error mes"

'
int fprintf(FILE* pf,const char* formato,. . .);
int fscanf(FILE* pf,const char* formato,. . .);
Función feof ( )
*! ! ! 8=
! 1 !
! +,
! ! ! <+ ,
! ! ! <+ ,

! T<
+,
int c, n=0;
FILE* pf;
char *nombre = “SALIDA.TXT”;
...

while (!feof(pf)) {
c=getc(pf);

Tema 14 – Ficheros en C Página 145 de 154


IES Gran Capitán Fundamentos de Programación

if (c == '\n')
n++; printf("\n");
...

'
int feof(FILE* pf);
Función rewind ()
& ! ! ! +,
! ! ! + , 1 $ +, )
!
rewind(puntero_archivo)
'
void rewind(FILE*pf);

! - )
) !
#include <stdio.h>
#include <string.h>

FILE* pg;
char nom[]="PLUVIO.DAT";
char buf[121];
int nl = 0;

if ((pg = fopen(nom,"rt") )==NULL) {


puts("Error al abrir el archivo.");
exit(-1);
}
while (!feof (pg) ) {
fgets(buf,121,pg);
nl++;
}
rewind(pg);
/* De nuevo puede procesarse el archivo
while (!feof (pg) ) {
···
}

ARCHIVOS BINARIOS EN C
!
! < : & % !
!
% 5
C + , ) C 9 A -
! ! % +dP d9 5 ,
! !

! 1
! ! -
'
a a a$ a a a a H a a$H a a H a

K =4 !

FILE *pfl, *pf2, *pf3;

Tema 14 – Ficheros en C Página 146 de 154


IES Gran Capitán Fundamentos de Programación

pf1 = fopen("gorjal.arr", "rb");


pf2 = fopen ("tempes.feb","w+b");
pf3 = fopen("telcon.fff","ab");
1
! +, $ +,
Función de salida fwrite ( )
$ +, !
'
fwrite(direccion_buffer,tamaño,num elementos,puntero archivo);

! 0 )
! - "
! !
FILE *fd;
double x;
fd = fopen(" real es.num","wb");
for (x=0.5; x > 0.01;) {
fwrite(&x, sizeof(double), 1, fd );
x = pow(x,2.);
}
'
size_t fwrite(const void *ptr,size t tam,size t n,FILE *pf);
\

0
) +- , : OG - OG :<< : OG OG :<< 0
!
! &#280 * 2 0 )
! ! $ +,
+< < ,
#include <stdio.h>
struct punto {
int x, y;
};
typedef struct punto PUNTO;
int main() {
PUNTO p;
char *nom ="C:\PUNTOS.DAT";
FILE *pp;
if ((pp = fopen(nom,"wb"))==NULL) {
puts("\nError en la operación de abrir archivo.");
return -1;
}
puts("\nlntroduce coordenadas de puntos, fin: (0,0)");
do {
printf("Coordenas deben ser >=0 :");
scanf("%d %d",&p.x,&p.y);
if (p.x>0 II p.y>O)
fwrite(&p, sizeof(PUNTO), 1, pp);
}while (p.x<0 || p.y<O)

fclose(pp);
return 0;
}
!
1 ! !
!

Tema 14 – Ficheros en C Página 147 de 154


IES Gran Capitán Fundamentos de Programación

Función de lectura f read ( )


!
) + " ,
) + ! ,
'
fread(direccion buffer,tamaño,n,puntero_archivo);
! ! )
'
size_t fread(void *ptr,size_t tam,size_t n,FILE *pf);

! !
! A ) !
FILE *fd;
double x, s=0.0;
if((fd = fopen("real es.num","rb"))==NULL)
exit(-1);

while (!eof (fd) ) {


fread(&x, sizeof(double), 1, fd);
S+= x;
}

! 0
! '
) ! + , !
* !
!
! \ +,
) A !
! 1 G: <<
+ , \ +,A
!
$ +,
#include <stdio.h>
struct punto {
int i,j;
}
typedef struct punto PUNTO;
FILE *pp;
int cuenta_pto(PUNTO w);
int main() {
PUNTO p;
char *nom ="C:\PUNTOS.DAT";
float media,nmd,dnm;
if ((pp = f open (nom, "rb")) ==NULL) {
puts("\nError al abrir archivo para lectura.");
return -.1;
}
printf("\nIntroduce coordenadas de punto a búscar: ");
scanf("%d %d",&p.i,&p.j);
printf("\nRepeticiones del punto (%d,%d): %d\n",
p.i,p.j,cuenta_pto(p));

/* Cálculo de la media i para un valor j */


printf ("Valor de j: ");
scanf("%d",&p.j);

Tema 14 – Ficheros en C Página 148 de 154


IES Gran Capitán Fundamentos de Programación

media=nmd=dnm= 0.0;

for (p.i=1; p.i<= 10; p.i++) {


int st;
rewind(pp);
st = cuenta_pto(p);
nmd += (float)st*p.i;
dnm += (float)st;
}

if (dnm >0.0)
media = nmd/dnm;
printf("\nMedia de los valores de i para %d %.2f",p.j,media);
return 0;
}

int cuenta_pto(PUNTO w) {
PUNTO p;
int r; r = 0;
while (!feof(pp)) {
fread(&p,sizeof(PUNTO),l,pp);
if (p.i==w.i && p.j==w.j) r++;
}
return r;
}

FUNCIONES PARA ACCESO ALEATORIO


( ( !
! 2 !
0
!
-

U +, +, !
1 ! A )
% ! 0 ) ! !
! 1
:: +, ! U +,
!
Función fseek()
1 U+, ! 1
U+, ) !
!
- !
) ) !

* + , E8*&128 ! 0
) + ,
typedef struct {
char nombre[41];
int unidades;
float precio;
int pedidos;
} PRODUCTO;

Tema 14 – Ficheros en C Página 149 de 154


IES Gran Capitán Fundamentos de Programación

PRODUCTO uno;
int n, stat;
FILE* pfp;

if ((pfp = fopen("conservas.dat","r"))==NULL) {
puts("No se puede abrir el archivo.");
exit(-1);
}
/* Se pide el número de registro */
printf("Número de registro: ");
scanf("%d",&n);

/* Sitúa el puntero del archivo */


stat = fseek(pfp, n*sizeof(PRODUCTO),O);

/* Comprueba que no ha habido error */


if (stat != 0) {
puts("Error, puntero del archivo movido fuera de este");
exit(-1):
}

/* Lee el registro */
fread(&uno, sizeof(PRODUCTO), 1, pfp);
···
U+,
< !
U +,
fseek(puntero_archivo, desplazamiento, origen);
' ) ! A
' ) !
! '
<'1 !
:'1 !
5'1 !
! + ,'
<'0 n\0 2
:'0 n\1&E
5'0 n\ #*
U+, ! ! !
A
int fseek(FILE *pf,long dsplz,int origen);

Rn
0 % +6, +=,
! :R;C ! +
, 0 ) !
1 EE E 8 )
! A )
)
0 ! 1 EE E 8
) )

' "
- % + , )

Tema 14 – Ficheros en C Página 150 de 154


IES Gran Capitán Fundamentos de Programación

!
)
) ) % ! ;:
:<<A :<: 5<< ! 5;: ;<<
;<: :<<<
!

! !
)

!
/* Archivo atleta.h */
typedef struct fecha {
int d, m, a;
}FECHA;

typedef struct tiempo {


int h, m, s;
}TIEMPO;

struct atleta {
char nombre[28];
FECHA f;
char sx; /* Sexo */
char cat; /* Categoría */ TIEMPO t;
unsigned int dorsal;
unsigned short puesto;
};

typedef struct atleta ADTA;

#define desplz(n) (n-l)*sizeof(ADTA)

/* Programa para dar entrada en el archivo de atletas. */


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <ctype.h>
#include "atleta.h"

void inicializar(FILE*);
void unatleta(ADTA* at,FILE*);
unsigned numdorsal(char s, char cat, FILE* pf);

int main() {
FILE *pf;
ADTA a;
char *archivo= "C:\CARRERA.POL";
randomize();
if ((pf=fopen(archivo, "wb+"))==NULL) {
printf("\nError al abrir el archivo %s, fin del
proceso.\n");
return -1;
}
inicializar(pf);
//Se introducen registros hasta teclear como nombre: FIN
unatleta(&a,pf);
do {

Tema 14 – Ficheros en C Página 151 de 154


IES Gran Capitán Fundamentos de Programación

fseek(pf,desplz(a.dorsal),SEEK_SET);
fwrite(&a,sizeof(ADTA),1,pf);
unatleta(&a,pf);
}while (strcmpi(a.nombre,"FIN"));
fclose(pf);
return 0;
}

void unatleta(ADTA* at, FILE*pf) {


printf("Nombre: ");

gets(at->nombre);
if (strcmpi(at->nombre,"fin")) {
printf("Fecha de nacimiento: ");
scanf("%d %d %d%*c",&at->f.d,&at->f.m,&at->f.a);
if (at->f.a<1954)
at->cat = 'V';
else
at->cat = 'S';
printf("Sexo: ");
scanf("%c%*c",&at->sx);
at->sx=(char)toupper(at->sx);
at->t.h = 0;
at->t.m = 0;
at->t.s = 0;
at->dorsal = numdorsal(at->sx,at->cat,pf);
printf("Dorsal asignado: %u\n",at->dorsal);
}
}

unsigned numdorsal(char s, char cat, FILE* pf) {


unsigned base, tope, d; ADTA a;

if (s=='M' && cat=='V') {


base = 251;
tope = 500;
}
else if (s=='M' && cat=='S') {
base = 501;
tope = 1000;
}
else if (s=='F' && cat=='V') {
base = 51;
tope = 100;
}
else if (s=='F' && cat=='S') {
base = 101;
tope = 200;
}
d = (unsigned) random(tope+l-base)+base;

fseek(pf,desplz(d),SEEK SET);
fread(&a,sizeof(ADTA),1,pf);

if (!(*a.nombre)) /* Cadena nula: está vacío */


return d;
else
return numdorsal(s,cat,pf);
}

void inicializar(FILE*pf) {

Tema 14 – Ficheros en C Página 152 de 154


IES Gran Capitán Fundamentos de Programación

int k;
ADTA a;

a.nombre[0] = '\0';
for (k=1; k<=1000; k++)
fwrite(&a,sizeof(ADTA),1,pf);
}

/* Programa para dar entrada a los tiempos de los atletas.


Primero, dado un numero de dorsal se visualiza el registro del
atleta, a continuación se introduce los minutos y segundos
realizados por el atleta.*/

#include <stdio.h>
#include <string.h>
#include "atleta.h"

void datosatleta(ADTA at);

int main() {
FILE *pf;
ADTA a;
TIEMPO h={0,0,0};
char *archivo= "C:\CARRERA.POL";
unsigned dorsal=l;

if ((pf=fopen(archivo, "rb+"))==NULL) {
printf("\nError al abrir el archivo %s, fin del
proceso.\n");
return -1;
}

/* El proceso iterativo termina con el dorsal 0 */


printf("\n Dorsal del atleta: ");
scanf("%u",&dorsal);
for ( ; dorsal ; ) {
// Se situa el puntero en el registro
fseek(pf,desplz(dorsal),SEEK SET);
fread(&a,sizeof(ADTA),1,pf);
if (*a.nombre) {
datosatleta(a);
printf("\n Tiempo realizado en minutos y segundos: ");
scanf("%d %d",&h.m,&h.s);
a.t = h;
fseek(pf,desplz(dorsal),SEEK_SET);
fwrite(&a,sizeof(ADTA),1,pf);
}
else
printf("Este dorsal no está registrado.\n");

printf("\n Dorsal del atleta: "); scanf("%u",&dorsal);


}
fclose(pf);
return 0;
}

void datosatleta(ADTA at) {


printf("Nombre :%s\n",at.nombre);
printf("Fecha de nacimiento:%d-%d-%d:\n", at.f.d, at.f.m,
at.f.a );
printf("Categoria :%c\tDorsal: %u\n",at.cat,at.dorsal);

Tema 14 – Ficheros en C Página 153 de 154


IES Gran Capitán Fundamentos de Programación

if (at.t.m>O)
printf("Tiempo de carrera :%d min %d seg\n",at.t.m,at.t.s);
}
Función ftell ( )
! +,
! ! ! )
+ ' , ! + <,

! ! )

#include <stdio.h>

int main(void) {
FILE *pf;
float x = 123.5;
pf = fopen("CARTAS.TXT", "w");
printf("Posición inicial: old\n",ftell(pf)); //muestra 0
fprintf(pf,"Caracteres de prueba");
printf("Posición actual: %ld\n",ftell(pf));//muestra 20
fwrite(&x,sizeof(float),l,pf);
printf(“Posición actual: %ld\n”, ftell(pf); //muestra 24
fclose(pf);
return 0;
}
=4

long int ftell( FILE *pf );

Tema 14 – Ficheros en C Página 154 de 154

Vous aimerez peut-être aussi