Clase02 T Algoritmo v2

Descargar como pptx, pdf o txt
Descargar como pptx, pdf o txt
Está en la página 1de 47

Computación y Programación

Fundamentos de Informática
[email protected]
Tlf 942818949

1
Metodologías de Programación

Las fases de resolución de un problema con


computadora son:

• Análisis del problema.


• Diseño del algoritmo.
• Codificación.
• Compilación y ejecución.
• Verificación.
• Depuración.
• Mantenimiento.
• Documentación

2
Caracteristicas

Las características más sobresalientes de la resolución de problemas son:


Análisis. El problema se analiza teniendo presente la especificación de los
requisitos dados por el cliente.
Diseño. Una vez analizado el problema, se diseña una solución que conducirá a
un algoritmo que resuelva el problema.
Codificación (implementación). La solución se escribe en la sintaxis del
lenguaje de alto nivel.
Ejecución, verificación y depuración. El programa se ejecuta, se comprueba
rigurosamente y se eliminan todos los errores
Mantenimiento. El programa se actualiza y modifica, cada vez que sea
necesario, de modo que se cumplan
todas las necesidades de cambio de sus usuarios.
Documentación. Escritura de las diferentes fases del ciclo de vida del software,
esencialmente el análisis, diseño y codificación, unidos a manuales de usuario y
de referencia, así como normas para el mantenimiento

3
Algoritmo

4
Herramientas usadas para el Diseño

Las dos herramientas más utilizadas comúnmente para diseñar


algoritmos son:
1. diagramas de flujo y
2. pseudocódigos.

diagrama de flujo (flowchart) es una representación gráfica de


un algoritmo. Los símbolos utilizados han sido normalizados por el
Instituto Norteamericano de Normalización (ANSI), y los más
frecuentemente empleados se muestran en la Figura 2.2, junto con
una plantilla utilizada para el dibujo de los diagramas de flujo
(Figura 2.3).

5
Herramientas usadas para el Diseño

6
Herramientas usadas para el Diseño

El pseudocódigo es una herramienta de programación en la que las


instrucciones se escriben en palabras similares al inglés o español,
que facilitan tanto la escritura como la lectura de programas. En
esencia, el pseudocódigo se puede definir como un lenguaje de
especificaciones de algoritmos.

7
Ejemplo 1

8
Ejemplo 2

9
Codificación

La codificación es la escritura en un lenguaje de programación de la


representación del algoritmo desarrollada en las etapas precedentes.
Dado que el diseño de un algoritmo es independiente del lenguaje de
programación utilizado para su implementación, el código puede ser
escrito con igual facilidad en un lenguaje o en otro.

Para realizar la conversión del algoritmo en programa se deben


sustituir las palabras reservadas en español por sus homónimos en
inglés, y las operaciones/instrucciones indicadas en lenguaje natural
por el lenguaje de programación correspondiente

10
Codificación

La codificación es la escritura en un lenguaje de programación de la


representación del algoritmo desarrollada en las etapas precedentes.
Dado que el diseño de un algoritmo es independiente del lenguaje de
programación utilizado para su implementación, el código puede ser
escrito con igual facilidad en un lenguaje o en otro.

Para realizar la conversión del algoritmo en programa se deben


sustituir las palabras reservadas en español por sus homónimos en
inglés, y las operaciones/instrucciones indicadas en lenguaje natural
por el lenguaje de programación correspondiente

11
Codificación

12
Programación Modular

La programación modular es uno de los métodos de diseño más flexible y


potente para mejorar la productividad de un programa. En programación
modular el programa se divide en módulos (partes independientes), cada
uno de los cuales ejecuta una única actividad o tarea y se codifican
independientemente de otros módulos.

Cada uno de estos módulos se analiza, codifica y pone a punto por


separado. Cada programa contiene un módulo denominado programa
principal que controla todo lo que sucede; se transfiere el control a
submódulos (posteriormente se denominarán subprogramas), de modo
que ellos puedan ejecutar sus funciones; sin embargo, cada submódulo
devuelve el control al módulo principal cuando se haya completado su
tarea.
13
Programación Modular

14
Programación Estructurada

La programación estructurada es una teoría orientada a mejorar la


claridad, calidad y tiempo de desarrollo utilizando únicamente subrutinas o
funciones. Basada en el teorema del programa estructurado propuesto por
Böhm y Jacopini, ha permitido desarrollar software de fácil comprensión.:

Secuencia. La estructura secuencial es la que se da de forma natural en el


lenguaje, porque las sentencias se ejecutan en el orden en el que
aparecen en el programa, es decir, una detrás de la otra.
Selección o condicional. La estructura condicional se basa en que una
sentencia se ejecuta según el valor que se le atribuye a una variable
booleana.
Iteración (ciclo o bucle). La estructura de repetición ejecuta una o un
conjunto de sentencias siempre que una variable booleana sea verdadera.
Para los bucles o iteraciones, los lenguajes de programación usan las
15
estructuras while y for.
Programación orientada a Objetos
La programación orientada a objetos es más moderna, es una
evolución de la programación estructurada

En el paradigma orientado a objetos, el programa se organiza como


un conjunto finito de objetos que contiene datos y operaciones
(funciones miembro o métodos) que llaman a esos datos y que se
comunican entre sí mediante mensajes.

16
Algoritmo

Concepto de algoritmo:
Sucesión explícita de reglas para resolver correctamente un problema
genérico bien definido en un número finito de pasos.

Aspectos básicos a tener presentes a la hora de redactar un algoritmo:

• Explícito: Formal y sin ambigüedades.


• Genérico: Problema cuyos datos son generales.
• Bien definido: Problema perfectamente caracterizado.
• Correcto: Que funcione en todos los casos.
• Número finito de pasos: Debe terminar.

17
Algoritmo

Concepto de algoritmo:
Sucesión explícita de reglas para resolver correctamente un problema
genérico bien definido en un número finito de pasos.

Aspectos básicos a tener presentes a la hora de redactar un algoritmo:

• Explícito: Formal y sin ambigüedades.


• Genérico: Problema cuyos datos son generales.
• Bien definido: Problema perfectamente caracterizado.
• Correcto: Que funcione en todos los casos.
• Número finito de pasos: Debe terminar.

18
Representación Gráfica de los Algoritmos

Los métodos usuales para representar un algoritmo


son:
1. diagrama de flujo,
2. diagrama N-S (Nassi-Schneiderman),
3. lenguaje de especificación de algoritmos:
pseudocódigo,
4. lenguaje español, inglés…
5. fórmulas.

19
Pseudocódigo

El pseudocódigo es un lenguaje de especificación (descripción) de


algoritmos. El uso de tal lenguaje hace el paso de codificación final
relativamente fácil.
• El pseudocódigo es un medio de representar básicamente las
estructuras de control de programación estructurada
• Se considera un primer borrador se traduce a un lenguaje de
programación.
• El pseudocódigo no puede ser ejecutado por una computadora.
• La ventaja del pseudocódigo se puede concentrar en la lógica.
• Es también fácil modificar el pseudocódigo si se descubren
errores.
• Otra ventaja del pseudocódigo es que puede ser traducido
fácilmente a lenguajes estructurados como Pascal, C,
FORTRAN 77/90, C++, Java, C#, etc.

20
Pseudocódigo

21
Estructura de un algoritmo:

algoritmo nombre
constantes (→ valores fijos)
datos tipos (→ nuevos dominios de datos)
variables (→ datos)
cuerpo (→ instrucciones)
falgoritmo
acciones y funciones auxiliares

22
Diagrama de Flujo

Un diagrama de flujo (flowchart) es una de las técnicas de


representación de algoritmos más antigua y a la vez más utilizada,
aunque su empleo ha disminuido considerablemente, sobro todo,
desde la aparición de lenguajes de programación estructurados.
Un diagrama de flujo es un diagrama que utiliza los símbolos
(cajas) estándar mostrados en la Tabla 2.1 y que tiene los pasos
de algoritmo escritos en esas cajas unidas por flechas,
denominadas líneas de flujo, que indican la secuencia en que se
debe ejecutar.

23
Diagrama de Flujo

24
Diagrama de Flujo

25
Diagramas de Nassi-Schneiderman (N-S)

El diagrama N-S de Nassi Schneiderman —también conocido


como diagrama de Chapin— es como un diagrama de flujo en el
que se omiten las flechas de unión y las cajas son contiguas. Las
acciones sucesivas se escriben en cajas sucesivas y, como en los
diagramas de flujo, se pueden escribir diferentes acciones en una
caja

26
Diagramas de Nassi-Schneiderman (N-S)

El diagrama N-S de Nassi Schneiderman —


también conocido como diagrama de Chapin—
es como un diagrama de flujo en el que se
omiten las flechas de unión y las cajas son
contiguas. Las acciones sucesivas se escriben
en cajas sucesivas y, como en los diagramas
de flujo, se pueden escribir diferentes acciones
en una caja

27
Programa

Un programa de computadora es un conjunto de instrucciones —


órdenes dadas a la máquina— que producirán la ejecución de una
determinada tarea. En esencia, un programa es un medio para
conseguir un fin. El fin será probablemente definido como la
información necesaria para solucionar un problema.

28
PARTES CONSTITUTIVAS DE UN PROGRAMA

29
INSTRUCCIONES Y TIPOS DE INSTRUCCIONES

El proceso de diseño del algoritmo o posteriormente de


codificación del programa consiste en definir las acciones o
instrucciones que resolverán el problema.
Las acciones o instrucciones se deben escribir y posteriormente
almacenar en memoria en el mismo orden en que han de
ejecutarse, es decir, en secuencia.
Un programa puede ser lineal o no lineal. Un programa es lineal si
las instrucciones se ejecutan secuencialmente, sin bifurcaciones,
decisión ni comparaciones.

30
TIPOS DE INSTRUCCIONES

31
TIPOS DE INSTRUCCIONES

32
DATOS, TIPOS DE DATOS Y OPERACIONES PRIMITIVAS

Tipo de Datos:
Conjunto específico de valores de los datos y
un conjunto de operaciones que actúan sobre
esos datos.

33
• Simple:
Son de un entero, real, booleano,
tipo carácter
[dominio + operaciones]
• Compuesto:
tupla, tabla
[constructores + funciones de
acceso]
Tienen un nombre
(identificador)
Datos

• Constantes: valor fijo


Pueden [Literales: constantes predefinidas]
ser
• Variables

Los datos se deben declarar con todos estos atributos (excepto los literales).
Un dato contiene siempre un valor de su tipo.
34
Comunicarse con el exterior
[lectura y escritura]

Modificar el contenido de los datos


[asignación]

Instrucciones • Secuenciación
Controlar el orden de
• Condicional
ejecución
• Iteración

Agrupar sucesiones de instrucciones en bloques


independientes [acciones y funciones]

35
1.2.- Variables

Definición: una variable es un dato cuyo valor puede cambiar durante la ejecución
de un algoritmo.
Para asignar un valor a una variable se utiliza el operador de asignación “:=”.
Ejemplos: x := 3.0; y := x + 2.1; y := 3*x + 2; ... [x, y son variables]

Tipos básicos de datos son:


real 3.0, -2.1, ...
entero -3, +10, …
carácter ’a’, ’b’, ’F’, ’4’, ’.’, ...
booleano VERDADERO, FALSO
Ejemplo:
algoritmo nombre_algoritmo
var n: entero; x, y: real; c: carácter; b: booleano fvar
n:=3; x:=2.3; c:=’w’; b:=VERDADERO; y:=-5.0;
...
falgoritmo

36
1.3.- Constantes

Definición: una constante es un dato que representa un valor fijo de un tipo


deter-
minado que no se puede modificar.

Ejemplo:

Algoritmo NombreAlgoritmo
const Pi: real = 3.1415926535897932385 fconst
var x, y: real fvar
...
x := Pi*Pi;
y := 3*Pi;
...
falgoritmo

37
CONVERSIONES DE VARIABLES
Si n es entera, x es real y realizamos la asignación n:=x, la variable n toma
como valor la parte entera de x.

Se pueden transformar los valores de las variables de un tipo a otro.

algoritmo
var x: real; n: entero; c: carácter fvar
...
x := 65.2 [x <- 65.2]
n := DeRealAEntero(x) [n <- 65]
c := DeEnteroACarácter(n) [c <- “carácter correspondien-
te al número 65 en el código
de ASCII, esto es, la
letra mayúscula ‘A’.”]
...
Falgoritmo

Análogamente se pueden realizar los siguientes cambios de tipos 38


1.4.- Tipos y operaciones
Definición: conjunto de valores (dominio) y operaciones aplicables.
Tipos básicos: booleano, entero, real y carácter.
• Tipo de datos booleano: Valores: {V, F}. Operadores: y, o, no, =, ≠.
• Tipo de datos entero:
Valores: los enteros, {-MaxEnt, ..., -3, -2, -1, 0, 1, 2, 3, ...,
MaxEnt }
Operadores (binarios): +: entero + entero → entero
-: entero - entero → entero
*: entero * entero → entero
(división entera) div: entero div entero → entero
(resto) mod: entero mod entero → entero
=: entero = entero → booleano
≠: entero ≠ entero → booleano
<: entero < entero → booleano
>: entero > entero → booleano
≤: entero ≤ entero → booleano
≥: entero ≥ entero → booleano
x
y x div y = q y * q + r = x 39
r x mod y = r 0 ≤ r < |y|
• Tipo de datos real.
Valores: los reales, {-MaxReal, ... , -MinReal, 0, MinReal ,…, MaxReal}
Operadores (binarios): +: real + real → real
-: real - real → real
*: real * real → real
/: real / real → real
=: real = real → booleano
≠: real ≠ real → booleano
<: real < real → booleano
>: real > real → booleano
≤: real ≤ real → booleano
≥: real ≥ real → booleano

• Tipo de datos carácter. Valores: los caracteres,


{’?’, ’^’, ’#’, ’&’, ..., ’A’, ’B’, …, ’Z’, …,
’a’, ’b’, …, ’z’, …, ’0’, ’1’, ’2’, …, ’9’, …, ’+’, ’-’, ... }
Operadores (binarios): =, ≠, <, ≤, >, ≥ : carácter = carácter → booleano
...
• Más adelante veremos algunos tipos compuestos: tablas y tuplas.
40
1.5.- Expresiones
Definición:
Una variable es una expresión.
Una constante es una expresión.
Si E es una expresión, (E) es una expresión.
Si E1, E2, ..., En son expresiones y f una función, f(E1, E2, ..., En) es una expresión

Los tipos de las expresiones tienen que ser coherentes.


Las prioridades de los operadores se utilizan para evaluar correctamente las
expresiones: se aplica la regla asociativa de izquierda a derecha y, en caso de duda, se
ponen paréntesis.

Operadores utilizados más frecuentemente ordenados de mayor a menor prioridad:


., [ ] (acceso a tuplas y tablas)
-, no (cambio de signo y negación lógica) [unarios]
*, /, div, mod (operadores multiplicativos)
+, - (operadores aditivos)
<, >, ≤, ≥, =, ≠ (operadores relacionales) 41
y, o (y, o lógicos)
• Ejemplos
Sean i=3, j=16, x=3.5, y=2 y b=FALSO, entonces
y= (x+y)*y
(x+y)*y = (3.5+2.0)*2.0
= (5.5)*2.0
= 11.0
( j div i ) ≤ 5 y b = ( 16 div 3 ) ≤ 5 y FALSO
= ( 5 ) ≤ 5 y FALSO
= VERDADERO y FALSO
= FALSO
Hay que tener en cuenta los errores que se pueden producir en tiempo
de ejecución:
• Dividir por 0: cuando utilicemos los operadores div, mod, y /.
• Problemas de precisión con los reales

42
EN C:
#include <stdio.h>

int main(void)
{
int n;
int suma;
printf("Introduzca número del 1 al 5:");
scanf("%d",&n);
suma=n*(n+1);
printf(“La suma es: %d”, suma)
}

43
EN JAVA:

class Suma
{
public static void main(String[] args)
{
int n;
int suma;
suma=n*(n+1)/2;
System.out.println(“ La suma es :”, suma);
}
}

44
Python:

### Introducir un numero por teclado y decir si es par o impar


n = input('Introduzca un numero ‘)
suma=n*(n+1)/2
print(“El Valor de la suma es ==“,suma)

45
1.6.- Instrucciones

Lectura y Escritura
• Lectura: establece el valor de una variable a través de un dispositivo de entrada.
• Escritura: permite comunicar el valor de una expresión a través de un dispositivo
de salida.
algoritmo ejemplo
var n: entero; x: real; c: carácter; fvar
LeerEntero(n);
EscribirEntero(n);
LeerReal(x);
EscribirReal(x);
LeerCarácter(c);
EscribirCarácter(c)
falgoritmo

46
Lectura de datos

algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
LeerEntero(n); LeerReal(x);
LeerCarácter(c); LeerBooleano(b);
...
falgoritmo
Notación alternativa:
algoritmo leer_variables
var n: entero; x: real; c: carácter; b: booleano fvar
n:=LeerEntero( );
x:=LeerReal( );
c:=LeerCarácter( );
b:=LeerBooleano( ) ...
falgoritmo

47

También podría gustarte