Resolución de problemas.

Anuncio
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Resolución de problemas.
Definición: Una persona tiene un problema cuando se enfrenta con alcanzar una meta que no es capaz de lograr trivialmente. Ejemplos de problemas son:
 El deseo de arreglar un automóvil descompuesto.
 El deseo de vencer a un contrincante al ajedrez.
 El deseo de diseñar un edificio.
 El deseo de curarse de una afección.
 El deseo de comunicar el resultado de una investigación.
 El deseo de ser feliz.
 El deseo de llegar a tener cierto bienestar.
 El deseo de ser exitoso.
En términos sencillos un problema es una cuestión que se trata de aclarar.
Dicha cuestión puede pertenecer a hechos triviales del mundo cotidiano o a eventos
concretos del mundo científico o técnico, pero en definitiva existe un interrogante y una
o varias posibles respuestas.
Sin embargo no sólo es importante resolver un problema, sino también reconocer
cuando existe un problema.
En el mundo cotidiano resulta más difícil detectar un problema que resolverlo. Por
ejemplo un alumno observa que sus calificaciones son bajas, pero no reconoce cómo
mejorarlas.
En el mundo cotidiano los problemas se hallan mal estructurados.
Los problemas bien estructurados son aquellos cuyos pasos que conducen a la solución se pueden establecer en forma explícita y evidente. Por ejemplo, conociendo la
Ley de Ohm determinar las corrientes en el siguiente circuito:
+
E
R1
I1
R2
I2
-
En los problemas mal estructurados es difícil establecer los pasos necesarios para
arribar a una solución.
En el mundo cotidiano los problemas no indican en forma clara el tipo de información
necesaria para abordarlos, ni el sitio en el cual debe buscarse la información.
En el mundo cotidiano las soluciones a los problemas dependen del contexto y están
atravesadas por numerosas variables que pueden condicionar sus posibles soluciones. Los ejemplos clásicos de problemas utilizados en la enseñanza, llevan normalmente a una descontextualización.
Resolución de problemas y noción de Algoritmo
Pág. 1/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
En el mundo cotidiano los problemas dependen tanto del conocimiento oficial como del
conocimiento extraoficial.
En el mundo cotidiano la resolución de problemas importantes generan consecuencias
significativas. Por ejemplo resolver un problema puede ser la diferencia entre una vida
feliz o una vida infeliz.
La estrategia de resolución de problemas es mucho más rica que la aplicación mecánica de un algoritmo, pues implica crear un contexto donde los datos guarden una
cierta coherencia:




Ver qué datos son prioritarios.
Rechazar los elementos distorsionantes.
Escoger las operaciones que los relacionan.
Estimar el rango de la respuesta, etc.
Un hecho destacable es que la Matemática es común en los ciclos de estudio de todo
el mundo en todos los niveles. ¿Por qué? Porque constituye un idioma poderoso, conciso y sin ambigüedades. El objetivo fundamental de la Matemática no debería ser otro
que el de la resolución de problemas y a lo largo de esta segunda parte del curso nos
valdremos de muchos eventos matemáticos para desarrollar algoritmos.
Elemento básico para resolver problemas: SABER RAZONAR, SABER ELABORAR.
Razonar significa utilizar la razón o intelecto para relacionar los datos y arribar a una
explicación o solución de un problema. Esto suele ser un mecanismo abstracto y normalmente tenemos muchas fallas de razonamiento debido a que nos condicionamos
con facilidad. La mejor manera de combatir esta falla es resolver acertijos, de los cuales en Internet existen muchos, o bien revistas y libros especializados.
Un caso característico de condicionamiento o pensamiento lateral, es el siguiente
enunciado:
“Apagó la luz y se puso a leer”
El primero pensamiento que se nos ocurre es: “Si la luz estaba encendida es porque
era de noche o era un lugar muy oscuro, y si la apaga no podrá ver nada y por lo tanto
no podrá leer”. ¿Y si era ciego? No, ¿sino cómo sabría que la luz estaba encendida?
Por lo tanto no era ciego...
¿Entonces?...
Bueno, tan sencillo como que estaba leyendo de noche, amaneció y ya no fue necesaria la luz.
Ejemplos de razonamientos peligrosos:
Dos bomberos entran en un bosque a apagar un pequeño incendio. Al final, cuando
salen y van a la orilla de un riachuelo, uno de ellos tiene la cara llena de ceniza y el
otro está inmaculadamente limpio. ¿Cuál de los dos se lavará la cara?
En el acto responderíamos: “¡obviamente el que tiene la cara tiznada!”. ¡¡ Error !!
Resolución de problemas y noción de Algoritmo
Pág. 2/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Solución:
El que tiene la cara sucia verá al otro y pensará que está igual a él (con la cara limpia).
Y viceversa: el que tiene la cara limpia verá que su compañero está lleno de hollín por
todas partes y se dirá a sí mismo: “yo también debo estar sucio, tengo que lavarme”.
Ejemplo extraído del libro “El hombre que calculaba” de Malva Tahan”:
- ¿Traéis algo de comer? Me estoy muriendo de hambre...
- Me quedan tres panes – respondí.
- Yo llevo cinco – dijo a mi lado el Hombre que Calculaba.
- Pues bien – sugirió el Jeque – Yo os ruego que juntemos esos panes y hagamos un
reparte equitativo. Cuando llegue a Bagdag prometo pagar con ocho monedas de oro
el pan que coma.
Así lo hicimos.
Al día siguiente, al caer la tarde, entramos en la célebre ciudad de Bagdag, perla del
Oriente.
...................................
- Os dejo, amigos míos. Quiero, sin embargo, repetiros mi agradecimiento por el auxilio que me habéis prestado. Y para cumplir la palabra dada, os pagaré lo que tan generosamente dísteis.
Y dirigiéndose al Hombre que Calculaba le dijo:
- Recibirás cinco monedas por los cinco panes.
Y dirigiéndose a mí añadió:
- Y tú, Oh Bagdalí! recibirás tres monedas por los tres panes.
Más con gran sorpresa mía, el calculador objetó respetuoso:
- Perdón, oh Jeque! La división, hecha de ese modo, puede ser muy sencilla, pero no
es matemáticamente cierta. Si yo entregué 5 panes he de recibir 7 monedas. Mi compañero bagdagí que dio 3 panes, debe recibir una sola moneda.
- Por el Gran Mahoma! – intervino el gran Visir interesado vivamente en el caso ¿Cómo va a justificar este extranjero tan disparatado reparto?
El Hombre que Calculaba se acercó al prestigioso ministro y habló así:
- Voy a demostraros ¡Oh, Visir! que la división de las 8 monedas por mí propuesta es
matemáticamente cierta. Cuando durante el viaje teníamos hambre, yo sacaba un pan,
lo dividía en 3 pedazos, y cada uno de nosotros comía uno. Si yo aporté 5 panes,
aporté por consiguiente 15 pedazos ¿No es verdad? Si mi compañero aportó 3 panes,
contribuyó con 9 pedazos. Hubo así un total de 24 pedazos, correspondiendo por tanto
8 pedazos cada uno. De los 15 que aporté comí 8, luego di en realidad 7. Mi compañero aportó, como dije, 9 pedazos y comió también 8: luego dio sólo 1. Los 7 que yo di y
el restante que contribuyó el bagdalí formaron los 8 que correspondieron al Jeque,
luego es justo que yo reciba 7 monedas mi compañero sólo una.
El gran Visir, luego de hacer los mayores elogios del Hombre que Calculaba, ordenó
que le fueran entregadas las 7 monedas, pues por derecho, a mí sólo me correspondía
una.
Sin embargo, si bien el reparto resultó equitativo, no debió satisfacer plenamente a Beremitz, pues éste dirigiéndose al sorprendido ministro, añadió:
- Esta división que yo he propuesto es, como demostré ya, matemáticamente clara,
pero no perfecta a los ojos de Dios.
Y juntando las monedas nuevamente las dividió en dos partes iguales. Una me la dio a
mí, cuatro monedas, y se quedó con la otra.
Resolución de problemas y noción de Algoritmo
Pág. 3/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Resolución de problemas:
Es la exhibición de cualquier conducta que traiga como resultado acercarse a la satisfacción de deseos del tipo explicado, que casi no parecen ser logrables cuando ellos
aparecen. En general todo ser vivo está enfrentando como destino insoslayable el de
ser un resolvedor de problemas (con buen éxito o nó). Es una característica del ser
viviente.
Sin embargo nuestro objetivo es hallar alguna metodología básica para desarrollar
caminos lógicos que permitan resolver un problema.
Para la resolución de un problema deben considerarse 4 etapas:
a) Formulación o enunciación del problema.
La misma debe ser correcta, completa y sin ambigüedades.
Esto parece obvio, pero no lo es. La mayoría de las veces se requiere de aclaraciones
adicionales por imprecisiones en las que no pensamos. Imaginemos un ejemplo sencillo: “Determinar mediante la serie de Taylor vista en clase, el seno de los ángulos
comprendidos entre 0 y 90 grados”. Nos parece un buen enunciado, sin embargo en el
acto surgen dos preguntas: ¿Con cuántos decimales determinamos el seno? (con 2,
con 3, etc. lo cual fijaría el número de términos que poseerá nuestra Serie) ¿Qué paso
le damos a la tabla? Podemos tomar de 5 en 5 grados, ó de 1 en 1, etc.
b) Elección de un método o procedimiento.
Si un problema puede ser resuelto de varias maneras diferentes y no se especifica nada al respecto, la elección puede ser tan simple como “elijo el método A porque es el
que mejor conozco”, o si conozco todos los métodos puedo elegir “el método B porque
es al más eficiente y compacto”, o “el método C porque es el más general y adaptable
a cualquier variante del problema”. Lo importante es que, por una razón u otra, terminamos adoptando un camino de resolución.
c) Codificación.
Consiste en expresar el método elegido de manera que pueda ser interpretado por el
procesador que vaya a utilizarse, interpretándose como “procesador” ya sea a una
persona, un dispositivo electrónico, mecánico, etc.
d) Ejecución.
Poner en práctica el método o procedimiento elegido y obtener la solución del problema.
Resolución de problemas y noción de Algoritmo
Pág. 4/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Procesador, Ambiente y Acción.
Consideremos los siguientes enunciados:



Extraer la raíz cuadrada de un conjunto de números.
Decorar una habitación.
Construir una valla.
Cada uno de ellos implica una tarea o trabajo a realizar. Llamaremos PROCESADOR
a toda entidad capaz de comprender un enunciado y ejecutar el trabajo indicado en él.
El procesador que realizará la tarea (por ejemplo una persona) debe contar con el conocimiento y los recursos necesarios: herramientas, materiales, etc. Entonces:
El conjunto de todos los recursos necesarios para la ejecución de un trabajo constituye
el ambiente de ese trabajo.
En el caso de construir una valla, el ambiente de trabajo puede estar constituido por:
o
o
o
o
o
o
o
Postes.
Alambre.
Palas.
Picos.
Martillos.
Tenazas.
etc.
y lo más obvio: el conocimiento y experiencia para llevarlo a cabo.
En el caso de calcular la raíz cuadrada seguramente se requerirá de:




Papel para registrar los números.
Una calculadora.
Un elemento de escritura para hacer las anotaciones.
etc.
Sin embargo cualquiera sea el ambiente descripto, la ejecución de un trabajo no suele
ser inmediata y comprende un conjunto de pasos hasta llegar al objetivo propuesto. En
el caso de la valla:
1.
2.
3.
4.
Decidir distancia entre postes.
Cavar agujeros para los mismos.
Colocar los postes y pisonar fuertemente.
Colocar el alambre.
Cada una de estas tareas implica una ACCION que podemos definir como un evento
que modifica el ambiente.
Además estamos suponiendo que el PROCESADOR INTERPRETA cada una de las
acciones descriptas. Si el encargado de construir la cerca es un operario calificado,
con sólo indicarle: construya la cerca, será suficiente. Él determinará en base a la
magnitud del trabajo: la cantidad de postes, el tamaño y calidad de los mismos, el tipo
de alambre, etc. Pero ¿y si no lo es? ¿Si se trata de alguien que normalmente hace
otro tipo de tareas? Podríamos intentar una descripción más detallada como la indica-
Resolución de problemas y noción de Algoritmo
Pág. 5/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
da en la lista anterior donde hemos desmenuzado la tarea: construya una valla, en
otras subtareas menores que sí puedan ser comprendidas.
Si esquematizamos lo dicho hasta aquí podemos pensar que una ACCIÓN modifica el
ambiente desde un estado inicial Ei hasta un estado final Ef:
Ei
Distancia entre
postes
Ei
Construir una valla
Cavar agujeros
Colocar postes
Ef
Colocar alambres
Ef
Aún las subtareas de la derecha pueden no ser todavía comprendidas del todo y requieran un desdoblamiento mayor. Podríamos hacer nuevas subdivisiones de menor
complejidad hasta llegar a un conjunto de enunciados que ya no requieran mayores
explicaciones. Esto nos lleva al concepto de ACCIÓN PRIMITIVA:
Para un procesador dado, una acción es PRIMITIVA si su sólo enunciado
es suficiente para que pueda ser ejecutada sin necesidad de información
adicional.
Una ACCIÓN NO- PRIMITIVA puede ser descompuesta en acciones PRIMITIVAS a
través de un método denominado de REFINAMIENTOS SUCESIVOS (top-down)
Dado un trabajo T por medio de un enunciado NO-PRIMITIVO, tal que
transforme el ambiente desde un estado inicial Ei en un estado final Ef, se
puede encontrar una descomposición t1, t2, …., tn, que constituyan una
secuencia de enunciados PRIMITIVOS que ejecuten el trabajo T.
Ya estamos en condiciones de enunciar el significado de algoritmo:
Un algoritmo es una secuencia ordenada de acciones primitivas que puedan ser ejecutadas por un procesador dado y que lleve a la solución de
un problema.
Si bien la notación de los algoritmos puede ser enteramente personal, existe un conjunto de estructuras ya normalizadas para las acciones, y las mismas pueden englobarse dentro de los siguientes rubros:



Acciones simples.
Acciones condicionales.
Acciones repetitivas.
Resolución de problemas y noción de Algoritmo
Pág. 6/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
A los fines prácticos, utilizaremos en la notación de nuestras estructuras la forma normalizada en inglés, y lo que es más, por razones de tiempo trabajaremos directamente
con la sintaxis de Pascal:
Acciones simples.
Una acción simple puede ser:


Asignar valores a variables y constantes.
Aplicar una fórmula o expresión aritmética.
Variable:= valor
Constante = valor;
Nótese la diferencia: la asignación a una variable lleva los dos puntos verticales seguido del signo igual (:=), en tanto que para la asignación a una constante sólo lleva el
signo (=).
Por ejemplo:
const PI = 3.1415;
var
D:= 10;
Perímetro:= PI * D;
Son 3 acciones simples (no involucran repeticiones, condiciones, ni a otras acciones).
Acciones repetitivas:
Implican tareas en las cuales un cierto número de acciones debe repetirse hasta
completar una tarea. Imaginemos por ejemplo que tenemos 15 sillas dentro de un salón y debemos sacarlas de una en una y llevarlas hasta el patio del fondo.
Conocemos de antemano el número de repeticiones que debemos realizar: 15
For Cuenta:= 1 to 15 do
begin
Ir al salon;
Tomar una silla;
Transportarla hasta el patio del fondo;
end;
Cuando un conjunto de instrucciones formen parte de una estructura, englobaremos
las mismas entre las palabras begin – end a las cuales llamaremos DELIMITADORES. Estos delimitadores establecen el “bloque” de acciones que se repetirá y que se
hallan gobernadas (en este caso) por la estructura “For”. El contador (Cuenta) es una
variable que se incrementa automáticamente de 1 en 1.
El punto y coma (;) al final de cada tarea se denomina finalizador e indica que allí
termina el enunciado descriptor de la acción. Es una cuestión sintáctica bastante sencilla y fácil de familiarizarse.
Resolución de problemas y noción de Algoritmo
Pág. 7/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Nótese que en la escritura del algoritmo anterior hemos hecho abundante uso de
sangrías a fin de visualizar con toda claridad el orden de jerarquías: dónde comienza
y dónde finaliza cada parte del algoritmo y cuáles acciones dependen de cada estructura de control.
La estructura Repeat – Until (condición).
Ahora imaginemos el mismo problema anterior, pero en lugar de 15 sillas existe una
cantidad no establecida y difícil de contar. No sabemos si debemos repetir 15, 20 ó
100 veces el proceso de tomar una silla y llevarla al patio del fondo. En este caso hacemos uso de:
Repeat
Ir al salón.
Tomar una silla.
Transportarla hasta el patio del fondo.
Until (no quede ninguna silla)
Lo cual es equivalente a tomar una silla, llevarla al patio y luego preguntar: ¿se acabaron las sillas? Si la respuesta es NO, repita el proceso y así sucesivamente hasta que
no quede ninguna. Obviamente el lazo se repite por la condición negada.
Otro detalle destacable es que la estructura Repeat – Until, no requiere de delimitadores de bloque begin / end, puesto que estas palabras en sí ya lo son. Si bien esta estructura puede utilizarse en cualquier tipo de repeticiones, normalmente se la emplea
cuando el bloque de acciones DEBE EJECUTARSE AL MENOS UNA VEZ, puesto
que la evaluación de finalización de las repeticiones se lleva a cabo AL FINAL de la
estructura. Para que el lazo no sea infinito, dentro del bloque ejecutable debe existir al
menos una cláusula o instrucción que modifique en algún momento la condición lógica
y se llegue a una situación de salida.
La estructura While (condición) do.
Continuamos con nuestro caballito de batalla: las sillas.
While (queden sillas) do
begin (comenzar bloque de acciones)
Ir al salón.
Tomar una silla.
Transportarla hasta el patio del fondo.
end; (finalizar bloque de acciones)
Mientras queden aún sillas, hacer lo siguiente (las acciones entre los delimitadores
begin – end). Los elementos destacables de esta estructura son:


La condición de finalización de repeticiones se evalúa al comienzo del bloque.
Las repeticiones se realizan por condición verdadera.
Resolución de problemas y noción de Algoritmo
Pág. 8/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.


El bloque de acciones puede no ejecutarse nunca si la condición de entrada falla.
Debe existir al menos una cláusula (dentro del bloque ejecutable) que modifique en algún momento la condición lógica a fin de lograr una situación de salida.
Algunos ejemplos:
Ejemplo 01:
“Sumar números enteros consecutivos hasta que la suma sea mayor que 200”.
En toda tarea nos planteamos de entrada: ¿qué recursos necesitamos?
En este caso:
Un acumulador de Sumas (entero).
Un indicador incremental para los sumandos individuales (entero).
Solución I: utilizando la estructura repeat until
(* Programa: Suma de enteros consecutivos. *)
uses crt;
var Suma : integer;
N
: integer;
begin (* main *)
clrscr; { borrar pantalla }
Suma:=0; N:=1;
repeat
Suma:= Suma+N;
N:= N+1;
until (Suma>200);
writeln('Suma=',Suma); { Mostrar valor de Suma }
end.
Nota1: La instrucción "writeln( )", envía mensajes a pantalla. Admite literales entre
apóstrofes (texto) y listas de variables y constantes.
Nota2: Si el local estaba vacío puede generarse un error, ya que entra siempre una
vez al lazo, cuenta 1 (inexistente) y sale porque no hay ninguna silla.
Nota3: la notación uses crt, le indica al programa dónde buscar las instrucciones para
manejo de pantalla, como:
clrscr
gotoxy(Col, Fila)
textcolor(WHITE)
readkey
Borrar pantalla.
Enviar el cursor a la posición Col, Fila de pantalla.
Imprimir caracteres en color blanco.
Detener ejecución hasta tocar una tecla cualquiera.
Resolución de problemas y noción de Algoritmo
Pág. 9/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Nota4: La instrucción end. (con punto final), establece que allí finaliza el programa. Si
existiera algo luego de esta sintaxis, es ignorado.
Nota5: La notación (* ..... *) o bien { ....... } se utiliza para comentarios o aclaraciones.
No son instrucciones ejecutables.
Solución II: utilizando la estructura while do.
(* Programa: Suma de enteros consecutivos. *)
uses crt;
var
Suma : integer;
N
: integer;
begin (* main *)
clrscr; Suma:=0; N:=1;
While(Suma<=200) do
begin
Suma:= Suma+N;
N:= N+1;
end;
writeln('Suma = ',Suma);
end.
Ambos algoritmos son equivalentes y llegan exactamente al mismo resultado.
Ejemplo 02: Calcular el factorial de 5.
Este es un caso típico para utilizar la estructura Para, puesto que conocemos el número de repeticiones que debemos realizar.
(* Programa: Calcular el factorial de 5 *)
uses crt;
var
Fact : integer;
N
: integer;;
begin (* main *)
clrscr; Fact:=1;
For N:= 2 to 5 do Fact:=Fact * N;
writeln('Factorial de 5 = ',Fact);
end.
Detalle: Cuando un bloque repetitivo sólo posee una única acción, pueden omitirse
los delimitadores begin - end (aunque si lo desea puede incluirlos).
Resolución de problemas y noción de Algoritmo
Pág. 10/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Estructuras de decisión condicional.
Son aquellas que, mediante una evaluación lógica (que puede ser verdadera o falsa),
pueden optar entre distintas acciones. Poseen dos formas básicas:
Forma 01:
If (condición) then (* Si condición=verdadera, entonces *)
begin (* comenzar bloque de acciones *)
Acción 01;
Acción 02;
………….
end; (* finalizar bloque de acciones *)
Forma 02:
If (condición) then (* Si condición=verdadera, entonces *)
begin (comenzar bloque de acciones A)
Acción 01_A;
Acción 02_A;
………….
end (* finalizar bloque de acciones A *)
Else begin (* caso contrario, comenzar bloque de acciones B *)
Acción 01_B;
Acción 02_B;
……………..
end; (* finalizar bloque de acciones B *)
Ejemplo:
(* Programa: Sumar dos magnitudes horarias *)
uses crt;
var
H1, M1, S1: integer; (* p/ almacenar la primer magn. horaria *)
H2, M2, S2: integer; (* p/ almacenar la segunda magn horaria *)
H, M, S
: integer; (* p/ almac la suma de las magn anteriores *)
Dias
: integer;
begin (* main *)
clrscr;
H1:= 14;
M1:= 22;
S1:= 15;
H2:= 2;
M2:= 40;
Resolución de problemas y noción de Algoritmo
Pág. 11/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
S2:= 55;
Dias:=0;
H:= H1+H2;
M:= M1+M2;
S:= S1+S2;
if(S>=60)then begin
S:=S-60;
M:=M+1;
end;
if(M>=60)then begin
M:=M-60;
H:=H+1;
end;
if(H>=24)then begin
H:=H-24;
Dias:=Dias+1;
end;
writeln(H,':',M,':',S);
end.
(* Programa: Determinar el Mín de un conjunto de 4 valores *)
uses crt;
var
N1 : integer;
N2 : integer;
N3 : integer;
N4 : integer;
begin (* main *)
clrscr; N1:=18; N2:=22; N3:=14; N4:=38;
Min := N1; (* suponemos este valor de arranque *)
If (N2<Min) then Min:= N2;
If (N3<Min) then Min:= N3;
if (N4<Min) then Min:= N4;
writeln('Minimo = ',Min);
end.
Resolución de problemas y noción de Algoritmo
Pág. 12/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Una pequeña variación del problema anterior podría ser:
(* Programa: Determinar el Mín de un conjunto de 4 valores *)
uses crt;
var
N1 : integer;
N2 : integer;
N3 : integer;
N4 : integer;
begin (* main *)
clrscr; N1:=18; N2:=22; N3:=14; N4:=38;
If (N1<N2) then Min := N1
Else Min:= N2;
If (N3<Min) then Min:= N3
If (N4<Min) then Min:= N4;
Mostrar valor de Min;
FINALIZAR ALGORITMO.
Finalmente una forma un poco complicada pero ilustrativa por los anidamientos sería
la siguiente:
(* Programa: Determinar el Mín de un conjunto de 4 valores *)
uses crt;
var
N1 : integer;
N2 : integer;
N3 : integer;
N4 : integer;
begin (* main *)
clrscr; N1:=18; N2:=22; N3:=14; N4:=38;
If (N1<N2) then begin
if(N1<N3)then begin
if(N1<N4)then Min:=N1
else Min:=N4
end
else if(N3<N4)then Min:=N3
else Min:=N4
end
Resolución de problemas y noción de Algoritmo
Pág. 13/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
else begin
if(N2<N3)then begin
if(N2<N4)then Min:=N2
else Min:=N4
end
else if(N3<N4)then Min:=N3
else Min:=N4;
end;
writeln('Minimo = ',Min);
end.
Obviamente la primera resolución es la más indicada por su sencillez, aunque si observa con cuidado notará que ésta se halla contenida en la actual.
Variando un poco este problema podemos adaptarlo para una estructura repetitiva:
“Leer 5 magnitudes numéricas enteras y determinar el máximo y el mínimo valor leído”.
(* Programa: Determinar Máx y Mín en un conjunto numérico *)
uses crt;
var
Min
: integer;
Max : integer;
Actual : integer;
i
: integer;
begin (* main *)
clrscr; Min := 32767; Max:= -32768;
randomize;
for i:=1 to 5 do begin
Actual:=100+random(900);
if(Actual<Min) then Min:=Actual;
if(Actual>Max) then Max:=Actual;
end;
writeln('Min = ',Min,' Max=',Max);
end.
Nota: random(N) genera aleatorios enteros en el rango 0, N-1
“Generar la Serie de Fibonacci hasta el momento en que el término actual sea igual
o mayor de 250. Al mismo tiempo ir detectando si cada término es PAR o IMPAR e indicar con un mensaje a la par del término”.
Resolución de problemas y noción de Algoritmo
Pág. 14/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
La Serie de Fibonacci se obtiene haciendo que el término actual (Fibo) sea igual a la
suma de los dos anteriores, tomando como los dos primeros valores: 0 y 1.
(* Programa: Serie de Fibonacci *)
uses crt;
var
Primero : integer;
Segundo : integer;
Fibo
: integer;
begin (* main *)
clrscr; Primero:= 0; Segundo:= 1;
writeln(Primero);
writeln(Segundo,' impar') ;
repeat
Fibo:= Primero + Segundo;
Primero:= Segundo;
Segundo:= Fibo;
If (Resto de Fibo / 2 = 0) then
writeln(Fibo,‘ PAR’);
else
writeln(Fibo,' IMPAR’);
Until (Fibo >= 250);
end.
Determinar los números Primos comprendidos dentro de los 2500 primeros valores
consecutivos (comenzando de 4, obviamente).
Para tal determinación se analizarán los restos de la división entera desde 2 hasta
ENTERO(sqrt(N)).
(* Programa: Determinación de números Primos *)
uses crt;
var
NPrimeros : integer;
N, i
: integer;
EsPrimo
: boolean;
(* sólo puede tomar valor true/false *)
begin (* main *)
clrscr; NPrimeros:= 2500;
for N:= 4 to NPrimeros do begin
Resolución de problemas y noción de Algoritmo
Pág. 15/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
EsPrimo:= true;
For i:= 2 to trunc(sqrt(N) ) do begin
If (MOD(N / i)=0) then EsPrimo:= Falso;
end; (* del for *)
If (EsPrimo = true) then writeln(N);
end;
end.
DIAGRAMA DE FLUJO.
¿Qué es?
Un Diagrama de Flujo es una representación pictórica de los pasos en un proceso, útil
para determinar cómo funciona realmente el proceso para producir un resultado. El
resultado puede ser un producto, un servicio, información o una combinación de los
tres. Al examinar cómo los diferentes pasos en un proceso se relacionan entre sí, se
puede descubrir con frecuencia las fuentes de problemas potenciales.
Elementos de un diagrama de flujo.
Trayectorias de Procesos.
Procesos, Tareas o Transformaciones.
Decisiones condicionales.
Entrada de datos.
Mostrar datos en display.
Salida a impresora.
Almacenamiento en cinta.
Resolución de problemas y noción de Algoritmo
Pág. 16/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Almacenamiento en disco magnético.
Inicio / Fin de procesos.
Conexión entre procesos.
Para las estructuras repetitivas tendríamos:
no
condición
sí
instrucciones
instrucciones
Estructura Para
Estructura Mientras condición
instrucciones
condición
sí
Estructura Repetir Hasta que cond.
no
Resolución de problemas y noción de Algoritmo
Pág. 17/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Reglas para la creación de Diagramas
1. Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda
a derecha.
2. Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que
indica la dirección que fluye la información procesos, se deben de utilizar solamente líneas de flujo horizontal o verticales (nunca diagonales).
3. Se debe evitar el cruce de líneas, para lo cual se quisiera separar el flujo del
diagrama a un sitio distinto, se pudiera realizar utilizando los conectores. Se
debe tener en cuenta que solo se van a utilizar conectores cuando sea estrictamente necesario.
4. No deben quedar líneas de flujo sin conectar
5. Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el
uso de muchas palabras.
6. Todos los símbolos pueden tener más de una línea de entrada, a excepción del
símbolo final.
7. Solo los símbolos de decisión pueden y deben tener más de una línea de flujo
de salida.
Ejemplo:
Una lámpara eléctrica no funciona y se desea considerar todas las posibilidades de
falla hasta hallar una solución.
Ver página siguiente.
Resolución de problemas y noción de Algoritmo
Pág. 18/19
INFORMATICA – C.B.I. (Ciclo Básico de Ingeniería) - 2014
Grupo II – Dictado: Ing. Juan Manuel Conti.
Lámpara no funciona
Enchufada?
No
Enchufarla
Sí
Enciende?
No
Foco quem?
Sí
No
Sí
Revisar enchufe
Cambiar foco
Enciende?
Sí
Enciende?
No
Sí
No
Revis. zócalo
No
Enciende?
Sí
Revis. llave
No
Enciende?
Sí
Revis. cable
Resolución de problemas y noción de Algoritmo
Pág. 19/19
Descargar