Vous êtes sur la page 1sur 24

INTRODUCCIN A LA PROGRAMACIN.

TEORA Y PRCTICA

Jess Javier Rodrguez Sala

Ttulo: Introduccin a la programacin. Teora y prctica.


Autor: Jess Javier Rodrguez Sala
Laureano Santamara Arana
Alejandro Rabasa Dolado
Oscar Martnez Bonastre
Profesores de la Universidad Miguel Hernndez
Departamento de Estadstica y Matemtica Aplicada
rea de Lenguajes y Sistemas Informticos.
I.S.B.N.: 84-8454-274-2
Depsito legal: A-905-2003
Edita: Editorial Club Universitario Telf.: 96 567 61 33
C/. Cottolengo, 25 - San Vicente (Alicante)
www.ecu.fm
Printed in Spain
Imprime: Imprenta Gamma Telf.: 965 67 19 87
C/. Cottolengo, 25 - San Vicente (Alicante)
www.gamma.fm
gamma@gamma.fm

Reservados todos los derechos. Ni la totalidad ni parte de este libro puede


reproducirse o transmitirse por ningn procedimiento electrnico o mecnico,
incluyendo fotocopia, grabacin magntica o cualquier almacenamiento de
informacin o sistema de reproduccin, sin permiso previo y por escrito de los
titulares del Copyright.

Introduccin a la Programacin: 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

Introduccin a la Programacin: Teora y Prctica

5.3 Evaluacin del diseo .................................................................................................. 42


5.3.1
Acoplamiento .................................................................................................. 43
5.3.2
Cohesin .......................................................................................................... 44
5.4 Subalgoritmos .............................................................................................................. 46
5.4.1
Definicin de subalgoritmos: Tipos ................................................................ 47
5.4.2
Ambito de las variables ................................................................................... 48
5.4.3
Paso de parmetros .......................................................................................... 50
5.4.4
Recursividad .................................................................................................... 51
6 Almacenamiento externo. Ficheros .................................................................................... 55
6.1 Introduccin ................................................................................................................ 56
6.2 Introduccin a los sistemas de ficheros ....................................................................... 56
6.2.1
Ficheros en sistemas Unix/Linux .................................................................... 57
6.2.2
Ficheros en sistemas Windows ........................................................................ 59
6.3 Operaciones sobre ficheros ......................................................................................... 61
7 Estructuras de datos dinmicas .......................................................................................... 63
7.1 La gestin dinmica de memoria ................................................................................. 64
7.2 Estructuras de datos dinmicas bsicas ....................................................................... 64
7.2.1
Arrays dinmicos ............................................................................................. 65
7.2.2
Listas. Concepto de Nodo ............................................................................... 66
7.2.3
Pilas (estructuras LIFO) .................................................................................. 69
7.2.4
Colas (estructuras FIFO) ................................................................................. 70
8 Problemas clsicos: Recorrido, ordenacin y bsqueda .................................................... 71
8.1 Introduccin ................................................................................................................ 72
8.2 Algoritmos de ordenacin ........................................................................................... 72
8.2.1
Algoritmo de la burbuja .................................................................................. 73
8.2.2
Ordenacin por seleccin ................................................................................ 75
8.2.3
Ordenacin por insercin ................................................................................ 78
8.3 Algoritmos de bsqueda .............................................................................................. 81
8.3.1
Bsqueda secuencial ........................................................................................ 81
8.3.2
Bsqueda binaria ............................................................................................. 83
MDULO 2: PRCTICA
9 Introduccin a la programacin en C ................................................................................. 87
9.1 Introduccin .............................................................................................................. 88
9.2 Estructura de un programa en C ............................................................................... 88
9.3 Encabezamiento ........................................................................................................ 89
9.4 Comentarios .............................................................................................................. 89
10 Variables y constantes ........................................................................................................ 91
10.1 Definicin de variables ............................................................................................. 92
10.2 Inicializacin de variables ........................................................................................ 93
10.3 Tipos de variables ..................................................................................................... 93
10.3.1 Enteras .............................................................................................................. 94
10.3.2 Reales o punto flotante .................................................................................... 95
10.4 Conversin automtica de tipos ................................................................................ 95
10.5 Casting ...................................................................................................................... 96
10.6 Variables de tipo carcter ......................................................................................... 96
10.7 Tamao de las variables (sizeof) .............................................................................. 97
10.8 Definicin de nuevos tipos (typedef) ........................................................................ 98
10.9 Constantes ................................................................................................................. 98

Introduccin a la Programacin: Teora y Prctica

10.10 Constantes simblicas .............................................................................................. 99


11 Expresiones y operadores ................................................................................................ 101
11.1 Introduccin ............................................................................................................ 102
11.2 Operadores aritmticos ........................................................................................... 102
11.3 Operadores relacionales ......................................................................................... 103
11.4 Operadores lgicos ................................................................................................. 103
11.5 Operadores de incremento y decremento ............................................................... 104
11.6 Operadores de asignacin ....................................................................................... 105
11.7 Operadores de manejo de bits ................................................................................ 106
11.8 Precedencia de operadores ..................................................................................... 108
12 Sentencias de control de programa .................................................................................. 111
12.1 Introduccin ............................................................................................................ 112
12.2 La sentencia if ...................................................................................................... 112
12.3 La sentencia switch .............................................................................................. 114
12.4 El bucle while ...................................................................................................... 116
12.5 El bucle do / while ............................................................................................... 116
12.6 El bucle for .......................................................................................................... 117
12.7 Rompiendo el bucle ................................................................................................ 118
12.8 La funcin exit() .................................................................................................. 118
13 Funciones ......................................................................................................................... 121
13.1 Introduccin ............................................................................................................ 122
13.2 Declaracin de funciones ....................................................................................... 123
13.3 Definicin de funciones .......................................................................................... 123
13.4 Funciones que no devuelven valores ni reciben parmetros .................................. 124
13.5 Funciones que devuelven valores. .......................................................................... 125
13.6 Ambito de las variables en C (scope) ..................................................................... 130
13.6.1 Variables globales ......................................................................................... 130
13.6.2 Variables locales ........................................................................................... 131
13.6.3 Variables locales estticas ............................................................................. 131
13.6.4 Variables de registro ..................................................................................... 132
13.6.5 Variables externas ......................................................................................... 132
13.7Argumentos y parmetros de las funciones .............................................................. 133
14 Tipos de datos definidos por el usuario ........................................................................... 137
14.1 Arrays ..................................................................................................................... 138
14.2 Cadenas (strings) .................................................................................................... 139
14.3 Arrays y cadenas como argumentos de funciones .................................................. 140
14.4 Arrays multidimensionales ..................................................................................... 141
14.5 Estructuras (registros).............................................................................................. 142
14.5.1 Declaracin de estructuras ............................................................................ 142
14.5.2 Reglas para el uso de estructuras .................................................................. 143
14.6 Arrays de estructuras .............................................................................................. 144
14.7 Uniones ................................................................................................................... 145
14.8 Enumeraciones ....................................................................................................... 146
15 Punteros ........................................................................................................................... 147
15.1 Introduccin ............................................................................................................ 148
15.2 Punteros y arrays .................................................................................................... 150
15.3 Aritmtica de punteros ........................................................................................... 152
15.4 Punteros y variables dinmicas. Funciones malloc() y free() ................................ 153
15.5 Punteros a cadenas .................................................................................................. 154
15.6 Arrays de punteros. Inicializacin de arrays de punteros ....................................... 156

VI

Introduccin a la Programacin: Teora y Prctica

15.7 Punteros a estructuras ............................................................................................. 157


15.8 Punteros y funciones ............................................................................................... 159
15.8.1 Punteros como parmetros de funciones ....................................................... 159
15.8.2 Punteros como resultado de una funcin ....................................................... 160
16 Funciones de manejo de cadenas (strings) ....................................................................... 161
16.1 Introduccin ............................................................................................................ 162
16.2 Funciones de impresin de strings .......................................................................... 164
16.2.1 printf() ........................................................................................................... 164
16.2.2 puts() .............................................................................................................. 165
16.3 Funciones de lectura de strings ............................................................................... 166
16.3.1 scanf() ............................................................................................................ 166
16.3.2 gets() .............................................................................................................. 167
16.4 Funciones de conversin entre strings y variables numricas ................................. 168
16.4.1 is_xxx_() ........................................................................................................ 168
16.4.2 atoi(), atol(), atof() ........................................................................................ 169
16.4.3 itoa(), ltoa(), ultoa() ...................................................................................... 170
16.5 Longitud de un string .............................................................................................. 171
16.5.1 strlen() ........................................................................................................... 171
16.6 Copia y duplicado de strings ................................................................................... 171
16.6.1 strcpy() ........................................................................................................... 172
16.6.2 strncpy() ......................................................................................................... 172
16.6.3 strdup() .......................................................................................................... 173
16.7 Concatenacin de strings ........................................................................................ 173
16.7.1 strcat() ........................................................................................................... 174
16.7.2 strncat() ......................................................................................................... 174
16.8 Comparacin de strings .......................................................................................... 175
16.8.1 strcmp() ......................................................................................................... 175
16.8.2 strcmpi() ........................................................................................................ 175
16.8.3 strncmp(), strncmpi() ..................................................................................... 176
16.9 Bsqueda dentro de un string .................................................................................. 176
16.9.1 strchr(), strrchr() ........................................................................................... 176
16.9.2 strbrk() ........................................................................................................... 177
16.9.3 strstr() ............................................................................................................ 177
16.9.4 strtok() ........................................................................................................... 177
16.10 Funciones de modificacin de strings ..................................................................... 178
16.10.1 strlwr(), strupr() ............................................................................................ 178
17 Tratamiento de ficheros .................................................................................................... 179
17.1 Introduccin ............................................................................................................ 180
17.2 Abriendo ficheros: fopen() ...................................................................................... 181
17.3 Cerrando ficheros: fclose() ...................................................................................... 181
17.4 Llegando al final de un fichero: feof() .................................................................... 182
17.5 Leyendo y escribiendo caracteres: fgetc() y fputc() ................................................ 182
17.6 Leyendo y escribiendo cadenas: fgets() y fputs() .................................................... 183
17.7 Leyendo y escribiendo con formato: fscanf() y fprintf() ......................................... 183
17.8 Leyendo y escribiendo bloques: fread() y fwrite() ................................................. 183
17.9 Control de los buffers: fflush() y flushall() ............................................................. 184
17.10 Localizacin del puntero de lectura/escritura: fseek() y ftell() ............................... 184
18 Funciones matemticas .................................................................................................... 187
18.1 Introduccin ............................................................................................................ 188
18.2 Tabla resumen de funciones matemticas .............................................................. 188

Introduccin a la Programacin: Teora y Prctica

VII

18.3 Funciones de generacin de nmeros aleatorios ....................................................


19 Ejemplos ..........................................................................................................................
19.1 Problemas clsicos. ordenacin y bsqueda ...........................................................
19.1.1 Ordenacin por intercambio (algoritmo de la burbuja) ..............................
19.1.2 Ordenacin por seleccin ..............................................................................
19.1.3 Ordenacin por insercin ..............................................................................
19.1.4 Bsqueda secuencial .....................................................................................
19.1.5 Bsqueda binaria (dicotmica) .....................................................................
19.2 Funcin main() con parmetros ..............................................................................

189
191
192
192
193
194
194
195
196

APENDICES
A.
B.
C.
D.

Breve gua de estilo para programacin en C ............................................................


Cmo empezar a practicar .........................................................................................
Cdigos ASCII ...........................................................................................................
Conversin de base: Decimal Hexadecimal Octal Binario ...............................

203
205
209
211

Introduccin a la Programacin: Teora y Prctica

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.

Introduccin a la Programacin: Teora y Prctica

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

Introduccin a la Programacin: Teora y Prctica

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

Introduccin a la Programacin. Teora y Prctica

Tema 1
Conocimientos bsicos

Introduccin a la Programacin. Teora y Prctica

1.1 Conceptos iniciales


1.1.1 Conceptos de Informtica y ordenador
Informtica: Trmino formado por la contraccin de las palabras informacin y
automtica que hace referencia al conjunto de conocimientos cientficos y tcnicas que
hacen posible el tratamiento automtico de la informacin por medio de los ordenadores
(computadores, PCs, ...).
La informtica es la ciencia que trata la adquisicin, representacin, tratamiento y
transmisin de la informacin. Las tareas bsicas para realizar dicho tratamiento son:
1. Entrada de informacin.
2. Tratamiento o proceso de la informacin.
3. Salida de resultados.
Ordenador (PC, computador, ...): Mquina programable que permite realizar el tratamiento
automtico de la informacin. Por tanto, un ordenador estar compuesto de lo siguientes
elementos:
MEMORIA CENTRAL
Unidad Central de Procesamiento
(UCP - CPU)
UNIDAD
DE
CONTROL
(UC - CU)

UNIDAD
ARITMTICO
LGICA
(UAL - ALU)

Unidades
de
ENTRADA

Unidades
de
SALIDA

MUNDO EXTERIOR:
- Usuario.
- Programador.
- Etc.

Unidades de entrada y salida (E/S).- Dispositivos que permiten la comunicacin


entre el ordenador y el mundo exterior (usuarios, programadores, otros
ordenadores, ...). Los primeros recogen datos de entrada para ser procesados y los
segundos muestran los resultados de dicho proceso (Ejemplos: monitor, teclado,
ratn, mdem, ...).

Memoria central.- Tambin llamada memoria principal o memoria interna. Es


donde se almacena la informacin proveniente del mundo exterior a la espera de
ser procesada y donde se van guardando los resultados del procesamiento antes de
ser mostrados.

Unidad central de procesamiento (CPU Central Proces Unit).- Es donde se


procesa la informacin que hay guardada en memoria central. En la CPU destacan
estos dos componentes:
a) Unidad de control (CU Control Unit).- Lleva el control de todas las
operaciones que ocurren en el ordenador. Da ordenes al resto de dispositivos

Tema 1 Conceptos bsicos

para que la informacin se procese adecuadamente as como para que se


realicen las operaciones de entrada y salida.
b) Unidad aritmticolgica (ALU Aritmetic-Logit Unit).- Realiza operaciones
aritmticas y lgicas segn se lo va ordenado la unidad de control.

1.1.2 Hardware y Software


Hardware (HW). Parte fsica: Conjunto de componentes fsicos o dispositivos de un
ordenador que se han descrito anteriorment:

Unidades de entrada/salida (E/S)

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, ...).

Unidad central de procesamiento.


a) Unidad de control.
b) Unidad aritmticolgica.

Software (SW). Parte lgica: Conjunto de programas que pueden ser ejecutados en un
ordenador. Podemos distinguir entre:

Software de aplicacin.- Contabilidad, facturacin, diseo, etc.


Software de sistemas.- Sistemas operativos, compiladores, etc.

1.1.3 Sistema Operativo


El sistema operativo (SO) es un conjunto de programas que facilitan y optimizan el
empleo del ordenador. Acta como intermediario entre el usuario y el hardware liberando a
aquel de tareas de bajo nivel, en lo referente a operaciones entre las diferentes aplicaciones y
la propia mquina. Adems, si consideramos el ordenador como un conjunto de recursos
necesarios para la ejecucin de programas, el SO tambin se encarga de gestionar dichos
recursos. Por ejemplo:

Al imprimir un trabajo desde cualquier aplicacin, ser el SO quin se encargue de


controlar el manejo de la impresora.

Introduccin a la Programacin. Teora y Prctica

Si se guarda un trabajo en disco, el SO se encargar de realizar la escritura fsica


del mismo en el soporte que le indiquemos (disquete, disco duro, a travs de una
red, ...).

Cuando un programa debe proporcionar un resultado en pantalla es el SO el


encargado de controlar el monitor.

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.

1.2 Lenguajes de Programacin


1.2.1 Concepto de lenguaje de programacin
Lenguaje artificial que se utiliza para expresar programas de ordenador.
Cada ordenador, segn su diseo, entiende un cierto conjunto de instrucciones
elementales (lenguaje mquina). No obstante, para facilitar la tarea del programador, se
dispone tambin de lenguajes de alto nivel ms fciles de manejar y que no dependen del
diseo especfico de cada ordenador. Los programas escritos en un lenguaje de alto nivel no
podrn ser ejecutados por un ordenador mientras no sean traducidos al lenguaje propio de
ste.
Para definir un lenguaje de programacin es necesario especificar:

Conjunto de smbolos y palabras clave utilizables.

Reglas gramaticales para construir sentencias (instrucciones, ordenes) sintctica y


semnticamente correctas.
a) Sintaxis: Conjunto de normas que determinan cmo escribir las sentencias del
lenguaje.
b) Semntica: Interpretacin de las sentencias. Indica el significado de las
mismas.

1.2.2 Paradigmas de programacin


Un paradigma de programacin es una coleccin de patrones conceptuales que
moldean la forma de razonar sobre problemas, de formular soluciones y de estructurar
programas. Los paradigmas de programacin son:

Programacin imperativa
Programacin funcional
Programacin lgica
Programacin orientada a objetos

Tema 1 Conceptos bsicos

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 de lenguaje: LISP.


Programacin lgica:
En este paradigma un programa consiste en declarar una serie de hechos (elementos
conocidos, relacin de objetos concretos) y reglas (relacin general entre objetos que cumplen
unas propiedades) y luego preguntar por un resultado.
Mujer(Rosa)
Mujer(Marta)
Mujer(Laura)
Padres(Rosa, Carlos, Pilar)
Padres(Marta, Carlos, Pilar)
Padres(Laura, Carlos, Pilar)
Hermanas(X, Y):- mujer(X), mujer(Y), padres(X, P, M), padres(Y, P, M)
?- hermanas(Rosa, Marta)
?- hermanas(Rosa, X)

Ejemplo: Prolog.

Introduccin a la Programacin. Teora y Prctica

Programacin orientada a objetos (POO):


El paradigma orientado a objetos (OO) se refiere a un estilo de programacin. Un
lenguaje de programacin orientado a objetos (LOO) puede ser tanto imperativo como
funcional o lgico. Lo que caracteriza un LOO es la forma de manejar la informacin que est
basada en tres conceptos:

Clase.- Tipo de dato con unas determinadas propiedades y una determinada


funcionalidad (ejemplo: clase persona).

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, ...).

Herencia.- Propiedad por la que es posible construir nuevas clases a partir de


clases ya existentes (ejemplo: la clase persona podra construirse a partir de la
clase ser vivo).

Ejemplos de LOO: Smalltalk, C++, Java.

1.2.3 Desarrollo histrico de los lenguajes de programacin

Lenguajes mquina (cdigo mquina):


Es el lenguaje que comprende la mquina de forma directa. Internamente, el ordenador
representa la informacin utilizando nicamente unos y ceros. Por tanto, un programa escrito
en lenguaje mquina (o cdigo mquina) estar formado por una secuencia finita de unos y
ceros.
01011010 10101010 ...
Este lenguaje rara vez se emplea para programar ya que tiene muchos inconvenientes:

Difcil de escribir y entender.


Laboriosa modificacin y correccin de errores.
Depende del hardware (distintos ordenadores distintos lenguajes mquina).
Repertorio reducido de instrucciones.

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:

Las instrucciones se representan utilizando mnemotcnicos.

Tema 1 Conceptos bsicos

Los datos se referencian por un nombre.


MOV 7,SP
ADD X

Se mantiene una relacin 1 a 1 respecto al lenguaje mquina (una instruccin en


ensamblador representa una instruccin en cdigo mquina).

Sigue dependiendo de la mquina y por tanto el programador debe conocer el


procesador utilizado.

Lenguajes de alto nivel. Caractersticas:

Lenguajes ms naturales. Estructura prxima a los lenguajes naturales.

Repertorio de instrucciones amplio, potente y fcilmente utilizable.


a:=b+4
if a>b then b=0

Independientes de la mquina.

Programas legibles y ms fciles de entender.

Mantenimiento y correccin de errores ms sencilla.

Generaciones de los lenguajes:


1. Primera generacin:

Lenguajes mquina y lenguaje ensamblador.


Dependen totalmente de la mquina.

2. Segunda generacin (finales de los 50 y principios de los 60):

Fortran: Cientfico y de ingeniera.


Cobol: Aplicaciones de procesamiento de datos.
Algol: Predecesor de lenguajes de 3 generacin.
Basic: Originalmente para ensear a programar.

3. Tercera generacin (hacia los aos 70 crisis del software):

Lenguajes de programacin estructurada.


Posibilidades procedimentales y de estructura de datos.
a) De propsito general:
- Pascal: Bloques estructurados, tipificacin de datos.
- C: Originalmente para sistemas, gran flexibilidad.
- Ada: para aplicaciones de tiempo real.
b) Orientados a Objetos:
- Smalltalk.

Introduccin a la Programacin. Teora y Prctica

Eiffel.
C++.
Java.

c) Especializados (sintaxis diseada para una aplicacin particular):


- LISP: Demostracin de teoremas.
- Prolog: inteligencia artificial.
- Apl: tratamiento de vectores y matrices.
4. Cuarta generacin (finales de los aos 80):

Alto nivel de abstraccin.


No son necesarios detalles algortmicos.
Ejemplo: Sql (Structured Query Language) orientados a tratamiento de datos.

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.

1.3.2 Compiladores e intrpretes


Intrprete:
Es un programa que toma como entrada un programa escrito en lenguaje fuente y lo va
traduciendo y ejecutando instruccin por instruccin (de una en una).
Compilador:
Es un programa que toma como entrada un programa fuente y genera un programa
equivalente llamado programa objeto o cdigo objeto.
Interpretacin vs Compilacin:

Tema 1 Conceptos bsicos

En el desarrollo de software, el programador deber determinar qu tipo de


herramienta utilizar para realizar esta tarea; un interprete o un compilador. Normalmente se
emplear un compilador por las siguientes razones:

La fase de traduccin utilizando un compilador slo se realiza una vez (la


definitiva). Con un interprete hay que traducir cada vez que se ejecuta el programa,
lo que hace que dicha ejecucin sea ms lenta.

El cdigo generado por un compilador puede optimizarse, siendo as ms eficiente.

Diferentes mdulos de un programa se pueden compilar por separado y despus


ser enlazados (linkados) para generar el programa ejecutable final. Si se modifica
un mdulo, para compilar el programa completo bastar con traducir este mdulo
y volver a linkarlo con el resto; no es necesario volver a traducir todos los
mdulos, por lo que tambin se ahorra tiempo de compilacin.

1.3.3 El proceso de traduccin


Se divide en dos grandes fases: anlisis y sntesis.
Fase de anlisis:
Consiste en ver si el cdigo del programa fuente est escrito de acuerdo a las reglas
sintcticas y semnticas que define el lenguaje fuente. Se realizan tres tipos de anlisis:
a) Anlisis lxico
- Elimina del programa fuente toda la informacin innecesaria (espacios y lneas
en blanco, comentarios, etc.).
- Comprueba que los smbolos del lenguaje (palabras clave, operadores, ...) se
han escrito correctamente.
b) Anlisis sintctico
- Comprueba si lo obtenido de la fase anterior es sintcticamente correcto
(obedece a la gramtica del lenguaje).
c) Anlisis semntico
- Comprueba el significado de las sentencias del programa.
Fase de sntesis:
Consiste en generar el cdigo objeto equivalente al programa fuente. Slo se genera
cdigo objeto cuando el programa fuente est libre de errores de anlisis, lo cual no quiere
decir que el programa se ejecute correctamente, ya que un programa puede tener errores de
concepto o expresiones mal calculadas.

Introduccin a la Programacin. Teora y Prctica

11

Tema 2
Algoritmos y programas

12

Introduccin a la Programacin. Teora y Prctica

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:

Debe ser comprensible y preciso (sin ambigedades), e indicar el orden de realizacin


de cada paso.
Debe ser predecible. Si se aplica partiendo de la misma situacin inicial, se debe
obtener siempre el mismo resultado.
Debe ser finito. El algoritmo debe terminar en algn momento (debe tener un nmero
finito de pasos).

Curiosidad: El trmino algoritmo es muy anterior a la era informtica: proviene de


Mohammed al-Khowrizm (apellido que se tradujo al latn empleando la palabra
algoritmus), matemtico persa del siglo IX que enunci paso a paso las reglas para
sumar, restar, multiplicar y dividir nmeros decimales.

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.

2.2 Resolucin de problemas


La resolucin de un problema mediante un ordenador consiste en el proceso que a
partir de la descripcin de un problema, expresado habitualmente en lenguaje natural y en

Tema 2 Algoritmos y programas

13

trminos propios del dominio del problema, permite desarrollar un programa que resuelva
dicho problema.
Este proceso exige los siguientes pasos:

Anlisis del problema.


Diseo o desarrollo de un algoritmo.
Transformacin del algoritmo en un programa (codificacin).
Ejecucin y validacin del programa.

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.

2.2.1 Anlisis del problema


Cuando un usuario plantea un programador un problema a resolver mediante su
ordenador, por lo general ese usuario tendr conocimientos ms o menos amplios sobre el
dominio del problema, pero no es habitual que tenga conocimientos de informtica. Por
ejemplo, un contable que necesita un programa para llevar la contabilidad de una empresa
ser un experto en contabilidad (dominio del problema), pero no tiene porque ser experto en
programacin.
Del mismo modo, el informtico que va a resolver un determinado problema puede ser
un experto programador, pero en principio no tiene porque conocer el dominio del problema;
siguiendo el ejemplo anterior, el informtico que hace un programa no tiene porque ser un
experto en contabilidad.
Por ello, al abordar un problema que se quiere resolver mediante un ordenador, el
programador necesita de la experiencia del experto del dominio para entender el problema. Al
final, si se quiere llegar a una solucin satisfactoria es necesario que:

El problema est bien definido si se quiere llegar a una solucin satisfactoria.


Las especificaciones de las entradas y salidas del problema, deben ser descritas
con detalle:
a) Qu datos son necesarios para resolver el problema?
b) Qu informacin debe proporcionar la resolucin del problema?

2.2.2 Diseo del algoritmo


Como ya se ha descrito, un algoritmo consiste en una especificacin clara y concisa de
los pasos necesarios para resolver un determinado problema, pero para poder disear
algoritmos es necesario disponer de una notacin, que llamaremos notacin algortmica,
que permita:

14

Introduccin a la Programacin. Teora y Prctica

Describir las operaciones puestas en juego (acciones).


Describir los objetos manipulados por el algoritmo (datos/informaciones).
Controlar la realizacin de las acciones descritas, indicando la forma en que estas
se organizan en el tiempo.

Nota: la notacin algortmica no es en ningn caso un lenguaje de programacin. Lo


esencial de la notacin algortmica es que las acciones elegidas sean las necesarias y
suficientes para expresar todo algoritmo.

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;

3. Ejecucin condicional de una accin (composicin condicional)


Cuando en un algoritmo se quiere indicar que cierta accin slo se debe ejecutar bajo
cierta condicin se indica del siguiente modo:
Si Condicin Entonces
Accin;
FinSi

Tema 2 Algoritmos y programas

15

Slo si la Condicin (operacin lgica) es verdadera se ejecutar la Accin. En este


caso, la Accin puede referirse tanto a una accin elemental como a un conjunto de ellas.
4. Ejecucin alternativa de una de dos acciones (composicin alternativa)
En ocasiones, se deben ejecutar unas acciones u otras dependiendo de la ocurrencia de
una determinada condicin. Esta especificacin se realiza del siguiente modo:
Si Condicin Entonces
Accin A;
SiNo
Accin B;
FinSi

Dependiendo de si la Condicin es verdadera o falsa se ejecutar la Accin A o la


Accin B respectivamente. De forma anloga a como ocurra en el caso anterior, tanto la
Accin A como la Accin B pueden referirse a una accin elemental o a un conjunto de
ellas.
5. Ejecucin condicional de una de varias opciones (composicin selectiva)
Tambin es posible que a la hora de especificar la ejecucin de una accin haya que
escoger sta entre varias dependiendo del valor de una determinada variable (o indicador).
Este caso se expresa del siguiente modo:
Seleccionar Indicador
Caso Valor 1:
Accin 1;
Caso Valor 2:
Accin 2;
...
Caso Valor n:
Accin n;
[EnOtroCaso:
Accin X;]
FinCaso

En esta construccin Indicador debe tener un determinado valor que en caso de


coincidir con alguno de los n valores provocar la ejecucin de la accin asociada a dicho
valor. Si el valor del Indicador no coincidiera con ninguno de los especificados se ejecutar
la Accin X. No tiene porque haber una Accin X para cuando el Indicador no coincida
con ninguno de los n valores; en ese caso, si el Indicador no coincide con ningn valor no se
ejecutara ninguna accin.
Al igual que en los casos anteriores, todas las acciones que aparecen en esta estructura
(Accin 1, Accin 2, ..., Accin n y Accin X) pueden referirse a una nica accin o a
un conjunto de ellas.
6. Ejecucin mltiple de una accin (composicin iterativa o bucle)

Vous aimerez peut-être aussi