Texto Cuaderno
Texto Cuaderno
• Tema 7: Arreglos.
3er Parcial (25%)
• Tema 8: Descomposición Modular.
4to Parcial (20%) • Tema 9: Subprogramas.
Bibliografía:
- Introducción a la Programación.
- Programación I
- Programación Digital.
- Mayormente usados Joyanes y Aguilar.
Delegada: María Eugenia Marquina (maru-mar_16@[Link])
Tema 2: Metodología de Desarrollo de Programas:
16/03/15
2. Diseño del Programa:
En esta etapa se elabora una primera aproximación del programa, usando un lenguaje natural.
Para ello se usan las técnicas:
- Algoritmos
- Diagrama de flujo
Algoritmos: es una lista de acciones ordenadas de forma lógica. Cada acción se numera (1, 2, 3,...)
y se expresa mediante un verbo (escribir, leer, calcular, decidir, etc.)
Tiene la forma siguiente:
0. Inicio
1. Acción A.
2. Acción B.
2.1. Acción B.1
2.2. Acción B.2
2.2.1. Acción B.2.1
2.2.2. Acción B.2.2.
3. Acción C.
4.
5.
6.
7. Fin
Un algoritmo debe ser:
- Claro, sin ambigüedades.
- Finito.
- Planteado lógicamente.
También se puede hacer mediante los diagramas de flujo.
A partir de un conjunto de símbolos, cada uno representando una acción, se construye un diagrama
llamado flujograma.
Los símbolos principales son:
17/03/15
3. Prueba del Diseño:
Esta etapa es opcional, en ella se comprueba que el diseño desarrollado funcione correctamente.
Siguiendo los pasos planteados en el diseño, se suministran valores a los datos de entrada, se realizan
los cálculos, decisiones, asignaciones u otras acciones, y se obtiene valores de los datos de salida,
los cuales se comparan con los datos esperados.
4. Codificación del Diseño:
Tipos de Datos:
Enteros: son datos sin parte decimal. En pascal se tienen los siguientes:
Tipos de Datos Rango de Valores Memoria (byte)
integer -32768 a 32767 2
shortint -128…127 1
longint -2147483648…2147483647 4
byte 0…255 1
word 0…65535 2
Reales: son datos, positivos o negativos que tienen parte decimal. En Pascal, se tienen los
siguientes:
Tipos de Datos Rango de Valores Número de Citas Decimales Memoria (byte)
real -2.9x10-39…1.7x1038 11 6
single -1.5x10-46…3.4x1038 7 4
double -5.0x10-34…1.1x1038 16 8
Alfanuméricos: son datos cuyos valores se delimitan con apostrofe (‘ ‘) o comillas (“ “).
En pascal se usan solo los apostrofes y se tienen dos casos:
Tipos de Datos Ejemplos
Sexo ‘H’, ‘M’, ‘h’, ‘m’.
char Un solo carácter Estado Civil ‘C’, ‘S’, ‘V’, ‘D’, ‘c’,
‘s’, ‘v’, ‘c’.
String [10] -> cadena de 10
caracteres.
Nombre ‘Pedro Pérez Márquez’
string [a] -> Número de Un conjunto de Caracteres se les Codigoacceso ‘AX1%Y’
Caracteres. llama cadena. Si no se especifica el Número
de caracteres en un dato tipo
cadena Pascal asume un
tamaño de 256 caracteres.
Lógicos: son datos cuyos valores posibles son Verdadero (True), Falso (false). En Pascal se llaman
boolean. Estos datos NUNCA se leen.
24/03/15
Variables/Constantes: un dato variable es aquel cuyo valor o valores pueden modificarse en tiempo
de ejecución del programa. Un dato constante es el caso contrario, el valor lo asigna el programador.
Cualquier intento de modificación genera un error.
Expresiones:
Una expresión es una combinación de operandos: variables, constantes, literales y operadores.
Los operadores que ofrecen los lenguajes de programación son:
- Aritméticos.
- Relacionales.
- Lógicos.
- Alfanuméricos.
Operadores Aritméticos:
Operación Notación Notación en Pascal Ejemplo
Adición + + 𝐴𝐴 + 5
Diferencia - - 𝐴𝐴 − 5
Producto .,x * 𝐴𝐴 ∗ 5
Entero div 𝐴𝐴 𝑑𝑑𝑑𝑑𝑑𝑑 5
División /, ÷
Real / 𝐴𝐴 / 5
Modulo (devolver el
𝐴𝐴 𝑚𝑚𝑚𝑚𝑚𝑚 5
resto o residuo de la mod
0 ≤ 𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛𝑛 ≤ 5
división entre enteros)
Ejemplo:
11 10 = 1011 2
Operadores Relacionales:
Operación Notación Notación en Pascal Ejemplo
Mayor a > > 𝐴𝐴 > 5
Mayor o igual a ≥ >= 𝐴𝐴 >= 5
Menor a < < 𝐴𝐴 < 5
Menor o igual a ≤ <= 𝐴𝐴 <= 5
Igual a = = 𝐴𝐴 = 5
Diferente a ≠ <> 𝐴𝐴 <> 5
Operadores lógicos:
Son operadores que requieren operandos de tipos lógicos. Se tienen:
- Y Lógico.
- O Lógico.
- Negación.
Y Lógico: es un operador binario (requiere dos operandos). Tiene la siguiente tabla de verdad, y se
denota en Pascal como “and”
and V F V: Verdadero (True)
V V F
F: Falso (False)
F F F
O Lógico: es un operador binario se denota en pascal, como “or”, y tiene la siguiente tabla de verdad.
or V F
V V V
F V F
Negación: es un operador unario, se denota en Pascal como “not”. Tiene como tabla de verdad:
not V F
F V
Operadores Alfanuméricos:
Se tiene el operador de concatenación. Se denota en Pascal como “t”.
Lo que hace juntar dos valores alfanuméricos. Por Ejemplo:
𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔
‘Sección’ + ‘ 06’ �⎯⎯⎯� ‘Sección 06’
Se tienen los siguientes tipos de expresiones:
a) Expresiones Aritméticas:
Operandos: Variables/constantes/literales de tipo numéricos.
Operadores: aritméticos.
Tipo del Valor Resultante: Valor numérico 𝐴𝐴 + 5
b) Expresiones Relacionales:
Operandos: Variables/constantes/literales de tipo numéricos.
Operadores: relacionales.
Tipo del Valor Resultante: Valor lógicos 𝐴𝐴 >= 5
c) Expresiones lógicos:
Operandos: Variables/constantes/literales de tipo lógicos.
Operadores: lógico.
Tipo del Valor Resultante: Valor lógico.
Ejemplo:
Se tienen las variables lógicas X y Z. Evalúe la expresión cuando las variables tienen los valores
verdadero y falso, respectivamente.
X and Z
El valor resultante es Falso.
d) Expresiones Alfanuméricos:
Operandos: Variables/constantes/literales de tipo alfanuméricos.
Operadores: alfanuméricos.
Tipo del Valor Resultante: Valor alfanuméricos.
Ejemplo:
Sean las variables N y A de tipo alfanumérico con valores
‘Pedro José’ y ‘Pérez Arias’
Muestre los valores resultantes de las expresiones
N+A
𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔
‘Pedro José’ + ‘Pérez Arias’ �⎯⎯⎯� ‘Pedro JoséPérez Arias’
A+N
𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔𝑔
‘Pérez Arias’+ ‘Pedro José’ �⎯⎯⎯�‘Pérez AriasPedro José’
Evaluación de Expresiones:
𝐴𝐴 + 5 ∗ 𝐵𝐵
Los lenguajes de programación tienen las siguientes reglas:
1. La expresión se evalúa de Izquierda a Derecha.
2. Solo se permite los paréntesis como signos de agrupación.
3. Cuando se tienen paréntesis en la expresión, se deben evaluar las operaciones allí
contenidas.
4. Aplicar reglas de precedencia de los operadores, las cuales pueden varias de un lenguaje a
otro.
Reglas de Precedencia:
En el caso de Pascal, se tiene:
a. Operadores Aritméticos:
1. Negatividad (cambio de signo)
2. Productos, divisiones, mod.
3. Adición y Sustracción.
Ejemplo:
Se tiene la expresión:
−𝑎𝑎 + 5 ∗ 𝑏𝑏 + 𝑐𝑐�𝑑𝑑 ∗ 10 − (−5 + 𝑎𝑎)
2. Un estudio tiene tres (3) notas parciales, aprueba la nota promedio es de diez (10) o más.
Notas Parciales del estudiante: nota1, nota2, nota 3.
4. Se lanzan dos dados, gana si tiene valores pares o en caso de que obtengan un 6.
(𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣1 = 2) 𝑜𝑜𝑜𝑜 (𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣1 = 4) 𝑜𝑜𝑜𝑜 (𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣1 = 6) 𝑎𝑎𝑎𝑎𝑎𝑎 (𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣2 = 2) 𝑜𝑜𝑜𝑜 (𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣2 = 4) 𝑜𝑜𝑜𝑜 (𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣𝑣2 = 6)
Tema 4: Estructuras Secuenciales:
Iniciar / finalizar
un programa.
Estructuras para
definir datos
Leer valores para
Lenguajes de
los datos
Programación
variables.
Estructuras
Escribir datos /
información.
Asignar valores a
los datos
variables
const
pi = 3.1415;
Puede que en el programa no
mensaje_error = 'Valor
Invalido'; se tengan datos constantes, en
Sección de máximo = 40; este caso se omite la sección.
declaración de los resp = 's';
datos constantes.
.
.
.
.
var
nombrevariable : tipo;
Por ejemplo:
var
nota : real;
sexo: char; Puede que en el programa no
nombre: string [40] se tengan datos variables, en
Sección de este caso se omite la sección.
a, b, c: double;
declaración de los
x, y: boolean;
datos variables.
min: integer;
a: byte;
.
.
06/04/15
Estructuras Secuenciales:
Son instrucciones básicas del lenguaje de programación que se ejecutan en el orden en el cual
aparecen en el programa.
Entre ellas se tienen:
a. Inicio y fin del programa.
b. Lectura de los valores de las variables.
c. Escritura de los valores de los datos (variables y constantes) y otra información.
d. Asignación de un valor a una variable.
Fin
Pascal:
program nombreprograma;
.
.
end.
Ejemplo:
program calcularnotap;
.
.
begin
. Cuerpo principal
. del programa.
end.
b. Lectura de los valores de las variables:
Algoritmo: Diagrama de Flujo
0. Inicio
1. Acción A. Inicio
2. Acción B.
.
.
m. Leer (Lista variables)
. Lista de
.
Variables
.
n. Fin.
Fin
Pascal:
program nombreprograma;
.
begin
.
read (Lista de Variables);
readln (Lista de Variables);
.
end.
Ejemplo:
program calcularnotap;
.
var
a, b, c:integer;
.
begin
read (a,b); Cuerpo principal
readln c; del programa.
end.
c. Lectura de los valores de las variables:
Algoritmo: Diagrama de Flujo
0. Inicio
1. Acción A. Inicio
2. Acción B.
.
.
m. Escribir en pantalla (Lista de variables,
constantes, información) Lista de
. Variable
. constante e
. información
n. Fin.
Fin
Pascal:
program nombreprograma;
.
begin
write (Lista variable constantes, información);
writeln (Lista variable constantes, información);
.
end.
Ejemplo:
program calcularnotap;
.
var
a, b, c:integer;
.
begin
write (‘El valor de c es: ‘, c);
Cuerpo principal
writeln (a, b);
del programa.
.
end.
d. Asignación:
Asociar a una variable un valor, el cual puede ser literal, variable, constante, expresión
En pascal se denota como :=.
Algoritmo: Diagrama de Flujo
0. Inicio
1. Acción A. Inicio
2. Acción B.
.
.
m. Escribir en pantalla (Lista de variables,
constantes, información) Variable <- valor
.
.
.
n. Fin.
Fin
Pascal: Ejemplo:
program nombreprograma; program calcularnotap;
. .
begin var
variable := valor; a, b, c:integer;
. .
end. begin
a:= b+c
write (‘El valor de c es: ‘, c)
b:=3 Cuerpo principal
del programa.
writeln (a,b)
.
end.
Estructura general de un programa en Pascal:
En Pascal:
Archivo
[Link]
program nombreprograma;
end.
En C:
Archivo
nombrearchivo.c
Programa fuente
en Pascal.
program nombreprogama; Ejemplo:
{Comentarios extensos sobre el programa} program ejemplo;
uses crt; o wincrt versión para windows. {Programador: Arnoldo París Monagas
const Fecha: 06-04-2015
nombreconstante = valor; Propósito: mostrar estructura de un programa
------------ en Pascal}
------------ uses crt; o wincrt versión para Windows.
var const
nombrevariable: Tipo; -> byte, integer, char.... pi = 3.1415;
------------ mensaje_error = ’Error Valor Inválido’;
------------ maxest = 40;
begin ------------
clrscr; (*Instrucción borra pantalla*) ------------
------------ var
read ( ); //Leer... a,b:integer;
readln ( ); z:boolean;
write ( ); promedio:real;
a:=b; ------------
------------ ------------
end. begin
clrscr;
write (‘Ingrese el valor de a: ‘);
read (a);
------------
b:=a*a;
------------
end.
20/04/15
begin
Instrucción 1;
Instrucción 2;
end.
Llamadas estructuras selectivas, son instrucciones que permiten decidir o escoger una alternativa de
un grupo de opciones. La selección se hace en base a una condición lógica, es decir, una expresión
que al evaluarla genera un valor lógico (true/false), o en base a un selector, es decir, una variable o
expresión de tipo entero o de tipo alfanumérico de un solo carácter (en Pascal char).
Los lenguajes de programación ofrecen los siguientes tipos de estructuras de decisión:
- Simple.
- Compuesta.
- Múltiple.
Inicio
Acción A
Acción B
Acción L
¿Es Verdadera la
SI
condición lógica?
Acción M
NO Acción N
Acción 0
Fin
Pascal:
• if (condición lógica) then
Instrucción 1;
• if (condición lógica) then
begin
Instrucción 1;
Instrucción 2;
.
.
Instrucción P;
.
end;
Ejemplo:
Escriba un programa en Pascal que determine si un número es par.
program numpar;
{Programador: Arnoldo París
Fecha: 20-04-2015
Proposito: Determinar si un número es par}
uses crt;
var
num:integer;
begin
clrscr;
writeln('Ingrese el valor del número: ');
readln(num);
if((num mod 2)=0) then
writeln('El Número ',num,' es par');
readln
end.
Inicio
Acción A
Acción B
Acción L
NO ¿Es Verdadera la
SI
condición lógica?
Acción O Acción M
Acción P Acción N
Acción Q
Fin
Pascal:
• if (condición lógica) then • if (condición lógica) then
Instrucción 1; begin
Instrucción 1;
else
Instrucción 2;
Instrucción 2;
end
• if (condición lógica) then
else
else Instrucción 1;
Instrucción 3;
begin
Instrucción 2; Instrucción 4;
Instrucción 3; .
. .
Instrucción P; Instrucción P;
end; end;
Ejemplo:
Escriba un programa en Pascal que determine si un número es par.
program numpar;
{Programador: Arnoldo París
Fecha: 20-04-2015
Propósito: determinar si un número es par}
uses crt;
var
num:integer;
begin
clrscr;
writeln('Ingrese el valor del número: ');
readln(num);
if ((num mod 2)=0) then
writeln('El número ',num,' es par')
else
writeln('El número ',num,' es impar');
end;
readln
end.
Ejercicios:
1. Escriba un programa que valide una nota, la cual se considera correcta si esta entre 0 y 20
incluidos estos valores.
program validarnota;
{Programador: Arnoldo París
Fecha: 20-04-2015
Proprosito: validar una nota si esta entre 0 y 20}
uses crt;
var
nota:real;
begin
clrscr;
writeln('Ingrese el valor de la nota');
readln(nota);
if((nota>=0)and(nota<=20))then
writeln('La nota del estudiante es válida')
else
writeln('La nota del estudiante es inválida');
readln
end.
2. Modifique el programa que determina la nota promedio de un estudiante con (3) tres
calificaciones parciales, tal que ahora solo determina la nota si los valores de las calificaciones
son válidos.
program notapromedio;
{Programador: Arnoldo París
Fecha 20-04-2015
Proposito: Calcular la nota promedio de un estudiante}
uses crt;
const
p1=0.20;
p2=0.30;
p3=0.50;
mensaje_e='Una o varias notas son invalidas imposible calcular nota promedio';
var
nombre:string[30];
nota1,nota2,nota3,notaP:real;
begin
clrscr;
writeln('Ingrese el nombre del estudiante: ');
readln(nombre);
writeln('Ingrese el valor de las notas parciales: ');
readln(nota1,nota2,nota3);
if((nota1<0)or(nota1>20)or(nota2<0)or(nota2>20)or(nota3<0)or(nota3>20))then
writeln(mensaje_e)
else
begin
notaP:=nota1*p1+nota2*p2+nota3*p3;
writeln('La nota promedio del estudiante: ',nombre,' es: ',notaP);
end;
readln
end.
3. Escriba un programa en Pascal que otorgue un premio al lanzador de los dados que obtenga
por lo menos un seis.
program otorgapremio;
{Programador: Arnoldo París
Fecha: 20-04-2015
Propósito: otorgar un premio al lanzador de dados que obtenga al menos un seis}
uses crt;
const
mensaje_e='valor invalido';
var
dad1,dad2:integer;
begin
clrscr;
writeln('Ingrese el valor del dado 1: ');
readln(dad1);
writeln('Ingrese el valor del dado 2: ');
readln(dad2);
if((dad1>0)and(dad1<7)and(dad2>0)and(dad2<7))then
if((dad1=6)or(dad2=6))then
writeln('Gano un premio')
else
writeln('Siga Intentando')
else
writeln('mensaje_e');
readln
end.
21/04/15
c. Estructuras de decisión compuesta:
Se basa en comparar el valor de un selector con los casos planteados, hasta que coincida con alguno
de ellos.
Algoritmo:
0. Inicio
1. Acción A.
2. Acción B.
.
.
m-1. Acción L.
m. En caso selector
Estructura de Decisión Múltiple
. Valor 1:
. Acción M
. Valor 2:
. Acción N
. Acción O
. Valor P:
. Acción P
. de lo contrario
Opcional
. Acción Q
fin del caso.
m+1. Acción 2.
.
n. Fin.
Diagrama de Flujo:
Inicio Pascal:
case selector of:
Valor 1:
Acción A
Instrucción 1;
Valor 2:
begin
Acción B Instrucción 2;
Instrucción 3;
end;
Valor 3:
Acción L
Instrucción 4;
.
.
De lo contrario else
Valor 1 Instrucción P;
¿El selector es a?
end;
Valor 2 Valor P
Acción M Acción Q
Acción N Acción P
Acción O
Acción R
Fin
Ejercicio:
Escriba un programa que realice la equivalencia de una codificación en letras a calificación numérica
sabiendo que:
𝑎𝑎 = 19 𝑐𝑐 = 12 𝑒𝑒 = 5
𝑏𝑏 = 16 𝑑𝑑 = 8 𝑓𝑓 = 0
program equivnum;
{Programador: Arnoldo París
Fecha: 21-04-2015
Propósito: Realizar una equivalencia de una calificación en letras a numérica}
uses crt;
var
califl:char;
califn:byte;
begin
clrscr;
write('Ingrese valor de la calificación en letra: ');
readln(califl);
case califl of
'A', 'a':
begin
califn:=19;
writeln('La equivalencia numérica es ',califn)
end;
'B', 'b':
begin
califn:=16;
writeln('La equivalencia numérica es ',califn)
end;
'C', 'c':
begin
califn:=12;
writeln('La equivalencia numérica es ',califn)
end;
'D', 'd':
begin
califn:=8;
writeln('La equivalencia numérica es ',califn)
end;
'E', 'e':
begin
califn:=5;
writeln('La equivalencia numérica es ',califn)
end;
'F', 'f':
begin
califn:=0;
writeln('La equivalencia numérica es ',califn)
end
else
writeln('Error en el valor de la calificación en letras')
end;
readln
end.
Anidamiento de estructuras de decisión:
Si CL1 entonces
En caso S1
Valor1:
Si CL2 entonces
.
.
fin del caso
fin del caso
de lo contrario
Si CL3 entonces
En caso S2
.
.
fin del caso
de lo contrario
Si CL4 entonces
.
.
fin del caso
fin del si
fin del si
Ejercicios:
1. Modifique el programa que calcula la nota promedio ponderada de un estudiante con tres
calificaciones parciales, tal que ahora se valide cada nota individualmente, 20%, 30% y 50%
respectivamente.
2. Construya un programa en Pascal tal que una persona lanza un dado, si obtiene un 6 gana Bs.300;
si obtiene 4 o 5 gana 200; si obtiene 3, 2 o 1 no gana nada.
3. Modificar el programa anterior tal ahora el que obtiene 6 gana adicionalmente la posibilidad de lanzar
el dado nuevamente. (Solo 1 vez más). Su programa debe mostrar la ganancia total en BS.
1.
program equivcalif;
{Programador: Arnoldo París
Fecha: 21-04-2015
Propósito: Calcular nota promedio de 3 notas y validarla individualmente}
uses crt;
const
p1=0.2;
p2=0.3;
p3=0.5;
m_error='Valor de nota inválido en el ';
var
nom:string[30];
n1,n2,n3,np:real;
begin
clrscr;
writeln('Ingrese nombre del estudiante: ');
readln(nom);
writeln('Ingrese nota del primer parcial. La nota debe estar entre 0 y 20: ');
readln(n1);
if((n1<0)or(n1>20))then
writeln(m_error,'Primer Parcial')
else
begin
writeln('Ingrese nota del segundo parcial. La nota debe estar entre 0 y 20: ');
readln(n2);
if((n2<0)or(n2>20))then
writeln(m_error,'Segundo Parcial')
else
begin
writeln('Ingrese nota del tercer parcial. La nota debe estar entre 0 y 20: ');
readln(n3);
if((n3<0)or(n3>20))then
writeln(m_error,'Tercer Parcial')
else
begin
np:=n1*p1+n2*p2+n3*p3;
writeln('La nota ponderada de ',nom,' es ',np:0:2,' puntos')
end;
end;
end;
readln
end.
2.
program lanzdado;
{Programador: Arnoldo París
Fecha: 21-04-2015
Propósito: Obtener ganancias en Bolívares al lanzar el dado}
uses crt;
const
B1=300;
B2=200;
var
dado:byte;
begin
clrscr;
writeln('Ingrese el valor obtenido: ');
readln(dado);
if((dado>=1)and(dado<=6))then
if(dado=6)then
writeln('Obtuvo un bono en Bs. ',B1)
else
if((dado=4)or(dado=5))then
writeln('Obtuvo un bono en Bs. ',B2)
else
write('No obtuvo bono alguno')
else
writeln('[Link] Invalido');
readln
end.
3.
program lanzamientodado;
{Programador: Arnoldo Paris
Fecha: 21-04-2015
Propósito: Obtener ganancias en Bolívares al lanzar el dado}
uses crt;
const
B1=300;
B2=200;
var
dado1,dado2:byte;
BT:word;
begin
clrscr;
writeln('Ingrese el valor obtenido: ');
readln(dado1);
if((dado1<1)or(dado1>6))then
writeln('Valor del dado Invalido, debe estar entre 1 y 6')
else
if((dado1=1)or(dado1=2)or(dado1=3))then
writeln('Usted no gano ningún bono')
else
if((dado1=4)or(dado1=5))then
writeln('Usted gano un bono de Bs. ',B2)
else
if(dado1=6)then
begin
writeln('Usted gano un bono de Bs. ',B1,' y puede lanzar el dado una vez más');
writeln('Ingrese el valor obtenido: ');
readln(dado2);
end;
if(dado2=6)then
begin
BT:=B1*2;
writeln('Usted gano en total un bono por Bs: ',BT);
end
else
if((dado2=4)or(dado2=5))then
begin
BT:=B1+B2;
writeln('Usted gano en total un bono por Bs. ',BT);
end
else
if((dado2=1)or(dado2=2)or(dado2=3))then
writeln('Usted gano en total un bono por Bs. ',B1);
readln
end.
04/05/15
a. Repita Mientras:
Algoritmo:
0. Inicio
1. Acción A.
2. Acción B.
.
.
Estructura de Repetición
m-1. Acción L.
m. Repita mientras condición lógica sea verdadera
. Acción M
. Acción N
fin del caso.
m+1. Acción 0.
.
n. Fin.
Diagrama de Flujo:
Inicio
Acción A
Acción B
Acción L
¿Es SI
verdadera la
Condición
Lógica?
Acción M
NO
Accion N
Acción N
Fin
Pascal:
while condicionlogica do
Instruccion 1;
while condicionlogica do
begin
Instruccion 1;
Instruccion 2;
.
.
.
Instruccion P;
end;
b. Repita hasta:
Algoritmo:
0. Inicio
1. Acción A.
2. Acción B.
.
.
Estructura de Repetición
m-1. Acción L.
m. Repita
. Acción M
. Acción N
Hasta condición lógica sea verdadera
m+1. Acción 0.
.
n. Fin.
Diagrama de Flujo:
Inicio
Acción A
Acción B
Acción L
Acción M
NO
Acción N
¿Es
verdadera la
Condición
Lógica?
SI
Accion N
Fin
Pascal:
repeat
Instruccion 1;
Instruccion 2;
.
.
.
Instruccion P;
until condicionlogica;
Ejemplo:
1. Se tiene un conjunto de 100 valores numéricos. Escriba un programa que determine la suma
de ellos.
Algoritmo:
0. Inicio
1. num ← 1
2. suma ← 0
3. repita mientras (num ≤ 100)
epp(‘Ingrese el valor del número ‘, num)
leer(valor)
suma ← suma + valor
num ← suma + 1
fin del r-m
4. epp (‘La suma es ‘, suma)
5. fin.
Las variables:
num ← tiene el rol de contar números. Se les conoce como variables de conteo; son de tipo entero
suma ← tiene el rol de sumar o acumular. Se les conoce como variable de acumulación. Su tipo
depende del tipo de valor que acumula.
c. Repita para:
Llamada también repetición indizada o ‘indexada’. Se basa en una variable de tipo entero, llamada
índice ( i ), la cual inicia en un valor ( vi ) y llega hasta un valor final ( vf ). Cambiando o actualizándose
a razón ( r ). En cada iteración ( i ), tiene un valor, que está dentro del rango [ vi , vf ].
Algoritmo:
0. Inicio
1. Acción A.
2. Acción B.
.
.
Estructura de Repetición
Inicio
Acción A
Acción B
SI
Acción M
NO
Accion 0
Acción N
Fin
Pascal:
For i:=1 to vf do
Instruccion 1;
For i:=1 to vf do
begin
Instruccion 1;
Instruccion 2; 𝑟𝑟 = 1
.
.
.
Instruccion P;
end;
For i:=1 to vf do
Instruccion 1; 𝑟𝑟 = −1
Anidamiento de estructuras de repetición:
Repita mientras CL1
Repita
Repita para K
Repita
.
Hasta CL3
fin del r-p
repeat
-----
break;
until (CL);
for vi.... do
break;
while (CL1) do
repeat
for vi.... do
break;
until (CL2);
Ejemplo:
Se lanzan dos dados varias veces. Se detiene el lanzamiento de los dados hasta que se completen 10
de ellos o hasta que se obtengan dos decenas, simultáneamente.
program dados;
{
}
uses crt;
const
max=10;
mense='ERROR Dato Invalido';
var
dado1,dado2,lanz:byte;
begin
clrscr;
lanz:=0;
repeat
repeat
lanz:=lanz+1;
write('Ingrese el valor del dado 1: ');
readln(dado1);
if((dado1<1)or(dado1>6))then
writeln(mense);
until((dado1>=1)and(dado1<=6));
repeat
write('Ingrese valor del dado 2: ');
readln(dado2);
if((dado2<1)or(dado2>6))then
writeln(mense);
until((dado2>=1)and(dado2<=6));
if((dado1=6)and(dado2=6))then
break
until(lanz>max);
writeln('Se hicieron ',lanz,' lanzamientos.');
readln
end.
29/05/15
Tema 7 – Arreglos:
Escalares: un solo
valor en cualquier
momento.
Datos
Compuestos: un
conjunto de
valores.
Datos Compuestos
Arreglos: son datos que permiten tener en memoria un conjunto finito de valores del mismo tipo. Los
valores o elementos del arreglo se acceden por la posición que ocupan dentro del conjunto.
Los conjuntos, de acuerdo al número de dimensiones que tienen, se categorizan como:
- Vectores: arreglos de 1 dimensión.
- Matrices: arreglos de 2 dimensiones.
- N-dimensionales (en general), donde 𝑛𝑛 ≥ 1
Vectores:
Por Ejemplo, sea el vector llamado letras de tamaño 100, que almacena letras.
program nombrep;
{
}
uses crt;
const
max=100;
------
------
var
letras:array[1..max] of char;
------
------
begin
--------
--------
readln.
end.
Segunda forma (sección de tipos):
program nombrep;
{
}
uses crt;
const
t=----;
-------
type
tipov=array[1..T] of tipovalores;
-------
-------
var
V:tipov;
-------
-------
begin
--------
--------
readln
end.
Ejemplo:
program nombrep;
{
}
uses crt;
const
max=100;
-------
-------
type
tipovector=array[1..T] of char;
-------
-------
var
letras:tipovector;
---------
---------
begin
---------
---------
readln
end.
08/06/15
Arreglos:
Matrices: Arreglos de dos dimensiones que tienen la forma siguiente:
Columnas (j)
1 X C
1 X X X M[1, C]
2 X X X
. Filas (i)
T X X M[F, C]
M[1,1]
M[i, j]: Valor de la matriz M, que ocupa la i-esima fila y j-esima columna.
i , j: subíndices del arreglo M. son variables enteros, para referirse a filas y columnas respectivamente.
Fxc: elementos que tiene M, todos del mismo tipo.
a) Como leer los valores de la matriz M de F filas y C columnas:
repita para i ← 1 hasta i ← F, 1
repita para j ← 1 hasta j ← C, 1
leer(M[i, j]) Lectura por filas.
fin del r-p
fin del r-p.
Ejemplos:
1.
program cursoPD;
uses crt;
const
maxe=10;
mense='Valor de nota invalido. Debe estar entre 0 y 20. Intente de nuevo';
type
tv=array[1.. maxe ] of real;
var
notas1p:tv;
e,tea,tenipc:byte;
s,npc:real;
begin
clrscr;
for e:=1 to maxe do
repeat
repeat
write('Ingrese nota del primer parcial del estudiante ',e,' : ');
readln(notas1p[e]);
until ((notas1p[e]>=0)or(notas1p[e]<=20));
if ((notas1p[e]<0) or (notas1p[e]>20))then
writeln(mense);
until((notas1p[e]>=0)or(notas1p[e]<=20));
s:=0;
for e:=1 to maxe do
s:=s*notas1p[e];
npc:=s/maxe;
tea:=0;
for e:=1 to maxe do;
if(notas1p[e]>=10)then
tea:=tea*1;
tenipc:=0;
for e:=1 to maxe do
if(notas1p[e]<npc)then
tenipc:=tenipc*1;
writeln;
writeln('Nota promedio del curso: ',np[Link]);
writeln;
writeln('Total de estudiantes aprobados: ',tea);
writeln;
writeln('Total de estudiantes con notas inferiores a la nota promedio del curso:
',tenipc);
readln
end.
2.
Program notasmatrices;
{Programador: Arnoldo Paris
Fecha: 08-06-15
Proposito: Para el curso de PD, se tienen las 4 notas parciales de cada estudiante.
El curso tiene 40 estudiantes. Le piden que escriba un programa que:
a) Determine la nota promedio de cada estudiante.
b) Nota promedio del curso.
c) Nombres de los estudiantes cuyas notas promedio estan por encima del valor
promedio del curso.}
Uses crt;
Const
maxe = 3;
maxp = 4;
mense = 'Error Valor Invalido. La nota debe estar entre 0 y 20.';
Type
tm = array[1..maxe, 1..maxp] Of real;
tv1 = array[1..maxe] Of real;
tv2 = array[1..maxe] Of string[60];
Var
nombres: tv2;
notas: tm;
nprom: tv1;
e,p: byte;
s,npcurso: real;
Begin
clrscr;
For e:=1 To maxe Do
Begin
write('Ingrese nombre del estudiante ',e,': ');
readln(nombres[e]);
For p:=1 To maxp Do
Begin
writeln('Parcial ',p);
Repeat
write('Ingrese nota del parcial: ');
readln(notas[e, p]);
If ((notas[e,p]<0) Or (notas[e,p]>20)) Then
writeln(mense);
Until ((notas[e,p]>=0) And (notas[e,p]<=20));
End
End;
For e:=1 To maxe Do
Begin
nprom[e] := 0;
For p:=1 To maxp Do
nprom[e] := nprom[e]+notas[e,p];
nprom[e] := nprom[e]/maxp;
End;
s := 0;
For e:=1 To maxe Do
s := s+nprom[e];
npcurso := s/maxe;
writeln('Resultados:');
writeln;
writeln('Nombre.....Nota Promedio.');
For e:=1 To maxe Do
writeln(nombres[e],' .... ',nprom[e]:0:2);
writeln;
writeln('Nota promedio del curso: ',npcurso:0:2);
writeln;
writeln('Lista de estudiantes con notas promedio mayores a la del curso: ');
For e:=1 To maxe Do
If (nprom[e]>npcurso) Then
writeln(nombres[e]);
If (nprom[e]<=npcurso) Then
begin
writeln;
writeln('No hubo estudiantes con notas mayores a las del curso.');
end;
readln
End.
3.
program conjunto;
{Programador: Arnoldo Paris
Fecha: 08-06-15
Proposito: Se tiene un conjunto de 100 valores numericos a almacenarse en una
matriz de 10x10.
Escribir un programa que muestre por pantalla:
a) La suma de todos los valores.
b) El valor promedio.}
uses crt;
const
max=2;
var
numeros:array [1..max, 1..max] of real;
i,j:byte;
suma,prom:real;
begin
clrscr;
for i:=1 to max do
for j:=1 to max do
begin
write('Ingrese valor de la fila ',i,' y columna ',j,': ');
readln(numeros[i,j]);
end;
suma:=0;
for i:=1 to max do
for j:=1 to max do
suma:=suma+numeros[i,j];
prom:=suma/(max*max);
writeln;
writeln('Resultados: ');
writeln;
writeln('La suma es ',sum[Link]);
writeln;
writeln('El promedio es ',prom:0:2);
readln
end.
4.
Program ventasmatriz;
{Programador: Arnoldo Paris
Fecha: 09-06-15
Proposito: Se tienen las ventad por departamento de cada una de las 20 tiendas de
una cadena.
Le piden que desarolle un programa que muestre por pantalla:
a) Las ventas de cada tienda.
b) Las ventas totales de la cadena.
c) La tienda en la que se produjeron las mayores ventas.
Cada tienda tiene 5 departamentos. Los datos que se tienen corresponden a un dia
cualquiera.}
Uses crt;
Const
maxt = 4;
maxd = 3;
mense = 'Error Valor Invalido. Debe ser mayor o igual a 0.';
Type
tm = array [1..maxt+1, 1..maxd+1] Of real;
Var
ventas: tm;
t,d,tmaxv: byte;
vtcad: real;
Begin
clrscr;
For t:=1 To maxt Do
For d:=1 To maxd+1 Do
ventas[t,d] := 0;
For t:=1 To maxt Do
For d:=1 To maxd Do
Repeat
write('Ingrese ventas del departamento ',d,' de la tienda ',t,': ');
readln(ventas[t,d]);
If (ventas[t,d]<0)Then
writeln(mense);
Until (ventas[t,d]>=0);
For t:=1 To maxt Do
For d:=1 To maxd Do
ventas[t,maxd+1] := ventas[t,maxd+1]+ventas[t,d];
vtcad := 0;
For t:=1 To maxt Do
vtcad := vtcad+ventas[t,maxd+1];
tmaxv := 2;
For t:=2 To maxt Do
If (ventas[t,maxd+1]>ventas[tmaxv,maxd+1])Then
tmaxv := t;
for d:=1 to maxd do
for t:=1 to maxt do
ventas[maxt+1,d]:=ventas[maxt+1,d]+ventas[t,d];
writeln;
writeln('Resultados: ');
writeln;
writeln('Ventas por tienda.');
writeln('Tienda....Ventas-Bs.');
For t:=1 To maxt Do
Begin
writeln;
writeln(t,' .... ',ventas[t,maxd+1]:0:2);
End;
writeln;
writeln('Ventas totales de la cadena-Bs: ',vt[Link]);
writeln;
writeln('Tienda de mayor ventas: ',tmaxv,' con Bs. ',ventas[tmaxv,maxd+1]:0:2);
writeln;
writeln('Ventas totales por departamento.');
writeln;
for d:=1 to maxd do
writeln('Ventas totales del departamento ',d,' fueron Bs.
',ventas[maxt+1,d]:0:2);
readln
End.
22/06/15
Es una técnica de diseño llamada también diseño descendente, basado en la máxima ‘divide y
vencerás’, que consiste en dividir un problema en subproblemas, y esos subproblemas se pueden
dividir en subproblemas, hasta obtener subprogramas que refieren una (o muy pocas) tareas.
El gráfico generado se conoce como diagrama de descomposición modular.
Cada subproblema se le llama módulo. La solución al problema con el que se parte será la unión de
las soluciones proporcionado por los módulos.
La técnica Análisis de Entrada – Procesos – Salidas (E-P-S) se aplica a cada módulo.
Ejemplos:
1. Realice la descomposición modular del problema siguiente:
Calcular el área de un triángulo cuyas bases y alturas son conocidas.
2. Realice la descomposición modular del problema.
Se tienen las tres (3) notas parciales de cada uno de los cuarenta (40) estudiantes del curso de
PD. Determine
a. Nota promedio de cada estudiante.
b. Nota promedio del curso.
c. Nombre(s) de los estudiantes con mayor nota promedio en el curso.
𝐶𝐶𝑛𝑛,𝑚𝑚
Tema 9 – Subprogramas:
Normalmente:
archivo
program ----------------------
begin
Instrucción 1; } Tarea 1
Instrucción 2; } Tarea 2
Varias Tareas
end.
Y ahora se tendrá:
1) Archivo A Archivo B
Subprograma A Subprograma B
Tarea 1 Tarea 2
2) Archivo
Subprograma A
Tarea 1
Subprograma B
Tarea 2
Los subprogramas son programas para resolver un problema. Es decir, realizar una tarea. Ellos serán
la implementación de los subprogramas o módulos de la descomposición modular.
Se construyen con las mismas estructuras estudiadas: estructuras secuenciales, de decisión, de
repetición, utilizan datos escalares o compuestos (arreglos).
Se clasifican de acuerdo a:
Externos
Archivo 1 Archivo 2
Subprograma A Subprograma B
Archivo 3
Llamada Subprograma A
Llamada Subprograma B
Subprograma A
Subprograma B
Llamada Subprograma A
Llamada Subprograma B
Los subprogramas:
a) Reciben y sacan datos.
b) Tienen argumentos o parámetros. En ellos se reciben y se sacan datos.
c) Son identificados con un nombre el cual se usará para su invocación o llamada.
d) Tienen un punto de retorno. Esto es regresan al lugar del programa desde donde se le invocó.
Algoritmo – Programa Principal:
0. Inicio
1. Acción 1.
.
.
.
.
n. Fin. Invocación de la función.
Una función en Pascal se declara como:
program nombreprograma;
uses crt;
const
-------
-------
type
-------
-------
var
-------
-------
Function
nombrefunción(Parametro1:tipo,Parametro2:tipo,...,ParametroN:tipo):tipo;
var
------
------ Parámetros Formales.
begin
------ Especificación de la Función.
------
------
end; Parámetros Reales.
begin
------
V:=nombrefuncion (P1,P2,...,PN); Llamada o invocación de la
------ función..
------
end.
Ejemplo:
program area;
{Programador: Arnoldo Paris
Fecha: 22-06-15
Proposito: Desarrolle el modulo de calcular el area de un triangulo.}
uses crt;
const
mense='Error Valor Invalido - Tienen que ser mayor que 0.';
var
b,h,at:real;
function calculararea(base:real;altura:real):real;
var
area:real;
begin
area:=base*altura/2;
calculararea:=area;
end;
begin
clrscr;
repeat
write('Ingrese valores de la base y la altura del triangulo: ');
readln(b,h);
if(b<0)or(h<0)then
begin
writeln;
writeln(mense);
writeln;
end;
until(b>0)and(h>0);
at:=calculararea(b,h);
writeln;
writeln('El area del triangulo es: ',at:0:2);
readln
end.