Actualizado el 15 de Junio del 2021 (Publicado el 19 de Febrero del 2018)
3.814 visualizaciones desde el 19 de Febrero del 2018
39,5 MB
568 paginas
Creado hace 11a (01/09/2013)
Facultad de Informática
Universidad Complutense
Apuntes de clase de la asignatura
Fundamentos de la programación
1º curso
Grado en Ingeniería en Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
2013‐2014
Luis Hernández Yáñez
Licencia Creative Commons:
Reconocimiento, No comercial y Compartir igual.
http://creativecommons.org/licenses/by‐nc‐sa/3.0/
Esta publicación contiene los apuntes de clase de la asignatura
Fundamentos de la programación, asignatura de 1º curso de los grados
que se imparten en la Facultad de Informática de la UCM.
Durante los tres primeros cursos en los que se ha impartido la asignatura,
este material ha sido sometido a continuas revisiones y contribuciones
por parte de los profesores que han impartido los distintos grupos
de la asignatura. Aunque el trabajo ha quedado bastante consolidado,
estoy seguro de que todavía contiene muchas erratas. Si encuentras alguna,
no dudes, por favor, en hacérmelo saber y conseguir así
que la siguiente versión esté mejor depurada.
Quiero agradecer a todos los profesores que han impartido la asignatura
su contribución en el desarrollo del material, destacando especialmente
la labor de Pablo Moreno Ger y Carlos Cervigón Rückauer.
Luis Hernández Yáñez
Profesor de la Facultad de Informática de la UCM
Fundamentos de la programación
TC
Grado en Ingeniería Informática
Grado en Ingeniería del Software
Grado en Ingeniería de Computadores
Facultad de Informática
Luis Hernández Yáñez
Universidad Complutense
Tema 1 Computadoras y programación
Tema 2 Tipos e instrucciones I
Anexo: Detalles técnicos de los tipos
Tema 3 Tipos e instrucciones II
Anexo I: El operador ternario ?
Anexo II: Ejemplos de secuencias
Tema 4 La abstracción procedimental
Anexo: Más sobre subprogramas
Tema 5 Tipos de datos estructurados
Anexo: Cadenas al estilo de C
Tema 6 Recorrido y búsqueda en arrays
Tema 7 Algoritmos de ordenación
Anexo: Más sobre ordenación
Tema 8 Programación modular
Anexo: Ejemplo de modularización
Tema 9 Punteros y memoria dinámica
Anexo: Punteros y memoria dinámica
Tema 10 Introducción a la recursión
Apéndice: Archivos binarios
Fundamentos de la programación
1
48
212
225
398
402
425
496
512
580
588
649
742
755
832
847
938
981
1049
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Informática, computadoras y programación
Lenguaje máquina y ensamblador
Lenguajes de programación de alto nivel
Un poco de historia
Programación e Ingeniería del Software
El lenguaje de programación C++
Sintaxis de los lenguajes de programación
Un primer programa en C++
Herramientas de desarrollo
C++: Un mejor C
3
12
15
19
24
27
30
35
39
45
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación
Un ejemplo de programación
50
El primer programa en C++
64
Las líneas de código del programa
80
Cálculos en los programas
86
Variables
92
Expresiones
98
Lectura de datos desde el teclado 108
119
Resolución de problemas
Los datos de los programas
127
129
Identificadores
133
Tipos de datos
Declaración y uso de variables
142
147
Instrucciones de asignación
152
Operadores
160
Más sobre expresiones
Constantes
167
La biblioteca cmath
171
Operaciones con caracteres
174
Fundamentos de la programación
Operadores relacionales
Toma de decisiones (if)
Bloques de código
Bucles (while)
Entrada/salida por consola
Funciones definidas
por el programador
177
180
183
186
190
199
int
float
Notación científica
double
char
bool
string
Literales con especificación de tipo
214
216
217
218
220
221
222
223
Fundamentos de la programación
Tipos, valores y variables
Conversión de tipos
Tipos declarados por el usuario
Tipos enumerados
Entrada/Salida
con archivos de texto
Lectura de archivos de texto
Escritura en archivos de texto
Flujo de ejecución
Selección simple
Operadores lógicos
Anidamiento de if
Condiciones
Selección múltiple
La escala if‐else‐if
La instrucción switch
Repetición
El bucle while
El bucle for
Bucles anidados
Ámbito y visibilidad
Secuencias
Recorrido de secuencias
Secuencias calculadas
Búsqueda en secuencias
Arrays de datos simples
Uso de variables arrays
Recorrido de arrays
Búsqueda en arrays
Arrays no completos
321
331
339
349
355
363
370
374
379
382
387
393
227
232
236
238
248
253
266
272
276
282
286
290
293
295
302
313
316
Fundamentos de la programación
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
El operador ternario ?
Recorridos
Un aparcamiento
¿Paréntesis bien emparejados?
¿Dos secuencias iguales?
Números primos menores que N
Búsquedas
Búsqueda de un número en un archivo
Búsquedas en secuencias ordenadas
399
404
405
409
412
413
417
419
420
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación
Diseño descendente: Tareas y subtareas
Subprogramas
Subprogramas y datos
Parámetros
Argumentos
Resultado de la función
Prototipos
Ejemplos completos
Funciones de operador
Diseño descendente (un ejemplo)
Precondiciones y postcondiciones
427
434
441
446
451
467
473
475
477
480
490
Fundamentos de la programación
Archivos como parámetros
La función main()
Argumentos implícitos
Sobrecarga de subprogramas
Fundamentos de la programación: La abstracción procedimental (Anexo)
Tipos de datos
Arrays de nuevo
Arrays y bucles for
Más sobre arrays
Inicialización de arrays
Enumerados como índices
Paso de arrays a subprogramas
Implementación de listas
Cadenas de caracteres
Cadenas de caracteres de tipo string
Entrada/salida con string
Operaciones con string
Estructuras
Estructuras dentro de estructuras
Arrays de estructuras
Arrays dentro de estructuras
Listas de longitud variable
Un ejemplo completo
El bucle do..while
Fundamentos de la programación
498
501
504
508
514
517
520
522
523
524
525
528
531
535
539
541
543
549
550
551
552
558
562
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Cadenas al estilo de C
E/S con cadenas al estilo de C
La biblioteca cstring
Ejemplo
Fundamentos de la programación
Recorrido de arrays
Arrays completos
Arrays no completos con centinela
Arrays no completos con contador
Ejemplos
Generación de números aleatorios
Búsquedas en arrays
Arrays completos
Arrays no completos con centinela
Arrays no completos con contador
Ejemplo
Recorridos y búsquedas en cadenas
Más ejemplos de manejo de arrays
Arrays multidimensionales
Inicialización de arrays multidimensionales
Recorrido de un array bidimensional
Recorrido de un array N‐dimensional
Búsqueda en un array multidimensional
Fundamentos de la programación
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
582
583
584
585
590
593
594
595
597
601
604
606
607
608
610
614
617
630
638
641
644
647
con intercambios
Claves de ordenación
Estabilidad de la ordenación
Complejidad y eficiencia
Ordenaciones naturales
Algoritmos de ordenación
Algoritmo de ordenación por inserción
Ordenación de arrays por inserción
Algoritmo de ordenación por inserción
Ordenación por selección directa
Método de la burbuja
Listas ordenadas
Búsquedas en listas ordenadas
Búsqueda binaria
651
654
665
672
680
688
692
694
701
716
722
729
731
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Fundamentos de la programación
Ordenación por intercambio
Mezcla de dos listas ordenadas
744
747
Fundamentos de la programación
Programas multiarchivo y compilación separada
Interfaz frente a implementación
Uso de módulos de biblioteca
Ejemplo: Gestión de una lista ordenada I
Compilación de programas multiarchivo
El preprocesador
Cada cosa en su módulo
Ejemplo: Gestión de una lista ordenada II
El problema de las inclusiones múltiples
Compilación condicional
Protección frente a inclusiones múltiples
Ejemplo: Gestión de una lista ordenada III
Implementaciones alternativas
Espacios de nombres
Implementaciones alternativas
Calidad y reutilización del software
757
762
768
770
778
780
782
784
789
794
795
796
804
808
817
827
Fundamentos de la programación
Modularización de un programa
833
Fundamentos de la programación
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
849
854
864
866
867
868
873
875
877
879
883
886
891
895
907
911
916
928
940
953
962
964
Direcciones de memoria y punteros
Operadores de punteros
Punteros y direcciones válidas
Punteros no inicializados
Un valor seguro: NULL
Copia y comparación de punteros
Tipos puntero
Punteros a estructuras
Punteros a constantes y punteros constantes
Punteros y paso de parámetros
Punteros y arrays
Memoria y datos del programa
Memoria dinámica
Punteros y datos dinámicos
Gestión de la memoria
Errores comunes
Arrays de datos dinámicos
Arrays dinámicos
Fundamentos de la programación
Aritmética de punteros
Recorrido de arrays con punteros
Referencias
Listas enlazadas
Fundamentos de la programación
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
z
e
ñ
á
Y
z
e
d
n
á
n
r
e
H
s
i
u
L
Concepto de recursión
Algoritmos recursivos
Funciones recursivas
Diseño de funciones recursivas
Modelo de ejecución
La pila del sistema
La pila y las llamadas a función
Ejecución de la función factorial()
Tipos de recursión
Recursión simple
Recursión múltiple
Recursión anidada
Recursión cruzada
Código del subprograma recursivo
Parámetros y recursión
Ejemplos de algoritmos recursivos
Búsqueda binaria
Torres de Hanoi
Recursión frente a iteración
Estructuras de datos recursivas
983
986
987
989
990
992
994
1005
1018
1019
1020
1022
1026
1027
1032
1034
1035
1038
1043
1045
Fundamentos de la programación
Flujos
Archivos binarios
Tamaño de los datos: El operador sizeof()
Apertura de archivos binarios
Lectura de archivos binarios (acceso secuencial)
Escritura en archivos binarios (acceso secuencial)
Acceso directo o aleatorio
Ejemplos de uso de archivos binarios
Ordenaci
Comentarios de: Fundamentos de la programación (0)
No hay comentarios