Conceptos Basicos de Programacion PDF
Conceptos Basicos de Programacion PDF
Conceptos Basicos de Programacion PDF
1.3 MEMORIA
Son los componentes de hardware en los que se almacena la información procesada por la
computadora. Generalmente, se distinguen entre la memoria central y la memoria
secundaria (véase más adelante).
Capacidad: indica la cantidad de datos que puede almacenar. Se mide en bits bit
(binary unit), o múltiplos del bit. Los bits suelen agruparse de ocho en ocho: 1 byte=
8 bits. Las unidades de almacenamiento están recogidas en la Tabla 1.1.
La memoria central es un circuito que se puede imaginar como una enorme tabla que
almacena información en cada una de sus celdas o posiciones de memoria (véase Figura
1.2).
Conceptos Básicos de Programación 4
Memoria secundaria es una memoria más barata donde, a cambio de mayores tiempos
de acceso, se puede conservar gran cantidad de información (disco duro, CD (Compact Disk),
DVD (Digital Versatile Disk), memoria flash, etc). En ella se almacena todo lo que la unidad
central de procesos (véase la Sección 1.2) no necesita urgentemente. La principal
característica de este tipo de memorias es que su contenido no se pierde al apagar la
computadora.
1.6 LENGUAJES
Un lenguaje de programación es un conjunto de símbolos y reglas sintácticas y
semánticas que sirven para describir las ´ordenes que controlan el comportamiento
físico y lógico de una máquina.
El lenguaje ensamblador facilita (sólo un poco) esas tareas, ya que permite la escritura
de las instrucciones básicas “entendibles” por la CPU en una forma más legible para el
Conceptos Básicos de Programación 6
CP 164 183
Usualmente hay una correspondencia uno a uno entre las instrucciones simples de un
código ensamblador y las de un código máquina. Por ello, el ensamblador sigue siendo
un lenguaje de bajo nivel: por un lado, el programador necesita conocer en
profundidad la arquitectura de la máquina, por otro los programas escritos en
ensamblador no son portables.
Los lenguajes de alto nivel, por el contrario, no obligan al programador a conocer los
detalles de la computadora que utiliza. Las instrucciones se escriben en un formato
flexible y más “humano”. Además, se pueden escribir, de forma sencilla, instrucciones
mucho más complicadas: cada instrucción en un lenguaje de alto nivel corresponde a
varias (incluso muchas) de lenguaje-máquina. La instrucción de los ejemplos
anteriores se podría escribir:
A=B
Ejemplos de lenguajes de alto nivel son Basic, Fortran, Pascal utilizados en las primeras
generaciones de computadoras, también están, C , C++, C#, Java, Python, Javascript,
Visual Basic y otros.
Datos y variables
Los distintos tipos de datos se representan en diferentes formas en el ordenador: por ejemplo, no
se almacena internamente de la misma manera un número entero que un carácter. Aunque los
lenguajes de alto nivel permiten en alguna medida ignorar la representación interna de los datos, es
preciso conocer algunos conceptos mínimos.
A nivel de máquina todos los datos se representan utilizando una secuencia finita de bits. De este
hecho ya se deduce que no todos los datos son representables en un ordenador. La definición de
un tipo de dato incluye la definición del conjunto de valores permitidos y las operaciones que se
pueden llevar a cabo sobre estos valores.
Cuando se utiliza un dato en un programa es preciso que esté determinado su tipo para que el
traductor sepa cómo debe tratarlo y almacenarlo. Dependiendo del lenguaje puede o no ser preciso
declarar expresamente en el programa el tipo de cada dato. No todos los tipos de datos existen en
todos los lenguajes de programación. Hay lenguajes más ricos que otros en este sentido. Los tipos
de datos básicos más usuales son:
EJEMPLO: 5, 22, -1
Complejos: son datos formados por un par de datos reales y sirven para tratar números
complejos.
Cadenas de caracteres: (también llamadas string) son una sucesión de caracteres delimitados
por una comilla (apóstrofo) o dobles comillas, según el tipo de lenguajes de programación.
Matrices o arreglos: son conjuntos de datos numéricos organizados para formar una matriz o
un vector.
EJEMPLO: A[4,5] Arreglo A de dos dimensiones.
Descripción Símbolo
Exponenciación ∧, **
Suma +
Resta −
Multiplicación ∗
División /, MOD, DIV
Tabla 2.1: Operadores aritméticos elementales
1. Exponenciaciones.
2. Multiplicaciones y divisiones.
3. Sumas y restas.
EJEMPLO:
2 + 3 ∗ 4 = 2 + 12 = 14
(2 + 3) ∗ 4 = 5 ∗ 4 = 20
1/3 ∗ 2 = 0.3333... ∗ 2 = 0.6666
1/(3 ∗ 2) = 1/6 = 0.166666...
2 + 3∧4/2 = 2 + 81/2 = 2 + 40.5 = 42.5
4∧3∧2 = (4∧3)∧2 = 64∧2 = 4096
Los operadores de comparación se representan de distintas formas según el lenguaje. Los que se
muestran en la tabla siguiente son los de MATLAB:
Descripción Símbolo
Igual a ==
No igual a ∼=
Menor que <
Mayor que >
Menor o igual que <=
Mayor o igual que >=
Tabla 2.2: Operadores de comparación
EJEMPLO:
3 <6 true
0=1 false
’A’ == ’B’ false
La representación de los operadores lógicos varía bastante de un lenguaje a otro. Es estas notas se
representarán como en MATLAB:
Descripción Símbolo
Negación ∼, NOT, NO
Conjunción &, AND, Y
Disyunción |, OR, O
Tabla 2.3: Operadores lógicos
El primero de ellos, el operador de negación lógica ∼, es un operador unario, es decir, actúa sobre
un solo operando lógico, dando como resultado el opuesto de su valor, como muestra la siguiente
tabla:
A ∼A
true false
false true
Tabla 2.4: Resultados del operador ∼
EJEMPLO:
(6>10) false ∼ (6>10) true
Los otros dos operadores lógicos actúan siempre entre dos operandos. Los resultados de su
aplicación se muestran en la tabla siguiente:
A B A&B A|B
true true true true
true false false true
false true false true
false false false false
Tabla 2.5: Resultados de los operadores & y |.
EJEMPLO:
(1<5) & (5<10) true
(0<5) | (0>5) false
En una expresión pueden aparecer varios operadores lógicos. En ese caso, el orden en que se
evalúan es el siguiente:
1. la negación lógica ∼
nombre de la función(argumentos)
donde argumentos pueden ser: un número o expresión, variable o expresión de variables (ver la
Sección 2.8).
EJEMPLO:
sqrt(2) calcula √2
log(cos(x/2)) calcula
Si en una expresión hay paréntesis, lo primero que se evalúa es su contenido. Si hay paréntesis
anidados, se comienza por los más internos. Si hay varios grupos de paréntesis disjuntos, se
comienza por el que esté más a la izquierda.
En una expresión sin paréntesis de agrupamiento, el orden de evaluación es el siguiente:
2.8 Variables
Una variable es un nombre simbólico que identifica una parte de la memoria en la que se pueden
guardar números u otro tipo de datos. Es un “sitio” en la memoria del ordenador para “guardar”
datos. El contenido de una variable se puede recuperar y modificar cuantas veces se quiera durante
la ejecución de un programa.
Una variable, en general, se identifica por su nombre y su tipo. El nombre debe estar formado por
letras y números y comenzar por una letra, aunque normalmente también se admite el uso de
ciertos caracteres especiales. Una variable está asociada a un tipo de datos, el cual determina la
cantidad de bytes que usa la variable (ver Sección 2.9).
VARIABLE = EXPRESIÓN
que debe ser interpretada como: evaluar (si es preciso) el resultado de la EXPRESIÓN y almacenarlo
en la dirección de memoria correspondiente a VARIABLE.
La acción de almacenar un valor en una variable hace que se pierda el valor que, eventualmente,
tuviera dicha variable previamente.
EJEMPLO:
a=2 guardar en la variable a el valor 2
b=-4 guardar en la variable b el valor -4
raiz=sqrt(2*b+8*a) guardar en la variable raiz el valor √8
a=a+1 sumar 1 al contenido de a (guardar 3 en a)
Conceptos Básicos de Programación 15
3. Edición del código fuente, es decir, escritura del mismo utilizando un editor de textos simple
(sin formato) y un lenguaje de programación. Los programas fuente serán almacenados en
ficheros de texto, normalmente en el disco duro de la computadora.
5. Corrección de errores del programa. Los errores se corregirán en el código fuente, repitiendo
los pasos 3 y 4 tantas veces como sea necesario. Si se producen errores en la lógica del
programa, es decir, si el programa “funciona” pero produce resultados incorrectos, hay que
modificar el algoritmo volviendo al paso 2. Estos errores son los más difíciles de detectar.
3.2 Algoritmos
Una computadora es capaz de realizar “sólo” determinadas acciones sencillas, tales como sumar,
comparar o transferir datos, pero los problemas que normalmente interesa resolver son más
complejos. Para resolver un problema real es necesario, en primer lugar, encontrar un método de
resolución y, posteriormente, determinar la sucesión de acciones sencillas (susceptibles de ser
ejecutadas por una computadora) en que se descompone dicho método.
No todos los métodos de solución de un problema pueden ser puestos es práctica en una
computadora. Para que un procedimiento pueda ser implantado en una computadora debe ser:
Un procedimiento o método para resolver un problema que cumpla los requisitos anteriores se dice
que es un algoritmo. Se puede dar por tanto la siguiente definición:
Un algoritmo es un método para resolver un problema mediante una secuencia de pasos bien
definidos, ordenados y finitos.
Para que se pueda ejecutar el algoritmo es preciso, además, que se disponga de las “herramientas”
adecuadas para llevar a cabo cada uno de los pasos. Si no es así, estos deberán, a su vez, ser
descompuestos en una secuencia (algoritmo) de pasos más simples que sí se puedan llevar a cabo.
Diagramas de flujo: son representaciones gráficas de secuencias de pasos a realizar. Cada operación
se representa mediante un símbolo normalizado el Instituto Norteamericano de Normalización
(ANSI - American National Standars Institute). Las líneas de flujo indican el orden de ejecución.
Algunos de los símbolos principales se muestran en la Figura 5.1, como son: Inicio/Fin del algoritmo,
Lectura/Escritura de datos que el programa necesita o genera (por ejemplo, lectura de datos que se
teclean o escritura de datos en un fichero); Proceso conjunto de instrucciones secuenciales; Decisión
es una bifurcación en el flujo del algoritmo en base a que se verifique o no cierta condición (ver la
Sección 5.5).
Los diagramas de flujo suelen ser usados sólo para representar algoritmos pequeños, ya que abarcan
mucho espacio.
Inicio/Fin Lectura/Escritura
Proceso Decisión
No
Sí
Figura 3.1: Símbolos en diagramas de flujo.
Algoritmo 3.2 Calcular una altura en pulgadas (1 pulgada=2.54 cm) y pies (1 pie=12 pulgadas), a
partir de la altura en centímetros, que se introduce por el teclado.
Inicio
1- IMPRIMIR ’Introduce la altura en centímetros:’
2- LEER: altura
3- CALCULAR pulgadas=altura/2.54
4- CALCULAR pies=pulgadas/12
5- IMPRIMIR ’La altura en pulgadas es:’, pulgadas
6- IMPRIMIR ’La altura en pies es:’, pies
Fin
LEER
altura
pulgadas=altura/2.54
pies=pulgadas/12
ESCRIBIR
pulgadas, pies
Fin
Figura 3.2: Diagrama de flujo para determinar la altura de una persona en pulgadas y pies a partir
de la altura en centímetros introducida por el teclado.
...
Instrucción 1 Instrucción 1
Instrucción 2
Instrucción 3 ...
Instrucción 2
Si se verifica una determinada condición, ejecutar una serie de instrucciones y luego seguir
adelante.
Si la condición NO se cumple, NO se ejecutan dichas instrucciones y se sigue adelante.
Conceptos Básicos de Programación 20
...
if condición instrucciones end ...
Sí
Condición Instrucciones
Obsérvese que, en ambos casos (que se verifique o no la condición), los “caminos” bifurcados se
unen posteriormente en un punto, es decir, el flujo del programa recupera su carácter secuencial, y
se continúa ejecutando por la instrucción siguiente a la estructura IF.
Como ejemplo de utilización de este tipo de condicional, se considera el cálculo del valor en un
punto x de una función definida por partes, como, por ejemplo:
Si se verifica una determinada condición, ejecutar una serie de instrucciones (bloque 1).
Si no, esto es, si la condición NO se verifica, ejecutar otra serie de instrucciones (bloque 2).
En otras palabras, en este tipo de estructuras hay una alternativa: se hace una cosa o se hace la otra.
En ambos casos, se sigue por la instrucción siguiente a la estructura IF - ELSE.
Conceptos Básicos de Programación 21
...
if condición bloque-1
else bloque-2 end ... Condición
No
Sí
Figura 3.5: Estructura condicional doble: IF - ELSE.
Bloque 1 Bloque 2
Como ejemplo de utilización de este tipo de estructuras se plantea el problema de calcular las raíces
de una ecuación de segundo grado
ax2 + bx + c = 0
distinguiendo dos casos: que las raíces sean reales o que sean complejas (no se contempla, de
momento, distinguir entre una o dos raíces reales). Ver a continuación el diagrama de flujo (Figura
5.6) y el seudocódigo correspondiente (Algoritmo 5.4).
LEER
A,B,C
CALCULAR
2
D=B-4AC
A2=2A
CALCULAR CALCULAR
DD= D ¿D>0? DD= -D
Sí No
x1=(-B+DD)/A2 Re=-B/A2
x2=(-B-DD)/A2 Im=DD/A2
ESCRIBIR ESCRIBIR
x1,x2 Re, Im
Fin
Figura 3.6: Diagrama de flujo para determinar las raíces reales o complejas de la ecuación de
segundo grado Ax2 + Bx + C = 0.
Conceptos Básicos de Programación 22
En cualquiera de los casos, el flujo del programa continúa por la instrucción siguiente a la
estructura
IF - ELSEIF - ELSE.
La sintaxis en lenguaje MATLAB y el diagrama de flujo, se muestran en la Figura 3.7.
Conceptos Básicos de Programación 23
...
if condicion-1 bloque-1
Condición 1 Bloque 1
elseif condicion-2 bloque-2 SÍ
else bloque-3 end ... No
Condición 2 Bloque 2
SÍ
Figura 3.7: Estructura condicional múltiple: IF- No ELSEIF
- ELSE.
Bloque 3
En la estructura IF - ELSEIF - ELSE se puede multiplicar la cláusula ELSEIF, obteniéndose así una
“cascada” de condiciones, como se muestra en el organigrama, cuyo funcionamiento es claro. En
este tipo de estructura condicional, la cláusula ELSE junto con su bloque de instrucciones pueden
no estar presente.
Las distintas estructuras condicionales descritas pueden ser anidadas, es decir, puede incluirse una
estructura IF (de cualquier tipo), como parte de las instrucciones que forman el bloque de uno de
los casos de otro IF. Como es lógico, no puede haber solapamiento. Cada estructura IF debe tener
su propio fin (end).
if condición-1
instrucciones-1
else
if condición-2
instrucciones-2
else
if condición-3
instrucciones-3
else
instrucciones-k
end if
end if
end if
Conceptos Básicos de Programación 24
Para ello se utiliza una variable de control del bucle, llamada también índice, que va recorriendo
un conjunto pre-fijado de valores en un orden determinado. Para cada valor del índice en dicho
conjunto, se ejecuta una vez el mismo conjunto de instrucciones.
En la Figura 3.8 se han representado la forma de escribir esta estructura en MATLAB y el
organigrama correspondiente: el bloque de instrucciones se ejecuta una vez para cada valor del
índice, que va tomando sucesivamente el valor de cada componente del vector V, de longitud N.
Conceptos Básicos de Programación 25
k > N
TRUE
FALSE
Figura 3.8: Repetición indexada: sintaxis MATLAB y diagrama índice=V(k)
de flujo. El índice del bucle recorre los valores de un vector V
de longitud N.
Instrucciones
k = k+1
Como ejemplo de utilización de la estructura FOR, véanse los Algoritmos 3.8 y 3.9 para calcular la
suma de los n primeros números impares.
Nota 3.7
a) El valor de la variable de control índice puede ser utilizado o no dentro del conjunto de
instrucciones que forman parte del cuerpo del FOR, pero no debe ser modificado.
b) El conjunto de valores que debe recorrer el índice puede ser vacío (N=0). En ese caso, el
bloque de instrucciones no se ejecuta ninguna vez.
c) Las estructuras FOR e IF pueden “anidarse”, es decir, incluir una dentro de la otra, con la
restricción (de sentido común) de que la interior tiene que estar completamente contenida en uno
de los bloques de instrucciones de la otra. Véase, como ejemplo, el Algoritmo 5.10.
Algoritmo 3.8 Dado un entero, n, calcular la suma de los n primeros números impares.
Inicio LEER n
HACER suma=0
Para i= 1, 3, 5, ..., 2*n-1 HACER
suma=suma+i
Fin Para
IMPRIMIR ’La suma vale:’, suma Fin
Conceptos Básicos de Programación 26
Inicio LEER n
HACER suma=1
HACER ter=1
Para k= 1, 2, ..., n
HACER ter=ter/2
HACER suma=suma+ter
Fin Para
IMPRIMIR ’La suma vale : ’, suma Fin
Algoritmo 3.10 Dado un número natural, n, imprimir la lista de sus divisores, en orden
decreciente.
Inicio LEER n
IMPRIMIR ’ Lista de divisores del numero: ’, n
Para i=ParteEntera(n/2) hasta 2 (incremento -1)
Si resto(n/i)=0 IMPRIMIR i
Fin Si Fin
Para
IMPRIMIR 1 Fin
...
while expresión-lógica instrucciones end ...
Condición
FALSE
TRUE
Figura 3.9: Estructura repetitiva WHILE: sintaxis MATLAB y
diagrama de flujo. Instrucciones
Algoritmo 3.11 Imprimir de forma ascendente los 100 primeros números naturales.
Inicio i=1
Mientras que i ≤ 100
IMPRIMIR i
HACER i=i+1
Fin Mientras Fin
Las instrucciones para poner esto en práctica tienen nombres diversos en los distintos lenguajes de
programación. En MATLAB, la primera opción se implementa con la instrucción BREAK y la segunda
Conceptos Básicos de Programación 28
con la instrucción CONTINUE. Ambas pueden utilizarse tanto para romper un ciclo FOR como un
ciclo WHILE. Cuando se utiliza la orden BREAK dentro de un ciclo FOR, el ´índice del bucle conserva,
fuera del mismo, el último valor que tomó.
Condición
WHILE FALSE Condición
TRUE WHILE FALSE
TRUE
Instrucciones-1
Instrucciones-1
TRUE
Condición BREAK TRUE Condición
ruptura CONTINUE
ruptura
FALSE FALSE
Instrucciones-2 Instrucciones-2
El diagrama de flujo correspondiente a una de estas estructuras (con cuatro casos) se presenta en
la Figura 3.12.
switch expresión
case valor-1 instrucciones caso 1 Valor
Expresión
case valor-2 instrucciones caso 2 ...
case {valores...}
instrucciones caso k otherwise Caso 1 Caso 2 Caso k otherwise
instrucciones ....
end Instrucs. Instrucs. Instrucs. Instrucs.
caso 1 caso 2 caso k "otro caso"
Figura 3.12: Estructura de elección de caso SWITCH: sintaxis MATLAB y diagrama de flujo.
Conceptos Básicos de Programación 29
En cada uno de los casos, el valor correspondiente puede ser o bien un sólo valor, o bien un conjunto
de valores, en cuyo caso se indican entre llaves. La cláusula OTHERWISE y su correspondiente
conjunto de instrucciones puede no estar presente. El funcionamiento es el siguiente:
Obsérvese que se ejecuta, como máximo el conjunto de instrucciones de uno de los casos, es decir,
una vez que se ha verificado un caso y se ha ejecutado su conjunto de instrucciones, no se testea el
resto de casos, ya que se abandona la estructura. Obviamente, si la cláusula OTHERWISE no está
presente, puede ocurrir que no se dé ninguno de los casos.
Como ejemplo de utilización, se presenta el mismo proceso del Algoritmo 5.6, pero utilizando la
sentencia SWITCH.
nombre(argumentos de entrada)
Aquí, nombre es el nombre que se quiere dar a la función, para identificarla. Los argumentos de
entrada y los argumentos de salida son nombre de variable que hacen el papel de las variables
mudas en la definición de una función matemática: símbolos para describir la función. En
programación reciben, también, el nombre de variables mudas (de entrada o de salida).
Los argumentos de entrada y de salida, cuando hay varios, se separan por comas. Puede no haber
argumentos de entrada.
Las variables definidas dentro de una función son variables locales, en el sentido de que son
inaccesibles desde “fuera” de esta función. Se puede decir que pertenecen al espacio de trabajo
propio de la función y no son vistas desde otros espacios de trabajo. Por ejemplo, si se utiliza esta
función desde la línea de comandos de Matlab, y se tiene, en el espacio de trabajo de Matlab, una
variable de nombre, por ejemplo, w, esta variable y la w de la función son distintas: se refieren a
una posición diferente en memoria.