You are on page 1of 27

01/10/2013

Fundamentos de la programacin

1
Grado en Ingeniera Informtica
Grado en Ingeniera del Software
Grado en Ingeniera de Computadores

Ana Gil Luezas


(adaptadas del original de Luis Hernndez Yez)

Facultad de Informtica
Universidad Complutense

Informtica, computadoras y programacin 2


Un poco de historia 7
Computadoras, lenguaje mquina y ensamblador 11
Lenguajes de programacin de alto nivel 18
Elementos de los lenguajes de programacin 24
Sintaxis de los lenguajes de programacin 26
Un primer programa en C++ 29
Herramientas de desarrollo 32
Un ejemplo 36

Fundamentos de la programacin: Computadoras y programacin

1
01/10/2013

Informtica (Ciencia de la computacin)


Conjunto de conocimientos cientficos y tcnicos
que hacen posible el tratamiento automtico
de la informacin por medio de ordenadores

Computadora
Mquina electrnica, analgica o digital,
dotada de una memoria de gran capacidad
y de mtodos de tratamiento de la informacin,
capaz de resolver problemas matemticos y lgicos
mediante la ejecucin de programas informticos

Fundamentos de la programacin: Computadoras y programacin Pgina 2

En todas partes y con muchas formas

Fundamentos de la programacin: Computadoras y programacin Pgina 3

2
01/10/2013

Hardware
Componentes que integran
la parte material
de una computadora

Software
Programas, instrucciones
y reglas informticas
para ejecutar tareas
en una computadora

Fundamentos de la programacin: Computadoras y programacin Pgina 4

Indicar a la computadora qu es lo que tiene que hacer para


realizar una tarea concreta.
Algoritmo: Descripcin precisa de una secuencia de
instrucciones para resolver un problema.
Un programa es la codificacin de un algoritmo en un
lenguaje concreto:
Secuencia de instrucciones
Instrucciones que entiende la computadora
Proceso o cmputo: la ejecucin de un programa, o una
secuencia de instrucciones, en un ordenador.

Fundamentos de la programacin: Computadoras y programacin Pgina 5

3
01/10/2013

Trabajo en equipo.
Mltiples roles...

Analistas
Parque Jursico Diseadores
Programadores
Probadores
Administradores de
sistemas
Etctera...

Fundamentos de la programacin: Computadoras y programacin Pgina 6

La programacin es slo una etapa del proceso de desarrollo


Modelo de desarrollo en cascada:
Planificacin Recursos necesarios, presupuesto, plan,

Anlisis Qu?

Diseo Cmo?

Programacin Implementacin

Prueba y depuracin

Mantenimiento

Fundamentos de la programacin: Computadoras y programacin Pgina 7

4
01/10/2013

La prehistoria
El baco

Siglo XIX (Wikipedia)


Mquina analtica de Charles Babbage

Lady Ada Lovelace


es considerada
la primera
programadora

Fundamentos de la programacin: Computadoras y programacin Pgina 8

Siglo XX
1936 Mquina de Turing
1946 ENIAC: Primera computadora digital
de propsito general
1947 El transistor
ENIAC (Wikipedia)
1953 IBM 650: Primera
computadora a gran escala
1966 ARPANET: Origen de Internet
1967 El disquete
1970 Sistema operativo UNIX
1972 Primer virus informtico (Creeper)
Lenguaje de programacin C
1974 Protocolo TCP. Primera red local

Fundamentos de la programacin: Computadoras y programacin Pgina 9

5
01/10/2013

1975 Se funda Microsoft


1976 Se funda Apple
1979 Juego Pacman
1981 IBM PC
Sistema operativo MS-DOS
Apple II (Wikipedia)
1983 Lenguaje de programacin C++
1984 CD-ROM
1985 Windows 1.0
1990 Lenguaje HTML
World Wide Web
1991 Sistema operativo Linux Linux
IBM PC (Wikipedia)

Fundamentos de la programacin: Computadoras y programacin Pgina 10

1992 Windows 3.1


1995 Lenguaje de programacin Java
DVD
1998 Se funda Google
1999 MSN Messenger

Siglo XXI
2001 Windows XP
Mac OS X
2002 Mozilla Firefox
2007 iPhone
2008 Android ...

Fundamentos de la programacin: Computadoras y programacin Pgina 11

6
01/10/2013

Esquema general
Memoria
temporal

Unidad Central de Proceso


Central Processor Unit

Dispositivos Dispositivos
C.P.U.
de entrada de salida

Teclado Monitor
Ratn Impresora
Escner Altavoz
Tctil Almacenamiento

permanente

Fundamentos de la programacin: Computadoras y programacin Pgina 12

La arquitectura de Von Neumann

Dispositivos de E/S

Una ALU de 2 bits (Wikipedia)


C.P.U. (Procesador)

A.L.U.
Unidad Aritmtico-Lgica
Memoria

Unidad de Control

Fundamentos de la programacin: Computadoras y programacin Pgina 13

7
01/10/2013

La memoria
Memoria Cada celda tiene
01
una direccin asociada
02
Celdas de 8 / 16 / 32 / 64 bits
03 Informacin voltil
04
05
Bus
06 1 Bit = 0 / 1
de
07 1 Byte = 8 bits = 1 carcter / n (0-255)
datos
08 1 Kilobyte (KB) = 1024 Bytes
... 1 Megabyte (MB) = 1024 KB
1 Gigabyte (GB) = 1024 MB
1 Terabyte (TB) = 1024 GB
1 Petabyte (PB) = 1024 TB
Direccin
210 = 1024 1000

Fundamentos de la programacin: Computadoras y programacin Pgina 14

Unidad Central de Proceso (CPU)


Registros de 8 / 16 / 32 / 64 bits
CPU (Procesador)

ALU (Unidad Aritmtico-Lgica) Unidad de Control

Registro A Registro 1 Registro 2 Contador de programa


Registro B

Registro C Instruccin
Registro D

Registro E
Registro R

Bus de datos

Fundamentos de la programacin: Computadoras y programacin Pgina 15

8
01/10/2013

Los procesadores trabajan con ceros y unos (bits)


Unidad de memoria bsica: Byte (8 bits)
(2 dgitos hexadecimales: 01011011 0101 1011 5B)
Lenguaje mquina
Cdigos hexadecimales que representan instrucciones,
registros de la CPU, direcciones de memoria o datos

Ejemplo de programa: Lenguaje de bajo nivel


Dependiente de la mquina
Instruccin Significado
A0 2F Acceder a la posicin de memoria 2F Programacin intrincada
3E 01 Copiar el dato en el registro 1 de la ALU
A0 30 Acceder a la posicin de memoria 30
3E 02 Copiar el dato en el registro 2 de la ALU
1D Sumar
B3 31 Guardar el resultado en la posicin de memoria 31

Fundamentos de la programacin: Computadoras y programacin Pgina 16

CPU (Procesador) Memoria


ALU UC 01 A0 2D
02 2F 2E
C.P. 03 3E 2F 03
01 04 01 30 05
05 A0 31
Inst.
06 30 32
07 3E 33
Dir. 08 02 34
09 1D ...
0A B3 Programa
0B 31 en memoria
...

Bus de datos

Fundamentos de la programacin: Computadoras y programacin Pgina 17

9
01/10/2013

Nemotcnicos para los cdigos hexadecimales:


A0 READ 3E REG 1D ADD

Mayor legibilidad:
READ 2F Cdigo fuente
REG 01 (lenguaje ensamblador)
READ 30
REG 02 Programa
ADD ensamblador
WRITE 31

Lenguaje de nivel medio Cdigo objeto


(lenguaje mquina)

Fundamentos de la programacin: Computadoras y programacin Pgina 18

Ms cercanos a los lenguajes natural y matemtico


resultado = dato1 + dato2;
Mayor legibilidad, mayor facilidad de codificacin
Estructuracin de datos / abstraccin procedimental

Fundamentos de la programacin: Computadoras y programacin Pgina 19

10
01/10/2013

El sistema operativo:
Software bsico encargado de manejar el hardware y facilitar el
trabajo a los programas de aplicacin, proporcionndoles un
conjunto de servicios genricos.
Interfaz con el usuario.
Asignacin de tiempos de CPU.
Control y asignacin racional de los recursos de la computadora.
Ejecucin de programas.
Administracin de discos y dispositivos.
...

Fundamentos de la programacin: Computadoras y programacin Pgina 20

Modelo de ejecucin
#include <iostream>
using namespace std;
Cdigo fuente
basado en compilacin: int main()
{

Compilan y enlazan cout << "Hola Mundo!" << endl;


return 0;

programas completos
}
Compilador

Otros modelos:
Cdigo objeto 0100010100111010011100
Intrpretes,
Mquinas virtuales Cdigo
Enlazador objeto de
biblioteca

Programa Para una arquitectura concreta


ejecutable y un Sistema Operativo concreto

Fundamentos de la programacin: Computadoras y programacin Pgina 21

11
01/10/2013

Genealoga de lenguajes Versiones / Estndares


Prolog
1970 Java
COBOL PL/I C++ 1995
1959
1964 1983

FORTRAN C#
1954 C
CPL 2000
1971
1963
Python
ALGOL Pascal Modula 1991
1958 1970 1975
BASIC
1964
Ada Eiffel
1979 1986
Simula
1964 Smalltalk Ruby
Fuente: http://www.levenez.com/lang/ 1971
1993

Haskell
Lisp Scheme 1987
1958 1975
Logo
1968

Fundamentos de la programacin: Computadoras y programacin Pgina 22

Bjarne Stroustrup (1983)

Para programar necesitamos un lenguaje

Lenguaje muy ampliamente utilizado en las reas de ingeniera

Bien definido por un estndar (C++ 11)

Disponible para casi cualquier computadora

Los conceptos son trasladables a otros lenguajes

Fundamentos de la programacin: Computadoras y programacin Pgina 23

12
01/10/2013

La base de C++: El lenguaje C


Lenguaje creado por Dennis M. Ritchie en 1972
Lenguaje de nivel medio:
Estructuras tpicas de los lenguajes de alto nivel

Construcciones para control a nivel de mquina

Lenguaje sencillo (pocas palabras reservadas)


Lenguaje estructurado (no estrictamente)
Compartimentacin de cdigo y datos

Componente estructural bsico: la funcin (subprograma)

Programacin modular

Fundamentos de la programacin: Computadoras y programacin Pgina 24

Elementos de un lenguaje
Instrucciones
Datos (literales, variables, tipos)
Subprogramas (funciones)
Comentarios
Directivas
Directiva
... #include <iostream>
using namespace std;
Subprograma
int main()
{ Dato Comentario
Instruccin cout << "Hola Mundo!" << endl; // Muestra Hola Mundo!

Instruccin return 0;
Dato
}

Fundamentos de la programacin: Computadoras y programacin Pgina 25

13
01/10/2013

Sintaxis y semntica de los lenguajes


Sintaxis
Reglas que determinan cmo se pueden construir
y secuenciar los elementos del lenguaje

Semntica
Significado de cada elemento del lenguaje
Para qu sirve?, Qu hace?

Fundamentos de la programacin: Computadoras y programacin Pgina 26

Especificacin
Lenguajes (BNF)
Diagramas
Ejemplo: Nmeros enteros
BNF
<numero entero> ::= <signo opcional><secuencia de dgitos>
<signo opcional> ::= +|-|<nada>
<secuencia de dgitos> ::= <dgito>|<dgito><secuencia de dgitos>
<dgito> ::= 0|1|2|3|4|5|6|7|8|9
| significa +23
<nada> ::= -159
1374
1-34
+
3.4
0 .. 9 002
-

Fundamentos de la programacin: Computadoras y programacin Pgina 27

14
01/10/2013

<numero entero> ::= <signo opcional><secuencia de dgitos>


<signo opcional> ::= +|-|<nada>
<secuencia de dgitos> ::= <dgito>|<dgito><secuencia de dgitos>
<dgito> ::= 0|1|2|3|4|5|6|7|8|9
<nada> ::=
+23
<numero entero> ::= <signo opcional><secuencia de dgitos>
::= +<secuencia de dgitos> ::= +<dgito><secuencia de dgitos>
::= +2<secuencia de dgitos> ::= +2<dgito> ::= +23
1374

<numero entero> ::= <signo opcional><secuencia de dgitos>
::= <secuencia de dgitos> ::= <dgito><secuencia de dgitos>
::= 1<secuencia de dgitos> ::= 1<dgito><secuencia de dgitos>
::= 13<secuencia de dgitos> ::= 13<dgito><secuencia de dgitos>
::= 137<secuencia de dgitos> ::= 137<dgito> ::= 1374
1-34
<numero entero> ::= <signo opcional><secuencia de dgitos>
::= <secuencia de dgitos> ::= <dgito><secuencia de dgitos>
::= 1<secuencia de dgitos> ::= ERROR (- no es <dgito>)

Fundamentos de la programacin: Computadoras y programacin Pgina 28

+23 +

-
0 .. 9 +23
1374 +

-
0 .. 9 1374
1-34 + ?
-
0 .. 9 1-

Fundamentos de la programacin: Computadoras y programacin Pgina 29

15
01/10/2013

Hola Mundo!
Un programa que muestra un saludo en la pantalla:
Hola Mundo!

#include <iostream>
using namespace std;

int main()
{
cout << "Hola Mundo!" << endl; // Muestra Hola Mundo!

return 0;
}

Fundamentos de la programacin: Computadoras y programacin Pgina 30

Elementos sintcticos del programa


Biblioteca

Directiva #include <iostream> Espacio de nombres

using namespace std;


Coloreado sintctico
Tipo Palabras reservadas

Definicin int main() Cabecera de la funcin

{
Bloque de cdigo

Variable Cadena de caracteres Constante


Instruccin cout << "Hola Mundo!" << endl;
Operador Operador
Datos literales
Instruccin return 0;
Nmero
} Cuerpo de la funcin

Las instrucciones terminan en ;

Fundamentos de la programacin: Computadoras y programacin Pgina 31

16
01/10/2013

Qu hace el programa?
La ejecucin del programa siempre empieza en la funcin main()
Se ejecutan las instrucciones en secuencia de principio a fin

Inicio Ventana (cout)


_
Hola Mundo!
_
cout << "Hola Mundo!" << endl;
Muestra el texto Hola Mundo!
en la pantalla y cambia
a la lnea siguiente
return 0;
Devuelve 0 como cdigo
de terminacin del programa

Fin

Fundamentos de la programacin: Computadoras y programacin Pgina 32

Editor
Bloc de notas, Wordpad, Writer, Gedit, Kwrite,
(texto simple, sin formatos)
Editores especficos, coloreado sintctico: Emacs, Notepad++

Fundamentos de la programacin: Computadoras y programacin Pgina 33

17
01/10/2013

hola.cpp Compilador hola.obj


(cdigo fuente) (cdigo objeto)

Cdigo objeto de
Enlazador
la biblioteca iostream

Hola Mundo!

Cargador hola.exe
(ejecutable)

Fundamentos de la programacin: Computadoras y programacin Pgina 34

Compilador
Importante: C++ estndar (C++11)
GNU G++ (MinGW en Windows),
MS Visual Studio, Borland C++,

Fundamentos de la programacin: Computadoras y programacin Pgina 35

18
01/10/2013

Entornos de desarrollo (IDE)


Para editar, compilar y probar el cdigo del programa
Recomendaciones:
Windows: MS Visual Studio (MS Visual C++ Express) o Eclipse
Linux: Netbeans o Eclipse

Fundamentos de la programacin: Computadoras y programacin Pgina 36

Fundamentos de la programacin: Computadoras y programacin Pgina 37

19
01/10/2013

Sintaxis y semntica de los lenguajes


Sintaxis
Reglas que determinan cmo se pueden construir
y secuenciar los elementos del lenguaje

Semntica
Significado de cada elemento del lenguaje
Para qu sirve?, Qu hace?
Reglas que determinan el efecto da cada instruccin

Fundamentos de la programacin: Computadoras y programacin Pgina 38

Una computadora de un coche


Coche que acepta programas que le indican una ruta.
Instrucciones que entiende:
<instruccin> ::= <inst> ;
<inst> ::= Start | Stop | <avanzar>
<avanzar> ::= Go <direccin> <num> Blocks
<direccin> ::= North | East | South | West
<num> ::= 1 | 2 | 3 | 4 | 5
Ejemplos:
Start;
Go North 3 Blocks;
Stop;

Fundamentos de la programacin: Computadoras y programacin Pgina 39

20
01/10/2013

Sintaxis del lenguaje de programacin


= Literales
Start

instruccin Stop ;

avanzar

avanzar Go direccin num Blocks

North 1

East 2
direccin num 3
South
4
West
5

Fundamentos de la programacin: Computadoras y programacin Pgina 40

N
El problema a resolver
Estando el coche en la posicin A,
conseguir llegar al Cine B. B
Qu pasos hay que seguir ?
Arrancar
Ir un bloque al Norte
Ir dos bloques al Este
Ir cinco bloques al Norte
Ir dos bloques al Este A
Parar
Bloque:

Fundamentos de la programacin: Computadoras y programacin Pgina 41

21
01/10/2013

N
El algoritmo
Secuencia de pasos que hay que

seguir para resolver el problema.

1.- Arrancar
2.- Ir un bloque al Norte
3.- Ir dos bloques al Este
4.- Ir cinco bloques al Norte
5.- Ir dos bloques al Este
6.- Parar

Estas instrucciones sirven tanto para


una persona como para una computadora.

Fundamentos de la programacin: Computadoras y programacin Pgina 42

N
El programa
Escribir el algoritmo en el
lenguaje de programacin. B
Start;
Go North 1 Blocks;
Go East 2 Blocks;
Go North 5 Blocks;
Go East 2 Blocks;
Stop; A

Fundamentos de la programacin: Computadoras y programacin Pgina 43

22
01/10/2013

El programa
Escribimos el cdigo del programa
en un editor y lo guardamos
en un documento programa.prg.

Stat;
Go North 1 Blocks
Go East Blocks;
Go Noth 5 Blocks; Copiamos el archivo
Go West 2 Blocks; en una llave USB
Stop;
y lo llevamos al coche.

Fundamentos de la programacin: Computadoras y programacin Pgina 44

La compilacin
Introducimos la llave USB en el coche y pulsamos el botn
de ejecutar el programa:

Stat;
----^ Unknown word.
Go North 1 Blocks
-----------------^ ; missing.
Go East Blocks;
--------^ Number missing. Errores
Go Noth 5 Blocks;
de sintaxis
-------^ Unknown word.
Go West 2 Blocks;
Stop;
There are errors. Impossible to run the program.

Fundamentos de la programacin: Computadoras y programacin Pgina 45

23
01/10/2013

Depuracin
Editamos el cdigo para arreglar los errores de sintaxis.

Stat; Start;
Go North 1 Blocks Go North 1 Blocks;
Go East Blocks; Go East 3 Blocks;
Go Noth 5 Blocks; Go North 5 Blocks;
Go West 2 Blocks; Go West 2 Blocks;
Stop; Stop;

Fundamentos de la programacin: Computadoras y programacin Pgina 46

N
La ejecucin
Se realiza lo que pide
cada instruccin. B
Start;
Go North 1 Blocks;
Go East 3 Blocks;
!
Error de ejecucin
Una instruccin no se puede ejecutar!

Fundamentos de la programacin: Computadoras y programacin Pgina 47

24
01/10/2013

Depuracin
Editamos el cdigo para arreglar el error de ejecucin.

Start; Start;
Go North 1 Blocks; Go North 1 Blocks;
Go East 3 Blocks; Go East 2 Blocks;
Go North 5 Blocks; Go North 5 Blocks;
Go West 2 Blocks; Go West 2 Blocks;
Stop; Stop;

Fundamentos de la programacin: Computadoras y programacin Pgina 48

N
La ejecucin
Se realiza lo que pide ?
cada instruccin. B
Start;
Go North 1 Blocks;
Go East 2 Blocks;
Go North 5 Blocks;
Go West 2 Blocks;
Stop;

Error lgico
El programa se ejecuta, pero no obtiene el resultado deseado!

Fundamentos de la programacin: Computadoras y programacin Pgina 49

25
01/10/2013

Depuracin
Editamos el cdigo para arreglar el error lgico.

Start; Start;
Go North 1 Blocks; Go North 1 Blocks;
Go East 2 Blocks; Go East 2 Blocks;
Go North 5 Blocks; Go North 5 Blocks;
Go West 2 Blocks; Go East 2 Blocks;
Stop; Stop;

Fundamentos de la programacin: Computadoras y programacin Pgina 50

N
La ejecucin

Se realiza lo que pide
cada instruccin.
Start;
Go North 1 Blocks;
Go East 2 Blocks;
Go North 5 Blocks;
Go East 2 Blocks;
Stop;

Conseguido!

Fundamentos de la programacin: Computadoras y programacin Pgina 51

26
01/10/2013

Licencia CC (Creative Commons)


Este tipo de licencias ofrecen algunos derechos a terceras personas
bajo ciertas condiciones.
Este documento tiene establecidas las siguientes:

Reconocimiento (Attribution):
En cualquier explotacin de la obra autorizada por la licencia
har falta reconocer la autora.
No comercial (Non commercial):
La explotacin de la obra queda limitada a usos no comerciales.
Compartir igual (Share alike):
La explotacin autorizada incluye la creacin de obras derivadas
siempre que mantengan la misma licencia al ser divulgadas.

Pulsa en la imagen de arriba a la derecha para saber ms.

Fundamentos de la programacin: Computadoras y programacin Pgina 52

27

You might also like