martes, 12 de diciembre de 2006

Cuadrado triangulo rombo en pascal

Programa que genera un cuadrado, triángulo y rombo de la siguiente forma,
del tamaño especificado:

program CuaTriRom (input, output);

const
ESPACIO = ' ';
ASTERISCO = '*';

var
opcUsuario: char;
finPrograma: boolean value false;

procedure Cuadrado;
var fila, j,tam: integer;
despl: integer;
carExt: char value ASTERISCO;
carInt: char value ESPACIO;
opcRelleno: char;

begin
repeat
write('Lleno o vací­o (l,v) ');
readln(opcRelleno);
until (opcRelleno = 'l') or (opcRelleno = 'v');
if opcRelleno= 'l' then carInt:= ASTERISCO;

writeln('Escribe el tamaño del cuadrado: ');
readln(tam);

despl := 40 - tam div 2;

for fila:= 1 to tam do begin
write('':despl);
for j:= 1 to tam do
if (j=1) or (j=tam) or (fila=1) or (fila=tam) then
write (carExt)
else write (carInt);
writeln;
end;
end;

procedure Triangulo;

var fila, j,tam: integer;
despl: integer;
carExt: char value ASTERISCO;
carInt: char value ESPACIO;
numColum: integer value 1; { Cantidad de columnas que se escriben }
opcRelleno: char;

begin
repeat
write('Lleno o vacío (l,v) ');
readln(opcRelleno);
until (opcRelleno = 'l') or (opcRelleno = 'v');

writeln('Escribe el tamaño del triangulo: ');
readln(tam);

if (opcRelleno = 'l') then carInt:= ASTERISCO;

for fila:=1 to tam do begin
despl := 40 - tam - numColum div 2; { Posición en la pantalla }
write('':despl);
for j:=1 to numColum do begin
if (fila=1) or (fila=tam) or (j=1) or (j = numColum) then
write (carExt)
else write (carInt);
end;
writeln;
numColum:= numColum +2;
end;
end;

procedure Rombo;
var
fila, j: integer;
despl: integer;
carExt: char value ASTERISCO;
carInt: char value ESPACIO;
numColum: integer value 1; { Cantidad de columnas que se escriben }
tam,mitad: integer;
opcRelleno:char;

begin
repeat
write('Lleno o vací­o (l,v) ');
readln(opcRelleno);
until (opcRelleno = 'l') or (opcRelleno = 'v');
if opcRelleno= 'l' then carInt:= ASTERISCO;

repeat
writeln('Escribe un valor impar entre 11 y 15');
readln(tam);
until ( (tam mod 2 <> 0) and (tam >= 11) and (tam <= 15) );

mitad:= tam div 2 +1;

for fila:=1 to tam do begin
despl := 40 - tam - numColum div 2; { Posición en la pantalla }
write('':despl);

if(fila < mitad) then begin { Parte superior del rombo }
for j:=1 to numColum do begin
if (fila=1) or (fila=tam) or (j=1) or (j=numColum) then
write (carExt)
else write (carInt);
end;
writeln;
numColum:= numColum +2;
end
else
begin { Parte inferior del rombo }

for j:=numColum downto 1 do begin
if (fila=1) or (fila=tam) or (j=1) or (j=numColum) then
write (carExt)
else write (carInt);
end;
writeln;
numColum:= numColum -2;
end
end;
end;



begin
repeat
writeln('c Cuadrado');
writeln('t Triangulo');
writeln('r Rombo');
writeln('s Salir');
write('Intoduce una opción: ');
readln(opcUsuario);
case opcUsuario of
'c', 'C': Cuadrado;
't', 'T': Triangulo;
'r', 'R': Rombo;
's', 'S': finPrograma:=true;
otherwise finPrograma:=false;
end;
until (finPrograma);
end.

lunes, 11 de diciembre de 2006

Números aleatorios en pascal

Generar números aleatorios en pascal.

Esta función genera números aleatorios entre 0 y el valor
de la constante RC. Para ello utiliza el valor de milisegundos
del reloj del sistema.

function Aleatorio: real;
const RA = 536778; RC = 50;
var tiempo: TimeStamp; semilla: integer;
begin
GetTimeStamp(tiempo);
semilla := tiempo.MicroSecond;
Aleatorio:= (semilla * RA) mod RC +1;
end;

Nota: En algunos compiladores de windows la función no funciona bien con MicroSeond y
hay que utilizar Second, en el gpc de linux funciona perfectamente.

Operaciones con matrices

Suma resta y multiplicación de matrices en pascal.

Para el uso de estos procedimientos es necesario declarar el tipo
tMatriz. Este tipo es un registro en el que f y c son las filas y columnas
de la matriz y datos es una matriz de numeros reales.

const
N = 10;

type
tMatriz= record
datos: array [1..N,1..N] of real;
f,c: 0..N;
end;



Tarea: Suma de dos matrices
El procedimiento recibe dos matrices y devuelve la matriz sumada.


procedure Sumar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.c) and (m1.f = m2.f) then begin
resul.c:=m1.c; { Crear Matriz resul del mismo rango que m1 y m2 }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:= m1.datos[i,j] + m2.datos[i,j];
end;
end
else writeln('No se pueden sumar matrices de diferente dimension');
end;



Tarea: Resta de dos matrices
El procedimiento recibe dos matrices y devuelve la matriz restada.


procedure Restar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.c) and (m1.f = m2.f) then begin
resul.c:=m1.c; { Crear Matriz resul del mismo rango que m1 y m2 }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:= m1.datos[i,j] - m2.datos[i,j];
end;
end
else writeln('No se pueden restar matrices de diferente dimension');
end;


Tarea: Multiplicación dos matrices
El procedimiento recibe dos matrices y devuelve la matriz multiplicada.


procedure Multiplicar(m1, m2: tMatriz; var resul: tMatriz);
var i,j:integer;
begin
if (m1.c = m2.f) then begin
resul.c:=m1.f; { Crear Matriz resul de rango apropiado para multiplicar }
resul.f:=m2.c;
for i:=1 to m1.c do
for j:=1 to m1.f do
begin
resul.datos[i,j]:=resul.datos[i,j] + m1.datos[i,j] *
m2.datos[i,columna];
end;
end
else writeln('No se pueden multiplicar matrices de esta dimension');
end;

domingo, 10 de diciembre de 2006

Uses en pascal

USES. Palabra reservada de Pascal para incluir librerías.

Definición: Una librería es que un conjunto de funciones propias de pascal o que
nosotros mismo podemos hacernos.

Todos los compiladores de Pascal vienen
con unas librerías standar que traen funciones para trabajar con
archivos, memoria, directorios, servicios del Dos, servicios de video,
etc...

Para incluir una o varias librerías hay que añadir al programa en la sección
de uses: USES Crt, Dos, Graph;

Para más información sobre dónde colocar los ues visita:
Esquema de un programa

sábado, 9 de diciembre de 2006

Operadores en pascal

Operador de asignación. Asignación de valores en pascal:

Numero := 7; {de tipo integer}
Decimal := 7.5; {de tipo real}
Letra := ’a’; {de tipo char }
Cadena := ’Hola’; {de tipo string}
Cierto := trae; {de tipo boolean}

Operadores Aritméticos. Se usan para realizar operaciones en pascal:

a + b Suma a y b
a - b Resta a y b
a * b Multiplica a y b
a / b División de a y b
a div b División entera de a y b
a mod b Resto de la división de a y b

Comparación. Para comparar elementos, devuelven true si es verdadero
y sino false.

a <> b a es mayor que b
a = b a es igual que b
a >= b a es mayor o igual que b
a <= b a es menor o igual que b a <> b a es distinto de b

Operadores lógicos.

OR OR lógico a OR b Devuelve true si alguna de las dos es true
AND AND lógico a AND b Devuelve true únicamente si las dos son true

AND_THEN a AND_THEN b Lo mismo que el and lógico solo que si a no se cumple
no se comprueba la sentencia b.

OR_ELSE a OR_ELSE b Lo mismo que el or lógico solo que si a es true
no se comprueba la sentencia b.

NOT Niega una sentencia.

Variables en pascal

Para declarar variables en pascal se usa la siguiente instrucción:
  • Nombre:tipo
Los tipos mas comnunes de variables en pascal son:

1.- Enteras.

Integer: -32768 a 32767 (más utilizado)
Word: 0 a 65535
Shortint: -128 a 127
Byte: 0 a 255
Longint: -2*10.9 a 2*10.9

Ejemplo: var entero:integer value 0;

2.- Decimales.
Real (más utilizado)
Single
Double
Extended
Comp

Ejemplo: var decimal:real value 3.45;

3.- Caracteres.
Char('c')

Ejemplo: var caracter:char value 'c';

4.- Cadena de caracteres.
String ('máx. 255 caracteres')

Ejemplo: var cadena:string value 'Cadena de caracteres';

5.- Boleanos.
Boolean que tiene dos únicos valores: True/False

Ejemplo: var booleano:boolean value true;

Esquema de un programa en pascal

Esquema. Un programa en pascal se divide en las
siguientes secciones:

1 Nombre del programa
2 Uses
3 Definición de tipos globales
4 Definición de constantes globales
5 Definición de variables globales

6 Procedimientos / Funciones
- Declaración
- Tipos locales
- Constantes locales
- Variables locales
- Código del procedimiento/función

7 Código principal


Ejemplo de un programa en pascal.




program NombrePrograma;
uses crt, dos; {incluye}
const PI=3.1415; {constante pi}

var numero:integer; {Número entero}
decimal:real; {Número real}
letra:char; {Tipo Caracter}
cadena:string; {Tipo Cadena}
cierto:bolean {Tipo boolenao: True o false}


{ Si ya conoces otros lenguajes de programación
como C, begin equivale a "{" y end a "}" las llaves en C }
begin
________ {Cuerpo del programa}
________
end. {El punto indica que es el fin del programa}