Click here to load reader

Re Curren CIA

  • View
    217

  • Download
    0

Embed Size (px)

Text of Re Curren CIA

Septiembre 2010
ISBN: 978 - 84 - 693 - 9245 - 4
D.L.: MU - 1533 - 2010
“Existe una cosa muy misteriosa, pero muy cotidiana. Todo el 
mundo participa de ella, todo el mundo la conoce, pero muy pocos 
se paran a pensar en ella. Casi todos se limitan a tomarla como 
viene, sin hacer preguntas. Esa cosa es el tiempo.
Hay calendarios y relojes para medirlo, pero eso significa poco,
 porque todos sabemos que, a veces, una hora puede parecernos 
una eternidad, y otra, en cambio, pasa en un instante; depende 
de lo que hagamos durante esa hora.
 
IV 
“Eso desean quienes viven estos tiempos, pero no les toca a ellos 
decidir. Sólo tú puedes decidir qué hacer con el tiempo que se te 
ha dado.” (Gandalf)
La tecnología se fundamenta en el conocimiento científico. El hom-
 bre se pregunta por la verdad de las cosas, y las escrudiña en
 busca de respuestas verdaderas. La ciencia responde muy bien al
“cómo” de las cosas. Y de ese conocimiento de los modos en que
la realidad se comporta, el hombre puedo crear nuevas realidades
con comportamientos buscados y deseados. Aparecen así las he-
rramientas y la técnica.
La informática tiene mucha ciencia detrás. Mucho conocimiento
científico. Y gracias a él, el mundo informático también ha logrado
desarrollar tecnología.
Para aprender a programar se requiere un poco de ciencia. Pero
en los primeros pasos de la programación, el objetivo principal es
adquirir un hábito. Aquí y ahora el objetivo no es saber, sino sa-
 ber hacer. Un lenguaje de programación no se aprende estudiando
conceptos. El único modo operativo, práctico, eficaz, para aprender 
a programar en un lenguaje es programando en ese lenguaje. Hay 
que estudiar, sin duda. Pero principalmente hay que programar.
Lo que sí sé es que saber programar es útil. Y que merece la pena 
adquirir esta capacidad.
Quizá los primeros pasos de este aprendizaje sean ingratos. Pero,
sea como sea, esos pasos hay que andarlos.
 V 
 VI   Capítulo 0. Presentación
No se aprende a programar en un par de días. No se logra ence-
rrándose el fin de semana con el manual y un amigo que resuelva 
las dudas que surjan en ese histérico estudio.
En Agosto de 2012 se publicó un nuevo manual de prácticas (revi-
sión modificada en Agosto de 2013 y posteriormente en Octubre de
2015), complementario a éste y, como éste, disponible en el Repo-
sitorio Digital de la UPCT y en nuestro magnífico servicio de Repro-
grafía. El nuevo manual está editado por el Centro Universitario de
la Defensa (CUD) de San Javier. Es fruto de dos años de trabajo
docente de los dos autores, en dos cursos académicos consecuti-
 vos, con los alumnos de la Escuela de Industriales de la UPCT y los
del CUD en la Academia General del Aire. Ese manual de prácticas
marca una pauta sistemática de trabajo. Hace escasamente tres
semanas (ocurrió el pasado 28 de Agosto de 2015), el principal au-
tor de ese libro de prácticas, Pedro José, falleció inesperadamente
a los 34 años. No sé qué decir... Agradezco tantas cosas que he
aprendido de él; de algunas de ellas podrán beneficiarse ustedes,
mis alumnos, porque con Pedro José yo aprendí muchos detalles
que, creo, me han hecho ser mejor profesor. Gracias, Pedro.
Creo que no le va a faltar documentación. Ahora hace falta que
usted encuentre tiempo para hacer buen uso de ella. Ánimo.
Esta nueva versión el manual, de septiembre de 2015, sufre mu-
chos cambios respecto a las anteriores. Es más que posible que se
hayan colado errores y gazapos, así que será fácil que descubran
errores. Por favor, no las disculpen sin más: ayúdenme a corregir-
los, advirtiéndome de ellos. Y así se podrá ofrecer, a quienes vengan
detrás, una versión mejorada. Se puede contactar conmigo a través
del correo electrónico. Mi dirección es [email protected]
Muchas gracias.
Cartagena, 15 de agosto de 2013 (20 de Septiembre, 2015)
1.1 Estructura funcional de las computadoras   . . . . . 3
1.2 Instrucciones, Lenguajes, Compiladores . . . . . . . 10
1.3 Hardware y Software   . . . . . . . . . . . . . . . . . . 14
2 Codificación numérica    17
2.2 Los números y las cantidades  . . . . . . . . . . . . . 20
2.3 Bases, dígitos y cifras . . . . . . . . . . . . . . . . . . 21
2.4 Bases más habituales   . . . . . . . . . . . . . . . . . 25
2.5 Sistema binario   . . . . . . . . . . . . . . . . . . . . . 26
2.7 Complemento a la Base   . . . . . . . . . . . . . . . . 31
2.8 Ejercicios   . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.3 Representación o Codificación Interna de la Infor-
mación.   . . . . . . . . . . . . . . . . . . . . . . . . . . 42
 VII
4.3 Estructura básica de un programa en C . . . . . . . 57
4.4 Elementos léxicos   . . . . . . . . . . . . . . . . . . . . 60
4.6 Errores de depuración   . . . . . . . . . . . . . . . . . 62
4.7 Evolución y estándares . . . . . . . . . . . . . . . . . 64
5 Algoritmia    67
5.2 Creación y expresión de algoritmos . . . . . . . . . . 71
5.3 Diagramas de flujo   . . . . . . . . . . . . . . . . . . . 73
5.4 Símbolos utilizados en un flujograma   . . . . . . . . 74
5.5 Estructuras básicas   . . . . . . . . . . . . . . . . . . 77
5.6 Estructuras derivadas   . . . . . . . . . . . . . . . . . 79
5.8 Flujogramas estructurados y no estructurados . . . 84
5.9 Pseudocódigo   . . . . . . . . . . . . . . . . . . . . . . 86
5.11 Ejemplo de Algoritmo  . . . . . . . . . . . . . . . . . . 90
5.12 Más ejemplos de algoritmos   . . . . . . . . . . . . . . 92
5.13 Recapitulación  . . . . . . . . . . . . . . . . . . . . . . 105
6.1 Introducción  . . . . . . . . . . . . . . . . . . . . . . . 108
6.2 Abstracción   . . . . . . . . . . . . . . . . . . . . . . . 109
6.3 Modularidad   . . . . . . . . . . . . . . . . . . . . . . . 110
 
6.8 Paradigmas programación estructurada   . . . . . . . 126
6.9 Recapitulación . . . . . . . . . . . . . . . . . . . . . . 128
7.1 Declaración de variables   . . . . . . . . . . . . . . . . 133
7.2 Dominios   . . . . . . . . . . . . . . . . . . . . . . . . . 135
7.3 Literales   . . . . . . . . . . . . . . . . . . . . . . . . . 139
7.4 Operadores . . . . . . . . . . . . . . . . . . . . . . . . 141
7.5 Asignación   . . . . . . . . . . . . . . . . . . . . . . . . 142
7.6 Aritméticos  . . . . . . . . . . . . . . . . . . . . . . . . 143
7.9 A nivel de bit    . . . . . . . . . . . . . . . . . . . . . . . 153
7.10 Operadores compuestos   . . . . . . . . . . . . . . . . 159
7.12 Operador  sizeof   . . . . . . . . . . . . . . . . . . . . 162
7.14 Cast    . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
7.16 Fuera de Rango   . . . . . . . . . . . . . . . . . . . . . 171
7.17 Constantes  . . . . . . . . . . . . . . . . . . . . . . . . 173
7.19 Ayudas On line   . . . . . . . . . . . . . . . . . . . . . 180
7.20 Recapitulación . . . . . . . . . . . . . . . . . . . . . . 181
7.21 Ejercicios   . . . . . . . . . . . . . . . . . . . . . . . . . 181
8.1   printf   . . . . . . . . . . . . . . . . . . . . . . . . . . 1 96
8.2   scanf   . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 08
 
9.1 Introducción  . . . . . . . . . . . . . . . . . . . . . . . 222
9.7 Operador Condicional   . . . . . . . . . . . . . . . . . 234
9.8 Estructura switch  . . . . . . . . . . . . . . . . . . . . 236
10.1 Introducción   . . . . . . . . . . . . . . . . . . . . . . . 252
10.4 Estructura  for   . . . . . . . . . . . . . . . . . . . . . 261
10.5 Programación estructurada   . . . . . . . . . . . . . . 265
10.7   break   . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
10.8   continue  . . . . . . . . . . . . . . . . . . . . . . . . . 277
10.9   goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10.11 Recapitulación  . . . . . . . . . . . . . . . . . . . . . . 281
 
10.15 Ejercicios: anidamiento de iteraciones   . . . . . . . . 288
10.16 Ejercicios: iterar n veces sobre m elementos   . . . . 289
10.17 Ejercicios: infinitas iteraciones   . . . . . . . . . . . . 290
11 Ámbito y Vida de las Variables   293
11.1 Ámbito y Vida   . . . . . . . . . . . . . . . . . . . . . . 294
11.2 La memoria    . . . . . . . . . . . . . . . . . . . . . . . 294
11.5   rebister . . . . . . . . . . . . . . . . . . . . . . . . . 304
12.3 Declaración de una función   . . . . . . . . . . . . . . 317
12.4 Definición de una función   . . . . . . . . . . . . . . . 319
12.5 Llamada a una función . . . . . . . . . . . . . . . . . 322
12.6   return   . . . . . . . . . . . . . . . . . . . . . . . . . . 3 23
12.8 Recapitulación . . . . . . . . . . . . . . . . . . . . . . 330
12.9 Ejercicios   . . . . . . . . . . . . . . . . . . . . . . . . . 330
13.1 Noción y declaración de Vector   . . . . . . . . . . . . 342
13.2 Noción y declaración de Matriz   . . . . . . . . . . . . 346
13.3 Arrays en el estándar C99   . . . . . . . . . . . . . . . 347
13.4 Ejercicios: recorrido simple   . . . . . . . . . . . . . . 348
13.5 Ejercicios: valores relacionados en el array   . . . . . 350
 
13.7 Ejercicios: recorrido de un array con varios índices   351
13.8 Ejercicios: búsqueda de un contraejemplo   . . . . . 351
13.9 Ejercicios: moviendo valores dentro del array   . . . . 352
13.10 Ejercicios: arrays dependientes   . . . . . . . . . . . . 353
13.11 Ejercicios: polinomios   . . . . . . . . . . . . . . . . . 354
13.13 Ejercicios: matrices con un sólo índice . . . . . . . . 356
13.14 Ejercicios: anidamiento   . . . . . . . . . . . . . . . . 356
14.1 Operaciones con caracteres   . . . . . . . . . . . . . . 360
14.2 Entrada de caracteres   . . . . . . . . . . . . . . . . . 363
14.3 Cadena de caracteres  . . . . . . . . . . . . . . . . . . 364
14.4 Dar valor a una cadena    . . . . . . . . . . . . . . . . 366
14.5 Operaciones con cadenas   . . . . . . . . . . . . . . . 373
14.6 Otras funciones   . . . . . . . . . . . . . . . . . . . . . 3 78
14.7 Ejercicios  . . . . . . . . . . . . . . . . . . . . . . . . . 380
15 Punteros   391
15.4 Operatoria de punteros y de índices   . . . . . . . . . 404
15.5 Puntero a puntero . . . . . . . . . . . . . . . . . . . . 407
15.6 Modificador de tipo const   . . . . . . . . . . . . . . . 411
15.7 Distintos usos de const   . . . . . . . . . . . . . . . . 412
15.8 Punteros fuera de ámbito   . . . . . . . . . . . . . . . 416
15.9 Ejercicios  . . . . . . . . . . . . . . . . . . . . . . . . . 417
16.1 Por valor y por referencia   . . . . . . . . . . . . . . . 420
 
16.4 Matrices con C99   . . . . . . . . . . . . . . . . . . . . 430
16.5 Argumentos de puntero constantes   . . . . . . . . . 432
16.6 Recapitulación . . . . . . . . . . . . . . . . . . . . . . 435
16.7 Ejercicios   . . . . . . . . . . . . . . . . . . . . . . . . . 435
17 Recursividad   447
17.5 Las torres de Hanoi   . . . . . . . . . . . . . . . . . . . 466
17.6 Algoritmo de Ackermann  . . . . . . . . . . . . . . . . 471
17.7 Recapitulación . . . . . . . . . . . . . . . . . . . . . . 474
17.8 Ejercicios   . . . . . . . . . . . . . . . . . . . . . . . . . 475
18.2   malloc   . . . . . . . . . . . . . . . . . . . . . . . . . . 4 87
18.3   calloc   . . . . . . . . . . . . . . . . . . . . . . . . . . 4 90
19.2 Punteros a funciones   . . . . . . . . . . . . . . . . . . 501
19.3 Vectores de punteros a funciones  . . . . . . . . . . . 504
19.4 Funciones como argumentos   . . . . . . . . . . . . . 507
19.5 la función  qsort   . . . . . . . . . . . . . . . . . . . . 510
19.6 Estudio de tiempos   . . . . . . . . . . . . . . . . . . . 5 13
 
19.9 Línea de órdenes   . . . . . . . . . . . . . . . . . . . . 524
20 Estructuras y Definición de Tipos   527
20.1   enum  . . . . . . .…

Search related