Teoría de Introduccion ALa Programacion Segunda Parte
Teoría de Introduccion ALa Programacion Segunda Parte
1 Año 2017
Introducción
La palabra ciencia se relaciona con una metodología fundada y racional para el estudio y
resolución de problemas.
Resolución de problemas
Si se piensa en la forma en que una persona indica a otra cómo resolver un problema, se
vería que habitualmente se utiliza un lenguaje común y corriente para realizar la explicación,
quizás entremezclado con algunas palabras técnicas. Esto es un riesgo muy grande. Los que tienen
cierta experiencia al respecto saben que es difícil transmitir el mensaje y por desgracia, con mucha
frecuencia se malinterpretan las instrucciones y por lo tanto se “ejecuta incorrectamente” la
solución, obteniéndose errores.
Además, para poder indicar a la computadora las órdenes que debe realizar es necesario
previamente entender exactamente lo que se quiere hacer. Es fundamental conocer con qué
información se cuenta y qué tipo de transformación se quiere hacer sobre ella.
Una vez que se comprende un problema, se debe decidir qué tipo de problema es. Dos tipos
de problemas comunes son:
Los problemas de computación pertenecen a una tercera clase: los problemas que buscan
métodos. Aquí se busca un método mediante el cual se pueda derivar una respuesta.
Esta es una simplificación porque una vez que se tiene un método es necesario expresar este
método en una forma en que la computadora pueda operarlo (un programa).
Etapa 1: Identificar el problema, dando respuesta a qué resultado se debe obtener, qué
datos están disponibles, y qué condiciones o restricciones se deben tener en cuenta para la
resolución.
Etapa 3: Explorar las posibles estrategias para solucionar el problema y seleccionar la más
conveniente.
El proceso así presentado, está muy simplificado, ya que una vez obtenido el método (o
resuelto cómo hacerlo) es necesario expresarlo en una forma que pueda ser operado/ejecutado
por el computador. Por tanto el profesional informático deberá realizar tres trabajos: Creación del
algoritmo, Codificación del algoritmo creado y Operación del algoritmo en el computador.
2. Codificación del algoritmo creado. Una vez obtenido el algoritmo, debe ser escrito en un
lenguaje de programación, de manera que pueda ser interpretado por el computador. Como
resultado de este paso se obtiene un programa.
2. ALGORITMOS
2.1. Introducción
Es importante recordar mientras diseñamos un algoritmo que una computadora sólo sigue
las instrucciones y no puede actuar si no se le ha ordenado de manera explícita. Por lo tanto, el
solucionador de problemas debe preveer cualquier aspecto del problema en el propio algoritmo.
La palabra algoritmo deriva del nombre de un matemático árabe del siglo IX, llamado
Alkhuwarizmi, quien estaba interesado en resolver ciertos problemas de aritmética y describió
varios métodos para resolverlos. Estos métodos fueron presentados como una lista de
instrucciones específicas (como una receta de cocina) y su nombre se utiliza para referirse a dichos
métodos.
2.2. Definición.
Un algoritmo puede definirse como una secuencia ordenada de pasos elementales, exenta
de ambigüedades, que lleva a la solución de un problema dado en un tiempo finito.
Ejemplo: Escriba un algoritmo que permita preparar una tortilla de papas de tres huevos.
Si la persona que resuelva el problema es un cocinero, lo resuelve sin mayor nivel de detalle,
pero si no lo es, se deben describir los pasos necesarios para realizarlo:
Paso 2: Freir.
Esto podría resolver el problema. Pero si la persona que lo ejecute no sabe cocinar, se debe
detallar cada uno de los pasos mencionados, pues estos no son lo bastante simples para un
principiante. De esta manera el primer paso se puede descomponer en:
Nótese que si la tortilla la va a ejecutar un niño, algunas tareas, por ejemplo batir huevos,
pueden necesitar una mejor especificación.
Con este ejemplo se pretende mostrar que la lista de pasos elementales que compongan
nuestro algoritmo depende de quién sea el encargado de ejecutarlo. Si en particular, el problema
va a ser resuelto utilizando una computadora, el conjunto de pasos elementales conocidos es muy
reducido, lo que implica un alto grado de detalle para los algoritmos.
Se considera entonces como un paso elemental aquel que no puede volver a ser dividido
en otros más simples.
Ejemplo: Escriba un algoritmo que describa la manera en que usted se levanta todas las
mañanas para ir al trabajo.
Paso 3: Ducharse.
Paso 4: Vestirse.
Paso 5: Desayunar.
La solución del problema se expresó en seis pasos, descartando aspectos que se suponen o
sobreentienden, como “colocarse los zapatos al vestirse” o “abrir la puerta del auto”, pues a nadie
se le ocurriría ir a trabajar descalzo. En cambio existen aspectos que no pueden obviarse o
suponerse porque el algoritmo perdería lógica. Por ejemplo, el paso “vestirse” no puede ser
omitido. Puede discutirse si se requiere un mayor nivel de detalle o no, pero no puede ser
eliminado del algoritmo.
Generalidad. Un algoritmo se puede realizar para varios problemas que se relacionan entre
sí. Es decir, se debe aplicar a un problema o clase de problemas específicos.
Incorrecto: Si la solución del algoritmo sirve para marcar solamente el número 4220234,
sólo tendrá valor para ese número.
Correcto: Si la solución es un método para marcar cualquier número, entonces es útil. Por
supuesto, debe haber alguna restricción a la generalidad de un algoritmo.
Algoritmo: tome una pala y empiece a echar arena en la zanja. Cuando se llene la zanja
deténgase. (Se está seguro de que en algún momento parará, aunque no se sabe cuánto tardará).
La clase o el conjunto de datos y las condiciones para las cuales un algoritmo trabaja
correctamente se llama dominio. Cuando se trata de resolver cualquier problema es necesario
definir el dominio del algoritmo y después verificar que trabaja para todos los casos que se
encuentran dentro de ese dominio.
Corregir el algoritmo.
Etapas incorrectas.
Secuencia incorrecta de etapas.
SIMBOLO SIGNIFICADO
El diagrama de flujo refleja los pasos sucesivos que el computador debe dar para llegar a la
solución de un problema. Las principales razones por las cuales es generalmente aconsejable el
trazado de un diagrama de flujo son las siguientes:
Oportunidad de verificar la lógica de la solución.
Sirve de guía al programador para la codificación del programa.
Permite fácilmente modificar un programa.
Es útil para la discusión grupal.
Sirve para documentar el programa.
ACTIVIDAD N° 1: ALGORITMOS.
1- Dados los enunciados de los siguientes problemas y sus correspondientes algoritmos de
solución, decir si las soluciones propuestas cumplen con las propiedades que debe tener un
algoritmo. En el caso de no hacerlo, indicar cuáles son los errores.
a) Problema: Abordar un taxi.
1. Situarse al borde de la acera de cara al lado opuesto de la calle.
2. Buscar la señal de taxi.
3. Al ver la señal, silbar y hacer ademanes para llamar su atención.
Problema: Preparar una taza de café con leche. Considerar que se cuenta con todos los
elementos necesarios.
1. Buscar la taza.
2. Calentar la leche.
3. Encender la hornalla.
4. Endulzar.
5. Agregar leche al café.
6. Hacer el café.
7. Fin.
2. Quitarse el pijama.
3. Ducharse.
4. Vestirse.
5. Desayunar.
6. Arrancar el auto para ir al trabajo.
Acción 1
Acción 2
Acción 3
[Link] de Selección.
SI (condición)
Entonces
acción o acciones a realizar si la condición es verdadera (1)
Si no
acción o acciones a realizar si la condición es falsa (2)
FinSi
donde condición es una expresión que al ser evaluada puede tomar solamente uno de los
dos valores posibles: verdadero o falso.
En el caso que la condición a evaluar resulte verdadera, se ejecutarán las acciones (1) y no
se ejecutarán las acciones (2). Si la condición a evaluar resulta falsa, se ejecutarán las acciones (2)
y no las acciones (1).
Evaluar
condición
Puede ocurrir que no se tengan que representar acciones cuando la condición es falsa. En
este caso se utilizará la siguiente notación:
Si (condición)
entonces
Acción o acciones a realizar si la condición es verdadera
FinSi
Evaluar
condición
Acciones si la condición es
verdadera
Si al evaluar una decisión toma más de dos valores, se utilizará la siguiente notación:
Si (variable de decisión)
Valor 1: Acción 1
Valor 2: Acción 2
…………………………
Valor N: Acción N
[Otro: Acción N + 1]
Evaluar la variable
de decisión
Solución 1 Solución 2
Si no 4. Fin Si.
5. Fin Si 6. Fin.
6. Fin.
b) Hacer una llamada telefónica desde un teléfono público a moneda. Considere que se cuenta
con la moneda y siempre se encuentra un teléfono.
Solución 1 Solución 2
Solución 1 Solución 2
1. Tomar el libro.
2. Obtener el número de la página deseada y llamarla X.
3. Abrir el libro en la página 1.
4. Si (el número de página es igual a X)
Entonces
5. Vaya al paso 8.
Si no
6. Pasar una hoja si es necesario.
7. Fin Si.
8. Fin.
2.- Escriba los algoritmos de solución para los siguientes problemas. Luego realice los diagramas de
flujo correspondientes.
a) Preparar un té. Considere que si no dispone de un saquito de té, entonces debe preparar un
matecocido, y que de seguro existe el saquito de matecocido. Tenga en cuenta que la preparación
de las dos infusiones tienen muchos pasos en común.
b) Una persona desea ingresar a un recital a beneficio. Para obtener la entrada al mismo, deberá
presentarse en la ventanilla del club con un bolsón de pañales o bien con una caja de leche. En el
caso de que la persona no lleve los pañales o la leche, podrá comprar la entrada en la ventanilla de
dicho club.
c) Juan programó jugar al básquet con sus amigos el jueves de la semana que viene. En caso de no
poder hacerlo, irá a visitar a su novia. El partido se realizará en la cancha del parque Aguirre si no
llueve; mientras que si está lloviendo a la hora programada, jugarán en es estadio techado del
colegio siempre y cuando no esté ocupado.
d) Una persona va por la ruta y se le pincha una rueda. Para cambiar la misma deberá contar con
tres elementos (gato mecánico, rueda de auxilio y llave inglesa), los cuales no sabe si se
encuentran en el baúl del auto. Si no posee alguno de estos elementos necesarios, llamará a la
grúa de auxilio.
Estructura de iteración
Consiste en repetir N veces un bloque de acciones. El fin de la repetición dependerá de un valor
predefinido o del cumplimiento de una determinada condición.
Iteración.
Las estructuras de iteración se clasifican en pre-condicionales y pos-condicionales.
Las estructuras pre-condicionales evalúan la condición y, si es verdadera, se ejecuta el conjunto de
acciones; esto hace que dicho conjunto se pueda ejecutar 0, 1 o más veces.
Notación:
Mientras (condición)
Acción o acciones a realizar en caso de que la condición sea verdadera
Fin Mientras
La condición es una expresión que sólo puede tener uno de dos valores posibles: verdadero o
falso.
Gráficamente:
Iteración pos-condicional
En las estructuras pos-condicionales, primero se ejecuta el conjunto de acciones, luego se evalúa
la condición y, si es falsa, se ejecuta nuevamente el bloque de acciones.
El conjunto de acciones se ejecuta 1 o más veces.
Notación:
Repetir
Acción o acciones a realizar en caso de que la condición sea falsa
Hasta (condición)
Gráficamente:
Ejercicios.
1) Dados los enunciados de los siguientes problemas y sus correspondientes algoritmos de
solución, utilizando estructuras de control de selección, representar con diagrama de flujo cada
solución propuesta y luego indicar para cada una si se llega al resultado deseado.
Solución 1 Solución 2
b) Se necesita hornear una pizza en un horno defectuoso. El horno se apaga cada cierto tiempo y
debe ser encendido nuevamente. Como condición sabemos que tenemos una cantidad ilimitada
de fósforos y disponemos de la prepizza y todos los elementos necesarios.
Solución 1: Solución 2:
1. Encender el horno 1. Encender el horno
2. Poner la pizza en el horno 2. Poner la pizza en el horno
3. Si (el horno se apagó) 3. Mientras (no esté lista la pizza)
Entonces 4. Esperar 1 minuto
4. Encender nuevamente el horno 5. Si (el horno se apagó)
5. FinSi Entonces
6. Si (no está lista la pizza) 6. Encender nuevamente
el horno
Entonces 7. FinSi
7. Esperar 1 minuto 8. FinMientras
8. FinSi 9. Apagar el horno
9. Apagar el horno 10. Sacar la pìzza
10. Sacar la pizza 11. Fin.
11. Fin.
c) El Señor Lombardi ha recibido su pago en un único cheque. Para cobrarlo deberá presentarse en
el banco con su DNI, y este le pagará siempre y cuando la cuenta tenga fondos.
Solución 1: Solución 2:
1. Entrar al banco 1. Entrar al banco
2. Colocarse en la caja correspondiente 2. Colocarse en la caja correspondiente
3. Mientras (no le llega el turno) 3. Repetir
4. Esperar 1 minuto 4. Esperar un minuto
5. FinMientras 5. Hasta (que le llegue el turno)
6. Si (tiene el cheque) 6. Si (tiene el cheque)
Entonces Entonces
7. Si (tiene el DNI) 7. Si (tiene el DNI)
Entonces Entonces
d) Juan se encuentra sintonizando la radio para escuchar el programa “R & P”. Luego de escuchar el
programa, debe apagar la radio. Considere que el programa está siendo actualmente transmitido.
Solución 1: Solución 2:
1. Encender la radio 1. Encender la radio
2. Sintonizar una estación de radio 2. Repetir
3. Si (están transmitiendo “R & P”) 3. Sintonizar una estación de radio
Entonces 4. Hasta (está transmitiendo “R & P”)
4. Escuchar el programa 5. Escuchar el programa
5. FinSi 6. Apagar la radio
6. Apagar la radio 7. Fin.
7. Fin.
Solución 3:
1. Encender la radio
2. Mientras (no estén transmitiendo “R & P”)
3. Sintonizar una estación de radio
4. FinMientras
5. Escuchar el programa
6. Apagar la radio
7. Fin.
e) Con el fin de mejorar el arbolado de la Av. Belgrano, la municipalidad desea plantar 300
ligustros con una distancia de 1 metro entre ellos. Para realizar dicha tarea resulta necesario
descargar el ligustro, cavar un pozo y plantarlo.
Solución 1. Solución 2.
Paso 1. Detener el camión. Paso 1. Detener el camión.
Paso 2. Repetir Paso 2. Mientras (no se hayan plantado los
300 ligustros)
Paso 3. Descargar el ligustro. Paso 3. Cavar un pozo
Paso 4. Cavar un pozo. Paso 4. Descargar el ligustro.
Paso 5. Plantar el ligustro. Paso 5. Plantar el ligustro.
Paso 6. Contar que se ha plantado un ligustro más. Paso 6. Avanzar un metro.
Paso 7. Hasta (se han plantado 300 ligustros) Paso 7. FinMientras.
Paso 8. Encender el camión. Paso 8. Encender el camión.
Paso 9. Fin. Paso 9. Fin.
Solución 3.
Paso 1. Detener el camión.
2) Escriba los algoritmos de solución para los siguientes problemas, teniendo en cuenta el uso de las
estructuras de control correspondientes.
a) Una pileta debe ser vaciada utilizando un balde. Considere que no conoce cuántos baldes necesitará
sacar para vaciar la pileta.
b) Trasladar 70 cajas, de 30 kg. cada una, desde la sala A hasta la sala B. Considere que sólo llevará una
caja a la vez porque el contenido es muy frágil. Para realizar el trabajo debe ponerse un traje
especial y quitárselo luego de haber realizado el trabajo.
c) Ud. desea ordenar una bolsa con 54 fotografías viejas de manera que todas queden al derecho: esto
es, con la imagen hacia usted y cabeza arriba.
d) Usted desea comprar la revista “Crucigramas” que cada mes tiene reservada en el puesto de revistas
que se encuentra en la esquina de su casa, al otro lado de la calle. Verifique que no pasen autos
antes de cruzar.
MANEJO DE DATOS
Datos simples.
Los programas que implementan los algoritmos necesitan alguna manera de representar los objetos del
mundo real. Para ello los algoritmos operan sobre datos y estructuras de datos de distinta naturaleza, tales
como números, letras, símbolos, etc.
Por lo tanto, un dato es la expresión general que describe los objetos con los cuales opera una
computadora. Los tipos de datos están ligados a un conjunto de operaciones que permite su creación y
manipulación.
Los tipos de datos se caracterizan por:
Un rango de valores posibles
Un conjunto de operaciones realizables sobre ese tipo
Su representación
Enteros.
El tipo entero consiste de un subconjunto finito de los números enteros y su tamaño puede variar según
el valor que tenga:
Dado que una computadora tiene memoria finita, la cantidad de valores enteros que se pueden
representar sobre ella son finitos, por esto se deduce que existe un número entero máximo y otro mínimo.
La cantidad de valores que se pueden representar depende de la cantidad de memoria (bits) que se
utilicen para representar un entero.
Ejemplo:
En general, para cada computadora existe el entero maxint, tal que todo número entero n puede ser
representado si
-maxint <= n <= maxint
Donde maxint identifica al número entero más grande que se puede representar con la cantidad de
dígitos binarios disponibles.
Reales
El tipo de dato real es una clase de dato numérico que permite representar números decimales. Los
valores fraccionarios forman una serie ordenada, desde un valor mínimo negativo, hasta un valor máximo
determinado por la norma IEEE 754, de 1985, pero los valores no están distribuidos de manera uniforme en
ese intervalo, como sucede con los enteros.
Se debe tener en cuenta que el tipo de dato real tiene una representación finita de los números reales;
dicha representación tiene una precisión fija, es decir, un número finito de dígitos significativos. Esta
condición es la que establece una diferencia con la representación matemática de los números reales. En
este caso se tienen infinitos números diferentes, en tanto que la cantidad de representaciones del tipo de
dato real está limitada por el espacio en memoria disponible.
La representación para números reales se denomina coma flotante. Esta es una generalización de la
conocida notación científica, que consiste en definir cada número como una mantisa (o fracción decimal),
que da los dígitos contenidos en el número; y un exponente (o característica), que determina el lugar del
punto decimal con respecto a estos dígitos.
Se debe tener en cuenta que no es lo mismo el valor entero 1 que el símbolo carácter ‘1’. Un valor del
tipo de dato carácter es solo uno de los símbolos mencionados.
Ejemplo:
Se utiliza en casos donde se representan dos alternativas a una condición. Por ejemplo, si se debe
determinar si un valor es primo; la respuesta será verdadera (true) si el número es divisible solamente por sí
mismo y la unidad; en caso contrario, si tiene algún otro divisor, la respuesta será falsa (false).
Operadores Aritméticos
+ Suma
- Resta
* Multiplicación
/ División
^ Potencia
Una Expresión Aritmética es aquella que cuando se la evalúa siempre se obtiene un resultado
numérico.
Operadores Relacionales
< Menor
> Mayor
<= Menor igual
>= Mayor igual
= Igual a
<> Distinto a
Ejemplo:
Operadores Lógicos
Los operadores lógicos o booleanos básicos son:
Negación (Not)
Conjunción (And)
Disyunción (Or)
Los operadores relacionales y lógicos mencionados anteriormente, que permiten comparar dos
valores, dan como resultado un valor lógico.
Para cada operador lógico se define un símbolo, los cuales se muestran en la tabla 2.1.
Operación Operador Simbolización
Conjunción Y / AND ^
Disyunción O / OR V
Negación NO / NOT ~
Tablas de verdad
Para poder analizar cualquier proposición compuesta y decir qué valore de verdad tiene, es usual
hacerlo a través de lo que se conoce como tabla de verdad, la cual se define de la siguiente manera:
La tabla de verdad de una proposición es, como su nombre lo indica, una tabla donde se muestran
todas las combinaciones posibles de los valores de verdad de dicha proposición.
Conjunción
Dadas dos proposiciones cualquiera p y q, la proposición molecular p ^ q representa la conjunción de
p y q.
La conjunción de dos proposiciones es cierta únicamente en el caso en que ambas proposiciones lo
sean.
p q p^q
V V V
V F F
F V F
F F F
Disyunción
p q pvq
V V V
V F V
F V V
F F F
Negación
p ~p
V F
F V
Operador Prioridad
NOT Más alta (se evalúa primero)
*, /, AND ↓
+, -, OR ↓
<, >, <=, >=, =, <> Más baja (se evalúa al último)
Si existen paréntesis, las expresiones de su interior se evalúan primero