Download Algoritmos y Estructura de datos:

Document related concepts
Transcript
Algoritmos y Estructura de datos:
Definición de algoritmo
Un algoritmo es el conjunto de operaciones y procedimientos que deben seguirse para resolver un
problema. Un algoritmo recibe un conjunto de entradas, realiza ciertos procedimientos y devuelve
una salida.
Se dice que un algoritmo es correcto, si para cualquier conjunto de entradas el algoritmo siempre
nos dará la salida correcta.
Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, cálculo o mecanismo antes de
ser transcrito al ordenador. Los pasos a seguir para resolver un algoritmo son los siguientes:
Análisis previo del problema.
Primera visión del método de resolución.
Descomposición en módulos.
Programación estructurada.
Búsqueda de soluciones parciales.
Ensamblaje de soluciones finales.
Un algoritmo tiene las siguientes características: es preciso, es definido y es finito.
Preciso. Se indica el orden en que deben seguirse los pasos.
Definido. Si se sigue el algoritmo varias veces proporcionandole los mismos datos, debemos
obtener siempre los mismos resultados.
Finito. El algoritmo debe terminar.
Ejemplos de algoritmos.
Ejemplo: Calcular las posibles raíces para una ecuación de segundo grado: ax2+bx+c=0
+-Algoritmo raíces
|
variables reales a,b,c,x,y
|
| Escribir "Introduzca los coeficientes de mayor a menor grado."
| Leer a,b,c
|
| +-Si sqr(b)>= 4*a*c entonces
| | x=(-b+sqrt(b^2-4*a*c))/2a
| +-Sino
| | Escribir "No existen raíces reales."
| +-Finsi
|
+-Final
Ejercicios.
1. Dados 3 números x,y,z devolver el mayor de los 3.
2. Explique como resolvería un problema en que dado cualquier valor entero calcule siempre el
valor absoluto de dicho valor
3. Como resolvería un problema en que dado un valor real cualquier, redondee dicho valor.
Diseño de algoritmos
En todo algoritmo se deben considerar tres partes:
Entrada. Información dada al algoritmo.
Proceso. Operaciones o cálculos para encontrar la solución al problema.
Salida. Respuestas dadas por el algoritmo o resultados finales de los cálculos.
Ejemplo. Calcular el área de un triángulo.
Datos de entrada. Base, altura.
Proceso. Calcular el area, multiplicando la base por la altura y dividiendo entre dos.
Salida. Salida en pantalla de la base, la altura y el área.
Ejemplo. Hacer un algoritmo para Ir al cine.
Datos de salida. Ver la película.
Datos de entrada. Nombre de la película, dirección de la sala, hora de proyección.
Datos Auxiliares. Entrada, número de asiento.
Descripción.
Debe seleccionarse la película de la cartelera, ir a la sala y comprar la entrada para finalmente
ver la película.
Algoritmo.
Inicio
tomar el periódico
mientras no lleguemos a la cartelera
pasar a la siguiente página
fin mientras
mientras todavía halla películas en la cartelera
leer película
si nos gusta
leer el título
recordar el título
fin si
fin mientras
Elegir una de las películas seleccionadas
Leer la dirección de la sala y la hora de proyección
si no hay entradas
terminar el algoritmo
si hay cola
ponerse al último de la cola
mientras no lleguemos a la taquilla
avanzar
si no hay entradas
terminar algoritmo
fin mientras
comprar boleto
leer el número de asiento
buscar el asiento
sentarse
ver la película
Fin
Ejercicios
1.
2.
3.
4.
5.
6.
Hacer un algoritmo para hacer una taza de cafe.
Hacer un algoritmo para poner la mesa de la cena.
Hacer un algoritmo para lavar los platos de la comida.
Hacer un algoritmo para cambiar una llanta ponchada.
Hacer un algoritmo para pagar una multa de tráfico.
Hacer un algoritmo para realizar una llamada telefónica (tomar en cuenta si es llamada por
cobrar o llamada normal por minuto)
La función módulo
Devuelve el resto de dividir un número por un divisor. Ejemplo mod(13,5)=3, mod(15,6)=3.
Ejercicio.
Como utilizarías la función mod para determinar si un entero dado es par o es impar. Discutir con
tus compañeros.
Algoritmo de euclides
El m.c.d de dos números es el mayor divisor entre ellos. Ejemplo m.c.d(10,32) = 2, m.c.d(81,15)=3,
y así sucesivamente.
Algoritmo de Euclides
Entrada: Valores a y b
Salida: Máximo Común Múltiplo
r0=a,
r1=b;
i=1
while (ri <>0)
ri+1= ri-1 mod ri
i=i+1
end while
return ri+1
Ejercicio.
El mínimo común múltiplo, es el menor múltiplo entre dos números m.c.m(10,5)=5,
mcm(6,20)=60. Explique como calcularía el mínimo común múltiplo dados dos enteros a y b.
Representación de algoritmos
Uno de los métodos más interesantes y más utilizados para la representación de algoritmos, son los
diagramas de flujo.
Un diagrama de flujo utiliza unos símbolos normalizados, con los pasos del algoritmo escritos en el
símbolo adecuado y los símbolos unidos por flechas, denominadas líneas de flujo, que indican el
orden en que los pasos deben ser ejecutados. En la siguiente tabla se especifican los principales
símbolos en un diagrama de flujo.
Inicio y fin del algoritmo
Proceso
Entrada / Salida
Decisión
Comentario
Símbolo
Función
Ejemplo: Para convertir de celcius a kelvin la fórmula es Kelvin= Celcius + 273.15. Hacer un
diagrama de flujo que cambie la temperatura de grados Celcius a kelvin.
Ejercicios
1. Hacer un algoritmo que reciba una cantidad en pesos e imprima su equivalente en dolares.
2. Hacer un algoritmo que diga si una palabra es un palíndromo. Un palíndromo es una palabra
que se lee igual tanto al derecho como al revés.
3. Hacer un algoritmo que calcule el M.C. D de dos números enteros.
4. Hacer un algoritmo que calcule el M.C. M de dos números enteros.
5. Hacer un algoritmo que lea un número entero, e imprima si dicho número es o no es primo.
Tipos de datos
Un dato es la expresión general que describe los objetos con los cuales opera el programa. En este
momento vamos a enfocarnos a trabajar con los datos estáticos, más adelante en el curso
hablaremos de los tipos de datos dinámicos.
Existen datos que pueden ser predefinidos como los enteros, los reales, lógicos y los caracteres.
Dependiendo del lenguaje de programación, un usuario tiene también la opción de definir sus
propios tipos de datos, y generalmente se definen agrupando tipos de datos primitivos.
Constantes
Las constantes son datos cuyo valor no cambia durante todo el transcurso del algoritmo. Los tipos
de constantes incluyen: numéricas enteras (int Dimension=5), numéricas reales (float PI=3.14),
lógicas (Verdadero=True), caracter (char Enter='c').
Variables
A diferencia de las constantes, las variables son datos que pueden cambiar su valor durante el
desarrollo del programa. Se identifican por su nombre y por su tipo. En el caso de C y Pascal las
variables deben ser declaradas al inicio del programa.
Expresiones
Es posible crear expresiones en base a los datos que el programa contiene. En la siguiente tabla se
describen los principales operadores en el lenguaje de programación C:
!
Operadores unarios
*,/,%, and
Operadores multiplicativos
+,-, or
Operadores aditivos
Operadores de compración
==.>,<,>=,<=
Ejemplo. Haga un programa que lea dos números, los sume, los múltiplique e imprima el
resultado.
#include <stdio.h>
int main()
{
int a,b;
int suma,mult;
printf("Dame el valor de a\n");
scanf("%d",&a);
printf("Dame el valor de b\n");
scanf("%d",&b);
suma=a+b;
mult=a*b;
printf("El valor de la suma es %d y de la multiplicación es %d\n",suma,mult);
return 0;
}
Ejemplo 2. Hacer un programa que lea el radio de un círculo y calcule su area:
#include "stdio.h"
int main()
{
const PI=3.14;
float radio,area;
printf("Dame el valor del radio\n");
scanf("%f",&radio);
area=PI*radio/2;
printf("El valor del area del circulo es %f \n",area);
return 0;
}
Ejercicios:
1.
2.
3.
4.
Hace un programa que lea 5 valores reales e imprima la media.
Hacer un programa que lea un valor en pesos y lo transforme a dolares. Utilice constantes
Hacer un programa que convierta de kilos a libras (1 libra=0.453592 kilos) utilice constantes
Hacer un programa que reciba como entrada un entero y calcule su valor elevado al
cuadrado.
5. Hacer un programa que resuelva una ecuación de segundo grado ax2+bx+c utilizando la
fórmula general. El programa solicita los valores de los coeficientes y calcula las raíces que
solucionan la ecuación. En caso de que no exista solución, imprimir un mensaje de error.
Estructuras de Control
En general, las instrucciones dentro de un programa se ejecutan una a una en el orden en que están
escritas. A esto se le conoce como ejecución secuencial. En los lenguajes de programación
estructurales permiten especificar que la siguiente instrucción a ejecutar es otra distinta de la que
sigue secuencialmente; a esto se le conoce como transferencia de control.
Estructuras selectivas
Se ejecutan las acciones según se cumpla determinada condición. La siguiente tabla nos ilustra la
sintaxis de dichas estructuras.
Tipo
Sintáxis
Ejemplo
Simples
If (expresion)
{
}
If (calificacion>60)
printf(“Aprobado”)
Dobles
If (expresion)
{
}
else
{
}
If (calificacion>60)
{
printf(“Aprobado”)
}
else
{
printf(“Reprobado”)
}
Múltiples
Switch (caso)
{
case caso1:
accion 1
accion 1
break;
case caso2:
accion 1
accion 1
break;
.
.
.
case cason:
accion 1
accion 1
break;
}
Switch (calificacion)
{
case 60: printf(“apenas”);
break;
case 70: printf(“Dos tres”)
break;
.
.
.
}
Ejercicio
1. Hacer un programa que pida 10 números enteros y al final imprima cuantos de dichos números
enteros fueron pares, y cuantos fueron impares.
Estructuras Repetitivas
Las estructuras de control repetitivas, son estructuras que se repiten siempre y cuando se cumpla
determinada condición.
La más común de este tipo de estructuras es la instrucción mientras (while) y la sintaxis es como
sigue:
while (expresion)
{
acciones
}
ejemplo
producto=2;
while (producto<100)
producto=2*producto;
Ejercicio:
1. Un grupo de 10 estudiantes realizó un examen. Usted tiene a su disposición las
calificaciones (enteros del 0 al 100). Determine el promedio de las calificaciones del grupo.
TAREA:
1. Diseñar un programa que a partir de una fecha intruducida en el teclado (dia, mes, año)
todos enteros, se obtenga la fecha del día siguiente: (ejemplo dime el día 29, dime el mes 08,
dime el año 2008, entonces el programa imprimirá la fecha del día siguiente es 30 de 08 de
2008.
2. Diseñar un programa que capture un número arbitrario de calificaciones, y calcule el
promedio de dichas calificaciones.
AYUDA: Utilice un ciclo while con centinelas.
3. Hacer un programa que dados dos enteros, calcule el máximo común divisor de ambos
números.
4. Utilice un programa que utilice un ciclo while para imprimir los enteros del 1 al 10
separados cada uno de ellos por 3 espacios en blanco. EJ. 1 2 3 4 5 ... 10
5. Escriba un programa que lea la longitud (en enteros de un cuadrado) y que dibuje el
cuadrado con asteriscos.
Ejemplo si el programa lee 5, deberá imprimir algo como lo siguiente:
*****
*
*
*
*
*
*
*****
6. Escriba un programa que lea números de 5 dígitos y determine si esos dígitos forman un
palíndromo (ejemplo 12321 si es palindromo, 11333 no es palindromo ).
1. Pista Utiliza los operadores de división y residuo para separar el número en dígitos
individuales.
7. Escriba un programa utilizando un ciclo while que dado un número entero n imprima el
factorial de dicho número.
Ciclo DO WHILE
El cliclo do while es una estructura repetitiva muy parecida al while y su formato es el siguiente:
do {
<sent 1>
<sent 2>
.
.
.
<sent N>
}while
Ejemplo
#include <stdio.h>
void main() {
int digito = 0;
int suma = 0, n = 7;
printf("Suma desde 0 hasta 7.\n");
do{
suma = suma + digito;
printf("Suma parcial hasta %d es: %d\n",digito++,suma);
} while (digito <= n);
printf("El resultado final es: %d\n",suma);
Como implementaría el mismo programa con un ciclo while? Qué diferencias puede observar?
Ciclo FOR
El ciclo for es una estructura repetitiva que nos permite establecer los límites inferiores y los límites
superiores. La estructura del mismo es:
for (x=limInf; x <= limSup; x++)
{
<sent 1>
<sent 2>
.
.
.
<sent N>
}
for (x=limSup; x >= limInf x--)
{
<sent 1>
<sent 2>
.
.
.
<sent N>
}
Ejemplo:
#include <stdio.h>
void main() {
int digito = 0;
int suma = 0;
printf("Suma desde 0 hasta 7.\n");
for (digito=0,digito<=7,digito++){
suma = suma + digito;
printf("Suma parcial hasta %d es: %d\n",digito,suma);
digito++;
}
printf("El resultado final es: %d\n",suma);
Ejercicios
1. Hacer un programa que calcule la suma 1 + 1/2+1/3+...+1/n donde el valor de n es
especificado por el usuario.
2. Se desea leer el valor de las calificaciones de 3 asignaturas de 10 estudiantes, y al final hacer
un promedio para cada una de las asignaturas.
(Ejemplo promedio calculo 7.4. Hint. Utilizar ciclos anidados)