Vous êtes sur la page 1sur 30

Francisco Grimaldo Moreno

Ariadna Fuertes Seder

Tema 2

Algoritmos y programas

Informtica
Grado en Fsica
Universitat de Valncia

Ariadna.Fuertes@uv.es
Francisco.Grimaldo@uv.es
1
Concepto de algoritmo
Un algoritmo es:

Una sucesin finita de pasos o acciones,

especificadas de forma no ambigua y

que se ejecutan en un tiempo finito, y

que determinan qu operaciones se deben realizar
para procesar datos con un determinado objetivo
(llegar a la resolucin de un problema)

2
Resolucin de un problema
Los pasos a seguir son:
1) Anlisis del problema:

Definicin del problema.

Especificaciones de entrada.

Especificaciones de salida.

2) Diseo/bsqueda del algoritmo:



Seleccin/mejora del algoritmo.

Diseo modular o descendente.

Refinamiento por pasos.

3) Programacin del algoritmo:



Codificacin del programa en:
- Pseudocodigo.
- Organigramas o diagramas de flujo.

4) Traduccin/ejecucin/comprobacin del programa.


3
Ejemplo: Bsqueda nmeros primos
Problema: Buscar los nmeros primos entre 2 y un cierto valor MAX.
1) Anlisis del problema:

Qu es un nmero primo? Qu entradas tenemos?Qu queremos obtener como
resultado?
2) Bsqueda del algoritmo:

Mtodo 1:
1. X = 2
2. I = 2
3. Hacer ( X/I )
4. Si I es menor que X y la divisin es entera entonces X no es primo y pasar a 7
5. Si I es igual que X entonces X es primo y pasar a 7
6. Incrementar I y pasar a (3).
7. Si X es ms pequeo que MAX entonces incrementar X y pasar a (2).
8. FIN
Mejora del algoritmo: parar la divisin si la I es mayor que X/2

Mtodo 2: Criba de Eratstenes
1. Poner todos los nmeros entre 2 y MAX uno detrs de otro.
2. Si hay nmeros sin tachar, el primero de ellos es primo
3. Tachar de la lista todos los mltiplos del primer nmero
4. Borrar el primer nmero
5. Borrar los tachados y pasar a (2).
3) Programacin + 4) Traduccin/ejecucin/comprobacin

4
Ejemplo: Suma sucesin aritmtica
Anlisis del problema:

Descripcin del problema: a1 + a2 + a3 + ... + an donde a2 = a1 + d
y en general an = a1 + (n-1)*d

Entradas: Primer termino (a1)
Distancia (d)
n
Nmero de trminos (n)

Salida: Suma de todos los terminos.
i 1
ai S n
Bsqueda del algoritmo:

Mtodo 1: Calcular los trminos e ir sumndolos poco a poco.
1. Sn 0
2. i 1
3. X a1
4. Si i es ms grande que n, entonces saltar a (9).
5. Sn Sn + X
6. X X + d
7. i i + 1
8. Volver a (4).
9. Mostrar el resultado (Sn).
10. FIN.

Mtodo 2: n (n 1)
1. Aplicacin de la frmula: S n n a1 d
2
2. Mostrar el resultado (Sn).
3. FIN. 5
Criterios en programas
Partes importantes en la realizacin de un
programa:

1.- Funcionamiento del programa


2.- Claridad
indentado, sangras
comentarios (al usuario y al corrector).

3.Estilo de programacin:
buen y correcto uso de variables
algoritmos usados
uso de funciones y procedimientos.
6
Ejemplo: Mltiplos de cinco
Problema:

Calcular la cantidad de mltiplos de cinco que existen
entre 0 y un n introducido por teclado.

Mtode 1: Mtodo 2:
1. DIV 5 1. DIV 5
2. Leer (MAX) 2. Leer (MAX)
3. I 0 3. I parte entera de
4. Si DIV es mayor que MAX, MAX/DIV
ir a (8). 4. Mostrar (I).
5. I I + 1 5. FIN.
6. DIV DIV + 5
7. Ir a (4).
8. Mostrar (I).
9. FIN.
7
Programacin del algoritmo
El pseudocdigo es una manera de escribir algoritmos de
forma poco estricta (con una sintaxis relajada) o
estructuras de datos poco detalladas, pero intentando
acercar las ideas del algoritmo a estructuras y sintaxis
parecidas a las de los lenguajes de alto nivel en los que
vamos a programar el algoritmo.

Los organigramas o diagramas de flujo son dibujos que


representan de manera grfica tanto las tareas como la
sucesin de tareas del algoritmo. Las tareas se
representan mediante rectngulos, rombos y romboides y
el flujo de tareas mediante flechas que enlazan las
diferentes tareas.

8
Diseo de Organigramas

Las instrucciones se Las entradas y salidas en


representan en rectngulos: romboides :

Las condiciones en rombos: El inicio, el final y los puntos


de reunin de flujo en
crculos:

9
Ejercicio
Problema:

Escribir un algoritmo que calcule los cuadrados de los
nmeros enteros positivos hasta que el cuadrado sea
mayor o igual que 100.

Representar el algoritmo anterior mediante


organigramas.

10
Concepto de variable/constante

Variable: direccin de memoria cuyo contenido


puede cambiar durante la ejecucin de un
programa

Constante: direccin de memoria cuyo contenido


permanece constante durante la ejecucin de un
programa.

11
mbito de las variables

Variable local: Son propias de cada mdulo y slo


existen mientras dura la ejecucin del mdulo.
Cuando la ejecucin del mdulo desaparece, las
variables locales desaparecen

Variable global: Son variables que existen durante


toda la ejecucin del algoritmo, de manera que se
puede acceder a ellas en cualquier momento de la
ejecucin del algoritmo

12
Estructuras de control
Llamaremos estructuras de control a las acciones
que tienen como objeto marcar el orden de
ejecucin de las instrucciones y que van a
servirnos para escribir concisamente y sin
ambigedades los algoritmos.
Todas las estructuras de control que
estudiaremos estarn compuestas de unos
elementos bsicos (lxico) y una estructura
(sintaxis.).
Tipos: Secuenciales, Selectivas, Repetitivas.

13
Estructuras Secuenciales
En una estructura secuencial una instruccin
sigue a otra en una secuencia lineal:

Pseudocdigo: Organigrama:
I
Inicio
Tarea 1 Tarea 1
Tarea 2
Tarea 2
...
Tarea n ...
Fin Tarea n

F
14
Ejemp. de estructuras secuenciales
Producto escalar de dos vectores bidimensionales:
(ax, ay) (bx, by) = ax * bx + ay * by
Pseudocdigo: Organigrama:
I
Inicio
Leer (ax) leer (ax)
Leer (ay)
Leer (bx) leer (ay)
Leer (by) leer (bx)
prod_esc ax*bx+ay*by
Escribir (prod_esc) leer (by)
Fin prod_escax*bx+ay*by

escribir (prod_esc)

F 15
Estructuras selectivas
Son las que toman una cierta direccin dentro del
flujo del programa en funcin de una condicin o
el valor de una variable.

Alternativas simples:

Se realiza una accin o conjunto de acciones si se
cumple una determinada condicin.

Pseudocdigo: Organigramas:
...
Si (condicin) entonces S
condicin?
Acciones
No Acciones
Fin_si

16
Ejemplo de selectivas simples
Ordenar dos nmeros ledos por teclado.
Pseudocdigo: Organigrama:
I
Inicio
Leer (a) leer (a)
Leer (b) leer (b)
Si (a > b) entonces
aux a a > b?
S auxa
ab
No ab
b aux
Fin_si baux
Escribir (a)
Escribir (b)
escribir (a)
Fin
escribir (b)

F 17
Estructuras selectivas dobles
Alternativas dobles:

Si una condicin se cumple se realizan unas acciones,
si no se cumple la condicin se realizan otras.

Pseudocdigo: Organigrama:
...
Si (condicin) entonces
Acciones 1 S
condicin?
Sino No Acciones 1
Acciones 2
Acciones 2
Fin_si

18
Ejemplo de selectivas dobles
Dado un nmero, decir si es positivo o no.
Pseudocdigo: Organigrama:
Variables
x: Entero I
Inicio leer (x)
Leer(x)
Si (x < 0) entonces
Escribir(Negativo) x < 0?
S
Si no
Escribir(Positivo) No escribir (Negativo)
Fin_si
escribir (Positivo)
Fin

F
19
Estructuras selectivas mltiples
Alternativas mltiples:

Dependiendo del valor de una variable se realizan
unas acciones u otras.

Pseudocdigo: Organigrama:
...
Segn_sea (variable) hacer
Caso valor1: Acciones1 Valor_1 variable? default
Caso valor2: Acciones2 Valor_n
Valor_2 Accionesx
... Acciones1
Caso valorn: Accionesn
Default: Acciones x Acciones2 ... Accionesn
Fin_segns_sea

20
Ejemplo de selectivas mltiples
Realizar un programa que pida dos nmeros y una operacin
(suma, resta, multiplicacin o divisin) y nos de el resultado
de operar los nmeros con esa operacin.
Pseudocdigo: Organigrama: I
Inicio
Escribir (Dame nmeros?) leer (a,b)
Leer (x,y)
Escribir (Operaci?) leer (op)
Escribir (1-Suma, 2-Resta)
EscrEscribiriure (3-Multi, 4-Divisio) 1 default
op?
Leer (op) 2
Segn_sea (op) hacer resa+b 3 4
Caso 1: res a + b
Escribir (res) escribir (res) resa*b resa/b
Caso 2: res a b
Escribir (res)
resa-b escribir (res) escribir (res)
Caso 3: res a * b
escribir (res)
Escribir (res)
Caso 4: res a / b escribir (No)
Escribir (res)
Default: Escribir (Op. No vlida)
Fin_segn_sea F
Fin 21
Estructuras repetitivas (bucles)
Un bucle es un conjunto de instrucciones del
programa que se ejecutan repetidamente o bien
un nmero determinado de veces, o bien mientras
se cumpla una determinada condicin (hay que
tener cuidado con los bucles infinitos).
Todo bucle contiene los siguientes elementos
(aunque no necesariamente en ese orden):
Iniciacin de las variables referentes al bucle.
Decisin (seguimos con el bucle o terminamos.)
Cuerpo del bucle
Existen tres tipos de bucles:

Desde hasta

Hacer mientras

Mientras hacer.
22
Bucle Desde Hasta
Cuando sabemos el nmero de veces que
queremos que se realice una tarea.
Pseudocdigo: Organigrama:
...
Desde variablev_ini hasta v_fin hacer variablev_ini
Acciones
Fin_Desde
...
variablevariable+1

Acciones
variable < v_fin? S

No

23
Bucle Hacer Mientras
Si sabemos la condicin que hace que se repita la
tarea varias veces.
Las acciones se realizan al menos una vez, antes
de realizar la comprobacin de la condicin.
Pseudocdigo: Organigrama:
...
Hacer
Acciones
Mientras (condicin)
Acciones
...

S
condicin?
No

24
Bucle Mientras Hacer
Parecido al anterior pero la comprobacin se
realiza antes de realizar la tarea
Pseudocdigo: Organigrama:
...
Mientras (condicin)
Acciones
Fin_Mientras
...
Acciones
condicin? S

No

25
Bucles independientes o anidados
Existen dos maneras bsicas de utilizar varios
bucles: de forma anidada y de forma independiente

Bucles independientes: Cuando usamos los bucles uno
detrs de otro. Es decir, nos limitamos a ir haciendo los
bucles de manera que al finalizar uno empezar el
siguiente y de esta forma, las tareas entre los bucles
son independientes.


Bucles anidados: Son bucles que estn dentro de otros
bucles de manera que la ejecucin de los bucles
internos depende de la ejecucin de los bucles
externos.

26
Programacin modular
Las caractersticas bsicas que deben cumplir los
subprogramas o mdulos son:
a) Realizacin de una tarea especfica.
b) Parametrizacin para caracterizar la actuacin de
los mdulos (parmetros).
c) Existen bsicamente dos tipos distintos de
subprogramas:

Las funciones: devuelven el resultado de su actuacin
mediante un nico valor (o ms, si recibe parmetros por
referencia).

Los procedimientos: no devuelven ningn valor (aunque
pueden devolver diversos resultados mediante los
parmetros por referencia). 27
Paso de parmetros a mdulos
Por valor:

Slo se tiene en cuenta el valor del parmetro pasado
al mdulo, de manera que durante la ejecucin del
mdulo se reserva un espacio para ese parmetro y
se copia el valor pasado en ese nuevo espacio.

Cuando acaba la ejecucin del mdulo, el espacio
para el parmetro desaparece.
Por referencia:

Lo que pasamos a la funcin es una referencia al
parmetro que se pasa, de manera que no existe un
espacio reservado para ese parmetro durante la
ejecucin del mdulo.

Cualquier modificacin que realicemos del parmetro
quedar reflejado en el punto desde el que se hizo la
llamada al mdulo.
28
Programacin estructurada
Diremos que estamos realizando una
programacin estructurada cuando:

Empleamos para el diseo de los algoritmos el diseo
descendente y/o modular.

Descomponemos, en funcin del diseo descendente,
el programa en mdulos independientes (prohibida la
utilizacin de variables globales.).

En cualquier caso, slo utilizamos en la escritura de
los algoritmos (y los programas) los tres tipos de
estructuras de control vistas.

29
Recurrencias o recursividad
Es la propiedad de llamar a una funcin desde s
misma o desde otra que ha sido llamada por sta.

Una caracterstica muy importante de la


recursividad es que, igual que en las estructuras
repetitivas, debe de existir un punto o condicin
de fin, que en algn momento detenga la
recursividad.

30

Vous aimerez peut-être aussi