viernes, 1 de enero de 2010

ANTES DE EMPEZAR

saludos a todos los que están leyendo esta redacción, antes de pasar a los siguientes tutoriales, he querido dejar algunas pautas que puedan ayudar a mejorar la experiencia como programador en los distintos lenguajes de programación.

este documento es na serie de pautas y recomendaciones para que ustedes tengan en cuenta mas adelante, les recomiendo mucho que lo lean y si ya saben todo lo que esta aquí, pues mucho mejor para nosotros. Y si no, pues léanlo.


http://www.mediafire.com/?jqgzvz4edyz

SIGUIENTE>>

MENU PRINCIPAL

sábado, 17 de octubre de 2009

TUTORIAL#3 (MANEJO DE OPERADORES LOGICOS CON ESTRUCTURAS REPETITIVAS Y DE CONTROL)

En el tutorial #1 se había comentado acerca de los operadores lógicos y de su posterior utilización en programas de turbo pascal. A continuación se harán demostraciones practicas del uso de dichos operadores y estructuras.


ejemplo#1

crear una aplicacion de pascal que cumpla las siguientes condiciones:

- pedir la edad de una persona por teclado y verificar que si es mayor de 18 y de sexo 'M' diga que es 'hombre mayor de edad', de lo contrario diga que es 'mujer mayor de edad'. Adicionalmente se debe controlar que no se digite edad cero y que solo se pueda ingresar sexo 'M' para masculino y 'F' para femenino.

Program sexo;
uses
wincrt;
var
edad:
shortint;{no debe ser de punto flotante porque no existen edades segmentadas}
mas,sexo:
char;
Begin
REPEAT
clrscr;
writeln('digite la edad de la persona:: ');readln(edad);
if (edad<=0) then
begin
clrscr;
writeln('valor de edad invalido..por favor intente de nuevo');
end;
UNTIL (edad>0);
{para que termine el ciclo cuando la edad pase de cero, y sea entero el numero}
REPEAT
writeln('digite el sexo de la persona::');readln(sexo);
if (sexo<>'M')or(sexo<>'F') then
{se usa 'or' en la comparación para que se defina dentro de las dos opciones propuestas }
begin
clrscr;
writeln('valor de sexo invalido..por favor intente de nuevo');
end
else
begin
if (sexo='M') then
begin
writeln('la persona es hombre y tiene ',
edad,'años');
end
else
begin
writeln('la persona es mujer y tiene ',
edad,'años');
end;
end;
UNTIL (sexo='M')or(sexo='F');
{para que termine el ciclo cuando se haya ingresado alguno de los dos campos validos}
End.

los puntos que hay que tener en cuenta aqui son:

  • la declaración de la edad tiene que ser de tipo entero y no flotante, nunca se ha escuchado a alguien decir que tiene 3.54 años o 23.01 años, las edades son las que se cumplen a cabalidad dentro de los 12 meses establecidos.
  • la utilización de 'menor igual a' en vez de 'menor que' en la siguiente validación if(edad<=0) then nos permite establecer que también no se ingrese la edad cero en el programa que se codifico anteriormente
  • la condición de los repeat-until debe ir acorde al cumplimiento de las validaciones que se hagan inicialmente para que una vez cumplidos salgan de eses ciclo y continúen con el resto del programa.

ejemplo#2

codificar un programa en pascal que defina el mayor, el intermedio y el menor de tres números enteros ingresados por teclado, asimismo diga un mensaje si los tres números ingresados por teclado son iguales.


Program igualdad;
uses
wincrt;
var
n1,n2,n3:integer;

mas:char;
Begin
REPEAT
clrscr;
writeln('digite primer numero:: ');readln(n1);
writeln('digite primer numero:: ');readln(n2);
writeln('digite primer numero:: ');readln(n3);

{Por cada mensaje que muestro, también mando a pedir datos consecutivamente de dicho numero}


if (n1>n2) then
begin
if (n1>n3) then
begin

writeln('el primer numero es el mayor');

if (n2>n3) then

begin

writeln('el segundo numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el segundo numero es el menor y el tercero el intermedio');
end;

end
else

if (n2>n3) then

begin

writeln('el segundo numero es el mayor');
if (n1>n3) then

begin

writeln('el primer numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el numero es el menor y el tercero el intermedio');
end;

end;

end;

writeln('Desea seguir comparando mas números?');readln(mas);

mas:=TOUPPER(mas);

UNTIL (mas='N');
END.

Observamos que utilizamos muchos ciclos de REPEAT-UNTIL e if, pero para variar un poco mas la cosa, les voy a mostrar el mismo ejemplo pero voy a cambiar al REPEAT-UNTIL por unWHILE. Es casi lo mismo, pero la utilización es un poco distinta para hacer que funcionen pascal, veamos ahora el ejemplo con un WHILE.

Program igualdad_2;
uses
wincrt;
var
n1,n2,n3:integer;

mas:char;
Begin

mas:='S';
WHILE (mas='S')

Begin
clrscr;
writeln('digite primer numero:: ');readln(n1);
writeln('digite primer numero:: ');readln(n2);
writeln('digite primer numero:: ');readln(n3);

{por cada mensaje que muestro, también mando a pedir datos consecutivamente de dicho numero}


if (n1>n2) then
begin
if (n1>n3) then
begin

writeln('el primer numero es el mayor');

if (n2>n3) then

begin

writeln('el segundo numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el segundo numero es el menor y el tercero el intermedio');
end;

end
else

if (n2>n3) then

begin

writeln('el segundo numero es el mayor');
if (n1>n3) then

begin

writeln('el primer numero es el intermedio y el tercero el ultimo');
end

else

begin

writeln('el numero es el menor y el tercero el intermedio');
end;

end;

end;

writeln('Desea seguir comparando mas números?');readln(mas);

mas:=TOUPPER(mas);

END;
END.

Ahora una cosa mas, fíjense que después de pedir si se desea o no continuar con el programa, hay una asignación de mas a través de una palabra reservada llamada toupper. Esto sirve para que lo que recogía por teclado me lo convierta a mayúsculas.

Esto tiene el propósito meramente de validación, me explico, es como para estar seguro de que el usuario pueda ingresar su opción tanto como en minúscula así como en mayúscula, y el programa junto con el usuario no se vayan a bloquear por este detalle.

Y retomado lo del WHILE, observen que la única diferencia con respecto a REPEAT-UNTILes solamente que en el WHILE se declara la condición booleana de la variable mas:'S'; para que pueda entrar por primera vez al bloque de comparaciones, si tu no agregas la condición booleana de entrada el programa no funcionara correctamente.

SIGUIENTE>>
ANTERIOR
MENU PRINCIPAL

miércoles, 7 de octubre de 2009

TUTORIAL#2 (EJEMPLIFICACION DE ESTRUCTURA DE PROGRAMACION, CICLOS REPETITIVOS Y COMPARATIVOS)

ANTES DE EMPEZAR!!!...

contiguo a cada ejemplo se dará el enlace del mismo en un programa fuente .PAS para que lo puedan analizar también desde su compilador de pascal.


Ahora vamos a crear un programa básico en pascal solo por cogerle el hilo a todo lo que se a ido exponiendo en los posts anteriores.

Lo primero es crear un nuevo archivo .pas, si aun no le toman la idea al crearlo regresen
aquí y vuelvan a retomar la idea, una vez hecho esto, hacemos estos otros pasos:

  • le damos el nombre al programa-program nombre_programa;
  • declaramos las cabeceras USES--uses
----------------------------------------wincrt;
  • declaramos variables------------var
---------------------------------------a:integer; b:char; c:string; etc....
  • y creamos el programa principal Begin
---------------------------------------End.

NOTA!!: los que estan en negrita y coloreados son palabras reservadas de pascal y no puedes declarar variables con estos tipos de nombres.

ahora con esto hagan algo como imprimir mensajes en pantalla, variables, o leer datos por teclado, para que se vayan familiarizando con el lenguaje. luego vayan escalando el nivel de dificultad y van probando con cosas mas complejas.

Ahora vamos con algo mas interesante.... la utilización de CICLOS REPETITIVOS y COMPARATIVOS!!!
los mas distintivos y utilizados en pascal son: For, Repeat-Until , While, if
y case.. Ahora definiremos uno por uno para una mayor comprensión...

  • FOR
es una ciclo repetitivo de los mas utilizados en la mayoría de los lenguajes de programación, esta instrucción representa lo siguiente: "para a elemento hasta b elemento haga". Representado eso en pascal se demostraría con este ejemplo:
-> supongamos que queremos mostrar en pantalla la cuenta de los números del
1 al 10.. entonces en código pascal seria de la siguiente manera.

Program conteo;
uses
wincrt;
var
a:
integer;
Begin
clrscr;-------------{esto sirve para limpiar pantalla}
writeln('vamos a digitar la serie de números del 1 al 10');
for a:=1 to 10 do-- {en español: para a=1 hasta 10 haga lo que esta entre el begin y el end}
begin -------------{indispensable para abrir un for}
writeln('numero ',a);
end; -------------- { indispensable para cerrar un for}
readkey;
End.
descarga conteo.pas->>>http://www.mediafire.com/?m4mza0nagxw
  • WHILE
representación del ciclo "mientras que", este se usa para cumplir una condición siempre y cuando se mantenga ciertas condiciones previas a su ejecución, ejemplificando con el siguiente enunciado:
->supongamos que queremos hacer un programa que revise la recogida de un carácter, si la letra es 'S' entonces va a mostrar un mensaje positivo, si en caso contrario es 'N', mostrara el mensaje contrario.

Program validez;
uses
wincrt;
var
a:
char;
Begin
clrscr;-------------{esto sirve para limpiar pantalla}
writeln('digite su opción a seguir (S/N):: ');a:=readkey;
a:=
upcase(a);{la palabra reservada upcase se usa para convertir letras a mayúsculas}
while (a='S') do
begin
clrscr;
writeln('usted ha escogido seguir');
end;
readkey;

while (a='N') do
begin
clrscr;
writeln('usted ha escogido salir');
end;
readkey;
End.


Bueno, esto es un ejemplo bobo y sin sentido, porque cuando ejecuten esto lo que va a hacer es que va a entrar en un bucle infinito pero la idea es que sepan el funcionamiento de este ciclo, ademas, no se si prestaron mucha atención a este código, pero si lo detallamos un poco mas vamos a ver una linea un poco extraña en este paso, es esta:(a:= readkey;).
Se preguntaran para que sirve. Sencillo!!, esto lo que hace es recoger mi carácter de forma dinámica, en palabras mas rasas, ejecuta la instrucción apenas se le digite su carácter por teclado. Esto por algunos es conocido como
Variables interactivas.

Pero esta manera de validar es muy engorrosa y antipractica para ciertos casos. es una forma eficaz pero no eficiente habiendo una estructura mas facil de codificar para estos casos, y ahora como diria la señorita laura:: "QUE PASE EL IF".

  • IF
"Senorita yo a este codigo lo conoci en una POLLADA!!", jejejeje, basta de bromas esto es tema de gente seria, aunque los que la estudian al final se nos corre un poquitin la percepcion de la realidad(eso no quiere decir que nos volvamos locos, solo observamos mas alla que la gente promedio)...

el if en español es la representacion de la instruccion 'SI', si pasa esto hago aquello y si no hago esto otro, esa va a ser nuestra ventaja sobre el while, para demostrarlo hagamos el miso programa de los whiles pero con if y ustedes juzagaran la diferencia:

Program validez_2.0;
uses
wincrt;
var
a:
char;
Begin
clrscr;-------------{esto sirve para limpiar pantalla}
writeln('digite su opcion a seguir (S/N):: ');a:=readkey;
a:=
upcase(a);{la palabra resevada upcase se usa para convertir letras a mayusculas}
if (a='S') then
begin
clrscr;
writeln('usted ha escogido seguir');
end
else
begin
clrscr;
writeln('usted ha escogido salir');
end;
readkey;
End.

descarga validez_2.0.pas->>>http://www.mediafire.com/?iwbz5c44gym

Fijense en dos cosas que tienen de particular el if. Primero es que cuando la primera condicion se cumple el end de esa condicion no lleva punto y coma, y eso por que???, porque eso significa que hay un sino(else) y que debajo de el hay mas instrucciones por ejecutar y ahi no termina el if.

Ahora trabajemos con algo mas chevere, digamos que la forma de trabajar con el for no quedo sonando de a mucho y quiero utilizar algo mas efectivo para el control de mis ciclos repetitivos, así que ahora usemos esto:

  • REPEAT-UNTIL
Esta instrucción es una variable de control, o ciclo repetitivo el cual hace una instrucción una y otra vez. hasta que se cumpla la condición establecida al final, a diferencia del while que necesita establecer la condición al inicio, y del for que lo hace dentro de un rango determinado de veces, sabiendo esto vamos a codificar lo siguiente:

-> Se necesita un programa para escribir datos de estudiantes tantas veces como uno pueda, los campos a utilizar son: NOMBRE, CODIGO, y EDAD.

Program datos_alumno;
uses
wincrt;
var
nombre:
string;
codigo:
integer;
edad:
shortint;
mas:
char;
Begin
REPEAT <----------inicio del repeat
clrscr;
writeln('programa de recoleccion de datos de alumnos');
writeln('digite nombre:: ');readln(nombre);
writeln('digite codigo :: ');readln(codigo);
writeln('digite edad:: ');read(edad);
writeln('desea guadar mas datos(S/N)?:: ');mas:=readkey;
mas:=upcase(mas);
UNTIL(mas='N'); <-------final del repeat
End.

descarga datos_alm.pas->>>http://www.mediafire.com/?ukzkykzlkzu

Ya hasta este punto se han visto los estructuras mas usados en la programacion, con respecto a la creacion de validaciones y ciclos repetitivos, y eso que nos falta una ultima estructura, para ponerlos un poc en sintonia con esta, piensen un poco en los programas y veran que la gran mayoria llevan menus de opciones para uno realizar diferentes actividades segun lo requiera. bueno, esto es l que vamos a ver a continuacion.

  • CASE
esta es nuestra estructura para realizar los menus de opciones, como no hay mucho tema que explicar sobre esto, solo les voy a poner un ejemplo de muestra y de paso, fusionaremos las demas estructuras anteriormente vistas para crear algo bonito:

-> En una compañia necesitan llevar el control de datos de su personal de manera sistematizada y se nos pide hacer un programa en el cual llenemos los siguientes campos: NOMBRE, APELLIDOS, EDAD, CARGO, TIEMPO LABORADO (en años). Asi como las siguientes instrucciones: si el empleado es menor de 25 años o si es mayor de esa edad pero no lleva mas de 2 años laborando no aspairara a ascenso, de lo contrario se le asignara un ascenso, asi como si es mayor de 50 y tenga mas de 10 años laborando se le asignara la cateogria de pensionado de la empresa. De lo contrario, no accedera a la pension.

Program empresa;
uses
wincrt;
var
nombre,apellidos,cargo:
string;
tiempo_laborado,op:
integer;
edad:
shortint;
mas:
char;
Begin
REPEAT
writeln('MENU DE OPCIONES');
writeln('1. gestionar empleados..');
writeln('2.salir del programa..');
writeln('selecione su opcion:: ');readln(op);
case (op) of
1:
Begin
REPEAT <----------inicio del repeat
clrscr;
writeln('programa de gestion de empleados de la compañia');
writeln('digite nombre del empleado:: ');readln(nombre);
writeln('digite apellidos del empleado:: ');readln(apellidos);
writeln('digite edad del empleado:: ');readln(edad);
writeln('digite cargo del empleado:: ');readln(cargo);
writeln('tiempo laborando en la empresa:: ');readln(tiempo_laborado);

{si el empleado es menor de 25 años o si es mayor de esa edad pero no lleva mas de 2 años laborando no aspairara a ascenso,de lo contrario se le asigna un ascenso}

if
(edad>=25)and(tiempo_laborado>2) then
begin
clrscr;
{si es mayor de 50 y tenga mas de 10 años laborando se le asignara la cateogria de pensionado de la empresa. De lo contrario, no accedera a la pension.}
while (tiempo_laborado>50) do
begin
clrscr;
if (edad>=50) then
begin
writeln('Usted ha sido pensionado ');
end
else
begin
writeln('Usted no ha sido pensionado ');
end;
end;
writeln('Usted ha sido ascendido ');
end
else
begin
clrscr;
writeln('Usted aun no cumple requisitos de ascenso');
end;
writeln('desea guadar mas datos(S/N)?:: ');mas:=readkey;
mas:=upcase(mas);
UNTIL (mas='N');
end;
2:
Begin
clrscr;
writeln('Ha salido del programa ');
end
else
begin
clrscr;
writeln('opcion no valida, intente de nuevo ');
end;
end;{este es el 'end' del case, necesario para cerrar el programa}
UNTIL (op=2);
End.