Clase de problemas
No computables: No existe un algoritmo.
Computables
Tratables: Existe un algoritmo eficiente.
Intratable: No existe algoritmo eficiente.
Un problema intratable puede convertirse en tratable si se encuentra un algoritmo que lo resuelva.
Informática
Disciplina del estudio sistematizado de los procesos algorítmicos que describen y transforman información, su teoría, análisis, diseño, eficiencia, implementación y aplicación.
La informática es una disciplina científica, matemática y una ingeniería.
Tiene tres formas de pensar propias: Teoría, abstracción y diseño. Las tres se complementan para la resolución de la mayoría de los problemas.
Especificación Implementación
Especificación: Es el proceso de analizar los problemas del mundo real y determinar en forma clara y concreta el objetivo que se desea alcanzar. El modelo debe ser interpretado sin errores por un autómata.
Implementación: Traducir a un conjunto de instrucciones permitidas y definidas por sus reglas sintácticas y valor semántico lo que fue especificado.
Variables Constantes
Variables: Denotan una magnitud o indicador del proceso. Se caracteriza por un nombre, un tipo de dato y el valor que tiene en un momento determinado. Utilizadas para los datos de entrada, intermedios y de salida.
Constante: Nombre asociado a un valor que permanece sin modificación durante todo el proceso
Las metas que se persiguen son que el estudiante:
Retenga el conocimiento, lo comprenda y haga uso activo del mismo.
Adquiera un conocimiento organizado.
Desarrolle habilidades intelectuales y haga uso activo de un pensamiento creativo.
Fomentar pasiones intelectuales como la curiosidad.
Que autogestionar su conocimiento, a sintetizar, a abstraer .
Que haga uso de lenguajes del pensamiento, Que sepa como volcar ideas en el papel
Tipos de Datos
Identifica o determina un dominio de valores y el conjunto de operaciones aplicables sobre esos valores.
Primitivos.
Derivados.
Abstractos.
Concordancia entre valores y operaciones.
Baca la vuela
Errores sintacticos, errores gramaticales
La vaca vuela
Error de concordancia entre objeto vaca y operación volar
Expresiones Sentencias Léxico
Expresiones: secuencia de operadores y operandos que se reduce a un solo valor.
Sentencias: acción produce un efecto, puede ser primitiva o no primitiva.
Léxico: Descripción del conjunto de acciones e informaciones a partir de la cual se expresa el esquema de comportamiento del algoritmo.
Pasos para resolver un algoritmo
Comprender el problema.
Identificar información y acciones a incluir en el lexico (constantes, tipos, variables y acciones).
Encontrar un camino de secuenciar las acciones para obtener el resultado, es decir para alcanzar la postcondición a partir del estado inicial que cumple con la precondición.
Acciones primitivas y derivadas
Acciones primitivas: Incorporadas por el lenguaje.
Acciones derivadas: realizadas mediante la combinacion de acciones primitivas con el objeto de desarrollar una tarea en particular. Son complementarias y pueden ser desarrolladas por el programador.
Acciones primitivas
Asignacion:
De entrada: permite cambiar el valor de una variable. Ya sea en forma interna o a través de algun dispositivo de entrada.
De salida: Permite mostrar el valor de una variable a través de algun dispositivo de salida.
Acciones primitivas
Analisis de casos: Permiten especificar la partición del dominio de datos.
Instrucción según: Especifica la partición en varios subdominios y asocia acciones a cada uno de ellos.
Instrucción si entonces si_no: cuando en un análisis de casos solo se tienen dos.
Acciones primitivas
Repeticiones: permiten ejecutar una determinada cantidad de veces una accion o conjunto de acciones.
Exactas: se conoce con precisión la cantidad de veces que las acciones se repetiran.
No exactas: la finalización del ciclo depende de alguna condición, pueden ser pre o pos condicionales.
Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos}
tempFahrenheit : Real // Contiene el valor que representa la temperatura en ºF
tempCelsius : Real // Contiene el valor que representa la temperatura en ºC
CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en ºF
ConvertirFahrenheitCelsius : Accion
PRE {TempFahrenheit >= CERO_ABSOLUTO}
POS {Convierte a Celsius una temp. En Fahrenheid}
tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0)
FIN ConvertirFahrenheitCelsius
ALGORITMO
Leer (tempFahrenheit)
ConvertirFahrenheitCelsius
Escribir(´La temp. En Celsius es : ´, tempCelcius)
FIN
Ejemplo
PROBLEMAS no algoritmicos.
AA + BB = CBC
DONALD + GERALD = ROBERT
El papa de Rebeca tiene 5 hijos chacha, cheche, chichi, chuchu, como se llama el otro hijo
Un granjero tenia 20 ovejas, todas menos nueve escaparon. Cuantas le quedaron?
Una botella de vino cuesta 10 $, el vino vale 9 $ mas que la botella. Cuanto vale cada cosa?
Matriz cuadrada impar N*N colocar N2 dígitos sin repetir
8 1 6
3 5 7
4 9 2
2 + 7 118 = 129
Problemas
Paramo de posibilidades
Meseta aparente sin indicios
Angosto cañon de exploracion
Oasis de falsas promesas
Salto del pensamiento
Larga busqueda
Escaso avance aparente
Acontecimiento desencadenante
Chasquido cognitivo
Transfomacion
Program Calculo;
var
notaTeoria, notaPractica, notaFinal : real;
begin
writeln;
writeln('***** Calculo de la nota final*****');
write('Nota de teoria: '); readln(notaTeoria);
write('Nota de practicas: ');
notaFinal := (notaTeoria + notaPractica) / 2;
write('La nota final es: , notaFinal:5:2); readln
end.
Ejemplo en Pascal
#include < stdio.h>
#include < conio.h>
int main () {
float notaTeoria, notaPractica; float notaFinal;
printf(" Calculo de la nota final de una asignaturan");
printf("Nota de teoria: "); scanf(" %f",¬aTeoria);
printf("Nota de practicas: "); scanf(" %f",¬aPractica);
notaFinal = (notaTeoria + notaPractica)// 2. 0;
printf("La nota final es: %.2fn", notaFinal);
printf("nPulse enter para continuar");
getchar();
return 0;
}
Ejemplo en C
Composicion secuencial
Tecnica de descomposicion algoritmica que disminuye la complejidad de un problema mediante la division en probemas mas pequeños, cuya solucion se puede abordar en forma independiente y la secuenciacion parcial permite alcanzar la solucion final.
Ejemplo
PROBLEMA: Dada una temperatura en grados Fahrenheit, escribir un algoritmo que obtenga la temperatura en grados Celsius.
LEXICO {Nombres significativos para identificadores significativos}
tempFahrenheit : Real // Contiene el valor que representa la temperatura en ºF
tempCelsius : Real // Contiene el valor que representa la temperatura en ºC
CERO_ABSOLUTO = -459.58 // Representa el valor del cero absoluto en ºF
ConvertirFahrenheitCelsius : Accion
PRE {TempFahrenheit >= CERO_ABSOLUTO}
POS {Convierte a Celsius una temp. En Fahrenheid}
tempCelsius = (5.0 / 9.0) * (tempFahrenheit 32.0)
FIN ConvertirFahrenheitCelsius
ALGORITMO
Leer (tempFahrenheit);
ConvertirFahrenheitCelsius;
Escribir(La temp. En Celsius es : ´, tempCelcius);
FIN
Analisis de casos
Consiste en descomponer el dominio de los datos en varios subdominios o casos y asociar a cada uno de ellos con una o mas acciones.
Cada caso es especificado mediante expresiones logicas mutuamente excluyentes y la union de los casos debe cubrir el dominio inicial de los datos.
Analisis de casos
Los estados iniciales de cada caso deben cubrir el dominio de los datos de entrada. Debe existir un caso para cualquier posible entrada.
Las condiciones de cada caso deben ser mutumente excluyentes.
Analisis de casos
0 < = N < 5 5< =N < 7 7< =N< =10
0 < = N< =5 5< =N< =7 7< =N< =10
0 < = N < 5 5 < N < 7 7 < N< =10
Ejemplo de posibles descomposiciones de valores entre 1 y 10
Instrucción segun
SEGÚN c1 … cn
e1 : a1
e2 : a2
. . .
en : an
FIN_SEGUN
SEGÚN c1 … cn
e1 : a1
e2 : a2
. . .
en : an
EN_OTRO_CASO : an+1
FIN_SEGUN
Especifica la particion del dominio de datos en varios subdominios y asocia acciones a cada uno de ellos.
PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Según el operador que muestre la suma, resta, multiplicacion o division.
LEXICO
Operando1, Operando2 : Entero;
Operador : Carácter;
ALGORITMO
Leer (Operando1, Operando2, Operador);
SEGÚN Operador
Operador = ´+´ : Escribir (Operando1 + Operando2)
Operador = ´-´ : Escribir (Operando1 – Operando2)
Operador = ´*´ : Escribir (Operando1 * Operando2)
Operador = ´/´ : Escribir (Operando1 Div Operando2)
FIN_SEGUN
FIN
PROBLEMA: Desarrollar un programa que simule una calculadoa simple. Que ingrese dos oprandos y un operador. Según el operador que muestre la suma, resta, multiplicacion o division.
LEXICO
Operando1, Operando2 : Entero;
Operador : Carácter;
ALGORITMO
Leer (Operando1, Oprando, Operador);
SEGÚN Operador
Operador = ´+´ : Escribir (Operando1 + Operando2)
Operador = ´-´ : Escribir (Operando1 – Operando2)
Operador = ´*´ : Escribir (Operando1 * Operando2)
Operador = ´/´ : Escribir (Operando1 Div Operando2)
EN_OTRO_CASO : Escribir(Operador no valido)
FIN_SEGUN
FIN
Instrucción SI ENTONCES SI_NO
Cuando el analisis de casos solo tiene 2 casos, la instrucción según se puede simplificar con la instrucción
SI exp ENTONCES a1 SI_NO a2 FIN_SI
Si exp ENTONCES a1 FIN_SI
PROBLEMA: Obtener el mayor de dos numeros
LEXICO
x, z, mayor : Entero;
ALGORITMO
PRE { ( x = X) y ( z = Z)}
POST { (( x>=z) ?(Mayor = X)) y ((z>x)?(Mayor=Z)) }
Leer (x, z);
SI x >= z
ENTONCES Mayor ? x
SI_NO Mayor ?z;
FIN_SI
Escribir(`El mayor es : ´,mayor);
FIN
Página anterior | Volver al principio del trabajo | Página siguiente |