ALGORITMO, ESTRUCTURAS Y PROGRAMACIÓN I
UNIDAD 1:Introducción al Diseño de
Algoritmos
Ing. Nelwi Báez Msc.
Algoritmo
• El Algoritmo es un proceso para resolver problemas
• Fue desarrollado por el matemático persa Abu Jafar
Mohammed Ibn Musa Al Khwarizmi.
• Un algoritmo es una fórmula para resolver un problema.
• Un algoritmo es un conjunto de acciones o secuencia de
operaciones que ejecutadas en un determinado orden
resuelven el problema planteado.
• Un algoritmo es un proceso metódico que define una serie
finita de pasos sencillos y sin ambigüedades para la
solución de un problema
• La programación consiste en adaptar el algoritmo al
ordenador
• El algoritmo es independiente de la implementación en
algún lenguaje de programación
Características de un Algoritmo
Un algoritmo debe:
• Estar bien definido.
• Ser preciso.
• Finito.
Metodología para Diseñar Algoritmos
• Un algoritmo es una formula para obtener la solución
de un problema.
• La solución puede ser planteada de diferentes formas.
• El diseño de un algoritmo es un proceso creativo.
• No existe un conjunto de reglas que indiquen
expresamente cómo escribir un algoritmo en forma
correcta
Metodología para Diseñar Algoritmos
Los pasos para resolver un problema son:
1) Análisis del problema.
2) Diseño del algoritmo.
3) Verificación del algoritmo.
A
n
á
l
i
s
i
s
d
e
l
P
r
o
b
l
e
m
a
D
i
s
e
ñ
o
d
e
l
V
e
r
i
f
i
c
a
c
i
ó
n
A
l
g
o
r
i
t
m
o
d
e
l
A
l
g
o
r
i
t
m
o
Metodología para Diseñar Algoritmos
En la Fase de Análisis del Problema se:
• Identifica el problema.
• Se determina la información que se debe producir como
salida.
• Se identifica la información necesaria para resolver el
problema.
• Se identifican los elementos que se tienen y los elementos
que se deben solicitar para resolver el problema.
• Se establece el camino a seguir o la solución que se va
implementar.
Metodología para Diseñar Algoritmos
En la Fase de Diseño del Algoritmo se:
• Se busca la manera más fácil para simplificar
propuesta.
la
• Se identifican los procesos más importantes y se colocan
en orden ascendente según su importancia y precedencia
(esto sirve como un algoritmo inicial).
• El algoritmo inicial se va refinando sucesivamente hasta
obtener una solución más detallada y fácil de traducir a un
lenguaje de programación
Metodología para Diseñar Algoritmos
En la Fase de Verificación del Algoritmo:
• Se verifica que el algoritmo cumpla con los procesos
diseñados y produzca el resultado esperado.
• Se realiza una prueba del algoritmo mediante su ejecución
manual con datos significativos y se comprueba si se
obtienen los resultados esperados para la salida
Programas de Computadora
• Un programa es un conjunto de instrucciones que,
ejecutadas ordenadamente, resuelven un problema.
En otras palabras, es la implementación del
algoritmo.
• Un programa de computadora es una secuencia de
instrucciones que le indican al computador que
realice las operaciones específicas para lograr el
resultado deseado.
• Consiste de uno o más módulos o rutinas cada uno
de los cuales puede estar compuesto de varios
subprogramas.
Definiciones Básicas
• Lenguaje de Máquina.
• Lenguaje de Bajo Nivel: Ensamblador.
• Lenguaje de Alto Nivel.
• Compilar.
• Base de Datos.
• Sistema Operativo.
• Almacenamiento.
Definiciones Básicas:
Lenguaje de Máquina:
• Es un lenguaje que puede ser interpretado
por los circuitos internos de la máquina.
directamente
• Está basado en instrucciones compuestas por secuencias
de ceros (0) y unos (1).
• Ventajas:
- No requiere traducción, la máquina lo interpreta.
- Opera directamente con la máquina.
- Puede ser eficiente en el manejo de los recursos.
• Desventajas:
- Difícil de aprender, implementar y mantener.
- Es único y particular para cada procesador.
Definiciones Básicas: Lenguaje de Bajo Nivel
Ensamblador.
Es un lenguaje fuente para codificar sentencias simbólicas.
Hace uso de nemotécnicos para representar instrucciones de máquina.
Un ensamblador convierte cada instrucción en instrucciones de lenguaje
de máquina.
Ventajas:
•
•
No es tan complicado como el lenguaje de máquina.
Eficiente en el manejo de recursos.
Desventajas:
•
•
Cada procesador tiene su propio juego de instrucciones en ensamblador
Debe ser traducido – ensamblado.
Definiciones Básicas: Lenguaje de Alto Nivel
Es un lenguaje orientado al problema o procedimiento.
Son los más cercanos al lenguaje humano.
Ejemplo: COBOL, PL/I, FORTRAN, etc.
Otros son los lenguajes de Programación Orientado a Objetos (OOPL) :
C++, Smalltalk, Java, etc.
Ventajas:
•
•
•
Son independientes del procesador.
Son más fáciles de aprender, implementar y mantener.
Tiene un carácter genérico.
Desventajas:
•
•
Menos eficiente en el manejo de recursos.
Requiere un proceso de traducción – compilación.
Otras Definiciones Básicas
•
Compilar
Es traducir un programa escrito en un lenguaje de alto nivel a lenguaje de
máquina, que es la forma en que la computadora puede ejecutar las acciones o
instrucciones.
•
Base de Datos
Es una colección de datos completa e integrada para evitar duplicados, que
permite recuperar información para satisfacer a una amplia variedad de
usuarios.
•
Sistema Operativo
Es una colección organizada de software que se usa para ayudar y controlar las
operaciones de una computadora.
•
Almacenamiento
Se refiere a los dispositivos en que los datos se almacenan para posteriormente
ser recuperados.
Desarrollar un Programa de
Computadora
• El programador debe escribir las sentencias o
instrucciones del código fuente, en un editor.
• El conjunto de sentencias fuente se denomina
“programa fuente.”
• El programa fuente es la entrada para el compilador.
• El compilador convierte el programa fuente en un
conjunto de comandos entendibles por el
computador llamado “programa ejecutable”.
• Si se encuentra algún error en la sintaxis de los
comandos en el programa fuente, el compilador
listará cada uno de ellos y no produce el programa
ejecutable.
Pasos de un Programa de
Computadora
Editor
Programa Fuente
Compilador
Lista de
Programas
Programa Ejecutable
Funcionamiento del
Compilador/Enlazador
• El compilador crea un programa objeto y un listado del
programa objeto.
• El programa objeto se usa como la entrada al enlazador
para realizar lo que se llama el paso de “edición de
enlace”.
• El enlazador combina el programa objeto recién creado,
con otros archivos objetos ya existentes para producir un
programa ejecutable.
• Los otros archivos objeto generalmente residen en un
archivo en disco llamado “Librería de Enlace”.
Funcionamiento del Compilador /
Enlazador
Compilador
Programa
fuente
Programa objeto
Librerías de
Programas
Objeto
Enlazador
Programa
Ejecutable
Datos e Instrucciones
• Un programa de computadora, para que pueda ser
ejecutado debe ser cargado en memoria.
• La unidad de procesamiento del ordenador sólo
puede trabajar con los datos e instrucciones que
residen en la memoria.
Dato
• El dato es cualquier objeto o elemento de
información que se usa a través de las diversas
operaciones dentro de un programa.
• Son los elementos sobre los que se opera cuando
se efectúa una instrucción.
• Un dato tiene un nombre que lo identifica y
distingue de los demás elementos del programa.
• El nombre no es más que una forma de referenciar
la dirección de memoria que ocupa el dato.
Tipo de Dato
• El tipo de dato es una definición que identifica los valores
válidos para un conjunto de datos y las operaciones que
sobre ellos se pueden realizar.
• Normalmente se puede establecer una relación de orden
sobre los datos de naturaleza escalar o con valores
determinísticos.
• Cada tipo de
computador.
dato
tiene
una
representación
en
el
• Para cada tipo de dato el computador reserva una cantidad
de memoria para almacenarlo
• Todo, absolutamente todo, en la memoria de un computador
se representa por medio de código binario.
Clasificación de los Tipo de Dato
Los tipos de datos se clasifican en:
• Primitivos: tipos básicos o simples predefinidos en el
sistema. Pueden ser numérico, lógico o carácter.
• Definidos por el usuario: tipos de datos complejos
definidos por el programador.
Tipo de Dato Primitivo Numérico
Los tipos primitivos numéricos más importantes son:
• Entero: es un subconjunto finito del conjunto matemático
de los números enteros. No tiene parte decimal.
• Real: es un subconjunto finito del conjunto matemático
de los números reales, tienen signo y parte decimal.
Tipo de Dato Primitivo Lógico o
Booleano
El tipo primitivo lógico o booleno:
• Es aquel que sólo puede tomar uno de los dos valores,
verdadero o falso (1 ó 0).
• Las operaciones lógicas retornan un valor lógico.
Tipo de Dato Caracter
El tipo de dato primitivo carácter:
• Es el conjunto finito y ordenado de caracteres que
reconoce la computadora: letras, dígitos, caracteres
especiales, código ASCII y UNICODE.
• Los valores usualmente se representan dentro de un
par de comillas simples.
• Se puede usar el código del carácter o su posición
dentro del conjunto de caracteres válidos que se
esté usando.
Tipos de Datos
El tipo de dato numérico entero es un subconjunto
finito de los números enteros del mundo real.
Pueden ser positivos o negativos
Con los tipos enteros pueden utilizarse los calificadores signed y unsigned. Estos calificadores
indican si el número tiene signo o no. Si se usan solos, sin indicar el tipo de dato se asume int. Por ejemplo, las
siguientes declaraciones son equivalentes: unsigned int x;
equivale a:
unsigned x;
Número
Tipo de
Descripción de bytes
Rango
Dato
típico
Entero
short
2
-32768 a 32767
corto
-2147483648
int
Entero
4
a +2147483647
-2147483648
Entero
long
4
a +2147483647
largo
char
Carácter
1
-128 a 127
Tipo de Dato
Descripción
Número de
bytes
típico
Rango
signed short
Entero corto
2
-32768 a 32767
unsigned
short
Entero corto sin
signo
2
0 a 65535
signed int
Entero
4
-2147483648 a +2147483647
unsigned int
Entero sin signo
4
0 a 4294967295
signed long
Entero largo
4
-2147483648 a +2147483647
unsigned
long
Entero largo sin
signo
4
0 a 4294967295
signed char
Carácter
1
-128 a 127
unsigned
char
Carácter sin signo
1
0 a 255
Ejemplo:
Tipo de datos Lógicos o
boléanos
Son aquellos datos cuyos únicos valores
sólo pue- den ser: Verdadero (V) o Falso
(F), puede encon- trarse, Verdadero
(True) o Falso (False). Se utiliza para
representar las opciones (si/no) a
determina- das condiciones.
•
•
•
•
•
•
Nacionalidad = “Venezo- lano” (S/N)?
Carácter o Char
Su valor lo comprenden todos los caracteres alfabéticos, mayúsculas y minúsculas (A – Z), numéricos (0 –
9) y símbolos especiales (#,@,%,&).
Carácter String o cadena
Su valor esta representado por un conjunto de caracteres.
“Abril” “Reporte Anual de Fallas Técnicas” “1º de mayo,
Día
Tipo de Dato
Tipos de datos numéricos
reales
El tipo de dato numérico real es un
subconjunto finito de los números
reales. Pueden ser positivos o
negativos.
float
double
long double
Númer
o de
Descripción
Rango
bytes
típico
Positivos: 3.4E-38 a
Real
3.4E38
(Número en
4
coma
Negativos: -3.4E-38
flotante)
a -3.4E38
Real
doble(Núme
ro en coma
flotante de
doble
precisión)
Real doble
largo
8
Positivos: 1.7E-308
a 1.7E308
Negativos: -1.7E308 a -1.7E308
10
Positivos: 3.4E-4932
a 1.1E4932
Negativos: -3.4E4932 a -1.1E4932
Constantes y Variables
• Constantes:
- Son instancias de un tipo de dato que tienen un valor
fijo que se le da cuando se define la constante.
- No puede ser modificado durante la ejecución del
programa o corrida del algoritmo.
• Variables:
- Son instancias de un tipo de dato, cuyo valor puede
cambiar durante la ejecución del programa o corrida
del algoritmo.
- No varía su nombre y su tipo.
- Variables:
- Acumuladoras
- Contadoras
Variables
• Las variables deben ser definidas o declaradas antes de
usarlas.
• Una variable se declara dando un nombre significativo y
tipo.
• El nombre o identificador, es una palabra que no es
propia del lenguaje, la construye y usa el programador
basándose en ciertas reglas
• El nombre, por lo general, tiene que empezar por una
letra, el tamaño y caracteres permitidos para formar el
identificador dependen del lenguaje.
• En algunos lenguajes, a la variable al declararla se le
asigna un valor por defecto, si no se le asigna un valor
inicial.
Constantes
• Las constantes pueden llevar asociados un nombre, si no lo
tienen se llaman literales.
• El valor de la constante se debe suministrar al definir la
constante y no puede cambiar a lo largo de la ejecución del
programa.
• El tipo de dato de la constante se especifica o no en la
declaración dependiendo del lenguaje.
• Ejemplo de definición de una constante: Const PI=3,1416
• La ventaja de las constantes con nombre, es que se puede
usar el nombre en cualquier lugar del programa y luego el
compilador lo sustituye por su valor.
Variables y Constantes en la Memoria
• Cuando el compilador consigue una declaración de una
variable o una constante con nombre, automáticamente
reserva en memoria espacio para guardarla.
• El espacio reservado en memoria depende del tipo de
dato de la variable o constante.
• En esa ubicación de memoria se guarda el valor
asociado a la variable o constante
• Cuando el programa se ejecuta busca el valor de la
variable o constante en esa ubicación de memoria.
Expresiones: Tipos y Operadores
• Una expresión es una combinación de constantes,
variables, signos de operación, paréntesis y nombres
especiales de funciones estándares, con un sentido unívoco
y definido.
• La evaluación de una expresión da como resultado un único
valor.
• Toda expresión tiene asociado un tipo que se corresponde
con el tipo del valor que devuelve la expresión cuando se
evalúa.
• Existen dos tipos de expresiones:
• Numéricas.
• Lógicas.
Expresiones Numéricas: Operadores Aritméticos
• Las expresiones numéricas son una combinación de
variables y constantes numéricas con operadores
aritméticos, que al evaluarse devuelven un valor
numérico.
• Los operadores aritméticos se utilizan en las expresiones
numéricas.
• Algunos de los operadores aritméticos más usados son:
+
*
/
Suma
Resta
Multiplicación
División
Otros Operadores Aritméticos
• Otros operadores aritméticos soportados en algunos
lenguajes de programación son:
- Resto: devuelve el resto de una división entera.
- División entera: devuelve el cociente de una división
en la que no se consideran los decimales.
- Potencia: devuelve el valor de una base elevada a
una potencia dada.
• Todos los operadores estudiados son binarios, utilizan
dos operandos y el operador se sitúa en medio de
ambos operandos.
Operadores Unarios
• Los operadores unarios son un tipo de operador que
sólo necesitan de un operando.
• Algunos de los operadores unarios más comunes son:
- Signo negativo: devuelve el valor actual del operando
multiplicado por menos uno (-1).
- Decremento: devuelve el valor actual del operador
decrementado en una unidad.
- Incremento: devuelve el valor actual del operador
incrementado en una unidad.
Evaluación de Expresiones
• El resultado que retorna de la evaluación de una expresión
depende del orden en que se evalúen los operadores.
• Ejemplo:
Sea la siguiente expresión aritmética: 2 + 3 * 2 + 3

Si se evalúa en el orden de aparición de los operadores :
(((2 + 3) * 2) + 3)
El resultado = 13

Si se evalúa primero la suma (+) y luego la multiplicación (*):
(2 + 3) * (2 + 3)
El resultado = 25

Si se evalúa primero la multiplicación y luego la suma:
2 + (3 * 2) + 3
El resultado = 11
Reglas de Precedencia en las Expresiones
• Para evaluar las expresiones, cada operador tiene una
prioridad o regla de precedencia para su evaluación dentro
de la expresión.
• Cada lenguaje puede establecer sus propias reglas de
prioridad o precedencia de operadores.
• El orden de precedencia más usado para los operadores
aritméticos básicos, es:
123-
^
*, /, div y mod
+ y –
• Se evalúa primero el operador con mayor prioridad.
• Entre dos operadores que tienen la misma precedencia se
usa la regla de la asociatividad por la izquierda.
• Se pueden utilizar los paréntesis () para cambiar el orden
en que se evalúan los operadores de una expresión
aritmética.
Expresiones Lógicas: Operadores Relacionales y Lógicos
• Una expresión lógica es aquella que sólo puede devolver
uno de dos valores: Verdadero o Falso.
• Los operadores que pueden aparecer en una expresión
lógica son de dos tipos: lógicos o relacionales.
• Los operadores lógicos sólo trabajan sobre expresiones o
datos que retornan valores booleanos.
• Los operadores relacionales trabajan con expresiones
numéricas para realizar comparaciones que retornan un
valor booleano.
• Las expresiones combinan tanto los operadores lógicos
como relacionales, se evalúa más de una condición o
relación por medio los de operadores lógicos
Operadores Relacionales
• Los operadores relacionales más utilizados son:
<
menor que
>
mayor que
=
igualdad (en C/C++: ==)
<>
diferente (en C/C++: !=)

menor o igual que

mayor o igual que
Ejercicio sobre Expresiones Lógicas
Ejercicio:
Evalúe las siguientes expresiones si se le asigna a:
la variable x el valor de 2
la variable y el valor de 4
1.
2.
3.
4.
x == y
x <> y
y>x
x >= y
Operadores Lógicos
• Los operadores lógicos se utilizan para evaluar
más de una condición al mismo tiempo.
• Los operadores lógicos más utilizados son:
1. Y
(and, &&)
2. O
(or, !!)
3. No
(not, ~, !)
4. O exclusivo (xor, ^)
• El “No” es un operador unario todos los demás son
operadores binarios.
Funciones Incorporadas
• Las funciones incorporadas son funciones que se
incorporan al lenguaje y que son diferentes de las
operaciones básicas.
• Se consideran estándar en la mayoría de herramientas y
lenguajes de programación.
• Son dependientes del lenguaje y normalmente se
encuentran en librerías externas que se pueden incluir en
un programa.
• Las librerías más comunes son las librerías de soporte
matemático y las de entrada / salida.
• La sintaxis y el nombre de las funciones puede variar de un
lenguaje a otro, pero la funcionalidad suele mantenerse
entre las diversas herramientas de programación.
Uso de las Funciones Incorporadas
Lenguaje
Sentencia
Ejemplo
Pascal
use
use conio;
C y C++
include
#include <iostream>
Java
import
Import java.io.*;
Operación de Asignación
• La operación de asignación consiste en atribuir un valor a
una variable.
• El valor asignado es una expresión, una constante u otra
variable
Lenguaje Operador
Ejemplo
Pascal
:=
var := 5 + 3;
C y C++
=
var = 5 + 3;
Java
=
var = Math.sin(90.0);
• Var: representa la variable a la que se le asigna el valor dado
en la expresión a la derecha del operador de asignación.
Fases de la Operación de Asignación
• La operación de asignación se realiza en 2 fases:
• Se evalúa la expresión de la parte derecha de la asignación y se
obtiene un único valor.
• Se asigna ese valor a la variable de la parte izquierda.
• En la parte izquierda de la operación de asignación sólo
puede haber una variable y al asignarle el valor pierde el valor
anterior.
• Si la variable de la parte izquierda participa en la expresión,
se evalúa primero la expresión antes de realizar la
asignación. Ejemplo x = x + 1.
• El tipo de dato resultante después de evaluar la expresión
(parte derecha), tiene que ser del mismo tipo de dato o un tipo
compatible con el de la variable a la cual se le va a asignar el
resultado de la operación.
Recomendaciones al Programar
Para minimizar la ocurrencia de errores al programar se
recomienda:
 Reutilizar
 No
código bueno.
asumir los datos de entrada como válidos.
 No
asumir que los datos de entrada están en la secuencia
correcta.
 Diseñar
los tamaños de los campos de datos de modo que
puedan contener en el campo el valor actual más grande.
 Usar
comentarios en los programas.
 Desarrollar
programas legibles y fáciles de entender.
Descargar

Presentación de PowerPoint