Académique Documents
Professionnel Documents
Culture Documents
TEORA Y PRCTICA
III
ndice
ndice ....................................................................................................................................... III
Prlogo ....................................................................................................................................IX
MDULO 1: TEORA
1 Conceptos bsicos ................................................................................................................ 1
1.1 Conocimientos iniciales ................................................................................................ 2
1.1.1
Concepto de informtica y ordenador ............................................................... 2
1.1.2
Hardware y Software ........................................................................................ 3
1.1.3
Sistema Operativo ............................................................................................. 3
1.2 Lenguajes de Programacin .......................................................................................... 4
1.2.1
Concepto de lenguaje de programacin ............................................................ 4
1.2.2
Paradigmas de programacin ............................................................................ 4
1.2.3
Desarrollo histrico de los lenguajes de programacin .................................... 6
1.3 Traductores ................................................................................................................... 8
1.3.1
Introduccin ...................................................................................................... 8
1.3.2
Compiladores e intrpretes ............................................................................... 8
1.3.3
El proceso de traduccin ................................................................................... 9
2 Algoritmos y programas .................................................................................................... 11
2.1 Introduccin ................................................................................................................ 12
2.2 Resolucin de problemas ............................................................................................ 12
2.2.1
Anlisis del problema ..................................................................................... 13
2.2.2
Diseo del algoritmo ....................................................................................... 13
2.3 Tcnicas de representacin de algoritmos .................................................................. 17
2.3.1
Lenguaje algortmico o pseudocdigo ............................................................ 17
2.3.2
Diagramas de flujo .......................................................................................... 18
2.3.3
Diagramas de Nassi_Schneiderman (N-S) ...................................................... 19
2.3.4
Representacin de las construcciones lgicas.................................................. 19
3 Tipos de datos elementales ................................................................................................ 23
3.1 Concepto de tipo de datos. Identificador y palabra reservada. Constantes y variables 24
3.2 Tipos de datos elementales. Valores y operaciones .................................................... 25
3.2.1
Tipos numricos: entero y real ........................................................................ 25
3.2.2
Tipos carcter y cadena ................................................................................... 27
3.2.3
Tipo booleano. Operaciones relacionales ....................................................... 28
4 Tipos de datos estructurados .............................................................................................. 31
4.1 Introduccin ................................................................................................................ 32
4.2 Registros ..................................................................................................................... 32
4.3 Vectores y matrices: Arrays ........................................................................................ 33
4.4 Punteros ...................................................................................................................... 34
5 Introduccin a la programacin modular. Subalgoritmos ................................................. 37
5.1 Introduccin: Diseo estructurado y concepto de mdulo ......................................... 38
5.2 Principios de diseo .................................................................................................... 40
5.2.1
Descomposicin .............................................................................................. 40
5.2.2
Jerarqua de mdulos ...................................................................................... 41
5.2.3
Independencia ................................................................................................. 42
IV
VI
VII
189
191
192
192
193
194
194
195
196
APENDICES
A.
B.
C.
D.
203
205
209
211
IX
Prlogo
!!Otro libro sobre programacin; puede que ste sea el pensamiento de algn
programador al topar con este libro que ahora presentamos, y es que, efectivamente, la
literatura disponible a tal efecto es muy extensa, ms an si tenemos en cuenta la cantidad de
pginas web que hay colgadas en Internet que comentan, con mayor o menor rigor, diferentes
aspectos sobre programacin en general o sobre algn lenguaje de programacin en particular.
El objetivo que los autores de este libro perseguimos no es otro que el de ofrecer una
obra que pueda ser utilizada por cualquier persona no iniciada que quiera aprender a
programar. Obviamente, queda claro que esta obra no est pensada para programadores (que
ya lo son), sino ms bien para los que lo quieren ser; est especialmente dirigida a estudiantes
de primeros cursos de cualquier ingeniera en la que la programacin sea una de las materias
importantes.
Como aspecto caracterstico, este libro presenta claramente diferenciados los aspectos
puramente tericos de los prcticos. Observando el ndice, se ve como la obra est dividida en
dos grandes mdulos, un primer mdulo terico, que abarca los temas del 1 al 9 y un segundo
mdulo prctico que comprende desde el tema 10 hasta el 19. Por ltimo, podemos encontrara
al final del libro una serie de apndices que comentaremos ms adelante.
Sobre el mdulo terico cabe decir que pretende sentar los conceptos tericos bsicos
relacionados con la programacin y los lenguajes de programacin en general. Se ha
pretendido deliberadamente que la exposicin de dichos conceptos fuera independiente de
cualquier lenguaje de programacin. Es por ello que estos podran ser aplicados a cualquier
lenguaje de programacin imperativo como C, Pascal, Cobol o Fortram (por citar algunos).
Ahora bien, en el aprendizaje de cualquier disciplina prctica, de poco servira la
mejor de las lecciones tericas si despus de sta el alumno no tuviera la oportunidad de
poner en prctica la teora aprendida. Si se nos permite el smil, en este sentido, podramos
comparar el hecho de aprender a programar con el de aprender a montar en bicicleta. Del
mismo modo que si los mejores ciclistas profesionales nos dieran unas lecciones tericas
sobre como montar en bicicleta, nadie podra decir tras asistir a dichas lecciones que sabe
montar en bicicleta si no se sube a una y pone en prctica lo que ha aprendido. Con el
aprendizaje de la programacin ocurre lo mismo, con la teora no basta. Para aprender a
montar en bicicleta hay que subirse a una, pedalear y probablemente caerse en ms de una
ocasin. Para aprender a programar hay que sentarse ante un ordenador y ponerse a ello, y
durante el proceso seguro que se incurrir en algn error que otro, pero esto tambin forma
parte del aprendizaje. Esta es la razn de ser del segundo mdulo de este libro, pretende dar al
lector la oportunidad de poner en prctica la teora aprendida en el primer mdulo.
Si estamos decididos a programar lo primero es optar por un lenguaje, pues bien, en
este libro se ha optado por el C. En el segundo mdulo se muestra como empezar a hacer
nuestro primer programa en C y poco a poco, con suficientes ejemplos bien comentados, se va
introduciendo la forma de aplicar o implementar los conceptos vistos en la parte terica.
Queremos hacer una advertencia al lector que se est planteando aprende a programar con
este libro; los ejemplos que aparecen en el segundo mdulo deben ser probados, no basta con
leer dicho mdulo, si nos limitamos a esto estaremos leyendo un segundo mdulo terico.
Cada ejemplo debera ser escrito, compilado y ejecutado, y an ms, animamos al lector a que
realice cuantas modificaciones se le ocurran y las vuelva a compilar y ejecutar, verificando
despus si obtiene el resultado deseado. sta es la nica forma de aprender a programar,
practicando. Y algo muy importante, queremos dejar claro que este mdulo no pretende ser un
manual de C. Para profundizar en al programacin en este lenguaje sera recomendable que el
lector adquiera un manual lo ms completo posible sobre este leguaje.
Una posible crtica a este libro podra ser por qu en la parte prctica se ve el C
habiendo lenguajes ms modernos?. Pues bien, las razones son varias, el C es un lenguaje
que permite aplicar prcticamente todos los conceptos tericos que se presentan en el libro;
tambin puede considerarse como un lenguaje del que otros han copiado algunas
caractersticas, por ejemplo: Java, JavaScript y PHP son lenguajes que tienen una sintaxis
prcticamente idntica a C, por lo que aprendiendo C se puede facilitar el posterior
aprendizaje de otros lenguajes. Al hablar de lenguajes modernos es casi inevitable no pensar
en el mencionado Java; sobre este lenguaje decir slo una cosa; una persona sin nociones de
programacin que aprende Java, puede con el tiempo llegar a ser un buen programador en
Java sin tener muy claros algunos conceptos como qu es un puntero o una direccin de
memoria y, en general, todo lo relacionado con la gestin dinmica de memoria. En cambio es
imposible ser un buen programador de C y pasar por alto estos conceptos. En opinin de
quien escribe estas lneas, y como toda opinin es siempre discutible, los mencionados
conceptos deberan ser, no slo conocidos, sino dominados por cualquier programador serio.
Con esto no queremos decir que no deba aprenderse Java; pensamos que el Java es un
lenguaje muy importante hoy da, pero como dijimos antes, este libro va dirigido a quien no
sabe programar y quiere aprender y para empezar pensamos que es ms idneo el C.
Un ltimo argumento a favor de este lenguaje pese a su antigedad (fue creado a
principios de los 70) es que ni mucho menos es un lenguaje en desuso, en investigacin o en
aplicaciones donde el tiempo es un factor crtico se sigue aplicando. Tambin existen entornos
de desarrollo profesionales como Visual C++ de la compaa Microsoft o C++ Builder de
Borland que utilizan el lenguaje C y C++ (C++ es una extensin del lenguaje C que permite
realizar programacin orientada a objetos).
En los apndices se han incluido una serie de datos o informaciones no estrictamente
necesarias para el aprendizaje de la programacin en C aunque s pueden resultar de inters.
En el apndice A se muestra una gua de estilo sobre como programar en C, esta gua no son
ms que un pequeo conjunto de normas que la mayora de los programadores siguen a la
hora de programar para que el cdigo escrito sea fcil de seguir e interpretar. Recomendamos
encarecidamente a todo aquel que empiece a programar que siga esta gua (todos los ejemplos
descritos en el libro lo hacen). En el apndice B se muestra una forma empezar a programar
(no es la nica); de poco servira insistir en la importancia de la prctica a la hora de aprender
a programar si no se proporciona un medio para ponerse a ello, en este apndice se muestran
algunas direcciones de Internet de las que es posible obtener algn compilador de C de libre
distribucin y su funcionamiento bsico. Los apndices C y D muestran unas tablas, el
primero con la correspondencia entre los cdigos ASCII y sus caracteres asociados, y el
segundo con los valores enteros del 0 (cero) al 255 y sus correspondientes conversiones a las
bases hexadecimal, octal y binaria.
Por ltimo, decir al lector no iniciado que tras leer este prlogo no haya entendido
algunos trminos utilizados (qu ser eso de gestin dinmica de memoria o cdigo
XI
ASCII?) que no se preocupe en absoluto, a medida que avance en la lectura de esta obra ver
como todo eso va quedando claro.
Los Autores
Tema 1
Conocimientos bsicos
UNIDAD
ARITMTICO
LGICA
(UAL - ALU)
Unidades
de
ENTRADA
Unidades
de
SALIDA
MUNDO EXTERIOR:
- Usuario.
- Programador.
- Etc.
Memoria:
a) Memoria central.
- RAM (Random Acces Memory).- Memoria de acceso aleatorio. Voltil, se
pierde al apagar el ordenador.
- ROM (Read Only Memory).- Memoria de slo lectura. Permanente, no se
pierde al apagar el ordenador.
b) Memoria auxiliar (secundaria o externa).- Diferentes tipos de dispositivos que
permiten leer y/o escribir informacin (discos duros, disquetes, CDs, DVDs,
cintas, ...).
Software (SW). Parte lgica: Conjunto de programas que pueden ser ejecutados en un
ordenador. Podemos distinguir entre:
El SO decide cunta memoria del sistema puede utilizar un programa, que ficheros
del disco puede utilizar o si debe detener su ejecucin para que se ejecute otro
programa.
Programacin imperativa
Programacin funcional
Programacin lgica
Programacin orientada a objetos
Programacin imperativa:
En este paradigma, un programa es una secuencia finita de instrucciones, que se
ejecutan una tras otra. Los datos utilizados se almacenan en memoria principal y se
referencian utilizando variables.
leer(x)
leer(y)
resultado = x + y
escribir(resultado)
Ejemplo de lenguajes que utilizan este paradigma: Pascal, Ada, Cobol, C, Modula-2 y
Fortran.
Programacin funcional:
Paradigma en el que todas las sentencias son funciones en el sentido matemtico del
trmino. Un programa es una funcin que se define por composicin de funciones ms
simples.
La misin del ordenador ser evaluar funciones.
predecesor(x)=x-1, si x>0
sucesor(x)=x+1
suma(x,0)=x
suma(x, y)=sucesor(suma(x, predecesor(y)))
?- suma(3,2)
Ejemplo: Prolog.
Objeto.- Entidad de una determinada clase con un determinado estado (valores del
conjunto de sus propiedades) capaz de interactuar con otros objetos (ejemplos:
Pedro, Sonia, ...).
Lenguajes simblicos:
Estos lenguajes utilizan smbolos para la construccin de sentencias de forma que son
ms fciles de entender y corregir.
Leguaje de bajo nivel (ensamblador). Caractersticas:
Independientes de la mquina.
Eiffel.
C++.
Java.
1.3 Traductores
1.3.1 Introduccin
En el apartado 1.2.3 se ha visto que el lenguaje que entiende la mquina directamente
es el cdigo mquina. Cualquier programa escrito en un lenguaje diferente a ste debe ser
traducido antes de que el ordenador pueda ejecutarlo.
Un traductor es un programa que toma como entrada un programa escrito en un
lenguaje fuente y lo transforma en un programa escrito en lenguaje mquina.
El proceso de conversin se denomina traduccin, que puede realizarse de dos formas
diferentes: por interpretacin o por compilacin.
11
Tema 2
Algoritmos y programas
12
2.1 Introduccin
Los trminos algoritmo y programa se emplean para referir dos conceptos
similares cuya diferencia se debe aclarar:
Algoritmo:
Conjunto de instrucciones que especifican la secuencia ordenada de
operaciones a realizar para resolver un problema. En otras palabras, un algoritmo es un
mtodo o frmula para la resolucin de un problema. Un algoritmo es independiente
tanto del lenguaje de programacin en que se exprese como del ordenador en el que se
ejecute.
Ejemplo: Una receta de cocina (especificada de forma precisa y sin decisiones subjetivas)
puede ser considerada un algoritmo: indica los pasos a realizar para resolver el problema
(cocinar un plato) y es independiente tanto del idioma en que se escriba como del cocinero
que la ejecute.
Las principales caractersticas que debe tener un algoritmo son:
Programa:
Secuencia de operaciones especificadas en un determinado lenguaje de
programacin, cada una de las cuales determina las operaciones que debe realizar el
ordenador para la resolucin de un problema. Se trata pues de una implementacin
concreta (en un tipo de ordenador concreto y con un lenguaje de programacin
concreto) de un algoritmo diseado con anterioridad.
Ejemplo: Si en una receta de cocina (algoritmo) se especifica en uno de sus pasos que hay
que batir un huevo, este se batir de forma diferente segn los medios de que se disponga
(lenguaje de programacin y/o ordenador), bien empleando un tenedor, o bien con una
batidora.
13
trminos propios del dominio del problema, permite desarrollar un programa que resuelva
dicho problema.
Este proceso exige los siguientes pasos:
Este apartado se centrar en los dos primeros pasos, que son los ms difciles del
proceso. Una vez analizado el problema y obtenido un algoritmo que lo resuelva, su
transformacin a un programa de ordenador es una tarea de mera traduccin al lenguaje de
programacin deseado.
14
Para poder describir cualquier tipo de accin de las que intervienen en un algoritmo,
diversos autores propusieron del uso de un conjunto de construcciones lgicas (secuencia,
decisin e iteracin) con las que es posible escribir cualquier programa. Lo que sigue a
continuacin es la descripcin de las diferentes construcciones disponibles para el diseo de
algoritmos.
1. Accin elemental
Se entiende por acciones elementales aquellas que el ordenador es capaz de realizar y
que sern de dos tipos:
Aritmtico lgicas: Operaciones que, a partir de unos determinados datos,
realizan un clculo aritmtico (suma, resta, multiplicacin, ...) o un clculo lgico
(mayor que, menor que, igual que, ...).Las primeras devuelven un valor numrico
(4, -5.67, ...) y las segundas un valor lgico (verdadero o falso).
De entrada salida: Acciones que permiten capturar datos para su posterior
tratamiento (las de entrada) y guardar los resultados de dicho tratamiento (las de
salida).
2. Secuencia de acciones elementales (composicin secuencial)
Cuando en un algoritmo se deben ejecutar varias acciones sucesivamente, stas se
describen una detrs de otra segn el orden en que deban ejecutarse. Si se desea se puede
emplear algn tipo de smbolo para separar dos acciones consecutivas. En el siguiente
ejemplo se nuestra la descripcin de n acciones separadas por punto y coma (smbolo que
habitualmente se emplea como separador).
Accin 1;
Accin 2;
...
Accin n;
15