Tema3 Article 22 23

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

Programación Científica

Grado de Física, curso 1

Elementos de programación

Texto de las transparencias

Ánálisis Matemático
Ciencias de la Computación

Universidad de Córdoba
Dpto. Informática y Análisis Numérico

©2022-23
Índice
1. Algoritmos y programas 2

2. Estructura secuencial 5

3. Estructuras condicionales 6
3.1. Estructura condicional simple . . . . . . . . . . . . . . . . . . . . 7
3.2. Estructura condicional doble . . . . . . . . . . . . . . . . . . . . 7
3.3. Estructura condicional múltiple . . . . . . . . . . . . . . . . . . . 8

4. Estructuras repetitivas 10
4.1. Estructura de repetición indexada . . . . . . . . . . . . . . . . . . 10
4.2. Estructura de repetición condicional . . . . . . . . . . . . . . . . 12
4.3. Ruptura de ciclos de repetición . . . . . . . . . . . . . . . . . . . 13
4.4. Estructura de elección entre varios casos . . . . . . . . . . . . . . 14

5. Funciones y Procedimientos 15
5.1. Funciones externas . . . . . . . . . . . . . . . . . . . . . . . . . 15
5.2. Procedimientos o subrutinas . . . . . . . . . . . . . . . . . . . . 17

Contenido

Índice

1. Algoritmos y programas

Algoritmos
La palabra algoritmo se deriva de la traducción al latín de la palabra árabe
alkhowarizmi, nombre de un matemático y astrónomo árabe que escribió un
tratado sobre manipulación de números y ecuaciones en el siglo IX.
Algoritmo: Método de resolución de un problema en un número finito de
pasos.
No es la resolución de un problema para unos datos particulares.
Es la resolución de todos los problemas de un tipo, sean cuales sean sus datos
de entrada.
El algoritmo debe contemplar todas las alternativas lógicas posibles que las
distintas combinaciones de datos de entrada puedan presentar.
A cada paso del algoritmo se le llama sentencia o instrucción.

2
Programas

Un programa es la expresión de un algoritmo en un lenguaje de programa-


ción entendible por el ordenador.

El desarrollo de un programa se basa en un concepto llamado ciclo de vida.


Son una serie de etapas que hay que seguir secuencialmente:

1. Análisis del problema


2. Diseño del algoritmo
3. Codificación
4. Prueba y depuración
5. Documentación

(1) Análisis del problema

Una vez que se ha comprendido lo que se desea del ordenador, es necesario


definir:

• Los datos de entrada.


• Cual es la información que se desea producir, la salida.
• Los métodos y fórmulas que se necesitan para procesar los datos.

(2) Diseño del algoritmo

El diseño del algoritmo se debe hacer escribiéndolo a mano.

Si el problema es largo se debe estructurar en diferentes subproblemas.

Las características de un buen algoritmo son:

• Debe tener un punto particular de inicio.


• Debe estar bien definido, no debe permitir ambigüedades.
• Debe ser general, es decir, soportar la mayoría de las variantes que se
puedan presentar en la definición del problema.
• Debe ser finito en tamaño y tiempo de ejecución.

3
(3) Codificación
La codificación es la operación de escribir el código fuente.

Es decir, consiste en transcribir el algoritmo en una serie de instrucciones


entendibles por el ordenador.

El código fuente se escribe en un lenguaje de alto nivel (intérprete o compi-


lador).

La escritura se puede hacer con cualquier editor de textos y el fichero se


guarda sin formato.

(4) Prueba y depuración


Los errores que se pueden cometer dentro de la programación de ordena-
dores son muchos y aumentan considerablemente con la complejidad del
problema.

Los errores más comunes son los sintácticos y los lógicos.

Los errores sintácticos, generalmente, no permiten que el programa se eje-


cute.

Los lógicos, son los más difíciles de detectar, ya que el programa se puede
ejecutar, pero los resultados son incorrectos.

El proceso de identificar y eliminar errores, para dar paso a una solución


correcta se llama depuración.

La prueba consiste en ejecutar el programa con diferentes datos de entrada,


para resolver un problema del cual se conoce previamente la solución.

(5) Documentación
Es la guía escrita que explica todo lo referente al programa, lo que resuelve,
cómo lo resuelve, etc.

La documentación sirve para ayudar a comprender o usar un programa o para


facilitar futuras modificaciones (mantenimiento).

Hay que pensar en que un programa, en muchas ocasiones, lo usarán perso-


nas diferentes a las que lo crearon.

4
Descripción de algoritmos
Para describir un algoritmo usaremos un seudocódigo.

Un seudocódigo describe un algoritmo de forma similar a un lenguaje de programa-


ción pero de forma más parecida al lenguaje natural.

No existen reglas para escribir un seudocódigo, depende del programador.

En la asignatura usaremos
• Sangrías con objeto de identificar más claramente los distintos bloques de algunas construcciones.
• Para el operador de asignación, utilizaremos el símbolo =.
• La lectura de datos (el ordenador recibe datos de algún sitio) la denotaremos por ENTRADA.
• La salida de datos (el programa escribe información en algún medio) la denotaremos por SALI-
DA.
• En rojo, escribiremos las palabras claves que identifican alguna de las estructuras que veremos
más adelante: para, fin para, si, fin si, . . .
• En verde, precedidos por %, escribiremos los posibles comentarios.

Ejemplo de seudocódigo
Algoritmo 1.1: Cómo hacer un salmorejo
DATOS: Tomates,pan,aceite,ajos,vinagre,agua,sal
R ESULTADO: Un buen salmorejo
ENTRADA: Tomates,pan,aceite,ajos,vinagre,agua,sal
1 % La cantidad de cada ingrediente depende del gusto
2 Pelar los ajos y los tomates
3 Poner en la batidora los tomates y los ajos
4 Añadir sal, vinagre, aceite y un poco de pan
5 mientras no esté bien batido todo hacer
6 seguir batiendo
7 si tiene poco aceite entonces
8 añadir aceite
9 fin si
10 si está muy líquido entonces
11 añadir pan
12 fin si
13 fin mientras
14 Rectificar de sal y vinagre
SALIDA: Un cuenco de salmorejo

Tipos de programas

Según la forma de trabajo, los programas pueden ser:

• Lineales o secuenciales: las instrucciones se ejecutan en el mismo or-


den en que se han codificado.

5
• Cíclicos: un grupo de líneas se ejecutan un número determinado de
veces.
• Alternativos: existen ciertas condiciones que provocan la ejecución de
fases diferentes del programa dependiendo de que éstas se cumplan o
no.

2. Estructura secuencial

Estructura secuencial

Es aquella en la que una acción (instrucción) sigue a la otra en el orden en el


que están escritas.

...
instrucción 1
instrucción 2
instrucción 3
...

Ejemplo de estructura secuencial


Algoritmo 2.1: Cálculo de la altura de una persona en pulgadas y pies.
DATOS: Altura de una persona en centímetros
R ESULTADO: Altura de la persona en pulgadas y pies
ENTRADA: Alturacm
1 % 1 pulgada= 2,54 cm
2 % 1 pie = 12 pulgadas
3 Alturapulgadas = Alturacm /2,54
4 Alturapies = Alturapulgadas /12
SALIDA: ’Altura en pies’, Alturapies
SALIDA: ’Altura en pulgadas’, Alturapulgadas

3. Estructuras condicionales

Estructuras de control

Las estructuras de control permiten modificar el orden secuencial de un pro-


grama.

Hay dos categorías de estructuras de control:

6
• Condicionales o bifurcaciones: permiten que se ejecuten conjuntos dis-
tintos de instrucciones, en función de que se verifique o no determinada
condición.
• Bucles o repeticiones: permiten que se ejecute repetidamente un con-
junto de instrucciones, bien un número predeterminado de veces, o bien
hasta que se verifique una determinada condición.

En términos de un lenguaje de programación, que se verifique o no una


condición se traduce en que una (adecuada) expresión lógica tome el valor
VERDADERO o tome el valor FALSO.

3.1. Estructura condicional simple

Estructura condicional simple

Este es el tipo más sencillo de estructura condicional. Sirve para implementar


acciones condicionales del tipo siguiente:

• Si se verifica una determinada condición, entonces se ejecutan una


serie de instrucciones y luego se sigue adelante.
• Si la condición NO se cumple, NO se ejecutan dichas instrucciones y
se sigue adelante.

En ambos casos, 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
esta estructura.

Estructura condicional simple


...
si condiciones entonces
instrucciones
fin si
...

Ejemplo de estructura condicional simple

7
Algoritmo 3.1: Cálculo del producto y el cociente de dos números
DATOS: Números a y b
R ESULTADO: Producto a ∗ b y cociente a/b cuando b ̸= 0
ENTRADA: a, b
1 % Se calcula la división a/b si b ̸= 0
2 % Si b = 0 sólo se calcula el producto
3 si b ̸= 0 entonces
4 cociente = a/b
SALIDA: ’El cociente es’, cociente
5 fin si
6 producto = a ∗ b
SALIDA: ’ El producto es’, producto

3.2. Estructura condicional doble

Estructura condicional doble

Este tipo de estructura permite implementar condicionales en los que hay


dos acciones alternativas:

• Si se verifica una determinada condición, entonces se ejecutan un


serie de instrucciones (bloque 1).
• Si no, esto es, si la condición NO se cumple, se ejecutan 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.

Estructura condicional doble


...
si condiciones entonces
bloque 1
si no
bloque 2
fin si
...

Ejemplo de estructura condicional doble

8
Algoritmo 3.2: Cálculo de las raíces de ax2 + bx + c = 0
DATOS: Coeficientes a, b, c
R ESULTADO: Raíces de la ecuación ax2 + bx + c = 0
ENTRADA: a, b, c
1 % El algoritmo distingue el caso de raíces reales y complejas
2 d = b2 − 4 ∗ a ∗ c
3 dosa = 2 ∗ a
4 si d ≥ 0 entonces

5 dd = d
6 x1 = (−b + dd)/dosa
7 x2 = (−b − dd)/dosa
SALIDA: ’La ecuación tiene raíces reales’, x1 , x2
8 si no √
9 dd = −d
10 Re = −b/dosa
11 Im = dd/dosa
SALIDA: ’La ecuación tiene raíces complejas conjugadas’
SALIDA: ’Parte real’, Re
SALIDA: ’Parte imaginaria’, Im
12 fin si

3.3. Estructura condicional múltiple

Estructura condicional múltiple


Este tipo de estructura permite implementar condicionales más complicados
en los que se “encadenan” condiciones en la forma siguiente :
• Si se verifica la condición 1, entonces se ejecuta el bloque 1.
• Si no se verifica la condición 1, pero si se verifica la condición
2 se ejecuta el bloque 2.
• En general, si no se verifican las n−1 condiciones anteriores,
pero si se verifica la condición n se ejecuta el bloque n.
• Si no se han verificado ninguna de las condiciones, se ejecuta el último
bloque.
En cualquier caso, se sigue por la instrucción siguiente a la estructura.

Estructura condicional múltiple


...
si condición 1 entonces
bloque 1
si no si condición 2 entonces
bloque 2
si no si condición 3 entonces
bloque 3
...
si no
último bloque
fin si
...

9
Ejemplo de estructura condicional múltiple
Algoritmo 3.3: Determina el signo de un número
DATOS: Número x
R ESULTADO: Signo de x
ENTRADA: x
1 si x > 0 entonces
SALIDA: ’El número es positivo’
2 si no si x < 0 entonces
SALIDA: ’El número es negativo
3 si no
SALIDA: ’El número es nulo’
4 fin si

Estructuras condicionales anidadas


Las distintas estructuras condicionales descritas pueden ser anidadas.
Es decir, puede incluirse una estructura condicional de cualquier tipo, como
parte de las instrucciones que forman el bloque de uno de los casos de otra
estructura condicional.
Como es lógico, no puede haber solapamiento. Cada estructura debe tener
su propio fin.

Ejemplo de estructuras condicionales anidadas


Algoritmo 3.4: Dados dos números reales, a y b, y el símbolo, S, de un operador aritmético
(+, −, ∗, /), imprime el resultado de a S b
DATOS: Números a, b, Operación S
R ESULTADO: a S b
ENTRADA: a, b, S
1 si S =’+’ entonces
SALIDA: ’El resultado es’, a + b
2 si no si S =’−’ entonces
SALIDA: ’El resultado es’, a − b
3 si no si S =’∗’ entonces
SALIDA: ’El resultado es’, a ∗ b
4 si no si b = 0 entonces
5 si a = 0 entonces
SALIDA: ’El resultado es’, NaN (indeterminación)
6 si no
SALIDA: ’El resultado es’, Inf (infinito)
7 fin si
8 si no
SALIDA: ’El resultado es’, a/b
9 fin si

4. Estructuras repetitivas
4.1. Estructura de repetición indexada

Estructura de repetición indexada

10
Este tipo de estructura permite implementar la repetición de un cierto con-
junto de instrucciones un número predeterminado de veces.

Para ello se utiliza una variable de control del bucle, llamada también índice,
que va recorriendo un conjunto prefijado y ordenado de valores.

Para cada valor del índice en dicho conjunto, se ejecuta una vez el mismo
conjunto de instrucciones.

Estructura de repetición indexada

En la mayoría de los casos, el conjunto de valores que el índice debe recorrer


viene definido por un valor inicial, un valor final y un incremento. Si el
incremento es positivo:

1. Inicialmente, se hace índice = valor inicial.


2. Si índice es menor o igual que valor final, se ejecuta el conjunto de
instrucciones. Si no, se termina la ejecución del bucle.
3. Se incrementa el valor del índice, es decir, se hace índice = índice +
incremento y se repite la etapa anterior hasta que, en alguna iteración,
se termina la ejecución del bucle.
4. Cuando se termina la ejecución del bucle, el flujo del programa conti-
núa por la instrucción siguiente al bucle.

Si el incremento es negativo, el funcionamiento es el mismo, sólo que cam-


biando “menor o igual” por “mayor o igual” en el paso 2. En este caso, el
índice recorrería un conjunto decreciente de valores.

Estructura de repetición indexada


...
Para índice=vini hasta vfin con salto incremento hacer
instrucciones
fin para
...

Estructura de repetición indexada

El valor de la variable de control indice puede ser utilizado o no dentro del


conjunto de instrucciones que forman parte del cuerpo del bucle, pero no
debe ser modificado.

11
valor inicial, valor final e incremento pueden ser constantes, variables o ex-
presiones y normalmente tomarán valores enteros.

Sus valores se determinan al comienzo del bucle, es decir antes de que nin-
guna instrucción sea ejecutada.

Si, inicialmente, valor final es mayor que valor inicial (recíprocamente, me-
nor que, si el incremento es negativo), entonces el conjunto de instrucciones
no se ejecuta ninguna vez, debido a que ya, en la primera iteración, se ve-
rifica la condición de parada.

Ejemplo de estructura de repetición indexada


Algoritmo 4.1: Calcula el factorial de un número
DATOS: Número natural n
R ESULTADO: Factorial de n
ENTRADA: n
1 % Recordemos que n! = 1 ∗ 2 ∗ · · · ∗ (n − 1) ∗ n
2 fac=1
3 para i=2 hasta n con salto 1 hacer
4 fac=fac*i
5 fin para
SALIDA: ’El factorial es’, fac

Ejemplo de estructuras repetitiva y condicional anidadas


Algoritmo 4.2: Dado un número natural, n, imprime la lista de sus divisores, en orden decreciente.
DATOS: n
R ESULTADO: Divisores de n
ENTRADA: n
SALIDA: ’Lista de divisores del número’, n
SALIDA: n
1 para i=ParteEntera(n/2) hasta 2 con salto -1 hacer
2 si mod(n,i)=0 entonces
SALIDA: i
3 fin si
4 fin para
SALIDA: i

4.2. Estructura de repetición condicional

Estructura de repetición condicional

Permite implementar la repetición de un mismo conjunto de instrucciones


mientras que se verifique una determinada condición.

Al comienzo de cada iteración se evalúa una expresión-lógica.

12
Si el resultado es VERDADERO, se ejecuta el conjunto de instrucciones y se
vuelve a iterar.

Si el resultado es FALSO, se detiene la ejecución del bucle y el programa se


sigue ejecutando por la instrucción siguiente a él.

Estructura de repetición condicional


...
mientras expresión-lógica hacer
instrucciones
fin mientras
...

Ejemplo de estructura de repetición condicional


Algoritmo 4.3: Imprime los n primeros números naturales.
DATOS: Número natural n
R ESULTADO: Imprime los números naturales de 1 a n
ENTRADA: n
1 k=1
2 mientras k ≤ n hacer
SALIDA: k
3 k=k+1
4 fin mientras

4.3. Ruptura de ciclos de repetición

Ruptura de ciclos de repetición

En ocasiones es necesario interrumpir la ejecución de un ciclo de repetición


en algún punto interno del bloque de instrucciones que se repiten. Lógica-
mente, ello dependerá de que se verifique o no alguna condición.

La interrupción puede hacerse de dos formas:

1. Abandonando el ciclo de repetición definitivamente.


2. Abandonando la iteración en curso, pero comenzando la siguiente.

13
Ruptura de ciclos de repetición
Las instrucciones para poner esto en práctica tienen nombres diversos en los
distintos lenguajes de programación.
En M ATLAB, la primera opción se implementa con la instrucción BREAK y
la segunda con la instrucción CONTINUE.
• BREAK abandona el ciclo de repetición definitivamente.
• CONTINUE abandona la iteración en curso, pero comenzando la si-
guiente.
Ambas pueden utilizarse tanto para romper un ciclo de repetición indexada
como un ciclo de repetición condicional.
Cuando se utiliza la orden BREAK dentro de un ciclo repetición indexada, el
índice del bucle conserva, fuera del mismo, el último valor que tomó.

4.4. Estructura de elección entre varios casos

Estructura de elección entre varios casos


Este tipo de estructura permite decidir entre varios caminos posibles, en fun-
ción del valor que tome una determinada instrucción.

...
Según caso expresión hacer
caso valor 1
instrucciones caso 1
caso valor 2
instrucciones caso 2
...
caso valor k
instrucciones casok
En otro caso
instrucciones
fin Según caso
fin Según caso
...

Estructura de elección entre varios casos


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 En otro caso y su correspondiente conjunto de instrucciones pue-
de no estar presente.

14
Estructura de elección entre varios casos
El funcionamiento es el siguiente:

1. Al comienzo se evalúa la expresión.


2. Si expresión toma el valor (los valores) especificados junto a la primera cláusula caso, se ejecuta
el conjunto de instrucciones de este caso y después se abandona la estructura, continuando por la
instrucción siguiente al fin Según caso.
3. Se repite el procedimiento anterior, de forma ordenada, para cada una de las cláusulas caso que
siguen.
4. Si la cláusula otro caso está presente y la expresión no ha tomado ninguno de los valores ante-
riormente especificados, se ejecuta el conjunto de instrucciones correspondiente.

Notemos 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 En otro caso no está presente, puede
ocurrir que no se dé ninguno de los casos.

Ejemplo de elección entre varios casos


Algoritmo 4.4: Dados dos números reales, a y b, y el símbolo, S (operador +, −, ∗, /), da el resultado de a S b
DATOS: Números a, b, Operación S
R ESULTADO: a S b
ENTRADA: a, b, S
1 Según caso S hacer
2 caso ’+’
SALIDA: ’El resultado es’, a + b
3 caso ’-’
SALIDA: ’El resultado es’, a − b
4 caso ’*’
SALIDA: ’El resultado es’, a ∗ b
5 caso ’/’
6 si b = 0 entonces
7 si a = 0 entonces
SALIDA: ’El resultado es’, NaN (indeterminación)
8 si no
SALIDA: ’El resultado es’, Inf (infinito)
9 fin si
10 si no
SALIDA: ’El resultado es’, a/b
11 fin si
12 En otro caso
SALIDA: ’El operador no se reconoce
13 fin Según caso
14 fin Según caso

5. Funciones y Procedimientos

Funciones y Procedimientos

Con lo que hemos visto hasta ahora se pueden escribir programas sencillos
y no demasiado largos.

Pero es necesario de disponer de otros recursos ya que:

15
1. Por una parte, puede haber en la resolución de un problema, partes que
se repitan.
2. Por otra parte, es conveniente partir la resolución de un problema com-
plejo en una serie de etapas más cortas que se concatenan para resolver
el problema global.

Por estos motivos se introducen otros dos recursos que son las funciones y
los procedimientos o subrutinas.

Ambos son trozos de código que se escriben separadamente y que realizan


cálculos o tareas específicas.

5.1. Funciones externas

Función

Una función es un subprograma que recibe como argumentos o parámetros,


datos de tipos numérico o no numérico, y devuelve un único resultado.

Todos los lenguajes de programación tienen funciones incorporadas que se


denominan funciones intrínsecas (funciones trigonométricas, exponencial,
logarítmica, . . . )

Pero también tienen la posibilidad de que el usuario defina sus propias fun-
ciones, que reciben el nombre de funciones externas.

Una función es llamada por medio de su nombre, en una sentencia de asig-


nación o en una sentencia de salida.

Función
funcion nombrefuncion (lista de parámetros)
inicio
cuerpo de la función
nombrefuncion=valor_a_devolver
fin

La forma de llamar a una función es


nombrefuncion(lista de parámetros actuales)

16
Función
Cada vez que se llama a una función desde el algoritmo principal se establece una correspondencia entre
los parámetros formales y los parámetros actuales.

Una llamada a la función implica los siguientes pasos:

1. A cada parámetro formal se le asigna el valor real de su correspondiente parámetro actual.


2. Se ejecuta el cuerpo de acciones de la función.
3. Se devuelve el valor de la función y se retorna al punto de llamada.

Las variables definidas dentro de una función son variables locales, en el sentido de que son inaccesibles
desde “fuera” de esta función.

Las funciones pueden tener muchos argumentos, pero solamente un resultado: el valor de la función.

Esto limita su uso, aunque se encuentran con frecuencia en cálculos científicos. Un concepto más potente
es el proporcionado por los procedimientos que veremos a continuación.

5.2. Procedimientos o subrutinas

Procedimiento o subrutina

Un procedimiento (también llamado subrutina) es un subprograma que rea-


liza una tarea especifica.

Puede no recibir, o recibir uno o varios valores del programa que lo llama y
no devolver ninguno, uno o varios valores a dicho programa.

Un procedimiento esta compuesto de un grupo de sentencias a las que se


asigna un nombre (identificador) y constituye una unidad de programa.

La tarea determinada al procedimiento se ejecuta siempre que se encuentra


el nombre del procedimiento.

Ningún valor está asociado con el nombre del procedimiento; por consi-
guiente, no puede ocurrir en una expresión.

Procedimiento
procedimiento nombreprocedimiento (lista_de_variables)
inicio
instrucciones del procedimiento
fin

17
18

También podría gustarte