lunes, 21 de julio de 2008

ARCHIVOS Y FUNCIONES

ARCHIVO
Un archivo es una colección de información (datos relacionados entre si) almacenada como una unidad en alguna parte de la computadora. Esta colección de datos sirve para entrada y salida a la computadora y se manejan con un programa. A diferencia de los arrays y registros un archivo puede almacenarse en un dispositivo auxiliar discos, etc. de forma que los datos obtenidos durante y después del procesamiento no se pierdan.

Los archivos en contraste con los Arrays y Registros no son de tamaño fijo. Es decir los archivos son “Estructuras dinámicas”, en cambio en un registro se deben especificar los campos, él número de elementos de un arrays (o arreglo), el número de caracteres en una cadena; por esto se denotan estos como “Estructuras Estáticas".

CARACTERISTICAS:
El tamaño de los archivos pueden variar según sea el caso, por lo tanto se llaman estructuras dinámicas, mientras que los arreglos y registros se denominan estructuras estáticas.
Los archivos permiten guardar información para su uso posterior mediante la ejecución de programas adecuados.
Los archivos permiten guardar información en memoria secundaria o externa (cd, pendrive etc) para su uso posterior.
Tipos de archivos .exe (archivos ejecutables, ), .sys (archivos de configuración del sistema), .txt o .doc (archivos de texto) entre otros.

ARCHIVOS EN PASCAL:
Después que los archivos son creados en turbo pascal estos archivos se manipulan con el Sistema operativo, ya que, se pueden copiar, renombrar, enviar a dispositivos de entrada y salida, los archivos se pueden almacenar en discos duros, unidades externas, en pascal los archivos tienen extensión .PAS y .BAK, el nombre del archivo debe ser de 1 a 8 letras.


TIPOS DE ARCHIVOS EN TURBO PASCAL
Texto (text) o secuenciales (acceso secuencial)
Tipeados o con tipo (file of) Acceso Aleatorio
No Tipeados (no tipificados) o sin tipo (file)

DECLARACION DE ARCHIVOS EN PASCAL
La declaración de un archivo consta de 2 pasos:

Declaración del tipo de archivo adecuado
file of char (archivo de texto)
file of text (archivo de texto)
Var
texto : text;

file of (archivo tipeado o tipificado)
type
archivo : file of tipo_de_dato;
var
arch : archivo;

file archivo sin tipo.
Var
Archi:file

2. Declaración de una variable archivo de un tipo de archivo declarado.

Ejemplo:
Type
Nombre= file of string [60]; (tipo de archive de cadenas)
Numeros= file of integer; (tipo de archive de números enteros)

Var
Cantidades:numeros; (variable archivo)
Personas:nombre; (variable archivo)
Texto:text (archivo de texto)
archivo:file (archivo sin tipo)


FUNCIONES
En algunas ocasiones se debe llamar un bloque de código mas de una vez, una forma de hacerlo es escribir las instrucciones tantas veces como se necesite, tornando de esta manera programas con exceso de código y dificultad para descubrir posibles errores, la otra es colocar las instrucciones en subprogramas que se invocan cada vez que se necesiten.
Los procedimientos y funciones se declaran o escriben antes del begin principal, un procedimiento o función puede contener otros procedimientos y funciones.
Un procedimiento es un grupo de sentencias que realizan una tarea concreta. En lugar de reescribir el código completo de esa tarea cada vez que se necesite, únicamente se hace una referencia al procedimiento (llamado).

Las funciones son, al igual que los procedimientos, un conjunto de sentencias que se ejecutan constantemente, la diferencia entre éstas y los procedimientos es que las funciones regresan un valor.

Hay dos tipos de funciones las que son predefinidas en pascal, estas son funciones que ya vienen incorporadas a Turbo pascal entre las que tenemos funciones aritméticas, de cadena, de transferencias, ordinales, de dirección y punteros y funciones de asignación dinámicas de memoria.
Y funciones definidas por el usuario, son aquellas funciones que crea el programador para hacer los programas mas óptimos.

La declaración de las funciones se realiza de la siguiente forma:
FUNCTION nombre(parámetros formales) : tipo_de_dato del resultado que devuelve la funcion;
BEGIN
------- INSTRUCIONES-----
END;

Ejemplo de funciones predefinidas en pascal:
abs(x) Devuelve el valor absoluto de un numero x
round(x) Permite redondear un numero real a un entero
Int(x) Devuelve la parte entera de un numero real.
Ln(x) Devuelve el logaritmo natural de x
Entre otras.

Ejemplo de funciones definidas por el usuario

Funcion triple de un numero:
Function triple (numero:real):real;
Begin
Triple:=3*numero
End;

Funcion que calcula el mayor de 3 enteros

Function max3 (a,b,c:integer):integer;
Var
Maximo:integer;
Begin
If a>b then
Maximo:= a
Else maximo:=b;
If maximo>=c then max3:=maximo
Else max3:=c
End;

RECURSIVIDAD
El concepto de recursividad está ligado, en los lenguajes de programación, al concepto de procedimiento o función. Un procedimiento o función es recursivo cuando durante una invocación a él puede ser invocado a su vez él mismo.
Ejemplo:

Function Factorial ( n : Integer ) : Integer;
begin
If n < 2 Then Factorial := 1
else Factorial := n * Factorial ( n – 1);
end;



viernes, 11 de julio de 2008

ARBOLES BINARIOS

ARBOLES
Arboles: un árbol es un conjunto finito de uno o más nodos tales que:

a) existe un nodo llamado raíz
b) el resto de los nodos están partidos en n>=0 conjuntos disjuntos T1….Tn los cuales son por sí mismos un árbol. T1…Tn se denominan subárboles de la raíz.

Existen muchos términos que se utilizan cuando se habla de árboles. Consideremos el siguiente árbol:


Arboles Binarios.

Un árbol binario es una estructura de datos muy importante que se utiliza en muchos algoritmos. Este tipo de árbol se caracteriza por el hecho de que cada nodo tiene un máximo de dos hijos. Al utilizar árboles binarios se habla de subárbol de la derecha y subárbol de la izquierda.

Definición: Un Arbol Binario es un conjunto finito de nodos el cual es o bien vacío o consta de una raíz y dos árboles binarios disjuntos llamados subárboles derecho e izquierdo.


Arbol Binario Desviado
Arbol Binario Casi Completo

Lema 1. El máximo número de nodos en el nivel i de un árbol es 2 i-1. El número máximo de nodos que puede tener un árbol de profundidad K es 2k -1, k>0.

Nota: en cualquier nivel los nodos deben numerarse de izquierda a derecha.

Un árbol binario con n nodos y una profundidad k está completo si y solo si sus nodos corresponden a los nodos que estan numerados del 1 a n en un árbol binario completo de profundidad k.

Lema 2. Si se tiene un árbol binario completo de n nodos; representado en forma secuencial entonces para cualquier nodo i, 1>=i>=n tenemos:

a) Padre [i] se encuentra en └ i/2┘ si i≠1. Cuando i=1, el nodo es la raíz y por lo tanto no tiene padre.
b) Hijo_Izq [i] se encuentra en 2i, si 2i<=n. Si 2i>n, entonces no existe hijo izquierdo.
c) Hijo_Der[i] se encuentra en 2i+1, si 2i+1n, entonces no existe hijo derecho.



























viernes, 4 de julio de 2008

ENLACES DE INTERES

http://www.algoritmia.net/articles.php?id=13&leng=Pascal

martes, 1 de julio de 2008

EJERCICIOS RESUELTOS Y PROPUESTOS

1. (Ejercicio de Registro) Escriba un programa que lea datos de una persona 'P' (nombre, edad, sexo, dirección, teléfono), los almacene en un registro y los muestre.

Program Datos;
Uses Crt;
Type
Persona : Record
Nombre : String[30];
Edad : Integer;
Sexo : Char;
Direccion : String[50];
Telefono : string[12];
End;

Var
P: Persona;
Begin
Clrscr;
{carga del registro}
Write(' Ingrese su Nombre: ');
Readln( P.Nombre );
Write(' Ingrese su Edad: ');
Readln( P.Edad );
Write(' Ingrese su Sexo [M / F]: ');
Readln( P.Sexo );
Write(' Ingrese su Dirección: ');
Readln( P.Direccion );
Write(' Ingrese su Teléfono: ');
Readln( P.Telefono )
{ fin carga del registro}

{mostrar información del registro}
Writeln(' El Nombre es: ' , P.Nombre );
Writeln(' La Edad es:’ ,P.Edad );
Writeln(' El sexo de la persona es:’ , P.Sexo );
Writeln(' La Dirección es: ', P.Direccion );
Writeln(' el numero de Teléfono es: ' ,P.Telefono );
{fin mostrar información del registro}
End.

2. (Ejercicio de arreglo de registro) Usando el ejercicio anterior, supongamos que ahora deseamos guardar los datos de 20 personas y buscar cuál es la más joven.
Program Mas_joven;
Uses Crt;
Type
Personas : Record
Nombre : String[30];
Edad : Integer;
Sexo : Char;
Direccion : String[50];
Telefono : string[12];
End;

arre_persona=array[1..20] of persona;
Var
persona:arre_persona;
i, Menor : Integer;
Nombre : String[30];

Begin
Clrscr;
For i := 1 to 20 do
Begin
Write(' Ingrese el Nombre de la persona ', i , ': ');
Readln( persona[i].Nombre );
Write(' Ingrese su Edad: ');
Readln( persona[i].Edad );
Write(' Ingrese su Sexo [M / F]: ');
Readln( persona[i].Sexo );
Write(' Ingrese su Dirección: ');
Readln( persona[i].Direccion );
Write(' Ingrese su Teléfono: ');
Readln( persona[i].Telefono )
End;
Menor := persona[1].Edad;
For i := 2 to 20 do
If persona[i].Edad < Menor then
Begin
Menor := persona [i].Edad;
Nombre := persona [i].Nombre;
End;
Writeln(' El más joven es ',Nombre,' y tiene ',Menor,' años de edad.');
End.

(Ejercicio de arreglo de registro) Hacer un programa en pascal de 10 alumnos guardar nombre, nombre de la asignatura y 4 notas. Calcular y mostrar el promedio y la suma de las notas.

PROGRAM ARR_REGISTROS;
USES CRT;
TYPE
ALUMNOS=RECORD
NOMBRE:STRING[30];
ASIGNATURA:STRING[40];
NOTA:array[1..4] of REAL;
END;

ARRE_ALUMNOS=ARRAY[1..10] OF ALUMNOS;

VAR
ALUM:ARRE_ALUMNOS;
I,J:INTEGER;
SUMA,MEDIA:REAL;

BEGIN
CLRSCR;
FOR I:=1 TO 10 DO
BEGIN
WRITELN('INTRODUZCA EL NOMBRE DEL ALUMNO ',I);
READLN(ALUM[I].NOMBRE);
WRITELN('INTRODUZCA EL NOMBRE DE LA ASIGNATURA');
READLN(ALUM[I].ASIGNATURA);
SUMA:=0;

FOR J:=1 TO 4 DO
BEGIN
WRITELN('INTRODUZCA LA NOTA ',J);
READLN(ALUM[I].NOTA[J]);
SUMA:=SUMA + ALUM[I].NOTA[J];
END;
MEDIA:=SUMA/4;
WRITELN('LA MEDIA DEL ALUMNO ',ALUM[I].NOMBRE,' ES ', MEDIA:2:2);
WRITELN('LA SUMA ES: ',SUMA:2:2);
READLN;
END;
END.

EJERCICIO RESUELTO DE ARREGLOS DE REGISTROS

hacer un programa en pascal que almacene en un arreglo de registro la siguiente informacion de 10 trabajadores: nombre, edad, sexo, estado civil y salario base, Calcular y mostrar por pantalla la cantidad de trabajadores del sexo masculino, cantidad de trabajadoras casadas y suma de todos los sueldos.


program arreglo_registros;uses crt; type
trabajadores=record
nombre:string[30];
edad:integer;
sexo:char;
edo_civil:char;
salario:real;
end;
arre_trabajadores=array[1..10] of trabajadores;
var
trabajador:arre_trabajadores;
i, cant_masculino,cant_casadas:integer;
acum_salarios:real;
procedure inicializar;
begin
acum_salarios:=0;
cant_masculino:=0;
cant_casadas:=0;
end;
procedure cargar_datos;
begin for i:= 1 to 10 do
begin
writeln('tipee el nombre: ');
readln(trabajador[i].nombre);
writeln('tipee la edad del trabajador:');
readln(trabajador[i].edad);
writeln('tipee el sexo del trabajador f=femenino /m=masculino:');
readln(trabajador[i].sexo);
writeln('tipee el estado civil del trabajador c=casado/s=soltero:');
readln(trabajador[i].edo_civil);
writeln('tipee el sueldo del trabajador:');
readln(trabajador[i].salario);
end;
end;
procedure masculinos_casadas;
begin
for i:=1 to 10 do
begin
if upcase(trabajador[i].sexo)='M' then
cant_masculino:=cant_masculino+ 1;
if (upcase(trabajador[i].sexo)='F') and (upcase(trabajador[i].edo_civil)='C') then cant_casadas:=cant_casadas+ 1; end;end;
procedure sumar_salarios;
begin
for i:= 1 to 5 do
acum_salarios:=acum_salarios + trabajador[i].salario;
end;
procedure mostrar_datos_trabajador;
begin
for i:=1 to 5 do
begin
writeln('el nombre del trabajador es: ', trabajador[i].nombre);
readln;
writeln('la edad del trabajador es: ', trabajador[i].edad);
readln;
if upcase(trabajador[i].edo_civil)='S' then
begin
writeln('el estado civil es: soltero');
readln;
end
else
begin
writeln('el estado civil es: casado');
readln;
end; writeln('el salario del trabajador es: ', trabajador[i].salario:2:2);
readln;
end;
end;
procedure mostrar;
begin
writeln('la cantidad de trabajadores masculinos es: ', cant_masculino);
readln;
writeln('la cantidad de mujeres casadas es: ', cant_casadas);
readln;
writeln('la suma de todos los sueldos es: ' ,acum_salarios:2:2);
readln;
end; {programa principal}
begin
clrscr;
inicializar;
cargar_datos;
masculinos_casadas;
sumar_salarios;
mostrar_datos_trabajador;
mostrar;
end.

(*Escribir un programa en pascal que rellene un array unidimensional con 5 nombres y en un arreglo bidimensional guardar el monto pagado por 3 meses. Calcular el monto total pagado por cada persona. Mostrar nombre, el monto total pagado por esa persona y los montos de cada mes*)

PROGRAM pagos;
USES
crt;
TYPE
arreglo_personas=array[1..5] of string;
arreglo_monto=array[1..5,1..3] of real;
arreglo_suma=array[1..5] of real;
VAR
per:arreglo_personas;
monto:arreglo_monto;
f,c:integer;
suma:arreglo_suma;
sumas:real;

BEGIN
FOR f:=1 TO 5 DO
BEGIN
WRITELN('Introduzca el nombre:' );
READLN(per[f]);
WRITELN('Introduzca los 3 montos de 3 meses');
sumas:=0;
FOR c:=1 TO 3 DO
BEGIN
READLN(monto[f,c]);
sumas:=sumas+monto[f,c];
END;
suma[f]:=sumas;
END;

FOR f:=1 TO 5 DO
BEGIN
WRITELN('el cliente' , per[f] , 'en tres meses ha pagado: ' , suma[f]:2:2);
READLN;
FOR c:=1 TO 3 DO
BEGIN
WRITELN('En el mes' , c, ' la persona ha pagado: ' , monto[f,c]:2:2);
READLN;
END;
END;
CLRCSR;
END.


PROPUESTOS

1. Inicializar una matriz con ceros (0) y que sea de dimensión 10x12.
2. Colocar un uno (1) en todos los espacios de la matriz en que la suma de sus índices sea mayor que 6. Utilice la misma matriz de dimensión 10x12.
3. Un instituto desea controlar los resultados de los alumnos en las distintas asignaturas de la facultad de Ingeniería. El programa debe ingresar las calificaciones de los alumnos y visualizar en pantalla la media de notas por alumno y la media de notas por asignatura. Las asignaturas están codificadas de 1 a 6 y hay 30 alumnos.



lunes, 30 de junio de 2008

REGISTROS (RECORD)

Registros (Record)

Son estructuras de datos cuyos elementos pueden ser de diferentes tipos. En los registros se puede almacenar una variedad de información sobre una persona (nombre, estado civil, edad, fecha de nacimiento, etc.).

Cada elemento se almacena en un campo de registro independiente y se puede referenciar cada elemento almacenado en un campo por su nombre.
Tambien, se puede decir que un registro (record) es un tipo de dato estructurado que consta de un conjunto de elementos que pueden ser del mismo tipo o no. Los componentes de un registro se denominan campos, cada campo tiene un nombre llamado identificador del campo.

Formato:

TYPE
tipo_registro= record
lista_1: tipo_dato1;
lista_2 tipo_dato2;
lista_3 tipo_dato3;
.
.
.
lista_n:tipo_daton;
end;

donde,
tipo_registro es el nombre de la estructura.
lista_1, lista_2, lista_3 ... linsta_n son los nombres de los campos.
dato1, dato2, dato3 ... daton son los tipos de datos de cada campo.

VAR
nombre_reg:tipo_registro;

donde nombre_reg es el nombre de la variable de tipo registro.
tipo_registro es el nombre de la estructura que se uso en TYPE.


Ejemplo: Declarar un registro de empleados cuyos campos son: nombre, edad, direccin y salario

TYPE
empleado= record
nombre:string[30];
edad:integer;
direccion:string[40];
salarios:real;
end;

VAR
trabajador:empleado;

graficamente seria
nombre: Juan Perez
edad:22
direccion: calle 50, barquisimeto estado Lara.
salario12345

Acceso a los campos de un registro: Se puede acceder a cada campo de un registro directamente usando un designador o selectro de campo.
Formato: nombre_registro.nombre_campo

Ejemplo:
trabajador.nombre
trabajador.edad
trabajador.direccion
trabajador.salario

Una vez que los datos estan almacenados en un registro, se pueden manipular de igual forma que otros datos en memoria.
writeln ('el empleado se llama:', trabajador.nombre)
visualizad en pantalla lo siguiente el empleado se llama: Juan Perez

Operaciones sobre registros: Las operaciones de escritura y lectura se deben realizar individualmente, ya que un registro esta compuesto por campos de tipos diferentes.

Cargar datos a un registro y mostrarlos

program cargar_mostrar;
uses crt;
type
empleado=record
nombre:string[30];
edad:integer;
direcccion:string[40];
salario:real
end;

var
trabajador:empleado;
begin
{inicio cargar registro}
writeln('Introduzca nombre');
readln(trabajador.nombre);
writeln('Introduzca la edad');
readln(trabajador.edad);

writeln('Introduzca direccion');
readln(trabajador.direccion);

writeln('Introduzca salario');
readln(trabajador.salario);

{fin cargar registro}

{inicio mostrar informacion}
writeln('el nombre es', trabajador.nombre);
writeln('la edad del trabajador es', trabajador.edad);
writeln('la direccion del trabajador es', trabajador.direccion);
writeln('el salario del trabajador es', trabajador.salario);
readln;
{fin mostrar informacion}
end.


Ejercicio: Sean 10 alumnos de los cuales se tienen los siguientes datos nombre, asignatura y 4 notas de la asignatura. Calcular y mostrar la suma de las 4 notas y la media de la asignatura.

program registros;
uses crt;
type
alumnos=record
nombre:string[30];
asignatura:string[40];
nota:real;
end;

var
alumno:alumnos;
i,c:integer;
suma,media:real;

begin
for c:= 1 to 10 do
begin
writeln('Introduzca el nombre');
readln(alumno.nombre);
writeln('Introduzca la asignatura');
readln(alumno.asignatura);
suma:=0;

for i:=1 to 4 do
begin
writeln('introduzca la nota', i);

readln(alumno.nota);
suma:=suma+alumno.nota;
end;

media:=suma/4;
writeln('la media del alumno', alumno.nombre, 'es', media:2:2);
writeln('la suma es:',suma:2:2);
readln;
clrscr;

end;
end.

Tomado del libro Programacion en Pascal de Luis Joyanes Aguilar


ARRAYS DE REGISTROS

Los registros simples se utilizan raramente por si mismos. En general se agrupan en conjuntos conocidos como arrays de registros. Por ejemplo, si se dispone un registro que contiene los datos relativos a articulos de un almacén y si el inventario dispone de 100 artículos y se desean procesar adecuadamente se puede utilizar un array de 100 elementos; mediante la declaración siguiente se definen los elementos del conjunto.


Type
Itemstock = record
Nombre : string[30];
Numero : integer;
Precio : real;
End;

lista = array [ 1..100] of itemstock;
Var
inventario : lista;

Con estas declaraciones se puede acceder a cada registro a través de los campos de cada registro. Así, por ejemplo, la lista completa del inventario se puede cargar con el siguiente segmento del programa:

For i : = 1 to 100 do
Begin
Writeln(‘ introduzca el nombre’);
Readln (iventario[i].nombre);
Writeln(‘ introduzca número de stock’);
Readln (inventario[i].número);
Writeln(‘ introduzca precio);
Readln (invetario[i].precio);
End;

El proceso de registros del array es similar al tratamiento, ya conocido, de elementos de un array con la peculiaridad de ser tipos compuestos (registros) en lugar de ser tipos simples.
Elemplo: Inventario [ 2 ]. Nombre

miércoles, 25 de junio de 2008

ARREGLOS BIDIMENSIONALES Y MULTIDIMENSIONALES







Fuente: prof. Francys Ochoa

Enlace importante:














lunes, 23 de junio de 2008

CONTENIDO UNIDAD III Y PLAN DE EVALUACION

Sección 3N2IS / Semestre III
Materia: Programación
Docente: Ing. Mayra Ramirez

Contenido Corte III:
arreglos Bidimensionales / Multidimensionales.
Funciones/ recursividad
Registros y Archivos
Colas
Listas
Árboles
Grafos.

Plan de evaluación Corte III (35 ptos.)
Evaluación laboratorio 4 ptos.
Grupo 1 Jueves 10/7/2008
Grupo 2 Jueves 17/7/2008

Taller 4 ptos. Sobre pilas, colas, listas, árboles y grafos.
Miércoles 16/7/2008 y Miércoles 23/7/2008

Entrega proyecto 6 ptos. Miércoles 23/7/2008
Defensa proyecto 6 ptos.: Jueves 24/7/2008 y Jueves 31/7/2008

Examen Parcial 15 Ptos Miércoles 30/7/2008

=================================================================

Sección 3N5IS / Semestre III
Materia: Programación
Docente: Ing. Mayra Ramirez

Contenido Corte III:
Arreglos Bidimensionales / Multidimensionales.
Funciones/ recursividad
Registros
Archivos
Colas
Listas
Árboles
Grafos.


Plan de evaluación Corte III (35 ptos.)
Evaluación laboratorio 4 ptos.
Grupo 1 martes 8/7/2008
Grupo 2 martes 15/7/2008

Taller 4 ptos. Sobre pilas, colas, listas, árboles y grafos.
Lunes 14/7/2008 y Lunes 21/7/2008

Entrega proyecto 6 ptos. Lunes 21/7/2008
Defensa proyecto 6 ptos.: Martes 22/7/2008 y Martes 29/7/2008

Examen Parcial 15 Ptos Lunes 28/7/2008
==================================================================
Sección 3N6IS / Semestre III
Materia: Programación
Docente: Ing. Mayra Ramirez

Contenido Corte III:
Arreglos Bidimensionales / Multidimensionales.
Funciones/ recursividad
Registros
Archivos
Colas
Listas
Árboles
Grafos.


Plan de evaluación Corte III (35 ptos.)
Evaluación laboratorio 4 ptos.
Grupo 1 martes 8/7/2008
Grupo 2 martes 15/7/2008

Taller 4 ptos. Sobre pilas, colas, listas, árboles y grafos.
Lunes 14/7/2008 y Lunes 21/7/2008

Entrega proyecto 6 ptos. Lunes 21/7/2008
Defensa proyecto 6 ptos.: Martes 22/7/2008 y Martes 29/7/2008

Examen Parcial 15 Ptos Lunes 28/7/2008

===============================================================

jueves, 5 de junio de 2008

ARREGLOS UNIDIMENSIONALES

Un arreglo unidimensional es un tipo de datos estructurado que está formado por una colección finita y ordenada de datos del mismo tipo. Es la estructura natural para modelar listas de elementos iguales. Los datos que se guarden en los arreglos todos deben ser del mismo tipo.

El tipo de acceso a los arreglos unidimensionales es el acceso directo, es decir, podemos acceder a cualquier elemento del arreglo sin tener que consultar a elementos anteriores o posteriores, esto mediante el uso de un índice para cada elemento del arreglo que nos da su posición relativa.
Para implementar arreglos unidimensionales se debe reservar espacio en memoria.
Los arreglos nos permiten hacer un conjunto de operaciones para manipular los datos guardados en ellos, estas operaciones son: ordenar, buscar, insertar, eliminar, modificar entre otras.


REPRESENTACION EN MEMORIA: Los arreglos guardan en memoria la cantidad de espacios que se le indican en la declaración.

Ejemplo: sea el siguente arreglo unidimensional donde se va a guardar 5 datos de tipo entero (integer)

x : array[1..5] of integer
En memoria el computador guarda 5 espacios: esto quiere decir en el arreglo X en la posición 1 guarda 34, en el arreglo X en la posición 2 guarda 22, asi hasta la última posición del arreglo X posicion 5 guarda 72.
X [1]

34

X [2]

22

X [3]

39

X [4]

63

X [5]
72

Declaracion de los arreglos unidimensionales: Se declara el tipo del arreglo, con la palabra reservada TYPE, luego se declara la variable de tipo arreglo, esto se hace en el bloque de declaracion de variables palabra reservada VAR.

Type

nombre_arreglo= array[x..y]of tipo_dato;

Ejemplos:

salarios= array [1…x] of real;

nombre_trabajador=array[1..x] of string;

Nota: El tipo de dato del arreglo puede ser: integer,real, boolean, string etc.

Variables tipo array

Var

sueldo:salarios;

nombre:nombre_trabajador;

Una vez declarados los arreglos procedemos a cargar información en ellos, para esto usamos estructuras repetitivas la mas recomendable por su facilidad es el for, una vez cargada la información se puede hacer cualquier operación de calculo y por último mostramos la información de los arreglos usando de igual manera la estructura repetitiva for.

carga de un arreglo, la letra i es el indice o subindice del arreglo e indica la posición del arreglo:

for i:=1 to num do

begin

readln(notas[i]);

end;

Mostrar la información de un arreglo, la letra i es el indice o subindice del arreglo e indica la posición del arreglo::

for i:=1 to num do

begin

writeln(notas[i]:3:1);

end;

Se han hechos programas que suman una cantidad de números usando dos variables, una para leer cada número y otra para acumular la suma. Este enfoque tiene la desventaja de que se pierden los valores de los sumandos. El uso de arreglos permite calcular la suma de los números con una cantidad mínima de código y a la vez conservar cada valor, como muestra el siguiente programa completo:


Program SumaN;

Uses

Crt;

Const

n = 5;

Var

nums: Array[1..n] Of Integer;

s, i: Integer;

Begin

For i:=1 To n Do

Begin

Write('Escriba el número: ');

ReadLn(nums[i]);

s := s + nums[i];

End;

WriteLn('La suma es: ', s);

End.

Nótese el uso de una constante para marcar el tamaño del arreglo; dicha constante, también sirve para controlar el For. De este modo, sólo se hace necesario cambiar un número para adecuar el programa a la escala apropiada

Ejercicios de arreglos unidimensionales:



* Dadas n cantidad de notas, calcular e imprimir el promedio de las notas y todas las notas que fueron mayor a la media calculada.

PROGRAM calificaciones;
USES CRT;
type
listacalificaciones=array[1..n]of real;
VAR
notas:listacalificaciones;
media,suma:real;
num,i:integer;

BEGIN
WRITELN('INTRODUZCA la cantidad de notas a procesar');
READLN(NUM);
suma:=0;

for i:=1 to num do
begin
readln(notas[i]);
suma:=suma+notas[i];
end;
media:=suma/num;
writeln('la media es:' , media:2:2);
writeln('la lista de calificaciones mayores a la media es:');
for i:=1 to num do
begin
if notas[i]>media then
writeln(notas[i]:3:1);
readln;
end;
END.

(*Escribir un programa en pascal que rellene un array con 11
numeros, luego dividirlos entre 3 y mostralos por pantalla *)

PROGRAM numeros;
USES CRT;
type
arreglonumeros=array[1..11]of real;
VAR
num:arreglonumeros;
i:integer;
numero:real;

BEGIN
for i:=1 to 11 do
begin
WRITELN('Introduzca el numero ' , i, ' a dividir');
readln(num[i]);
numero:=num[i]/3;
write('los numero resultantes de la division son:' ,numero:2:2);
readln;
end;
end.

martes, 27 de mayo de 2008

DESCRIPCION DE ERRORES EN PASCAL

Mensajes de error en Turbo Pascal 7.0.

Turbo Pascal genera dos tipos de mensajes de error: mensajes de error del compilador y mensajes de error en tiempo de ejecución.

Mensajes de Error de Compilación:
Si tiene lugar un error de compilación mientras se está compilando dentro del IDE, Turbo Pascal hace activa la ventana de edición y sitúa el cursor en el punto del código fuente donde se produjo el error.
Si el error tiene lugar mientras se usa el compilador de línea de comandos, Turbo Pascal muestra el mensaje de error y el número de la línea de código fuente; un circunflejo (^) en la línea mostrada indica la localización del error.


Mensajes de Error en Tiempo de Ejecución:
Si el programa genera un error en tiempo de ejecución, se parará y aparecerá este mensaje:
Run-time error at
donde nnn es el número del error en tiempo de ejecución
xxxx:yyyy es la dirección del error en tiempo de ejecución.


Mensajes de Error de Compilación.

1 Out of memory
significa Memoria Agotada
2 Identifier expected significa Se esperaba un identificador
3 Unknown identifier
significa Identificador desconocido
4 Duplicate identifier significa Identificador duplicado
5 Syntax error
significa Error de sintaxis
6 Error in real constant significa Error en constante real
7 Error in integer constant significa Error en constante entera
8 String constant exceeds line significa Constante de cadena excede la línea
10 Unexpected end of file
significa Fin de archivo no esperado
11 Line too long
significa Línea demasiado larga
12 Type identifier expected significa Se esperaba identificador de tipo
13 Too many open files significa Demasiados archivos abiertos
14 Invalid file name
significa Nombre de archivo no válido
15 File not found
significa Archivo no encontrado
16 Disk full significa Disco lleno
17 Invalid compiler directive significa Directiva de compilación no válida
18 Too many files significa Demasiados archivos
19 Undefined type in pointer def significa Tipo no identificado en definición de puntero
20 Variable identifier expected significa Se esperaba identificador de variable
21 Error in type
significa Error en tipo
22 Structure too large significa Estructura demasiado grande
23 Set base type out of range
significa Tipo base del conjunto fuera de rango
24 File components may not be files or objects significa Componentes de archivos no deben ser archivos u objetos
25 Invalid string length significa Largo de cadena no válido
26 Type mismatch
significa Tipos no coinciden
27 Invalid subrange base type
significa Tipo subrango base no válido
28 Lower bound greater than upper bound significa Límite inferior es más grande que el límite superior
29 Ordinal type expected
significa Se esperaba tipo ordinal
30 Integer constant expected significa Se esperaba constante entera
31 Constant expected significa Se esperaba una constante
32 Integer or real constant expected significa Se esperaba una constante entera o real
33 Pointer Type identifier expected significa Se esperaba identificador de tipo de puntero
34 Invalid function result type
significa Tipo de resultado para la función no válido
35 Label identifier expected significa Se esperaba identificador de etiqueta
36 BEGIN expected
significa Se esperaba BEGIN
37 END expected
significa Se esperaba END
38 Integer expression expected significa Se esperaba una expresión entera
39 Ordinal expression expected significa Se esperaba una expresión ordinal
40 Boolean expression expected significa Se esperaba una expresión booleana
41 Operand types do not match
significa Tipos de operadores no coinciden
42 Error in expression significa Error en la expresión
43 Illegal assignment significa Asignación ilegal
44 Field identifier expected
significa Se esperaba identificador de campo
45 Object file too large significa Archivo de objeto demasiado grande
46 Undefined external significa External no definido
47 Invalid object file record significa Registro de archivo en objeto no válido
48 Code segment too large significa Segmento de código demasiado grande
49 Data segment too large
significa Segmento de datos demasiado grande
50 DO expected significa Se esperaba DO
51 Invalid PUBLIC definition significa Definición PUBLIC no válida
52 Invalid EXTRN definition significa Definición EXTRN no válida
53 Too many EXTRN definitions significa Demasiadas definiciones EXTRN
54 OF expected significa Se esperaba OF
55 INTERFACE expected significa Se esperaba INTERFACE
56 Invalid relocatable reference significa Referencia relocalizable no válida
57 THEN expected significa Se esperaba THEN
58 TO or DOWNTO expected significa Se esperaba TO o DOWNTO
59 Undefined forwarrd
significa Forward no definido
61 Invalid typecast significa Cambio de tipo inválido
62 Division by zero
significa División por cero
63 Invalid file type significa Tipo de archivo no válido
64 Cannot read or write variables of this type
significa No se pueden leer o escribir este tipo de variables
65 Pointer variable expected significa Se esperaba una variable de puntero (pointer)
66 String variable expected significa Se esperaba una variable de cadena (string)
67 String expression expected significa Se esperaba una expresión de cadena
68 Circular unit reference significa Referencia circular entre unidades
69 Unit name mismatch significa El nombre de la unidad no coincide
70 Unit version mismatch significa La versión de la unidad no coincide
71 Internal stack overflow
significa Desbordamiento interno de la pila
72 Unit file format error significa Error en el formato de la unidad
73 IMPLEMENTATION expected significa Se esperaba IMPLEMENTATION
74 Constant and case types do not match
significa El tipo en el CASE y la constante no coinciden
75 Record or object variable expected significa Se esperaba una variable objeto o registro
76 Constant out of range
significa Constante fuera de rango
77 File variable expected significa Se esperaba una variable de archivo
78 Pointer expression expected significa Se esperaba una expresión de punteros
79 Integer or real expression expected significa Se esperaba una expresión entera o real
80 Label not within current block significa Etiqueta no está dentro del bloque actual
81 Label already defined significa Etiqueta ya definida
82 Undefined label in peeding statement part
significa Etiqueta no definida en la parte de la sentencia anterior
83 Invalid @ argument significa Argumento para @ inválido
84 UNIT expected significa Se esperaba UNIT
85 "; " expected
significa Se esperaba ";"
86 ":" expected significa Se esperaba ":"
87 "," expected significa Se esperaba ","
88 "(" expected significa Se esperaba "("
89 ")" expected significa Se esperaba ")"
90 "=" expected significa Se esperaba "="
91 ":=" expected significa Se esperaba ":="
92 "[" or "(." expected significa Se esperaba "[" o "(."
93 "]" or ".)" expected significa Se esperaba "]" o ".)"
94 "." expected significa Se esperaba "."
95 ".." expected significa Se esperaba ".."
96 Too many variables significa Demasiadas variables
97 Invalid FOR control variable
significa Variable de control en el FOR no válida
98 Integer variable expected significa Se esperaba una variable entera
99 Files and procedure types are not allowed here significa Tipos archivos o procedimientos no se permiten aquí
100 String length mismatch significa Tamaño de la cadena no coincide
101 Invalid ordering of fields significa Orden de los campos inválido
102 String constant expected
significa Se esperaba constante de cadena
103 Integer or real variable expected significa Se esperaba una variable entera o real
104 Ordinal variable expected significa Se esperaba una variable ordinal
105 INLINE error significa Error en INLINE
106 Character expression expected
significa Se esperaba expresión de caracteres
107 Too many relocation items significa Demasiados items de relocalización
108 Overflow in arithmetic operation significa Desbordamiento en operación aritmética
109 No enclosing FOR, WHILE or REPEAT statement significa Sentencias FOR, WHILE o REPEAT no cerradas
110 Debug information table overflow significa Desbordamiento en la tabla de información de depuración
112 CASE constant out of range significa Constante CASE fuera de rango
113 Error in statement
significa Error en la sentencia
114 Cannot call an interrupt procedure significa No se puede llamar a un procedimiento de interrupción
116 Must be in 8087 mode to compile this
significa Debe estar en modo 8087 para compilar esto
117 Target address not found significa Dirección de destino no encontrada
118 Include files are not allowed here significa Archivos incluidos no se premiten aquí
119 No inherited methods are accessible here significa Ningún método heredado se permite aquí
121 Invalid qualifier significa Calificador no válido
122 Invalid variable referentence
significa Referencia a variable no válida
123 Too many symbols significa Demasiados símbolos

124 Statement part too large significa Parte ejecutable demasiado grande
126 Files must be var parameters significa Archivos deben ser parámetros var
127 Too many conditional symbols significa Demasiados símbolos condicionales
128 Misplaced conditional directive significa Directiva condicional fuera de lugar
129 ENDIF directive missing significa No se encontró la directiva ENDIF
130 Error in initial conditional defines significa Error en el defines condicional inicial
131 Header does not match previous definition significa Cabecera no coincide con la definición previa
133 Cannot evaluate this expression
significa No se puede evaluar esta expresión
134 Expression incorrectly terminated significa Expresión incorrectamente terminada
135 Invalid format specifier significa Especificador de formato no válido
136 Invalid indirect reference significa Referencia indirecta no válida
137 Structured variables are not allowed here significa Variables de estructura no se permiten aquí
138 Cannot evaluate without System unit significa No se puede evaluar sin la unidad System
139 Cannot access this symbol significa No se puede acceder a este símbolo
140 Invalid floating point operation significa Operación de punto flotante no válida
141 Cannot compile overlays to memory significa No se pueden compilar overlays en memoria
142 Pointer or procedural variable expected significa Se esperaba una variable de puntero o procedimiento
143 Invalid procedure or function reference significa Referencia a procedimiento o función no valida
144 Cannot overlay this unit significa No se puede convertir en overlay esta unidad
145 Too many nested scopes significa Demasiados ámbitos de anidación
146 File access denied significa Acceso a archivo denegado
147 Object type expected significa Se esperaba un tipo objeto
148 Local object types are not allowed significa Tipos de objetos locales no se permiten aquí
149 VIRTUAL expected significa Se esperaba VIRTUAL
150 Method identifier expected
significa Se esperaba identificador de método
151 Virtual constructors are not allowed significa Constructores virtuales no se permiten aquí
152 Constructor identifier expected significa Se esperaba identificador de contructor
153 Destructor identifier expected significa Se esperaba identificador de destructor
154 Fail only allowed within constructors significa Fail solo se permite dentro de los constructores
155 Invalid combination of opcode and operands significa Combinación de opcode y operandos no válida
156 Memory reference expected significa Se esperaba referencia a memoria
157 Cannot add or subtract relocatable symbols significa No se pueden sumar o restar símbolos relocalizables
158 Invalid register combination significa Combinación de registros no válida
159 286/287 instructions are not enabled significa No están habilitadas las intrucciones 286/287
160 Invalid symbol reference significa Referencia a símbolo no válida
161 Code generation error significa Error de generación de código
162 ASM expected significa Se esperaba ASM
163 Duplicate dynamic method index significa Índice a método dinámico duplicado
164 Duplicate resource identifier significa Identificador de recurso duplicado
165 Duplicate or invalid export index significa Índice de exportación duplicado o no válido
166 Procedure or function identifier expected significa Se esperaba identificador de función o procedimiento
167 Cannot export this symbol significa No se puede exportar este símbolo
168 Duplicate export name significa Nombre de exportación duplicado
169 Executable file header too large significa Encabezado del archivo ejecutable demasiado grande
170 Too many segments significa Demasiados segmentos



Mensajes de Error en Tiempo de Ejecución

1 Invalid function number significa Número de función inválido
2 File not found
significa Archivo no encontrado
3 Path not found
significa Camino no encontrado
4 Too many open files significa Demasiados archivos abiertos
5 File access denied
significa Acceso al archivo denegado
6 Invalid file handle significa Manejador de archivo inválido
12 Invalid file access code significa Código de acceso al archivo inválido
15 Invalid drive number significa Número de dispositivo inválido
16 Cannot remove current directory significa No se puede eliminar el directorio actual
17 Cannot rename across drives significa No se puede renombrar en diferentes dispositivos
18 No more files significa No más archivos
100 Disk read error
significa Error de lectura en disco
101 Disk write error
significa Error de escritura en disco
102 File not assigned
significa Archivo no asignado
103 File not open
significa El archivo no está abierto
104 File not open for input
significa El archivo no está abierto en modo lectura
105 File not open for output
significa El archivo no está abierto en modo escritura
106 Invalid numeric format
significa Formato numérico inválido
150 Disk is write- protected
significa El disco está protegido contra escritura
151 Bad drive request struct length significa Tamaño erroneo en la estructura de petición al dispositivo
152 Drive not ready
significa Dispositivo no está preparado
154 CRC error in data significa Error de CRC en los datos
156 Disk seek error
significa Error de búsqueda en disco
157 Unknown media type significa Tipo de medio desconocido
158 Sector Not Found
significa Sector no encontrado
159 Printer out of paper significa Impresora sin papel
160 Device write fault significa Fallo de escritura en dispositivo
161 Device read fault significa Fallo de lectura en dispositivo
162 Hardware failure significa Fallo de hardware
200 Division by zero
significa División por cero
201 Range check error
significa Error en la comprobación de rango
202 Stack overflow error
significa Desbordamiento de pila
203 Heap overflow error
significa Desbordamiento de montículo
204 Invalid pointer operation significa Operación de puntero inválida
205 Floating point overflow
significa Desbordamiento de punto flotante
206 Floating point underflow significa Subdesbordamiento de punto flotante
207 Invalid floating point operation significa Operación de punto flotante inválida
208 Overlay manager not installed significa Administrador de overlay no instalado
209 Overlay file read error significa Error de lectura en archivo overlay
210 Object not initialized significa Objeto no inicializado
211 Call to abstract method significa Llamada a método abstracto

212 Stream registration error significa Error de registración de stream
213 Collection index out of range significa Índice de colección fuera de rango
214 Collection overflow error significa Error de desbordamiento en colección
215 Arithmetic overflow error
significa Error de desbordamiento aritmético
216 General Protection fault
significa Fallo de protección general

viernes, 23 de mayo de 2008

jueves, 22 de mayo de 2008

EJERCICIOS

Sean 10 alumnos de la sección 3N6IS y dadas 5 notas por alumno de la materia programación.
Calcular y mostrar:
· El promedio de la materia por alumno.
· El promedio de la sección.

Program NOTAS1;
uses crt;
var
alumnos,materia,notas: integer;
promedioalumno,promedioseccion,sumaseccion,suma,nota: Real;
nombre:string[30];

BEGIN

alumnos:=1;
sumaseccion:=0;

while alumnos <=10 do

begin
writeln('Introduzca el nombre del alumno:'); r
eadln(nombre);
suma:=0;
notas:=1;
while notas <=5 do
begin
writeln('Introduzca las 5 notas:');
readln(nota);
suma:=suma+nota;
notas:=notas+1;
end;
promedioalumno:=suma/5;
sumaseccion:=sumaseccion+promedioalumno;
alumnos:=alumnos+1;
writeln('El nombre del alumnos es:', nombre);
writeln('El promedio del alumno es:', promedioalumno:2:2);
readln;
end;
promedioseccion:=sumaseccion/2;
writeln('El Promedio de la seccion es: ',promedioseccion:2:2);
readln;
END.

Un cajero cobra facturas por servicios a 60 personas en un caja de un banco, averiguar:
a) Cuantas facturas fueron mayores a 50 bs. Y cuantas menores o igual a 50.
b) Cuanto recaudo en total por facturas mayores a 50 y cuanto recaudo en total por facturas menores o iguala 50.


Program facturas;
Uses crt;
Var
contador,menor,mayor: INTEGER;
sumatotal,sumamayores,sumamenores,factura: Real;
be:char;

Begin
contador:=1;
menor:=0;
mayor:=0;
sumatotal:=0;
sumamayores:=0;
sumamenores:=0;

While contador<=60 do

begin
clrscr;
writeln('Usted lleva ingresadas: ', contador, ' facturas');
writeln('Ingrese el valor de una factura: ');
readln(factura);
contador:=contador+1;
sumatotal:= sumatotal+factura;

if factura>50 then
begin
mayor:=mayor+1;
sumamayores:=sumamayores+factura;
end;

if factura<=50 then

begin
menor:=menor+1;
sumamenores:=sumamenores+factura;
end;

sumatotal:=sumamenores+sumamayores;

end;
clrscr;
writeln('facturas mayores a 50:', mayor);
writeln('facturas menores o iguales a 50:', menor);
writeln('Recaudo total:', sumatotal:2:2);
writeln('Recaudo mayores a 50:',sumamayores:2:2);
writeln('Recaudo menores o iguales a 50:',sumamenores:2:2);
be:=readkey;
End.


Dada N notas de un estudiante calcular:
a) Cuantas notas tiene aprobadas y cuantas reprobadas.
b) El promedio de notas.
c) El promedio de notas aprobadas y el promedio de notas reprobadas.




Leer 15 números positivos y convertirlos a negativos e imprimir dichos números antes y después de la conversión.

Program positivo_negativo;
Uses crt;
var
numero,num_convertido:real;
c:integer;
const
negativo=-1;

begin
for c:=1 to 10 do
begin
writeln('Introduzca numero Positivo ó diferente de cero: ');
readln(numero);

if numero <> 0 then
begin
num_convertido:=numero*negativo;
writeln('El numero de entrada es:' , numero:2:2);
wruteln('El numero convertido es:' , num_convertido:2:2);
end;
end;
readln;
clrscr;
end.


Escribir un programa en Pascal que calcule el salario neto semanal de 10 trabajadores en función del número de horas trabajadas, valor hora trabajada 20 bs, las deducciones y asignaciones.
El salario bruto se calcula de la siguiente manera:
· Las primeras 35 horas se pagan a tarifa normal
· Las horas que pasen de 35 horas se pagan, 15% más del valor de la hora trabajada.
Para el salario neto se le deduce lo siguiente:
a) Si el salario es menor o igual a 50 bolívares fuertes no se hace deducciones.
b) Si el salario mayor a 50 y menor a 90 bolívares fuertes, la deducción es del 25% del salario
c) Para el salario mayor se 90 la deducción será de 45% del salario.
Para el salario neto se le asigna lo siguiente:
a) 20% del salario bruto, si tiene 3 o menos hijos.
b) 30% del salario bruto, si tiene más de 3 hijos.
Mostrar por pantalla:
a) Nombre del trabajador.
b) Cantidad de hijos del trabajador.
c) Sueldo neto del trabajador.

PROGRAM SALARIO_10;
USES CRT;
VAR
SALARIO_NETO,SAL_BRUTO,HORAS_TRA,HORAS_EX:REAL;
VALOR_EX,ASIGNACION,DEDUCCION:REAL;
N,CANT_HIJO:INTEGER;
NOMBRE:STRING[30];
CONST
POR1=0.25;
POR2=0.45;
VALOR_HORA=20;

PROCEDURE LEER_DATOS;
BEGIN
WRITE ('INTRODUZCA EL NOMBRE DEL TRABAJADOR:');
READLN (NOMBRE);
WRITE ('INTRODUZCA LA CANTIDAD DE HIJOS DEL TRABAJADOR:');
READLN (CANT_HIJO);
WRITE ('INTRODUZCA LA CANTIDAD DE HORAS TRABAJADAS:');
READLN (HORAS_TRA);
END;

PROCEDURE SALARIO_BRUTO;
BEGIN
IF HORAS_TRA <= 35 THEN SAL_BRUTO:= HORAS_TRA*VALOR_HORA; IF HORAS_TRA > 35 THEN
BEGIN
HORAS_EX:=HORAS_TRA-35;
VALOR_EX:=VALOR_HORA+(VALOR_HORA*0.15);
SAL_BRUTO:=(35*VALOR_HORA)+(HORAS_EX*VALOR_EX)
END;
END;

PROCEDURE CALCULO_DEDUCCIONES;
BEGIN
IF SAL_BRUTO<=50 THEN DEDUCCION:=0; IF (SAL_BRUTO>50) AND (SAL_BRUTO<=90) THEN DEDUCCION:=SAL_BRUTO*POR1; IF SAL_BRUTO >90 THEN
DEDUCCION:=SAL_BRUTO*POR2;
END;

PROCEDURE CALCULO_ASIGNACIONES;
BEGIN
IF CANT_HIJO<=3 THEN ASIGNACION:=SAL_BRUTO*0.20; IF CANT_HIJO>3 THEN
ASIGNACION:=SAL_BRUTO*0.30;
END;

PROCEDURE CALCULO_SUELDO_NETO;
BEGIN
SALARIO_NETO:= SAL_BRUTO+ASIGNACION-DEDUCCION;
END;

PROCEDURE MOSTRAR;
BEGIN
WRITELN('EL NOMBRE DEL TRABAJADOR ES:' ,NOMBRE);
WRITELN('LA CANTIDAD DE HIJOS DEL TRABAJADOR ES:' ,CANT_HIJO);
WRITELN('EL SUELDO NETO DEL TRABAJADOR ES:' ,SALARIO_NETO:2:2);
READLN;
END;

PROCEDURE CICLO;
BEGIN
N:=0;
WHILE N <=10 DO BEGIN LEER_DATOS; SALARIO_BRUTO; CALCULO_DEDUCCIONES; CALCULO_ASIGNACIONES; CALCULO_SUELDO_NETO; MOSTRAR; N:= N+1; END; END; (* PROGRAMA PRINCIPAL*) BEGIN CICLO; END.

jueves, 15 de mayo de 2008

EJERCICIOS PROPUESTOS Y RESUELTOS

EJERCICIOS RESUELTOS

1. Escribir un programa en Pascal que detecte si un número introducido desde le teclado es positivo o negativo.

PROGRAM positivo_negativo;
USES CRT;
VAR
NUM:INTEGER;

BEGIN
WRITELN ('INTRODUZCA NUMERO ENTERO: ');
READLN (NUM);


IF NUM > 0 THEN
WRITELN('EL NUMERO ES POSITIVO');

IF NUM < 0
WRITELN('EL NUMERO ES NEGATIVO');

IF NUM=0 THEN
WRITELN('EL NUMERO NO ES NI POSITIVO NI NEGATIVO ES CERO');

READLN;
CLRSCR;
END.

2. Escribir un programa en Pascal que calcule el importe de una factura sabiendo que el IVA a aplicar es del 9% y que si el importe bruto de la factura es superior a 50 BsF, se debe realizar un descuento del 5%.

PROGRAM FACTURA;
USES CRT;
VAR
MONTO_BRUTO,MONTO_NETO,MONTO_IVA,DESCUENTO:REAL;
CONST
IVA=0.09;
DES=0.05;


BEGIN

WRITELN ('INTRODUZCA MONTO BRUTO DE LA FACTURA: ');
READLN (MONTO_BRUTO);

MONTO_IVA:=MONTO_BRUTO*IVA;

IF MONTO_BRUTO > 50 THEN
BEGIN
DESCUENTO:=MONTO_BRUTO*DES;
MONTO_NETO:=MONTO_BRUTO+MONTO_IVA-DESCUENTO;
WRITE('EL MONTO NETO DE LA FACTURA ES:' , MONTO_NETO);

END;


IF MONTO_BRUTO<=50 THEN BEGIN DESCUENTO:=0; MONTO_NETO:=MONTO_BRUTO+MONTO_IVA;

WRITE('EL MONTO NETO DE LA FACTURA ES:' , MONTO_NETO);
END;
READLN;
CLRSCR;
END.


3. Hacer un algoritmo que calcule y muestre el total a pagar por la compra de pantalones, se debe pedir como entrada el valor del pantalón y la cantidad de pantalones comprados, además si se compra 5 pantalones o mas se aplica un descuento del 25% al monto total a pagar y si son menos de 5 pantalones el descuento es del 10% al monto total a pagar.

PROGRAM FACTURA;
USES CRT;
VAR
CANT_PANT:INTEGER;
PRECIO_PANT,MONTO_PAGAR,DESCUENTO:REAL;
CONST
DES1=0.10;
DES2=0.25;


BEGIN
WRITELN ('INTRODUZCA LA CANTIDAD DE PANTALONES A COMPRAR: ');
READLN (CANT_PANT);
WRITELN('INTRODUZCA EL PRECIO DEL PANTALON: ');

READLN(PRECIO_PANT);


IF CANT_PANT >= 5 THEN
BEGIN
DESCUENTO:=(CANT_PANT*PRECIO_PANT)*DES2;
MONTO_PAGAR:=(CANT_PANT*PRECIO_PANT)-DESCUENTO;
WRITE('EL MONTO TOTAL A PAGAR ES:' , MONTO_PAGAR);
END;


IF CANT_PANT<=5 THEN BEGIN DESCUENTO:=(CANT_PANT*PRECIO_PANT)*DES1; MONTO_PAGAR:=(CANT_PANT*PRECIO_PANT)-DESCUENTO; WRITE('EL MONTO TOTAL A PAGAR ES:' , MONTO_PAGAR); END;


READLN;
CLRSCR;
END.

4. Sumar los números del 1 al 10.

PROGRAM SUMAR;
USES CRT;
VAR
NUM,SUMA,CONTADOR:INTEGER;

BEGIN

CONTADOR:=1; SUMA:=0;


WHILE CONTADOR<=10 DO

BEGIN

WRITELN ('INTRODUZCA LOS 10 NUMEROS A SUMAR: ');

READLN (NUM); SUMA:= SUMA + NUM; CONTADOR:=CONTADOR+1;

END;
WRITELN ('LA SUMA ES:', SUMA);
READLN;
CLRSCR;
END.

EJERCICIOS PROPUESTOS

1. Escribir un programa en Pascal que detecte si un número leído desde el teclado es mayor o menor que 100.


2. un comerciante efectúa durante el mes N ventas a distintos clientes. Se desea saber:
a) Cuantas ventas fueron mayores a 550 bsf.
b) Cuantas ventas fueron mayores a 200 bsf. y menores o iguales a 550bsf.
c) Calcular los promedios de cada grupo (puntos ay b).
d) Mostrar por pantalla lo solicitado en los puntos a, b y c.

3. Un profesor de un curso, hace un examen de matemática a cada uno de sus N alumnos. De acuerdo a los resultados obtenidos se procede de la siguiente manera: En caso de obtener nota menor a 4 el alumno esta reprobado y debe reparar en marzo, En caso contrario el alumno esta aprobado.
Se desea saber:
a) Cuantos alumnos reprobaron la materia.
b) Cuantos alumnos aprobaron la materia.
c) Calcular los promedios de los alumnos reprobados y aprobador.
d) Mostrar por pantalla lo solicitado en a, b, c.

4. Un vendedor recibe un sueldo base, más 12% extra por comisiones de sus ventas, el vendedor desea saber cuanto dinero cobrará por concepto de comisiones por las cuatro ventas que realizo en el mes y el total que recibirá en el mes por sueldo base y comisiones.


5. Un profesor hace dos exámenes de matemática y física a cada uno de sus 40 alumnos. Desea saber:
a) Cuantos alumnos sacaron más de 7 en cada examen.
b) Cuantos alumnos sacaron menos o igual a 7 en cada examen.
b) Calcular los promedios de notas de cada examen.
d) Mostrar por pantalla lo solicitado en a, b, c.


lunes, 5 de mayo de 2008

PROGRAMACION MODULAR

Programacion Modular:

Uno de los métodos más conocidos para resolver un problema es dividirlo en problemas más pequeños, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y tediosa, resolvemos otras más sencillas y a partir de ellas llegamos a la solución.

Si traslados este metodo a la programación, se puede crear y trabajar con subprogramas para resolverlos los problemas. A estos subprogramas se les suele llamar módulos, de ahí viene el nombre de programación modular. En Pascal disponemos de dos tipos de módulos: los procedimientos y las funciones.

Los procedimientos: Es un subprograma que realiza una tarea específica. Para hacer que se ejecute, hay que escribir su nombre en el cuerpo de otro procedimiento o en el programa principal. Hay que tener en cuenta que la declaración debe hacerse antes de que sea llamado por otro módulo.

Un procedimiento se compone de la palabra procedure seguida del nombre del procedimiento y una lista de parámetros que es opcional.
Las secciones de declaración de constantes (const), de tipos (type) y de variables (var) también pueden aparecer en la estructura de cualquier procedimiento.

El cuerpo del procedimiento, se delimita por las palabras reservadas begin y end, y en su interior puede contener sentencias simples o estructuradas
.

Procedure nombre (lista_parametros);
const declarar_ctes;
type declarar_tipos;
var declarar_vars;
begin
cuerpo_procedimiento
end ;

En los programas y procedimientos se puede usar variables globales y locales

Variable local: Es una variable que se declara dentro de un subprograma, y se dice que es local al subprograma. Y lo que la caracteriza es que su valor sólo está disponible mientras se ejecuta el subprograma, el programa principal no tiene conocimiento alguno de las variables locales
.
Variable Global: Es una variable que se declara en la sección de declaración de variables en
el programa principal, a diferencia de las locales, su valor está disponible tanto en el cuerpo del programa principal como en el de cualquiera de los subprogramas declarados.

Funciones:
Funciones predefinidas:
Las funciones predefinidas, también llamadas estándar, son las que el propio lenguaje Pascal pone a disposición del programador. Por ejemplo, si necesitas calcular el valor absoluto de un número, no es necesario construir la función, pues ya se dispone de una que lo hace.
Dependiendo del tipo de compilador
de Pascal que se use, se dispondrá de más o menos funciones estándar, pero siempre se tendrá un grupo básico que comparten todos.

Algunas de las funciones básicas:
sin(x:real)
seno de x
cos(x:real)
coseno de x
sqr(x:real)
cuadrado de x
sqrt(x:real)
raíz cuadrada de x
abs(x:real)
valor absoluto de x
ln(x:real)
logaritmo neperiano de x
int(x:real)

Funciones definidas por el usuario: Son las que el propio usuario declara, de igual manera que declara procedimientos. Las funciones nacen con el propósito de ser subprogramas que siempre tienen que devolver algún valor.
Las dos principales diferencias entre procedimientos
y funciones son:

- Las funciones siempre devuelven un valor al programa que las invocó.
- Para llamar a un procedimiento se escribe su nombre en el cuerpo del programa, y si los necesita, se incluyen los parámetros entre paréntesis. Para invocar una función es necesario hacerlo en una expresión.

El cuerpo de las funciones, function seguido del nombre de la funcion, luego los parametros a usar y el tipo de dato que devolvera la función, se delimita por las palabras reservadas begin y end, y en su interior puede contener sentencias simples o estructuradas.

function nombre [(p1,p2,...)] : tipo;
const lista_ctes;
type lista_tipos;
var lista_vars;
begin
nombre := valor_devuelto
end;

Una vez declarados los procedimientos y funciones que van a formar el programa se debe realizar el llamado de dichos procedimientos y funciones en el programa principal, este programa debe contener un Inicio y End.
Ejemplo:

Program Calcular; (*nombre del programa*)
uses crt; (*Declaracion de las unidades*);
var (*Declaracion de las variables*)
const (*Declaracion de las constantes es opcional*)

begin (*Inicio del programa principal*)
leer; (*llamada del procedimiento leer, previamente declarado*)
sumar; (*llamada del procedimiento sumar, previamente declarado*)
calcular_sueldo; (*llamada del procedimiento calcular sueldo, previamente declarado*)
End. (*Fin del programa principal*)

Nota: todo lo que esta entre parentesis son comentarios, no influyen en la ejecución del programa.

Ejemplo: Una compañía de electricidad desea imprimir el costo del consumo de electricidad de sus clientes. El costo se efectúa de acuerdo a las siguientes condiciones:
- Los primeros 140 kwh o menos paga una tarifa fija de 35 bsf.
- Si es mayor a 140 kwh y menor a 170 kwh, se cobra la tarifa fija más los kwh extras multiplicados 0.15.
- Las mediciones que superen los 170 kwh, se cobra la tarifa fija mas los kwh extras multiplicados por 0.50
Imprimir el monto de la factura y el consumo.
PROGRAM FACTURA;
USES CRT;
VAR
CONSUMO,COSTO,EXTRA:REAL;
CONST
TARIFA_FIJA=35;
POR1=0.50;
POR2=0.15;
BEGIN
WRITELN ('INTRODUZCA LA CANTIDAD KWH CONSUMIDOS: ');
READLN (CONSUMO);

IF CONSUMO <= 140 THEN
BEGIN
COSTO:=TARIFA_FIJA;
WRITELN('EL MONTO TOTAL A PAGAR ES:' , COSTO);
READLN;
END;
IF (CONSUMO > 140) AND (CONSUMO <= 170) THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR2;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO);
READLN;
END;
IF CONSUMO > 170 THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR1;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO);
READLN
END;

CLRSCR;
READLN;
END.

ESTE ES EL MISMO EJEMPLO, USANDO PROGRAMACION MODULAR.(Con programa principal)

PROGRAM FACTURA;
USES CRT;
VAR
CONSUMO,COSTO,EXTRA:REAL;
CONST
TARIFA_FIJA=35;
POR1=0.50;
POR2=0.15;

PROCEDURE LEER;
BEGIN

WRITELN ('INTRODUZCA LA CANTIDAD KWH CONSUMIDOS: ');
READLN (CONSUMO);
END;

PROCEDURE CALCULO_CONSUMO;
BEGIN

IF CONSUMO <= 140 THEN
BEGIN
COSTO:=TARIFA_FIJA;
WRITELN('EL MONTO TOTAL A PAGAR ES:' , COSTO:2:2);
READLN; END;

IF (CONSUMO > 140) AND (CONSUMO <= 170) THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR2;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO:2:2);
READLN;
END;
IF CONSUMO > 170 THEN
BEGIN
EXTRA:=(CONSUMO-140)*POR1;
COSTO:=TARIFA_FIJA+EXTRA;
WRITE('EL MONTO TOTAL A PAGAR ES:' ,COSTO:2:2);
READLN
END;
END;

(*PROGRAMA PRINCIPAL*)
BEGIN
LEER;
CALCULO_CONSUMO;
CLRSCR;
READLN;
END.