Cuaderno de Estudio
Metodología de
la Programación
Jorge Peri
Carlos Rodriguez
Jorge Scucimarri
Fernando Bordignon
Enero - 2004
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
2
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Índice General
Primera Parte: Conceptos Básicos
Introducción 5
Procesamiento 6
Algoritmos 9
Programas 11
Definiciones Básicas 13
Máquina de Von Neumann 14
Lenguajes de Programación 18
Lenguaje de Máquina 18
Lenguaje Ensamblador 19
Lenguajes de Alto Nivel 19
Intérprete 19
Compilador 20
Ventajas de los Lenguajes de Alto Nivel 20
Desventajas de los Lenguajes de Alto Nivel 21
Paradigmas de Programación 21
Metodología de la Programación 24
Sistemas de Información 25
Ingeniería de Software 26
Guía de Lectura - Conceptos Básicos 29
Estructura de Selección 63
Decisiones 63
Estructura Condicional Simple 64
Estructura Condicional Compuesta 66
Selecciones Anidadas 71
Menú de Opciones 75
Estructura de Selección Múltiple 79
Trabajo Práctico III - Estructura Condicional 81
3
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Arreglos 125
Ordenamientos de Vectores 133
Ordenamiento por Inserción 138
Búsqueda en Vectores 139
Trabajo Práctico VI – Arreglos 141
Bibliografía 151
4
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Primera Parte
Conceptos Básicos
Introducción
- Ingresar datos
- Procesar datos
- Producir una salida de datos
La entrada y salida de datos, son las tareas que permiten que la computadora se
comunique con el exterior, siendo necesario para ello que el mismo posea
mecanismos que permitan al usuario poder ingresar datos y recibir las salidas que
el computador emita. Estos mecanismos se denominan dispositivos de
Entrada/Salida, y es necesario contar con al menos uno de cada tipo para que la
computadora interactué con su contexto.
Dispositivos de entrada
5
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Dispositivos de salida
Dispositivos de Entrada/Salida
6
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
DISPOSITIVO
ENTRADA
DISPOSITIVO
COMPUTADORA
SALIDA
DISPOSITIVO
SALIDA
Procesamiento
Ejemplo 1
7
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
b) Número de legajo.
c) Categoría
d) Antigüedad
e) Estado civil
f) Cantidad de hijos
g) Obra social
h) Premios
i) Sindicato
etc.
a) Recibo de sueldo
b) Cheque
c) Descuento para la caja de jubilación
d) Aporte a la obra social
e) Aporte al sindicato
etc.
En un caso real este proceso se efectúa para muchos empleados, con lo cual los
descuentos y aportes se imprimen en forma de listados. Para poder producir la
salida requerida en función de los datos de entrada, el computador deberá
ejecutar una cantidad de tareas como las siguientes:
Para que estas tareas básicas conduzcan al resultado que se pretende deben ser
ejecutadas en un cierto orden, y tanto la definición de las tareas como el orden
deben estar definidos previamente al momento de la ejecución. La definición de
8
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Algoritmos
Algoritmos comunes
1. Buscar la película
9
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
4. Introducirla en la videocasetera
6. Sentarse en un sillón
8. Ver la película
10
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Programas
11
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
12
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Definiciones Básicas
Informática: Disciplina que estudia el análisis y resolución de problemas con la
finalidad de procesar información automáticamente.
Software: Son los datos y programas que hacen funcionar a una computadora.
Es de carácter intangible.
13
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
14
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Memoria
de
trabajo
Unidad de Control
Unidad Unidad
Unidad
de de
Registros Aritmético
Entrada Salida
y Lógica
Flujo de información
Flujo de control
Memoria
La UAL comprende:
15
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
La Unidad de Control
• la memoria
• la unidad aritmética y lógica
16
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
• y la unidad de control
Bus Control
Bus de datos
Bus de direcciones
UCP
Memoria Periférico Periférico
Unidad
de de de
Central
trabajo E/S E/S
de
Proceso
Arquitectura actual
° de datos,
17
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Lenguajes de Programación
En toda computadora, las instrucciones deben darse en un lenguaje de
programación que ella pueda decodificar. En las primeras computadoras, la
programación era una tarea difícil y laboriosa ya que llaves tipo on-off de válvulas
de vacío debían configurarse a mano. Programar tareas tan sencillas como
ordenar una lista de nombres requería varios días de trabajo de equipos de
programadores. Desde entonces se han desarrollado varios lenguajes
informáticos, algunos orientados hacia funciones específicas y otros centrados en
la facilidad de uso.
Lenguaje de Máquina
18
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
código binario, y es por ello que es bastante difícil construir programas en este
lenguaje. En general, los programadores evitan construir programas basándose en
lenguaje de máquina, prefieren utilizar un lenguaje de mayor nivel que les brinde
un grado más alto de abstracción.
Lenguaje Ensamblador
Ejemplo de instrucciones
Una vez que un programa construido en lenguaje de alto nivel está finalizado, hay
que traducirlo al lenguaje de máquina de la computadora donde se desea
ejecutarlo. Para ello se utilizan programas traductores, y son de dos tipos:
intérpretes y compiladores.
Intérprete
19
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Traducción y
Programa
Intérprete ejecución
Fuente
simultánea
Compilador
Programa Programa
Compilador
Fuente Objeto
20
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Paradigmas de Programación
Un paradigma de programación es un modelo básico de diseño y desarrollo de
programas. Los llamados paradigmas de programación son conceptualizaciones
genéricas, que agrupan bajo un nombre a distintos lenguajes de programación.
• Paradigma Imperativo
PROGRAM intercambio;
VAR x,y, tmp;
BEGIN
tmp := x;
x := y;
y := tmp;
END.
21
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
• Paradigma Lógico
22
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
La pregunta : ? mortal(Socrates)
La repuesta: YES
• Paradigma Funcional
23
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Metodología de la Programación
Las siguientes son etapas que deben cumplirse a los efectos de resolver un
problema mediante un programa informático:
Construcción de un algoritmo
Codificación
Compilación
24
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Prueba
Documentación
Sistemas de Información
Un sistema es un conjunto de componentes que interaccionan entre sí para lograr
un objetivo común. Por lo tanto, un sistema de información es un conjunto
ordenado de elementos (no necesariamente computacionales) que permiten
manipular toda aquella información necesaria para implementar aspectos
específicos de la toma de decisiones. Los sistemas de información, surgen de la
necesidad de información que experimentan las organizaciones para implementar
un conjunto específico de toma de decisiones.
25
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
26
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Ingeniería de Software
La Ingeniería de Software es un área de las Ciencias de la Computación, que
ofrece métodos y técnicas para desarrollar y mantener software de calidad que
resuelven problemas de información. Comprende el uso de metodologías,
herramientas y técnicas para resolver problemas prácticos que se presentan en la
construcción, desarrollo, soporte y evolución del software.
Análisis de requerimientos
Diseño
Desarrollo de requerimientos
Prueba
Por un lado se valida al sistema informático propuesto ejecutando
pruebas intensas de verificación de comportamiento, y por otro lado
se analiza si el modelo a prueba satisface plenamente las
especificaciones de requerimientos.
27
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Implementación
En esta etapa se implementa el nuevo sistema informático a los
efectos de que la organización demandante lo comience a utilizar.
Mantenimiento
Etapa final que tiene por objetivo ajustar el sistema a nuevos
requerimientos y a cambios en el sistema objeto.
28
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
5. ¿De qué maneras es posible ejecutar un programa? ¿Un algoritmo puede ser
ejecutado por una computadora? Justifique.
29
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
30
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Segunda Parte
Introducción a la Programación
Datos
31
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Sueldo_ultimo_mes porcentaje_aumento
tipo numérico tipo numérico
345.78 22
nombre-empleado
tipo caracter
Ana Gomez
Extracto de una memoria de trabajo
Ejemplo
temperatura <- -2
humedad <- 78
Real
Ejemplo
32
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
La siguiente tabla muestra las características de los tipos de datos más comunes:
Caracter
Ejemplo
Lógico
Ejemplo
vacío <- V
asistirá <- F
Variables
Ejemplo
33
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Pi <- 3.14
IVA <- 21
institución <- "Universidad Nacional de Luján"
Ciertos lenguajes de programación, junto con la buena práctica del oficio, exigen
que todas las variables y constantes de un programa sean previamente declaradas
antes de ser utilizadas.
Ejemplo
vacio <- V
saldo <- saldo_anterior + 500
frase <- "Hola" + " " + "Mundo !!!"
resultado <- ((producción - fallados) ^2) - 678
Existe otro objeto denominado literal y es la forma como se escriben los valores
de cada tipo. Ejemplo 26, 789, -9 son literales numéricos, y "hola mundo", "o" y
"zeta" son literales de caracteres.
34
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Expresiones y Operadores
(costo * 1.22)/desvio_mes;
Operadores Aritméticos
35
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Operador Significado
** Potenciación
+ Signo más (unario)
- Cambio de signo (unario)
* Multiplicación
/ ó div División real y entera
% ó mod resto de división (reales y enteros)
+ Suma
- Resta
Un operador es unario cuando solo tiene un operando, como por ejemplo los
signos de los números (-7, +7, etc.) Un operador es binario cuando necesita dos
operandos, como por ejemplo la suma (8 + 2). Todos los operandos son binarios
excepto la notación de signos, que son unarios.
Ejemplos
Expresión Comentario
7/5 = 3.5 División real
7 div 2 = 3 División entera
7 mod 2 = 1 Resto de división entera
Operadores Relacionales
Operador Significado
< Menor que
> Mayor que
= Igual que
<= Menor o igual que
>= Mayor o igual que
<> Distinto de
36
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Expresión Resultado
X>Y Es Verdadero
(X-3) < (Y-2) Es Falso
(X-4) >= (Y+3) Es verdadero
"A" > "B" Es verdadero
"z" > "Z" Es verdadero
"uno" = "unos" Es falso
"uno" < "unos" Es verdadero
La Tabla ASCII
Así, la tabla ASCII dice que una "A" binaria es "01000001", y "Z" equivale a
"01011010". Las personas que contamos en base al sistema decimal, recordamos
mucho mejor que una "A" en la tabla ASCII es un 65 y una "Z", un 90.
37
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
"0">"1"<"2"<"3"<"4"<"5"<"6"<"7"<"8"<"9"
"A"<"B"<"C"<"D"<, . . . . . .,<"Z"
"a"<"b"<"c"<"d"<, . . . . . .,<"z"
y
"a">"M">"C">"B"
38
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
19 DC3 61 = 103 g
20 DC4 62 > 104 h
21 NAK 63 ? 105 i
22 SYN 64 @ 106 j
23 ETB 65 A 107 k
24 CAN 66 B 108 l
25 EM 67 C 109 m
26 SUB 68 D 110 n
27 ESC 69 E 111 o
28 FS 70 F 112 p
29 GS 71 G 113 q
30 RS 72 H 114 r
31 US 73 I 115 s
32 SPACE 74 J 116 t
33 ! 75 K 117 u
34 COMILLAS 76 L 118 v
35 # 77 M 119 w
36 $ 78 N 120 x
37 % 79 O 121 y
38 & 80 P 122 z
39 ' 81 Q 123 {
40 ( 82 R 124 |
41 ) 83 S 125 }
126 ~
127 DEL
39
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
• Concatenación (+), operador que une dos cadenas para formar una
nueva. Por ejemplo "hola" + " mundo" devolverá una nueva cadena que
contenga "hola mundo".
Operadores Lógicos
A NOT A
V F
F V
A B A AND B
F F F
F V F
V F F
V V V
A B A OR B
F F F
40
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
F V V
V F V
V V V
A B A XOR B
F F F
F V V
V F V
V V F
Ejemplos
Expresión Resultado
(3 = 4) AND ( 6 < 7) Falso
NOT (4 < 6) Falso
(3=4) EQV (5=6) Verdadero
41
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Exponenciación 1
Negación 2
Aritméticos Multiplicación/División 3
División entera 4
Módulo 5
Suma/Resta 6
Mayor 7
Mayor igual 7
Menor 7
De relación Menor igual 7
Igual 7
Distinto 7
Ejemplo de evaluación - A
42
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
22 / 2 * 5
11 * 5
Resultado 55
Ejemplo de evaluación - B:
Ejemplo de evaluación - C
nombre_función(argumento1,..., argumenton).
43
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
44
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
a) 2*I<J
b) 2*I<1
c) I > 0 AND I < 10
d) I > 25 OR (I < 50 AND J < 50)
e) I < 4 OR J > 5
f) NOT I > 6
4. Dados los siguientes valores para las variables X, Y, Z, evaluar las expresiones
e indicar el resultado de las siguientes expresiones:
a) (X && Y) || (X && Z)
b) (X || ! Y) && (!X || Z)
c) X || Y && Z
45
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
d) ! (X || Y) && Z
a) I == J || K
b) I >= J || I <= J && K
c) ! K || K
d) ! L && L
6. Modificar los paréntesis, de los problemas del ejercicio anterior, para que el
resultado fuera falso.
46
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Tercera Parte
Programación Estructurada - Estructuras de Control:
Los programas para computadoras deben estar escritos con un alto grado de
estructuración, lo cual les permite ser fácilmente comprensibles en actividades
tales como pruebas, mantenimiento y modificación de los mismos. Mediante la
programación estructurada todas las bifurcaciones de control de un programa se
encuentran estandarizadas, de forma tal que es posible leerlos desde su inicio
hasta su final en forma continua, sin tener que saltar de un lugar a otro del
programa siguiendo el rastro de la lógica establecida por el programador.
Estos tres tipos de estructuras lógicas de control pueden ser combinadas para
producir programas que manejen cualquier tarea de procesamiento de
información.
47
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
48
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
° Tiene exactamente una entrada y una salida para control del programa.
Inicio
Fin
Condición
V F
Instrucción 1 Instrucción 1
.... ....
Instrucción n Instrucción n
49
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Instrucciones
50
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
seccion = 1
V F
Fin
51
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Escritura de Programas
Normas de Identación
52
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Toda operación que realice una computadora va a estar incluida en una de las
siguientes categorías:
° leer ( Nom_variable )
53
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer(horas trabajadas)
Leer(valor_de_la_hora_extra)
liquidación <- horas:trabajadas * valor_de_la_hora_extra
Escribir(liquidación)
Fin
Ejemplo:
Pseudocódigo
Inicio
Leer(num1, num2)
suma <- num1 + num2
dif <- num1 - num2
Escribir("SUMA: ", suma)
Escribir("DIFERENCIA: ", dif)
Fin
Diagrama NS
54
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Fin
$alfa = 345.2;
$beta = 8;
$resultado = $alfa * $beta;
55
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
56
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Estructura Secuencial
La estructura secuencial corresponde a un conjunto de instrucciones que se
ejecutan en una secuencia predeterminada y fija, de arriba hacía abajo.
Instrucción 1
Instrucción 2
Instrucción 3
...
Instrucción n
Ejemplo:
Inicio
Leer temperatura en grados centígrados y almacenarlo en TC
TF <- ( 9 * TC ) / 5 + 32;
Inicio
TF <- ( 9 * TC ) / 5 + 32;
Fin
57
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Introducir dos números a y b, con partes decimales, luego obtener la suma de las
partes decimales. Por ejemplo : a=16.12 y b=7.33 entonces deberá obtener s =
0.12 + 0.33 = 0.45
Diagrama NS
Inicio
Leer pn, sn
Fin
58
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Ejercicios
8. Dados dos números a y b, se desea intercambiar sus valores, sin utilizar una
variable auxiliar. Por ejemplo si a=7 y b=12 debe mostrar a=12 y b=7.
10. Diseñe un algoritmo para sumar dos marcas de tiempo dadas en horas,
minutos y segundos.
11. Se solicita un préstamo por C pesos durante N meses a una tasa de interés
mensual L. Al final de los N meses la cantidad adeudada es C * (1 + I) ^ N.
Hacer un algoritmo al cual se le dan los valores de C, N e L, y calcule e imprima
la suma adeudada.
59
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
13. Hacer un algoritmo para ingresarle una medida en metros, y que imprima esa
medida expresada en centímetros, pulgadas, pies y yardas. Los factores de
conversión son los siguientes:
1 yarda = 3 pies
1 pie = 12 pulgadas
1 metro = 100 centímetros
1 pulgada = 2.54 centímetros
15. Preparar un programa para darle las notas de cuatro parciales y muestre la
nota promedio.
16. Una empresa de ventas de Alemania paga a sus empleados un salario fijo de
5000 marcos, mas una comisión de 200 marcos por cada venta realizada, mas el 8
% del valor de esas ventas. Preparar un algoritmo para que calcule el sueldo que
le corresponde en un mes determinado, ingresando la cantidad de ventas que
realizó y el valor total de las mismas.
17. Un millonario excéntrico tenía tres hijos: Carlos, José y Marta. Al morir dejó
el siguiente legado: A José le dejó 4/3 de lo que le dejó a Carlos. A Carlos le dejó
1/3 de su fortuna. A Marta le dejo la mitad de lo que le dejó a José. Preparar un
algoritmo para darle la suma a repartir e imprima cuanto le tocó a cada uno.
Aplicaciones
60
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Temas complementarios
61
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
determinantes.
62
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Estructura de Selección
Decisiones
Hasta ahora se han visto algoritmos en los cuales se ingresan ciertos datos, luego
se hacen algunas operaciones aritméticas y finalmente se muestran los resultados
por la pantalla o la impresora. En realidad, esta es una utilización muy pobre de la
computadora, como si solamente se tratara de una calculadora una poco más
sofisticada, con la única ventaja de permitirnos construir un programa una vez y
posteriormente, utilizarlo todas las veces que sea necesario con distintos grupos
de datos.
1) total > 50
2) alfa < mo
3) be4 <- jota + 6
4) pepe - 4 = alfa + beta
63
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
como 45 < samo < 70, pero en realidad esta forma de expresarlo está
encubriendo otro operador lógico. En informática escribiremos esta expresión
como:
64
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Condición
V F
Instrucción 1
....
Instrucción n
Ejemplo en pseudocódigo
gama > 22
V F
....
.....
Ejemplo
65
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer(cantidad)
monto <- cantidad * 1235
Si cantidad > 12 entonces hacer
{
monto <- monto - 1700
}
Fin Si
Escribir(monto)
Fin
66
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
...
(instrucciones)
...
}
de lo contrario hacer
{
...
(instrucciones)
...
}
Fin Si
Condición
V F
Instrucción 1 Instrucción 1
.... ....
Instrucción n Instrucción n
Ejemplo
67
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer(cantidad)
Si (cantidad > 100) entonces hacer
{
precio <- 197
}
de lo contrario
{
precio <- 215
}
Fin Si
monto <- cantidad * precio
Escribir(monto)
Fin
En diagrama NS
68
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
inicio
Leer cantidad
....
monto <- cantidad * precio
Fin
$monto = $c * $precio;
Otro ejemplo:
69
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer numero
cociente = numero / 2
entero = int(cociente)
entero = cociente
V F
Escribir("El Escribir("El
número es par") número es impar")
Fin
70
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer numero
cociente = numero / 2
entero = int(cociente)
fraccion = 0
V F
Escribir("El Escribir("El
número es par") número es impar")
Fin
ó también :
Inicio
Leer numero
numero/2 = int(numero/2)
V F
Escribir("El Escribir("El
número es par") número es impar")
Fin
Selecciones Anidadas
71
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
(instrucciones)
}
de lo contrario
{
(instrucciones)
Si (condición 2) entonces hacer (II)
{
(instrucciones)
}
de lo contrario
{
(instrucciones)
}
Fin Si
}
Fin Si
Condicion 1
V F
Escribir("El
Condición 2
número es impar")
V F
Instrucciones
Instrucciones Instrucciones
72
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Ejemplo
-Los que trabajan en la sección 1 cobran U$S 120.- más, y sobre el total un
adicional por antigüedad del 10 % si tienen menos de 5 años, y del 20 % si
tienen 5 años o más.
-Los que trabajan en la sección 2 cobran U$S 250.- más, pero no cobran
adicional por antigüedad.
73
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
seccion = 1
V F
Fin
$basico = 800;
if ($seccion == 1)
{
$sueldo = $basico + 120;
if($anios < 5)
74
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
$antiguedad = $sueldo*10/100;
}
else
{
$antiguedad = $sueldo*20/100;
}
}
else
{
$sueldo = $basico + 250;
$antiguedad = 0;
}
Menú de Opciones
Ejemplo
75
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Cuando ejecute el programa, el operador tiene que poder elegir que superficie
calcular, para ello el programa muestra el menú de opciones:
Donde cada uno de estos procedimientos ingresa los datos necesarios, y efectúa
los cálculos; el siguiente es un listado con el algoritmo completo:
Principio
76
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Leer(opcion)
Escribir("Superficie":, superficie)
Fin
Procedimiento TRIANGULO
Leer(base, altura)
superficie <- base * altura /2
Fin TRIANGULO
Procedimiento RECTANGULO
Leer(base, altura)
superficie <- base * altura
Fin RECTANGULO
Procedimiento CIRCULO
77
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Leer(radio)
superficie <- 3.1416 * radio ^2
Fin CIRCULO
Obsérvese que en este algoritmo, si el usuario por error digita un número mayor
que 3, no se ejecutará ningún procedimiento, y al final se pretenderá mostrar el
contenido de la variable superficie, en la cual no hay nada almacenado. Esta
situación puede salvarse si se agrega una decisión como la siguiente:
$opcion = 0; $superficie = 0;
if ($opcion == 1)
{
&triangulo;
}
if ($opcion == 2)
{
&rectangulo;
}
if ($opcion == 3)
{
&circulo;
}
sub triangulo
{
print "\nIngrese base :";
$base = <STDIN>; chop($base);
78
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
sub rectangulo
{
print "\nIngrese base :";
$base = <STDIN>; chop($base);
print "\nIngrese altura :";
$altura = <STDIN>; chop($altura);
$superficie = $base*$altura;
return($superficie);
}
sub circulo
{
print "\nIngrese radio :";
$radio = <STDIN>; chop($radio);
$superficie = 3.1416*($radio*$radio);
return($superficie);
}
Esta forma es útil cuando se tiene que elegir entre más de dos opciones, se
denomina de selección múltiple. En esta estructura, una variable de control puede
tomar distintos valores. Según el caso, se ejecutan distintas acciones.
Evaluar Selector
Reglas:
79
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
Leer(opcion)
Evaluar opcion
Fin
80
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
8. Ingresar tres números, y si los tres son iguales se debe mostrar solamente un
mensaje.
a c ad + bd
- + - = -------
b d bd
81
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Aplicaciones
82
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Si MES = 1 ó 2:
AP = AÑO - 1
MP = MES + 13
Si MES > 2:
AP = AÑO
MP = MES + 1
La cantidad de días entre dos fechas es igual a la diferencia entre los respectivos
días Julianos:
Preparar un programa BASIC para ingresarle las dos fechas como DIA1, MES1,
AÑO1, y DIA2, MES2, AÑO2 respectivamente, y muestre la cantidad de días
transcurridos entre ambas.
Temas Complementarios
a) Dada una fecha a la cual se le suma una cierta cantidad de días, cual es la
fecha resultante.
83
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
DIAP = DJ - 1720982
Si MP = 14 ó 15:
MES = MP - 13
Si MP < 14:
MES = MP -1
Si MES > 2:
AÑO = AP
Si MES = 1 ó 2:
AÑO = AP + 1
DS = 7 * FRAC ( (DIAP + 5) / 7)
donde
DS = 0 ----> domingo
DS = 1 ----> lunes
.....
DS = 6 ----> sábado
84
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
m2, como ocurre en el caso de los niños. Para valores de BSA(D) menores que el
indicado se usa la fórmula de Boyde:
85
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
86
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
suma <- 0
contador <- 0
n <- 1
Mientras n sea mayor a 0 hacer
{
Ingrese un número ( 0 finaliza):, número_ingresado
Si número_ingresado es menor o igual a 0 hacer
{
87
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
° Mientras
° Repetir
° Repetir - Hasta
° Para
Estructura Mientras
Su sintaxis es :
88
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Instrucciones
Ejemplo:
89
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Inicio
suma <- 0
Escribir(suma)
Fin
my $i = 0;
my $iterar = 1;
my $mayor = 0;
while ($iterar == 1)
{
print "Ingrese un número natural (0 es fin):";
$i = <STDIN>;
if ($i <= 0)
{
$iterar = 0;
print "\nEl mayor número ingresado es ".$mayor."\n";
}
else
{
if ($i > $mayor)
{
$mayor = $i;
}
}
}
90
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Estructura Repetir
Hacer {
instrucción 1
instrucción 2
.......................
instrucción n
} Repetir Mientras <condición>
Instrucciones
91
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Programa que ..
my $i = 0;
my $iterar = 1;
do {
if ($i == 0) { $iterar = 0}
print $i."\n";
} while ($iterar == 1)
Haga {
instrucción 1
instrucción 2
.......................
instrucción n
} Repetir Hasta <condición>
92
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Instrucciones
Programa que ..
my $i = 0;
my $iterar = 0;
do {
if ($i == 0) { $iterar = 1}
print $i."\n";
} until ($iterar == 1)
93
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Estructura Para
Estructura que se utiliza para iterar en aquellos casos que de antemano se conoce
la cantidad de ciclos a realizar. Por ejemplo: ingresar 10 notas de un alumno y
calcular su promedio y desvío estandar.
Instrucciones
94
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Programa que ..
Salida
#> perl p.pl
iteración número:1
iteración número:2
iteración número:3
iteración número:4
iteración número:5
95
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
iteración número:6
iteración número:7
iteración número:8
iteración número:9
n contiene 10 al salir del la estructura Para
Se ingresan por teclado las notas de los alumnos en una determinada asignatura,
o un 99 si el alumno estuvo ausente. Preparar un algoritmo para calcular e
imprimir la nota promedio, recordando que el alumno ausente no se promedia.
Luego de la última nota se ingresa un valor negativo.
Principio
suma <-- 0
cantidad <-- 0
Leer(nota)
Mientras nota >= 0 hacer
{
Si nota <> 99 entonces hacer:
{
suma <-- suma + nota
cantidad <-- cantidad + 1
}
Fin Si
Ingresar nota
}
Fin mientras
promedio <-- suma / cantidad
Escribir("Promedio: "; promedio)
Fin
Se ingresan por teclado 100 números enteros. Preparar un algoritmo que cuente y
muestre por pantalla la cantidad de negativos, positivos y ceros que se ingresaron.
Principio
sumaneg <-- 0
sumapos <-- 0
sumacer <-- 0
Para contador = 1 hasta 100 hacer:
96
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
Leer(número)
Si número < 0 entonces hacer:
{
sumaneg <-- sumaneg + 1
}
sino hacer:
{
Si número > 0 entonces hacer:
{
sumapos <-- sumapos + 1
}
sino hacer:
{
sumacer <-- sumacer + 1
}
Fin Si
}
Fin Si
}
Fin Para
Escribir("Negativos: "; sumaneg)
Escribir("Positivos: "; sumapos)
Escribir("Ceros : "; sumacer)
Fin
Ingresar número
Si número > mayor entonces hacer
{
97
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Principio
Leer(n)
Leer(número)
mayor <-- número
Para C = 2 hasta N hacer:
{
Leer(número)
Si número > mayor entonces hacer:
{
mayor <-- número
}
Fin Si
}
Fin Para
Escribir(mayor)
Fin
Validación de Datos
Un refrán utilizado entre los programadores dice: "si ingresa basura, sale basura",
lo que quiere decir que, independientemente de la excelencia del algoritmo, si se
le ingresan datos erróneos producirá resultados también erróneos. La casi
totalidad de los errores se produce en el ingreso de los datos por parte del
operador. Si bien es imposible prever todos los errores que se pueden cometer,
un buen programa debe estar preparado para evitar todos los que sea posible.
Llamamos "validación" a este control de los datos que ingresan.
98
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
La técnica básica parte de la premisa de que hay valores imposibles para ciertos
datos: en una fecha, el día no puede ser mayor que 31 o el mes mayor de 12, la
altura de una persona no puede ser 8 metros, el cónyuge no puede ser más que
1(?), etc.
La mayoría de los datos posee un rango de valores posibles, y cada valor que
ingresa debe estar necesariamente dentro de ese rango. La validación consiste en
verificar que cada dato que ingresa se encuentre dentro del rango, si no es así, se
le indica al operador que ingrese el dato nuevamente:
Leer(variable)
Mientras (variable fuera de rango) hacer:
{
Escribir(mensaje al operador)
Leer(variable)
}
Fin mientras
Ejemplo de validación
Ingresar día
Mientras día <1 ó día > 31 hacer
{
Escribir("dato erróneo, ingrese nuevamente")
Leer(día)
}
Fin mientras
Obsérvese que no es posible asegurar que este algoritmo va a evitar todos los
errores, por ejemplo no detectará si el operador ingresa un 16 en lugar de un 15,
en cambio sí funcionará en la mayoría de las inversiones, es decir si el operador
ingresa un 72 en lugar de un 27, el cual es un error muy común cuando se digitan
números rápidamente.
99
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
11. Construir un algoritmo para ingresarle por el teclado dos números naturales
M y N. Hallar el cociente M/N por restas sucesivas y mostrar por pantalla el
100
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
13. En la sucesión de Fibonacci, los dos primeros números son 0 y 1, y cada uno
de los restantes es igual a la suma de los dos que lo anteceden. Los primeros
términos son: 1, 1, 2, 3, 5, 8, 13, 21, ...
Preparar un algoritmo para ingresarle una cantidad C, y que muestre los primeros
C términos de la sucesión.
15. Se efectúa una encuesta entre 120 consumidores de cigarrillos. Las respuestas
están codificadas como 1, 2 ó 3 según sea la marca elegida. Preparar un algoritmo
para ingresarle las 120 respuestas, y muestre por pantalla el número de la marca
preferida.
16. Preparar un algoritmo que encuentre e imprima todos los números de tres
dígitos (del 100 al 999) que sean iguales a la suma de los cubos de sus dígitos.
Recordar que un número de tres dígitos, por ejemplo 729, puede construirse
sumando 700 + 20 + 9, o sea: 7 * 100 + 2 * 10 + 9
Ciclos Anidados
* **** * *
** *** ** *
*** ** *** *
**** * **** *
***
**
*
Siendo variable el número de líneas, debiéndose ingresar por teclado. Para los
casos ejemplo el número de líneas es 4.
101
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Aplicaciones
1985 1.25
1986 1.75
1987 2.00
1988 2.50
1989 3.25
VENTAS|
| *
3 +
|
| *
|
2 + *
| *
|
| *
1 +
|
|
|
0 +-----+-----+-----+-----+-----+----->
85 86 87 88 89 AÑO
VENTAS = A + B * AÑO
o en general:
y=A+B*x
102
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
A = Sy / N - B * Sx / N
donde:
N : Cantidad de pares de datos
Sx : Sumatoria de las x
Sy : Sumatoria de las y
Sx2: Sumatoria de los cuadrados de x
Sxy: Sumatoria de los productos x * y
103
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
manera entre los n objetos dados, considerando distintas dos variaciones cuando
difieran en algún objeto o en el orden en que estén dispuestos. El número de
variaciones de orden p que se pueden formar con n objetos está dada por:
Vn, p = n! / (n - p) !
Cn, p = n! / ( p! * (n - p)! )
Temas complementarios
y = A * e ^ (B * x)
A = EXP(Slny / N - B * Sx / N)
104
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
y = A + B * LN(x)
a = 1 / n * (Sy - b * Slnx)
Y=a*x^b
a = exp(Slny / n - b * Slnx / n)
donde:
105
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
datos cada vez, para ello el menú puede tener una opción para el ingreso.
106
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Cuarta Parte
Programación Estructurada - Archivos Secuenciales
y Arreglos:
Archivos Secuenciales
b) los que no se están usando en ese momento, pero que serán requeridos
en alguna otra situación futura.
107
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
b) Todas los registros poseen los mismos items, y éstos están dispuestos
en el mismo orden.
108
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Archivo de alumnos
Gomez, Mirian 10/03/1972 femenino 6c libre
Ver, Pablo 11/04/1972 masculino 7a regular
Vega, Ana 09/07/1972 femenino 7a regular
MANUAL MAGNETICO
mueble, tarjetero, cajonera CDROM, disco rígido,
disquete, cinta
ficha, tarjeta registro
item campo
letra, dígito numérico, símbolo caracter
109
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Grabación de Datos
Primer ejemplo:
110
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Registro 1
Registro 2
Registro 3
Registro 4
...
Registro n
Abrir(nombre de archivo)
Abrir AGENDA
y
Cerrar(nombre de archivo)
Cerrar AGENDA
Principio
Abrir AGENDA
Leer(apellido, nombres, teléfono)
111
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Principio
Abrir AGENDA
Leer apellido
Mientras apellido <> "x" hacer:
{
Leer(nombres, teléfono)
Grabar en AGENDA(apellido, nombres, teléfono)
Ingresar apellido
}
Fin Mientras
Cerrar AGENDA
Fin
open(ARCHIVO, ">agenda");
112
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
chop($apellido);
}
close(ARCHIVO);
$apellido = "Santolini";
$nombres = "Lucia Micaela";
$telefono = "45322";
close(ARCHIVO);
Para leer los datos almacenados en un archivo, el proceso es inverso, o sea que
los datos pasan del registro a variables de memoria central. La operación con la
que indicaremos la lectura es:
113
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Segundo ejemplo
Se desea obtener un listado por impresora con todos los datos almacenados en el
archivo AGENDA. Los pasos son: abrir el archivo, leer cada registro e
imprimirlo hasta encontrar el fin de archivo (EOF), y cerrar el archivo:
Principio
Abrir AGENDA
Mientras no (EOF de AGENDA) hacer:
{
Leer de AGENDA(A, N, T)
Escribir(A, N, T)
}
Fin Mientras
Cerrar AGENDA
Fin
Programa que lee y muestra por pantallas los campos de los registros que
conforman el archivo agenda.
open(ARCHIVO, "agenda");
$i= 1;
while (!eof(ARCHIVO))
{
$registro_leido = <ARCHIVO>;
chop($registro_leido);
($apellido,$nombres,$telefono) = split(",",$registro_leido);
print "Registro ".$i++.": $apellido * $nombres * $telefono\n";
}
close(ARCHIVO);
114
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Organización Secuencial
Acceso
Acceso Secuencial
115
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Principio
Abrir ALUMNOS
Mientras no (EOF de ALUMNOS) hacer:
{
Leer de ALUMNOS:(APE_NOM, FECHA_N,
SEXO, CURSO, SITUACION)
Si APE_NOM = "Vega, Ana" entonces hacer:
{
Escribir(APE_NOM, FECHA_N,
SEXO, CURSO, SITUACION)
}
Fin Si
}
Fin mientras
Cerrar CLIENTES
Fin
Si deseamos que el algoritmo sirva para buscar los datos de un cliente cualquiera,
reemplazar el nombre "Vega, Ana", por una variable cuyo valor se ingresa por
teclado al principio:
Ejercitación en Lenguaje Perl
Programa que solicita por teclado un apellido, lee del archivo agenda
todos los registros, y solamente muestra todos aquellos que coincidan con
tal apellido.
open(ARCHIVO, "agenda");
$i= 1;
while (!eof(ARCHIVO))
{
$registro_leido = <ARCHIVO>;
chop($registro_leido);
($apellido,$nombres,$telefono) = split(",",$registro_leido);
if ($x_apellido eq $apellido)
{
print "$apellido * $nombres * $telefono\n";
}
116
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
close(ARCHIVO);
Altas
Principio
Abrir (archivo)
Leer(variable de corte)
Mientras (variable de corte) <> (valor de corte) hacer:
{
Leer(variables restantes)
Grabar al final en (archivo)(variables)
Ingresar (variable de corte)
}
Fin Mientras
Cerrar (archivo)
Fin
117
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Bajas
Si se debe dar de baja el registro del empleado Saltz, todos los que le siguen
deben desplazarse un lugar hacia atrás:
Principio
Abrir (archivo)
Abrir (auxiliar)
Leer(número-baja)
Mientras no (EOF de archivo) hacer:
{
Leer de (archivo)(número y restantes campos)
Si número-baja <> número entonces hacer:
{
118
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Hasta aquí los datos quedaron almacenados en el archivo auxiliar, mientras que
en el original quedaron los datos sin la baja. Es necesario entonces, copiar los
datos del archivo auxiliar al original:
principio
Abrir (archivo)
Abrir (auxiliar)
Mientras (no EOF de auxiliar) hacer:
{
Leer de (auxiliar)(variables)
Grabar en (archivo)(variables)
}
Fin Mientras
Cerrar (archivo)
Cerrar (auxiliar)
Fin
Modificaciones
119
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
120
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
1.- En un archivo se tienen datos sobre la lluvia caída durante un cierto período.
Cada registro corresponde a un día y contiene:
Archivo LLUVIAS
* DIA
* MES
* AÑO
* PRECIPITACIONES (<=0 si no llovió)
Preparar un algoritmo que lea el archivo y cuente cuantos días hubo sin lluvias,
cuantos días llovió menos de 50 mm., y cuantos llovió 50 mm. o más. Producir
un listado como el siguiente:
- PORCENTAJES
SIN LLUVIA : XX
MENOS DE 50 mm. : XX
50 mm. O MAS : XX
PRECIPITACIONES TOTALES : XXX
Archivo TEMPERATURA
* DIA
* MES
* TEMPERATURA MAXIMA
* TEMPERATURA MINIMA
121
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
TEMPERATURA
-INFORME ANUAL
TEMPERATURA MINIMA DEL AÑO : XX
REGISTRADA EL DIA : XX
DEL MES : XX
Simultáneamente generar otro archivo con las temperaturas medias diarias, ((máx
+ mín)/2).
5.- Se efectúa una encuesta para conocer el nivel de ocupación de los pobladores
de una ciudad. Los encuestados contestaron sobre los siguientes ítems:
a) Generar un programa que permita cargar los registros y validar los datos
en el ingreso.
b) Una vez que se tiene el archivo, imprimir un reporte como el siguiente:
PORCENTAJES
VARONES : XX
MUJERES : XX
MENORES DE 18 AÑOS QUE TRABAJAN : XX
122
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
SOLTEROS : XX
CASADOS : XX
Archivo EMPLEADOS
* LEGAJO
* NOMBRE
* SUELDO - BASICO
* ANTIGUEDAD
* ESTADO CIVIL (0: soltero, 1: casado ,2: otros).
* HIJOS
Prepara un programa que lea el archivo e imprima los recibos de sueldo, con el
siguiente formato:
RECIBO DE HABERES
LEGAJO :XXXX - NOMBRE :XX...
123
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
124
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Arreglos
En algunos casos a resolver por medio de programas, se puede hallar la dificultad
de tener que almacenar en memoria una gran cantidad de datos de un mismo
tipo.
Leer(nombre1)
Leer(nombre2)
Leer(nombre3)
Leer(nombre4)
125
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Elemento
Indice Valor
3 Miguel
Este tipo de arreglo también se denomina vector, por agrupar las variables bajo
un solo índice o en una dirección. Para almacenar datos en este tipo de variables
utilizamos los mismos métodos que para cualquier variable de memoria, con la
ventaja que si necesitamos cargar más de una variable del arreglo, podemos
ubicar al ingreso dentro de un ciclo :
Principio
Para c<-0 hasta 3 incrementando 1 hacer :
{
Ingresar(nombres[c])
}
Fin Para
Fin
126
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Escribir(nombres[3])
En este caso se imprimirá el contenido de todas las casillas del vector nombres.
127
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Elemento x[0,1]
Fila 0, columna 1
Arreglo x de
x[1,0] x[1,1] x[1,2] x[1,3] 3 filas por cuatro
columnas
Principio
Para f=0 hasta 2 hacer
{
Para c=0 hasta 3 hacer
{
leer(x[f,c])
}
Fin Para
}
Fin Para
Fin
128
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
print "[$f,$c] -> $nombres[$f][$c]";
}
}
En este caso se utilizan dos ciclos, uno para cada índice, según se ubiquen los
índices uno dentro de otro, el arreglo se cargará por filas o por columnas. Para
cargarlo por columnas sería :
Principio
Para c = 0 hasta 3 hacer
{
Para F = 1 hasta 3 hacer
{
Leer(x[f,c])
}
Fin para
}
Fin para
Fin
A los efectos de mostrar u operar con los datos de este arreglo, también se deben
colocar los dos índices. Si quisiéramos mostrar solo la primer fila el algoritmo
sería :
Principio
Para c=0 hasta 3 hacer:
{
Leer(x[1,c])
}
Fin Para
Fin
129
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Ejemplo A
Principio
Leer(día)
Leer(venta)
totmes <--- 0
Escribir("Día Total")
while($dia>0)
{
$tot[$dia] = $tot[$dia] + $venta;
print "\ndia :";$dia=<STDIN>;chop($dia);
print "\nventa:";$venta=<STDIN>;chop($venta);
}
130
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
$totmes=0;
print "dia\ttotal\n";
for($i=1;$i<=30;$i++)
{
print $i."\t".$tot[$i]."\n";
$totmes = $totmes + $tot[$i];
}
Ejemplo B
Leer(ALTURA)
Para C = 1 hasta 20 hacer:
{
Si V(C) = ALTURA entonces hacer:
{
Escribir(C)
}
Fin Si
}
Fin Para
Leer(ALTURA)
S <--- 0
Para C=1 hasta 20 hacer:
{
Si V(C)=ALTURA entonces hacer:
{
Escribir(C)
S <--- 1
}
Fin Si
}
131
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Fin Para
Si S = 0 entonces hacer:
{
Escribir("No hay plantas de tal altura")
}
Fin
for($c=1;$c<=20;$c++)
{
if ($v[$c] = $altura)
{
print $c."\nt";
$s = 1;
}
}
if ($s == 1)
{
print "No hay plantas de tal altura\n";
}
Ejemplo C
Dada una matriz N de 25 x 25, hallar la suma de los números almacenados en sus
dos diagonales principales.
Principio
Para FILA=1 hasta 25 hacer:
132
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
Para COL=1 hasta 25 hacer:
{
Leer(N(FILA,COL))
}
Fin Para
}
Fin Para
DIAG1 <--- 0
DIAG2 <--- 0
Ordenamiento de Vectores
En muchos casos nos encontraremos con la necesidad de ordenar el contenido
de un arreglo en forma ascendente o descendente. El ejemplo mas típico es el de
querer ordenar un conjunto de nombres que se ingresaron en un arreglo. Existen
varios métodos para ordenar vectores, nosotros nos dedicaremos en un primer
momento al que se denomina burbujeo. Plantearemos el ejemplo de un vector de
4 elementos que contiene los siguientes datos :
5 4 6 2
133
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
2 4 5 6
Observemos que en el algoritmo se compara cada V(I) con el siguiente, esto hace
que el ciclo para deba ir hasta el valor N-1 considerando a N como número de
elementos del vector. En nuestro ejemplo los datos del vector se irán
acomodando de la siguiente manera :
5 4 6 2
4 5 6 2 I=1
4 5 6 2 I=2
4 5 2 6 I=3
134
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
4 5 2 6 VEZ = 1
4 2 5 6 VEZ = 2
2 4 5 6 VEZ = 3
Notemos que luego de cada vez, no se hace necesario comparar los elementos
que ya quedaron ordenados, esto puede solucionarse haciendo el ciclo de VEZ
desde 3 hasta 1 y realizando el ciclo de I hasta VEZ en lugar de hacerlo siempre
hasta N-1.
135
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
De esta manera la primera vez el ciclo I ira hasta 3, la segunda hasta 2 y la tercera
hasta 1, haciendo de esta manera mucho más eficiente el algoritmo. En algunos
casos se puede dar que el vector quede ordenado antes de realizar todas las veces
planteadas el ciclo de comparación I, por lo tanto se ejecutará algunas veces sin
necesidad de que así ocurra. La solución para ello es usar una señal que permita
detectar si se realizaron o no intercambios de elementos luego de cada vez.
136
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
{
VEZ <--- 1
}
Fin Si
}
Fin Para
Ejemplo D
Principio
137
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
}
Fin Si
}
Fin Para
}
Fin Para
Fin
138
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Búsqueda en Vectores
Se había planteado anteriormente que para el caso de tener que realizar muchas
búsquedas en un vector o tener que buscar datos en vectores de gran longitud, es
conveniente ordenar primero el vector y luego utilizar un método mucho más
eficiente que la búsqueda secuencial.
23 43 11 56 21 35 33
V(1) V(2) V(3) V(4) V(5) V(6) V(7)
El primer paso será ordenarlo con algún método, con lo que quedará :
11 21 23 33 35 43 56
V(1) V(2) V(3) V(4) V(5) V(6) V(7)
Leer(N)
Leer(A)
S <--- N
I <--- 1
139
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
}
Fin Si
140
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
2. Se tiene una lista de números, el primer número de la lista indica cual es el total
de números de la lista incluido el primero. Hacer un algoritmo que guarde todos
los datos de la lista en un vector, inclusive el primero.
Principio
Ingresar(cant)
v(1) <--- cant
Para I <- 2 hasta cant hacer
{
Ingresar(v[I])
}
Fin Para
Fin
b) Copie los datos que se encuentren en las casillas con índice par en otro
arreglo Y.
141
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
7. Teniendo en memoria un vector con los saldos de las cuentas corrientes de los
100 clientes de un banco (el número de cuenta coincide con el índice) se pide
realizar un algoritmo que realice las siguientes operaciones :
a) Cargar los movimientos que tuvieron ese día las cuentas corrientes e ir
actualizando los datos del vector. Después del último movimiento se
ingresa un número de cuenta corriente negativo.
Ejercicios de ordenamiento
142
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
14. Dada una matriz de 8 x 14 construir un vector con los valores negativos
almacenados en dicha matriz.
15. Dadas dos matrices M y N de 35 x 24, se pide generar una tercer matriz P
cuyos elementos sean la suma de los elementos correspondientes de las otras dos.
16. Dada una matriz de 15 x 15, generar un vector con los elementos de sus
diagonales principales.
18. Se ingresan por teclado los siguientes datos referidos a los alumnos de una
carrera: número de alumno, código de la materia, y nota obtenida. Hacer un
algoritmo que obtenga e imprima la nota promedio de cada alumno y la nota
promedio de cada materia. La cantidad de materias y la de alumnos se ingresan al
principio por teclado. Como primer paso, llenar la matriz que se use con ceros,
de esta forma quedará un cero en el lugar que corresponda a un alumno ausente
en determinada materia. Luego de la última terna de datos se ingresan tres ceros.
19. Dada una matriz numérica, se denomina punto de silla a aquel que es
simultáneamente máximo de su fila y mínimo de su columna. Determinar
mediante un programa todos los puntos de silla de una matriz generada con
números aleatorios.
143
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Aplicaciones
DATOS PROMEDIOS
41
56 (41 + 56 + 45) / 3 = 47.33
45 (56 + 45 + 37) / 3 = 46.00
37 (45 + 37 + 32) / 3 = 38.00
32 (37 + 32 + 35) / 3 = 34.66
35 (32 + 35 + 29) / 3 = 32.00
29 (35 + 29 + 33) / 3 = 32.33
33 (29 + 33 + 24) / 3 = 28.66
24 (33 + 24 + 28) / 3 = 28.33
28 (24 + 28 + 22) / 3 = 24.66
22
Se observa que si bien los datos presentan altibajos, los valores de los promedios
móviles tienden claramente a bajar. De la misma forma, los datos pueden
mediarse en grupos de distinta cantidad de datos. Por ejemplo en grupos de
cinco:
DATOS PROMEDIOS
1
6
144
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
5 (41+56+45+37+32)/5= 42.20
7 (56+45+37+32+35)/5= 41.00
2 (45+37+32+35+29)/5= 35.60
5 (37+32+35+29+33)/5= 33.20
9 (32+35+29+33+24)/5= 30.60
3 (35+29+33+24+28)/5= 29.80
4 (29+33+24+28+22)/5= 27.20
8
2
C=A*B
Donde C es una matriz de M filas por P columnas, tal que el elemento de la fila I,
columna J de C es la sumatoria de los productos de los elementos de la fila I de
A, por los elementos de la columna J de B. Por ejemplo:
| -1 2 |
B= | 3 -2 |
| 2 -1 |
| 2 3 -1 | | 5 -1 |
A= | 1 -2 2 | | -3 4 |
| 1 1 -3 | | -4 3 |
1 * (-1) + (-2) * 3 + 2 * 2 =
145
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Para que el producto sea posible, la cantidad de columnas de A debe ser igual a la
cantidad de filas de B. Preparar un programa para multiplicar matrices, haciendo
lo siguiente:
a) Ingresar M, N y P.
Se desea saber, del total ingerido, que porcentaje consumió de carne, que
porcentaje de pan, etc. En el ejemplo las cuentas son las siguientes:
Cantidades Porcentajes
146
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Es muy útil disponer de un programa que, dada una serie de valores que
representan la medida de un cierto atributo cuantitativo, permita ordenar los
datos y calcular parámetros estadísticos para su análisis.
1 40<=P<50 2 10
2 50<=P<60 7 35
3 60<=P<70 8 40
4 70<=P<80 3 15
TOTAL: 20 100
XM = SXf/Sf
SXf = 45 * 2 + 55 * 7 +...
Sf = 2 + 7 +...
147
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
con lo que XM = 61, que es una aproximación del valor real (XM = 60.6)
Curtosis = M4 / DE 4
Donde M4 se calcula:
A su vez, D1, D2, etc son las diferencias entre los puntos medios de los
intervalos y la medida aritmética. En nuestro ejemplo:
D1 = 45 - 61 = -16
D2 = 55 - 61 = -6
D3 = 65 - 61 = 4
D4 = 75 - 61 = 14
Con lo que:
148
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
V = DE * 100 / XM
149
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
150
UNLu - DCB Cuaderno de estudio "Metodología de la Programación"
Bibliografía
Curso de programación
Autores Jorge Castro, Felipe Cucker, Xavier Messeger, Albert Rubio, Luis
Solano, Borja Valles
Editorial McGraw-Hill Año 1993
Algorithms
Autores Ian Craw y John Pulham.
Universidad de Aberdeen.
http://www.maths.abdn.ac.uk/~igc/tch/mx4002/notes/notes.html
El Lenguaje de programación C.
Autores B. Kernighan, B y D.Ritchie.
Editorial Prenctice Hall , 2da edición
151