Introduccion Al Pascal

Embed Size (px)

DESCRIPTION

analista programador

Citation preview

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 1 -

    PASCAL

    Es un lenguaje de alto nivel, fuertemente tipeado (se debe definir el tipo de todos los da-tos), de propsito general, compilable, estructurado y procedimental.

    Un lenguaje compilable significa que todo programa ser deber pasar por los siguientes pasos:

    a) Ser escrito en un editor de texto (en un formato ASCII) b) Luego lo toma el Compilador comprueba que todas las instrucciones del pro-

    grama estn escritas siguiendo la sintaxis de PASCAL. Si todo es correcto lo tra-duce a Lenguaje de Mquina (Assembler).

    c) Pasa posteriormente al Linkeador (o montador), une los distintos mdulos que pueden componer un programa, unifica los cdigos de los distintos subprogra-mas, y de los datos. Pasndolo por ltimo a cdigo de mquina.

    TIPOS DE DATOS

    Los diferentes objetos de informacin con los que un programa Pascal trabaja se cono-cen colectivamente como datos. Todos las datos tienen un tipo asociado con ellos. Un dato puede ser un simple carcter, tal como 's', un valor entero tal como 35 o un nmero real tal co-mo 1415,92. Una operacin de suma no tiene sentido con caracteres, slo con nmeros. Por consiguiente, si el compilador detecta una operacin de suma de dos caracteres, normalmente producir un error. Incluso entre tipos numricos, la operacin de suma se almacena de modo distinto. Esto se debe a que nmeros enteros y reales se almacenan de modos diferentes. A menos que el programa conozca el tipo de datos, si es un valor entero a real, no puede ejecu-tar correctamente la operacin de suma.

    La asignacin de tipos a los datos tiene dos objetivos principales: 1. Detectar errores de operaciones en programas 2. Determinar cmo ejecutar las operaciones

    Pascal se conoce como lenguaje "fuertemente tipeado" (strongly.typed) o de tipos fuer-tes. Esto significa que todos las datos utilizados deben tener sus tipos declarados explcitamen-te y el lenguaje limita la mezcla de tipos en las expresiones. Pascal detecta muchos errores de programacin antes que el programa se ejecute. La ventaja de los lenguajes de tipos fuertes (ricos en tipos de datos) es que se gasta menos esfuerzo en la depuracin de programa, ya que el compilador detecta muchos de esos errores

    El tipo de un dato determina la naturaleza del conjunto de valores que puede tomar una variable. Otro concepto importante a tener en cuenta es la representacin interna de los nme-ros, o al menos el espacio de memoria ocupado por una variable de un tipo dado.

    La unidad de medida de la capacidad de memoria, como ya hemos visto es el byte (octe-to). Un byte se compone de ocho cifras binarias (bits) que pueden tomar cada una el valor 0 1. Integer Boolean Ordinales Char Tipos Simple Enumerado Subrango No Ordinales Reales Datos Estticos String Tipos de Datos Array Registro

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 2 -

    Tipos Estructurado Conjunto Archivo Tipos procedimientos Procesos Datos Dinmicos Tipos Punteros

    Tipos Enteros

    Tipo Rango Formato byte 0 .. 255 1 Byte integer -32768 .. 32767 2 Bytes longint -247483648 .. 24748367 4 Bytes shortint -128 .. 127 1 Byte word 0 .. 65535 2 Bytes

    El tipo integer se almacena en memoria como 2 (dos) bytes, el bit de mayor peso de los

    dos bytes es el bit de signo. Se puede separar un entero en sus dos bytes utilizando las funcio-nes internas Hi y Lo

    Hi devuelve el byte de mayor peso de los dos bytes de memoria Lo devuelve el byte de menor peso

    Nmeros Reales

    Tipo Rango Cifras bytes real 2.9x10-39 .. 1.7x1038 11-12 6 single 1.5x10-45 .. 3.4x1038 7-8 4 double 5.0x10-324 .. 1.7x10308 15-16 8 extended 1.9x10-4932 .. 1.1x104932 19-20 10 comp -(263 +1) .. 263 +1 19-20 8

    Tipos carcter (Char)

    El tipo char es un tipo de datos que puede contener un solo carcter. Cada uno de estos caracteres puede ser expresado gracias al cdigo ASCII ampliado. Ejemplo A a b * 5 Se le puede asignar a una constante un carcter por medio de su cdigo #65 equivale a chr(65) equivale A #26 o ^Z cierre del archivo #27 tecla ESC #13 tecla ENTER

    Tipos lgicos (boolean)

    El tipo lgico (boolean) es, al igual que el carcter, parte de ISO Pascal estndar. Los va-lores de tipo lgico pueden tomar slo das valores posibles: true (verdadero) y false (falso). Al igual que el tipo char, el tipo boolean es un tipo ordinal, que significa que tiene un nmero fijo de posibles valores que existen en un orden definido. Una variable lgica ocupa slo un byte en memoria. Los valores lgicas son de tipo ordinal, y sus relaciones son:

    false < true

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 3 -

    Tipos de datos definidos por el usuario

    Todos los tipos de datos estudiados hasta ahora son de tipo simple, predefinidos por Tur-bo Pascal y listos para utilizar. Sin embargo, uno de los aspectos ms potentes de Turbo Pas-cal es su capacidad para crear estructuras de datos a partir de estos datos simples. Los datos estructurados aumentan la legibilidad de los programas y simplifican su mantenimiento.

    Los tipos de datos definidas por el usuario se clasifican en: q Escalares definidos por el usuario (enumerado y subrango) q Registros q Arrays q Conjunto (set). q Archivo (file). q Puntero q Procedimiento

    Estos tipos de datos se vern en sucesivas clases.

    Tipo cadena (string)

    Un tipo string (cadena) es una secuencia de caracteres de cero o ms caracteres corres-pondientes al cdigo ASCII, escrito en una lnea sobre el programa y encerrada entre apstro-fos.

    El tratamiento de cadenas es una caracterstica muy potente de Turbo Pascal que no contiene ISO Pascal estndar, aunque tiene mucha similitud con el tipo packed array.

    Ejemplos 'Turbo' 'Ests de acuerdo' #13#10 ,

    Notas Una cadena sin nada entre las apstrofos se llama cadena nula o cadena vaca La longitud de una cadena es el nmero de caracteres encerrados entre los apstrofos.

    CONSTANTES

    Una constante es un valor que no puede cambiar durante la ejecucin del programa, re-cibe un valor en el momento de la compilacin del programa y este valor no puede ser modifi-cado.

    Las constantes pueden ser constantes literales constantes con nombres o declaradas constantes expresin (slo en la versin 5.0) constantes de tipos (tipeadas)

    Las constantes deben ser declaradas antes de su utilizacin y pueden ser enteros o reales, caracteres o cadenas de caracteres, conjuntos o arrays, e inclusive de tipo enumerado Constantes literales

    Una constante literal es un valor de cualquier tipo que se utiliza como tal.

    VolumenEsfera := 4/3 * Pi * Radio * Radio * Radio,

    4 y 3 son constantes literales de valores 4 y 3.

    Constantes con nombres

    Son constantes que se identifican por un nombre y el valor asignado. Formato

    const

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 4 -

    identificador = valor, Ejemplos const

    Pi = 3.141592; {lee un valor real} DosPi = 2 * Pi;

    Direccion = $06; { representa valor hexadecimal } caracter = 'B'; { es un carcter } cuenta = 625; { lee un entero } Epsilon = 1E-4; { lee un real } Esc = #27; { carcter de control } CRLF = ^M^J; { secuencia CR/LF. retorno de carro/avance de lineal }

    En Pascal estndar, la declaracin de constantes se sita inmediatamente despus de la

    cabecera Program. En Turbo Pascal no es obligatoria la situacin anterior, pero si recomenda-ble.

    VARIABLES

    Las variables son objetos cuyo valor puede cambiar durante la ejecucin del programa. El cambio se produce mediante sentencia ejecutables.

    Todas las variables de un programa Pascal deben ser declaradas antes de ser usadas

    Declaraciones var variable1 : tipo1; variable2 : tipo2; ......................... ......................... variableN : tipoN; Ejemplos

    NumeroEmpleado : Integer; { nmero de empleado } Horas : real; { horas trabajadas } Tasas : real; { tasa horaria } Edad : Integer; { edad del empleado } Apellidos : string [30]; { apellidos del empleado } Letra1, Letra2, Letra3 : char; Num1, Num2 : integer;

    Notas

    Es buena prctica de programacin utilizar nombres de variables significativas que sugieren lo que ellas representan, ya que esto hace al programa ms legible y fcil de comprender, tambin es buena prctica incluir breves comentarios que indiquen cmo se utiliza la variable. Un comentario es cualquier frase encerrada entre llaves { } o bien entre signos (*, *)

    SENTENCIAS

    Las sentencias describen las acciones algortmicas que pueden ser ejecutadas. En gene-ral las sentencias se clasifican en, ejecutables (especifican operaciones de clculos aritmticos y entradas/salidas de datos) y no ejecutables (no realizan acciones concretas, ayudan a la legi-bilidad del programa, pero no afectan en la ejecucin del Programa). Las sentencias ejecuta-bles aparecen en el cuerpo del programa a continuacin de la palabra reservada Begin

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 5 -

    LA SENTENCIA DE ASIGNACION

    La sentencia de asignacin se utiliza para asignar (almacenar) valores o variables. La asignacin es una operacin que sita un valor determinado en una posicin de memoria. La operacin de asignacin se representa en pseudocdigo con el smbolo '', para denotar que el valor situado a su derecha se almacena en la variable situada a la izquierda

    Formato

    Variable expresin

    variable identificador vlido declarado anteriormente expresin variable, constante o una expresin o frmula a evaluar

    En Pascal el operador '-' se sustituye por el smbolo := , que se denomina operador de asig-nacin

    Variable := expresin

    El valor de expresin se asigna a la variable.

    Precaucin

    El tipo de expresin debe ser del mismo tipo que el de la variable.

    Ejemplos

    A :=16 ; 16 se asigna a la variable A Inicial := 'LJ; se asigna LJ a la variable Inicial Interruptor :=true; se asigna el valor true. (verdadero) a Interruptor N1 := N2; el valor de la variable N1 se cambia por el valor de la variable N2 N1 := N1 + 5; el valor de la variable N1 se incrementa en 5 Car := #70; se asigna a la variable Car el carcter 70 del cdigo ASCII, es de-cir F

    EXPRESIONES Y OPERACIONES ARITMETICAS

    Las variables y constantes estudiadas anteriormente se pueden procesar utilizando ope-raciones y funciones adecuadas a sus tipos En este punto se examinarn las expresiones y operaciones que se utilizan con datos numricos.

    Operadores aritmticos: +, -, *, / Los operadores aritmticos (+,-, *) pueden ser utilizados con tipos enteros o reales. Si

    ambos son enteros, el resultado es entero; si alguno de ellos es real, el resultado es real.

    2+3 = 5 2+3.0 = 5.0

    Operadores aritmticos div y mod Solo se pueden utilizar con enteros, la salida es otro entero. Div devuelve el valor de

    la divisin entera y Mod da el resto de la divisin entera. 17 DIV 5 3 17 MOD 5 2 Reglas de expresiones (prioridad) Se respeta las mismas prioridades del lgebra.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 6 -

    OPERACIONES ENTRADA/SALIDA

    Los datos se pueden almacenar en memoria de tres formas diferentes: asociados con constantes, asignados a una variable con una sentencia de asignacin o una sentencia de lec-tura. Ya se han examinado las dos primeras. El tercer mtodo, la sentencia de lectura, es el ms indicado si se desea manipular diferentes datos cada vez que se ejecuta el problema. Adems, la lectura de datos permite asignar valores desde dispositivos hasta archivos externos (por ejemplo, un teclado o una unidad de disco) en memoria se denomina operacin de entrada o lectura.

    A medida que se realizan clculos en un programa, se necesitan visualizar los resultados Esta operacin se conoce como operacin de salida o de escritura. En los algoritmos las instrucciones de entrada/salida escritas en pseudocdigo son: leer (listas de variables entrada) leer (v. z, x)

    escribir (listas de variables salida) escribir (a, b, c)

    En Pascal todas las operaciones de entrada/salida se realizan ejecutando unidades de programa especiales denominadas procedimientos de entrada/salida que forman parte del compilador Pascal y sus nombres son identificadores estndar: Procedimientos de entrada Read ReadLn procedimientos de salida Write WriteLn

    La escritura de resultados (salida)

    Los programas para ser tiles deben proporcionar informacin de salida (resultados) Esta salida toma informacin de la memoria y la sita (almacena) en: la pantalla, en un dispositivo de almacenamiento (disco duro o flexible), o en un puerto de E/S (puertos serie para comuni-caciones o impresoras, normalmente paralelos)

    Procedimiento WriteLn

    El propsito de WriteLn es escribir (visualizar) informacin en la pantalla Formato WriteLn (tem, tem..): 1 tem es el objeto que desea visualizar: un valor literal (entero, real, un carcter una cadena, o un valor lgicotrue o false). una constante con nombre, una variable, o una llamada a fun-cin

    Cuando se ejecuta el procedimiento WriteLn, se visualizan todos los elementos en el or-den dado y en la misma lnea. Al terminar de visualizar toda la lnea, el cursor avanza (salta) al comienzo de la siguiente lnea.

    Procedimiento Write

    Como se ha dicho, despus de ejecutar el procedimiento WriteLn, el cursor avanza (salta) al comienzo de la siguiente lnea. Si se desea que el cursor quede en la misma lnea se debe utilizar el procedimiento Write.

    Formatos de salida

    Turbo Pascal permiten controlar en cierta medida las instrucciones de salida que presen-tan resultados. Es posible especificar el nmero de posiciones del campo de escritura. Para los nmeros reales es posible precisar el nmero de decimales deseado. Se pueden utilizar especificadores de formato de campo para definir dicha anchura. x := 265.7892 WriteLn(x :10 :4); 265.7892

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 7 -

    WriteLn(x :10 :2); 265.79 WriteLn(x :6 :4); 265.7892 x := 14; WriteLn(x :4); 0. 14E+02 x:=14.00; WriteLn(x :4); 14 cade := AB WriteLn(cade :4); AB Lo anteriormente expresado es vlido para el proceso WRITE

    Impresin de resultados (salidas a impresora)

    Las salidas a pantalla se obtienen mediante los procedimientos Write y WriteLn. Si se desea enviar resultados a otro dispositivo, es preciso especificar el nombre del archivo como primer argumento de las instrucciones Write y WriteLn. Para poder realizar la operacin de en-viar salidas a la impresora, en lugar de a la pantalla, se necesita la unidad Printer.

    Printer define un archivo llamado lst y asocia este archivo al puerto de comunicaciones LPTI (impresora) del DOS. Se pueden enviar datos a la impresora, incluyendo lst en las ins-trucciones Write y WriteLn.

    Es preciso, sin embargo, definir previamente en la seccin uses la unidad printer.

    Ejemplo uses

    Printer var ......................... begin ......................... Write (Lst, 'el .......................... ) WriteLn (Lst, 'pl............ ) ......................... end. Este programa imprime en la impresora:

    Regla

    Siempre que desee escribir en impresora, deber incluir en su programa la lnea uses printer y luego aadir en cada sentencia Write/WriteLn la palabra lst

    La entrada de datos (lectura)

    Los datos que se pueden leer son: enteros, reales, caracteres o cadenas. No se puede leer un boolean o un elemento de tipo enumerado.

    Los datos estructurados, arrays, registros o conjuntos, no se pueden leer globalmente y se suele recurrir a disear procedimientos especficos.

    Los procedimientos de lectura son Read y ReadLn.

    Formato

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 8 -

    Read (var1, var2, ...);

    ReadLn (var1, var2, ...);

    var igual que WRITE La entrada de datos desde el teclado se hace un valor cada vez. Las instrucciones

    ReadLn y Read esperan hasta que se pulsa la tecla ENTER (RETURN) antes de asignar un valor a la variable.

    Ejemplo ReadLn (Nombre); ReadLn (Horas); Read (Tasas)

    El usuario debe introducir los datos de entrada en el orden en que aparecen las instruc-ciones read,

    Diferencias entre Read y ReadLn

    En Read, despus de pulsar la tecla ENTER , el cursor permanece inmediatamente despus del ltimo carcter introducido. En ReadLn, el cursor se enva al principio de la si-guiente lnea, tras pulsar la tecla ENTER .

    No es aconsejable ingresar ms de un dato por instruccin.

    OPERACIONES BSICAS DE UTILIDAD

    En este punto se describen dos utilidades:

    Clrscr limpieza o borrado de la pantalla

    GotoXY movimiento del cursor

    El borrado (limpieza) de la pantalla: Clrscr

    Las rdenes o procedimientos que podr utilizar a partir de ahora: Clrscr y GotoXY, aun-que posteriormente se volvern a mencionar. Ambos procedimientos pertenecen a la unidad winCrt.

    La orden (procedimiento) Clrscr borra (limpia) la pantalla (ventana actual) y sita el cursor en la esquina superior izquierda. Turbo Pascal considera las coordenadas de la esquina supe-rior izquierda :1,1.

    Para poder utilizar Clrscr, deber declarar en la clusula uses la unidad WinCrt.

    Regla

    Es una buena costumbre utilizar en todos los programas la unidad WinCrt, mediante la clusula uses; ello permite el uso de Clrscr y GotoXY, entre otras rutinas de utili-dad.

    Movimiento del cursor

    La orden (procedimiento) GotoXY mueve el cursor a la posicin x, y, donde x es la co-lumna (contando de izquierda a derecha) e y es la fila (contando de arriba-abajo).

    GotoXY (x, y)

    La esquina superior izquierda es 1.1. GotoXY requiere el uso de la unidad WinCrt.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 9 -

    EL ESTILO DE PROGRAMACIN

    El buen estilo de programacin es, sin lugar a duda, una de las caractersticas ms nota-bles que debe tener un programador. Un programa con buen estilo es ms fcil de leer, de co-rregir -si contiene un error- y de mantener. Aunque la experiencia proporciona el estilo, existen una serie de reglas que se recomiendan seguir desde el principio del aprendizaje en programa-cin.

    Sangrado (indentacin)

    Aunque los programas escritos en Pascal no exigen reglas estrictas en su escritura, es prctica habitual realizar sangrado en los bloques y unidades de programas fundamentales

    Comentarios

    La legibilidad de los programas aumenta considerablemente utilizando comentarios. Un comentario es un texto explicativo ms o menos largo, situado en el programa e ignorado por el compilador. Los comentarios no se consideran (son invisibles) en la fase de compilacin y eje-cucin, pero de importancia primordial en las fases de anlisis, puesta a punto y mantenimien-to.

    Los comentarios son una parte importante de la documentacin de un programa, ya que ayudan al programador y a otras personas a la comprensin del programa. No es raro encon-trar programas en los cuales los comentarios ocupan ms sitio, incluso, que las propias instruc-ciones.

    Formato

    {comentario} (* comentario *)

    Cualquiera de los dos formatos pueden ser utilizados indistintamente. Los comentarios pueden aparecer en una sola lnea de programa, al final de una lnea despus de una senten-cia, o embebido en una sentencia. En general se debe incluir en las diferentes partes de un programa, pero con la condicin de que sean significativos. Se deben evitar comentarios super-fluos o redundantes, como

    A := B-C (el valor de B-C se asigna a A)

    cuyo significado es evidente.

    Es conveniente situar comentarios en la cabeza que al menos especifiquen: q . el nombre del programador, q . la fecha de la versin actual, q . una breve descripcin de lo que hace el programa

    El siguiente programa ilustra modos de especificar comentarios.

    program Prueba; (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) {programa escrito por : Juan Prez } {Fecha : } {Versin : } {Nombre del archivo : } {Este programa permite listar direcciones postales} (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) const

    Es posible anidar comentarios con delimitadores de tipo diferentes, pero no es posible con delimitadores del mismo tipo. El programador puede tener libertad para los comentarios.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 10 -

    { un comentario puede extenderse en varias lneas o paginas de programas} {comentarios anidados (* como este caso *)}

    Lneas en blanco

    Otro medio de hacer un programa ms legible es dejar lneas en blanco entre partes im-portantes o que estn lgicamente separados. Es muy frecuente dejar lneas en blanco entre la cabecera y la seccin de declaraciones, entre sus diferentes partes, as como entre los proce-dimientos y funciones, entre s y con el programa principal, etc.

    Eleccin de nombres de identificadores significativos

    Las variables, constantes e incluso nombres de subprogramas y programas deben ser significativos para orientar al usuario sobre lo que representan: x, As, JJ no son identificadores significativos.

    Salario := Horas * SalarioHoras;

    Nomina_Mayor >= 10000; Nombre_Apellidos = 'Mortimer';

    Los nombres es conveniente que comiencen con una letra mayscula, y si son largos es preferible utilizar palabras compuestas o con subrayado.

    Evitar puntos y comas superfluos

    Antes de las palabras end y until se puede suprimir el separador punto y coma. Los pun-tos y comas espurios pueden afectar al mal funcionamiento de un programa.

    Lneas de programa mayores de 80 caracteres

    El editor Turbo permite escribir lneas de hasta 126 caracteres de longitud, aunque en la pantalla slo se ven 80 columnas a la vez. Utilizando las teclas HOME (Inicio), END (Fin) y de movimiento de cursor se puede desplazar el texto a izquierda y derecha.

    Alinear operaciones (o separadores) en lneas consecutivas

    Cuando diferentes lneas consecutivas contienen el mismo operador (o separador), es buena prctica alinear estos smbolos utilizando blancos si es necesario.

    for j := 1 to 10 do (operador =) begin Prueba := Random; Total := Total + Prueba; Valor [j]:= Prueba; WriteLn ('Estrella errante') end;

    Blancos no significativos

    q Poner un espacio en cada lado de un operador

    if A = B then representa un blanco Encontrado := true;

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 11 -

    q Incluir un espacio despus de los signos de puntuacin: coma, punto y coma, dos pun-tos.

    Otras reglas de escritura

    q Poner cada sentencia en una lnea distinta. q Las palabras reservadas program, const, var, procedure, function, uses, begin, end

    deben ir en lneas distintas. q Si una sentencia contina en otra lnea, se deben sangrar la(s) lnea(s) siguientes. q Insertar lneas en blanco antes de la seccin const, var, uses, procedure, function y el

    begin del programa principal; y en cualquier segmento o bloques de sentencias signifi-cativas.

    q Utilizar espacios entre los elementos de una sentencia para hacerla ms legible.

    PUESTA A PUNTO DE PROGRAMAS

    En esta seccin se incluirn: Tcnicas de resolucin de problemas y de programacin (di-seo de programas), errores tpicos de programacin y estilo de programacin.

    Tcnicas de programacin (diseo de programas)

    1. Los programas no pueden considerarse correctos hasta que han sido validados utilizando un rango amplio de datos de test.

    2. Los programas deben ser legibles y comprensibles. 3. Utilizar comentarios significativos que describan el propsito de un programa o

    segmentos de programas, as como elementos importantes de programas, varia-bles, funciones, etc.

    4. Etiquetar todas las salidas producidas por un programa 5. Los programas deben ser eficientes. Por ejemplo, clculos innecesarios: Se de-

    ben evitar calcular dos veces cualquier variable. 6. Programas generales y flexibles. Deben ser relativamente fciles de modificar

    para solucionar un problema similar sin necesidad de cambiar mucho el progra-ma. El uso de las constantes limita la flexibilidad.

    7. Antes de utilizar variables, asegurarse de que son inicializadas por el programa. 8. En programacin interactiva, incluya siempre una lnea con un mensaje de aviso

    al usuario cuando desee introducir datos. 9. Los programas deben hacer -en general- siempre "eco" de la entrada.

    Antes de escribir un programa en Pascal se deben seguir los pasos:

    q Anlisis del programa (entrada, salida, datos auxiliares y proceso). q Diseo del algoritmo (con preferencia pseudocdigo), siguiendo -esencialmente-

    el mtodo descendente.

    Errores tpicos de programacin

    1. Las constantes reales deben tener al menos un dgito antes y al menos un dgito despus del punto decimal.

    2. Las constantes de cadena deben estar encerradas entre apstrofos (simples co-millas). Un apstrofo se representa con un par de apstrofos 'Kant"s'.

    3. Los parntesis dentro de expresiones deben concordar. Tantos parntesis a iz-quierda como a derecha.

    4. La divisin entera se representa por div y la real por /. 5. Las multiplicaciones deben ser indicadas por *. 6. Puntos y comas (ausencia, exceso, superfluos). 7. Debe haber un punto detrs del end final de cada programa. 8. Todos los identificadores deben ser declarados.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 12 -

    9. Todas las variables estn inicialmente indefinidas (Turbo Pascal no sigue esta re-gla -inicializa a cero o cadena vaca-, pero es conveniente la inicializacin).

    10. Un signo igual (=) se utiliza en declaraciones de constantes o como signo igual. El operador := se utiliza en sentencias de asignacin. No confundir = con := (ojo, programadores de BASIC).

    11. Los problemas que implican nmeros de tipo real no pueden utilizar test/comparaciones para comprobar exactitud de igualdad o desigualdad (= o < > ). Como los nmeros estn aproximados en la computadora, no tiene sentido la igualdad/desigualdad.

    12. Es buena idea verificar errores tales como divisin por cero y races cuadradas de nmeros negativos dentro de un programa.

    Estilo de programacin

    q Un programa Turbo Pascal se prepara con el editor. Despus de teclear el pro-grama completo se sale al men principal y se compila el programa. Si hay erro-res, se vuelve al editor; en caso contrario, se guarda y ejecuta.

    q Los errores de un programa pueden ser: sintaxis, en tiempo de ejecucin y lgi-cos.

    La planificacin de un programa comienza con el anlisis del problema [especificaciones de entrada y salida (E/S), el proceso necesario para producir la salida desde la entrada] y sigue con el algoritmo (pseudocdigo). Especialmente en programas grandes, seguir el diseo des-cendente y refinamiento sucesivo. A continuacin debe realizarse la documentacin externa, la escritura del programa con toda la documentacin interna (comentarios) necesaria.

    Ejemplo:

    Se ingresan dos nmeros enteros, obtener su suma.

    ANLISIS

    Qu ingresa? Dos nmeros enteros

    Qu sale? Otro nmero entero

    Qu vincula la entrada con la salida? La operacin suma

    Pseudocdigo

    Inicio Leo A (entero) Leo B (entero) Obtengo C como suma de A y B Imprimo C Fin

    Cdigo Pascal

    program Sumas; (* Este es el primer programa en PASCAL *) (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *****) (* programa escrito por : Juan Prez de la Sierra *) (* Fecha : 2 de agosto de 2000 *) (* Versin : 01 *) (* Nombre del archivo : Sumas *)

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 13 -

    (* Este programa permite sumar dos nmeros enteros *) (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-***)

    uses Wincrt; (* declaraciones de unidades *)

    const Enter = #13; (* declaraciones de constantes *)

    (* type *) (* en este programa no hay declaraciones de tipos *)

    var (* definicin de las variables *) A, B, C : Integer;

    begin (* Comienzo del programa *) ClrScr; (* limpio la pantalla *)

    (* Ingreso de datos *) Write ('Ingrese el primer valor '); ReadLn(A); Write ('Ingrese el segundo valor '); ReadLn(B);

    (* Clculo de los resultados *) C := A + B;

    (* Salida de la informacin *) WriteLn ('El resultado es = ', C:6);

    (* Esta estructura se ver en prximas clases *) Repeat Until Readkey = Enter

    end. (* Fin del programa *)

    Nota

    En el ejemplo tenemos una tpica estructura secuencial sin condiciones, ni ciclos repetiti-vos, como se vern en el prximos ejemplos

    Las estructuras secuenciales son aquellas donde todas las instrucciones se ejecutan una despus de la otra.

    En ellas no hay repeticin ni ejecucin de un grupo seleccionado.

    Un problema tpico de este tipo de estructura es el siguiente.

    Ejemplo:

    Un comerciante requiere un programa que realice las siguientes tareas: Se ingresa el costo de un producto, a dicho costo le debe agregar un 30% de ganancia y al valor as obtenido incrementarle un 21% por IVA. El programa deber sacar por pantalla el costo del producto, el precio final, y el valor del impuesto.

    Pseudocdigo Inicio Definir constantes Leer el costo Calcular el costo ms el 30% Calcular el valor del impuesto

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 14 -

    Calcular el Precio Imprimir Costo Imprimir Impuesto Imprimir Precio Fin

    Cdigo Pascal

    program Primer_Ejemplo; (* Este es el primer programa en PASCAL *) (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * **** *) (* programa escrito por : Juan Prez de la Sierra *) (* Fecha : 2 de agosto de 2000 *) (* Versin : 04 *) (* Nombre del archivo : Iva_Calculado *) (* Este programa permite calcular el precio final de un producto *) (* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)

    uses Wincrt; (* declaraciones de unidades *)

    const gan = 30.0; iva = 21.0; (* declaraciones de las constantes *)

    var (* definicin de las variables *) costo : real; costo1, impuesto, precio : real;

    begin (* Comienzo del programa *) clrscr; (* Limpieza de pantalla *) write ('Ingrese el costo: '); (* Salida de mensaje *) readln (costo); (* Ingreso del dato *) costo1 := costo * (1 + gan/100); (* Clculo de la ganancia *) impuesto := costo1 * (iva /100); (* Clculo del impuesto *) precio := costo1 + impuesto; (* Clculo del precio final *) writeln ('Costo : ', costo); (* Salida de mensaje y variable *) writeln ('Impuesto : ', impuesto); (* Idem anterior *) writeln ('Precio : ', precio); (* Idem anterior *)

    end. (* Fin del programa *)

    Documentacin de un programa

    La documentacin de un programa, es el conjunto de todos los pasos, documentos nece-sarios para la creacin y mantenimiento de un programa. El primer documento que tiene que existir en un programa es la solicitud del mismo, quien, porqu y para que lo solicita. El segun-do es el contrato, sin un contrato no existe ningn proyecto de nada. En el queda especificado, el quien solicita el proyecto, el quien se hace responsable de su ejecucin, el porque solicita el proyecto, el cuanto va a costar ($), el cuando va a estar listo, el como se pagar, que lo que se va a entregar.

    La documentacin se clasifica en documentacin interna y externa

    a) Documentacin Interna: esta compuesta por los comentarios que le colocamos en el interior del programa fuente. Como dicho programa nunca se entrega (a

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 15 -

    menos que por contrato se especifique lo contrario), esta documentacin es privada.

    b) Documentacin Externa: Como se dice comienza con la solicitud y continua con el contrato. Se subdivide esta documentacin en pblica y privada.

    1. Privada: esta compuesta por todos aquellos documentos que solo esta en el dominio de la empresa que crea el programa. Esta compuesta por algo-ritmos matemticos en que se basa el programas, diagramas de blo-ques, diagramas de estructuras, mdulos, manuales internos.

    2. Pblica: esta compuesta por los manuales del usuario.

    Estructuras de Programacin

    Todo programa puede ser escrito utilizando solamente tres tipos de estructuras de control

    secuenciales

    selectivas

    repetitivas

    Las estructuras de tipo secuencial se han visto en el prctico anterior.

    En esta practica veremos los otros dos tipos de estructuras. Selectivas: Las estructuras selectivas se utilizan para tomar decisiones lgicas; de ah

    que se suelan denominar estructuras de decisin o alternativas. Son dos la sentencia if y la sentencia case.

    If esta sentencia, es considerada de alternativa doble ( si se cumple cierta condicin en-tonces ... , sino .... / If ...... then ...... else..... ).

    Pseudocdigo en espaol

    si

    entonces < accin S1>

    sino

    Cdigo se programa

    if

    then < accin S1>

    else < accin S2>

    Ejemplos:

    a) Se leen dos valores enteros A, B. Si A es mayor que B se realiza la suma de ambos, caso contrario, se hace el producto.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 16 -

    Pseudocdigo del programa

    nombre seleccin1(program); declaraciones (uses)

    WinCrt; variables (var);

    A (valor que ingresa) : entero; B (valor que ingresa) : entero; R (resultado de la oper.): entero

    funciones(function); procedimientos (procedure); inicio (begin);

    limpieza(limpia la pantalla); ingreso; alternativa (decisin A>B): resultado (salida resultados):

    fin(end.) Como se puede ver tenemos varios procedimientos ya vistos. Por lo tanto solo se desarrolla-ra el pseudocdigo y el estructurado de alternativa, y todo lo que de l dependa.

    algoritmo alternativa

    Pseudocdigo del alternativa procedimiento alternativa

    inicio (begin); si A > B entonces R A + B sino R Prod (A, B) fin(end;) El cdigo del procedimiento es:

    procedure alternativa; {* determina si A es o no mayor que B y hace los clculos correspon-dientes *} begin {* comienzo de alternativa *} if A > B then R := A + B else R := Prod (A,B); {* llamado a la funcin *} end; {* fin de alternativa *}

    Ntese que se defini una funcin Prod (A, B), veremos como se trabaja con ellas.

    algoritmo Prod Pseudocdigo de Prod funcin Prod ( A, B : enteros)entero

    inicio (begin); Prod A * B

    fin(end;)

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 17 -

    function Prod ( A, B: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := A * B; end; {* fin de Prod *} Quedndonos el programa de la siguiente manera.

    Program Seleccion_1; {* Este es el primer programa con estructuras de seleccin y funciones *}

    uses Wincrt; {* declaraciones *} {const} {* no hay constantes *} var A, B : integer; {* valores que ingresan *} R: integer; {* salida de la operacin *} function Prod ( A, B: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := A * B; end; {* fin de Prod *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese A '); {* ingreso de variable A *} readln (A); write ('Ingrese B '); {* ingreso de variable B *} readln (B); end; {* fin del ingreso de datos *} procedure alternativa; {* determina si A es o no mayor que B y hace los clculos correspon-dientes *} begin {* comienzo de alternativa *} if A > B then R := A + B else R := Prod (A,B); {* llamado a la funcin *} end; {* fin de alternativa *} procedure resultado; {* comienzo la impresin de los resultados *} Var H :char; begin writeln ( 'Resultado = ', R); writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para ver resultados *} end; {* fin de la impresin de los resultados *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 18 -

    begin limpieza; {* llamado al procedimiento limpieza *} ingreso; {* llamado al procedimiento ingreso *} alternativa; {* llamado al procedimiento alternativa *} resultado; {* llamado al procedimiento resultado *} end.

    b) Se leen dos valores enteros A, B. Si A es mayor que B se realiza la suma de ambos y se imprime un cartel diciendo R es la suma de A y B = , caso contrario, se hace el producto y se imprime otro cartel que diga R . es el producto de A y B =

    pseudocdigo del programa

    nombre seleccin2program);

    declaraciones (uses); WinCrt;

    variables (var); A (valor que ingresa) : entero; B (valor que ingresa) : entero; R (resultado de la oper.): entero

    funciones(function);

    procedimientos (procedure);

    inicio (begin); limpieza (limpia la pantalla) ; ingreso (ingreso de datos); alternativa (decisin A>B e imp.); resultado ( para ver los resultados):

    fin(end.) Como se puede ver dentro de alternativa se coloc la impresin de resultados quedndonos este algoritmo estructurado de la siguiente manera.

    algoritmo alternativa

    Pseudocdigo del alternativa procedimiento alternativa

    inicio (begin); si A > B entonces R A + B Imprimir cartel suma y resultados sino R Prod (A, B) Imprimir cartel producto y resultados fin(end;) El cdigo del procedimiento es:

    procedure alternativa; {* determina si A es o no mayor que B y hace los clculos corres-pondientes *} begin {* comienzo de alternativa *} if A > B then begin {* comienzo del then *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 19 -

    R := A + B; writeln ( 'R es la suma de A y B = ', R); end {* fin del then *} else begin {* comienzo del else *} R := Prod (A,B); {* llamado a la funcin *} writeln ( 'R es el producto de A y B = ', R); end; {* fin del else *} end; {* fin de alternativa *}

    Quedndonos el programa de la siguiente manera. Program Seleccion_2; {* Este es el primer programa con estructuras de seleccin y funciones *} uses Wincrt; {* declaraciones *} {const} {* no hay constantes *} var A, B : integer; {* valores que ingresan *} R: integer; {* salida de la operacin *} function Prod ( C, D: integer ): integer; {* obtiene el producto entre dos valores enteros *} begin {* comienzo de Prod *} Prod := C * D; end; {* fin de Prod *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese A '); {* ingreso de variable A *} readln (A); writeln ('Ingrese B '); {* ingreso de variable B *} read (B); end; {* fin del ingreso de datos *} procedure alternativa; {* compara A con B y hace los clculos e imprime resultados *} begin {* comienzo de alternativa *} if A > B then begin {* comienzo del then *} R := A + B; writeln ( 'R es la suma de A y B = ', R); {* imprime resultados *} end {* fin del then *} else begin {* comienzo del else *} R := Prod (A,B); {* llamado a la funcin *} writeln ( 'R es el producto de A y B = ', R); {* imprime resultados *} end; {* fin del else *} end; {* fin de alternativa *} procedure resultado; {* comienzo la muestra de los resultados *} Var H :char;

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 20 -

    begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para ver resultados *} end; {* fin de la muestra de los resultados *} begin limpieza; {* llamado al procedimiento limpieza *} ingreso; {* llamado al procedimiento ingreso *} alternativa; {* llamado al procedimiento alternativa *} resultado; {* llamado al procedimiento resultado *} end.

    Hay varias cosas para tomar en cuenta cuando en alguna de las opciones tiene ms de una instruccin dicha opcin deber llevar un begin con su correspondiente end. Debe notarse que el end del then no tiene puntuacin en cambio el del else si lleva punto y coma (;) esto se debe que este end es el ltimo del if.

    Tambin debe notarse que las variables del llamado de la funcin son distintas a las de la funcin en si.

    R := Prod (A,B); function Prod ( C, D: integer ): integer; Tanto en funciones como en procedimientos esto es posible ya que el lenguaje vincula au-

    tomticamente la primera variable del llamado con la primera de la declaracin, la segunda con la segunda y as sucesivamente. Esto nos permite llamar a una funcin (o procedimiento), con distintos juegos de variables. Sin que tengamos que atenernos a nombres especficos. Solo debemos tener en cuenta que las variables sean del mismo tipo.

    Mltiples salidas : Si se tiene ms de dos posibles salidas, aqu aparecen dos soluciones

    similares al problema. IF anidado : en esta solucin se utiliza un if dentro de otro. Siempre se anida por la salida

    Else (sino).

    Ejemplo : Se pide un programa donde ingresa un nmero entre 1 y 5 incluidos ambos y se

    imprime en pantalla su expresin de caracteres ( ingresa 2 imprime Dos).

    En este caso tenemos cinco salidas probables (uno, dos, tres, cuatro o cinco), esto indica que deberemos tener 4 if anidados.

    Si a = 1 Entonces impre = Uno Sino Si a = 2 Entonces impre = Dos Sino Si a = 3 Entonces impre = Tres Sino Si a = 4 Entonces impre = Cuatro Sino impre = Cinco fin_si {* fin_si no tiene equivalente en Pascal *} fin_si fin_si fin_si

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 21 -

    El cdigo del procedimiento es:

    procedure alternativa; {* determina el valor de A y lo expresa en letras *} begin {* comienzo de alternativa *} if A = 1 then {* pregunta por uno *} writeln ( 'U n o ') {* salida por uno *} else if A = 2 then {* pregunta por dos *} writeln ( 'D o s ') {* salida por dos *} else if A = 3 then {* pregunta por tres *} writeln ( 'T r e s ') {* salida por tres *} else if A = 4 then {* pregunta por cuatro *} writeln ( 'C u a t r o ') {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin de alternativa *}

    Quedndonos el programa de la siguiente manera.

    Program Seleccion_3; {* If anidados *} uses Wincrt; {declaraciones} {const} {* no hay constantes *} var A : integer; {* valor que ingresa *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese un numero de 1 a 5 : '); {* ingreso de variable A *} readln (A); end; {* fin del ingreso de datos *} procedure alternativa; {* determina el valor de A y lo expresa en letras *} begin {* comienzo de alternativa *} if A = 1 then {* pregunta por uno *} writeln ( 'U n o ') {* salida por uno *} else if A = 2 then {* pregunta por dos *} writeln ( 'D o s ') {* salida por dos *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 22 -

    else if A = 3 then {* pregunta por tres *} writeln ( 'T r e s ') {* salida por tres *} else if A = 4 then {* pregunta por cuatro *} writeln ( 'C u a t r o ') {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin de alternativa *} procedure resultado; {* se utiliza para dejar en pantallas los resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin de resultado *} begin limpieza; ingreso; alternativa; resultado; end.

    Opcin : esta solucin se utiliza en reemplazo del if anidado. Es ms prctica y eficiente.

    su pseudocdigo genrico es:

    opcin E de E1: sentencia 1 E2: sentencia 2 E3: sentencia 3 ......................... ......................... En: sentencia n [sino sentencia x ] fin...opcin

    Case of

    Opcin1

    Opcin2

    Opcin n

    ........

    else

    Para el problema anterior su pseudocdigo ser:

    opcin A de 1: Imprimir U n o 2: Imprimir D o s 3: Imprimir T r e s 4: Imprimir C u a t r o sino Imprimir C i n c o

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 23 -

    fin...opcin El cdigo del procedimiento es:

    procedure seleccion; {* determina el valor de A y hace su valor a letras *} begin {* comienzo de alternativa *} case A of {* comienza seleccion *} 1 : writeln ( 'U n o '); {* salida por uno *} 2 : writeln ( 'D o s '); {* salida por dos *} 3 : writeln ( 'T r e s '); {* salida por tres *} 4 : writeln ( 'C u a t r o '); {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin del case *} end; {* fin de alternativa *}

    Quedndonos el programa de la siguiente manera. Program Seleccion_4; {* Uso de selectores *} uses Wincrt; {declaraciones} {const} {* no hay constantes *} var A : integer; {* valor que ingresa *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ingreso; {* comienzo del ingreso de datos *} begin write ('Ingrese un numero de 1 a 5 : '); {* ingreso de variable A *} readln (A); end; {* fin del ingreso de datos *} procedure seleccion; {* determina el valor de A y hace su valor a letras *} begin {* comienzo de alternativa *} case A of {* comienza seleccion *} 1 : writeln ( 'U n o '); {* salida por uno *} 2 : writeln ( 'D o s '); {* salida por dos *} 3 : writeln ( 'T r e s '); {* salida por tres *} 4 : writeln ( 'C u a t r o '); {* salida por cuatro *} else writeln ( 'C i n c o '); {* salida por cinco *} end; {* fin del case *} end; {* fin de alternativa *} procedure resultado; {* se utiliza para dejar en pantallas los resultados *} Var H :char;

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 24 -

    begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin de resultado *} begin limpieza; ingreso; seleccion; resultado; end.

    Resumen: Existen tres tipos de estructuras selectivas

    a) If b) If anidado c) case

    Cada uno tiene su aplicacin especfica y se debe tener cuidado si se tiene por salida una o ms sentencias. (Si hay ms de una sentencia por salida colocar Begin End ).

    Hasta ahora hemos visto dos tipos de estructuras de control

    secuenciales

    selectivas

    En esta practica veremos el tipo de estructura que nos queda. Repetitivas: Las estructuras repetitivas (llamadas tambin bucles, lazo o ciclo) se utilizan

    para realizar varias veces el mismo conjunto de operaciones. Dentro de ellas encontramos aquellas donde la cantidad repeticiones se manejan por un nmero, las que se realizan hasta que se cumple cierta condicin.

    Son tres la sentencia for y la sentencia while y la sentencia repeat

    For esta sentencia, es un bucle controlado por un contador, denominado variable de con-trol o ndice.

    Pseudocdigo en espaol

    para variable (v) ? vi hasta vf hacer

    < accin S1>

    .......................

    fin para

    Cdigo se programa

    for variable (v):= vi to vf do

    begin

    < accin S1>

    < accin S2>

    ......................

    end

    Ejemplos:

    a) Hacer un programa que imprima los nmeros de 5 hasta 28.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 25 -

    Pseudocdigo del programa

    nombre repeticin1(program); declaraciones (uses)

    WinCrt; constantes(const)

    A = 5; B = 28;

    variables (var) R (resultado de la oper.): entero

    funciones(function)(NO hay); procedimientos (procedure); inicio (begin);

    limpieza(limpia la pantalla); ciclo (hace ciclo e imprime); salida

    fin(end.) Como se puede ver tenemos varios procedimientos ya vistos. Por lo tanto solo se desarrolla-ra el pseudocdigo y el estructurado de ciclo, y todo lo que de l dependa.

    algoritmo ciclo

    Pseudocdigo del ciclo procedimiento ciclo

    inicio (begin); para R ? A hasta B hacer imprimo R fin(end;) El cdigo del procedimiento es:

    procedure ciclo; {* comienzo el ciclo *} begin for R := A to B do {* se define el ciclo A *} writeln ('Numero ',R ); {* imprime salida *} end; {* fin del ciclo *}

    Quedndonos el programa de la siguiente manera. Program Repeticion_1; {* Este es el primer programa con estructuras de repeticin *} uses Wincrt; {declaraciones} const {* constantes *} A = 5; B = 28; var R: integer; {* controla el ciclo *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 26 -

    procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ciclo; {* comienzo el ciclo *} begin for R := A to B do {* se define el ciclo A *} writeln ('Numero ',R ); {* imprime salida *} end; {* fin del ciclo *} procedure salida; {* comienzo del procedimiento salida *} {*solo sirve para ver los resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; salida; end.

    b) Hacer un programa que calcule e imprima el factorial de los nmeros 1 a 7

    Pseudocdigo del programa nombre repeticin2(program); declaraciones (uses)

    WinCrt, Dos; constantes(const)

    A = 1; B = 7;

    variables (var) R, Fac (resultado de la oper.): entero

    procedimientos (procedure); inicio (begin);

    limpieza(limpia la pantalla); ciclo2 (hace ciclo e imprime); salida

    fin(end.)

    algoritmo ciclo

    Pseudocdigo del ciclo

    procedimiento ciclo inicio (begin); para R= A hasta B hacer Fac Fac * R imprimo Fac

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 27 -

    fin fin(end;) Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impre-sin del resultados quedndonos este algoritmo estructurado. El cdigo del procedimiento es:

    procedure ciclo; {* comienzo el ciclo *} begin Fac := 1; for R := A to B do {* se define el ciclo A *} begin Fac := Fac * R; {* Calcula factorial *} writeln ('Numero : ',R, ' Factorial : ',Fac ); {* imprime salida numero y factorial *} end end; {* fin del ciclo *}

    Como se puede observar se necesit colocar un begin y un end para definir comienzo y fin del ciclo, ya que el mismo tiene ms de una instruccin. Fac se define igual a uno, porque sino el producto nos dara siempre 0 (cero). Quedndonos el programa de la siguiente manera. Program Repeticion_2; {* Este es el segundo ejemplo de For *} uses winCrt ; {declaraciones} const {* constantes *} A = 1; B = 7; var R, Fac : integer; {* controla el ciclo *} procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} Procedure ciclo; {* comienzo el ciclo *} begin Fac := 1; for R := A to B do {* se define el ciclo A *} begin Fac := Fac * R; {* Calcula factorial *} writeln ('Numero : ',R, ' Factorial : ',Fac ); {* imprime salida numero y factorial *} end end; {* fin del ciclo *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 28 -

    procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; salida; end.

    Hay que tomar en cuenta que los ciclos cumplen con las mismas reglas que las opciones: si

    tiene ms de una instruccin, el ciclo deber llevar un begin con su correspondiente end.. Por otro lado, A > B el for podra ser

    for K: = A downto B do

    Bucles controlados por una bandera (While - Repeat) Estos bucles no se repiten una cantidad definida de veces, sino se reali-

    zan hasta que se cumple una cierta condicin. La diferencia entre ambos bucles (While y Re-peat) es cuando se realiza la pregunta de la condicin.

    While : en este ciclo la pregunta de condicin se hace cada vez antes de comenzar el ciclo. Ejemplo : Se pide un programa donde ingresan una serie de nmeros, el ltimo es un va-

    lor negativo. Se pide calcular el promedio de los valores positivos (no incluir el ltimo valor), e imprimir los valores y su promedio.

    En este caso tenemos que pautar si el ltimo valor lo imprimimos o no. (si optamos por im-

    primirlo), esto implicar el siguiente pseudocdigo. Pseudocdigo del ciclo

    procedimiento ciclo inicio (begin); N 0 S 0 leo A imprimo A mientras A >= 0 hacer comenzar S S + A N N + 1 leo A imprimo A terminar fin(end;)

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 29 -

    Como se puede ver dentro del ciclo se hace dos procesos, el clculo del factorial y la impresin del resultados quedndonos este algoritmo estructurado.

    El cdigo del procedimiento es:

    procedure ciclo; {* comienzo de ciclo *} begin S := 0; N := 0; write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} WHILE A >= 0 DO {* se define el ciclo *} begin {* comienzo de While *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} writeln ; {* Salta una lnea *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} end {* fin de While *} end; {* fin de ciclo *}

    Quedndonos el programa de la siguiente manera.

    Program Repeticion_3; {* Este es el ejemplo de While *} uses Wincrt; {declaraciones} {const} {* constantes no hay*} var A, N, S : integer; {* controla el ciclo *} Prom :real;

    procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

    procedure ciclo; {* comienzo de ciclo *} begin S := 0; N := 0; write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} WHILE A >= 0 DO {* se define el ciclo *} begin {* comienzo de While *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} writeln ; {* Salta una lnea *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 30 -

    end {* fin de While *} end; {* fin de ciclo *} procedure promedia; {* comienzo de promedia *} begin Prom := S / N; {* Calcula el promedio *} writeln ; {* Salta una lnea *} writeln ; {* Salta una lnea *} writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *} end; {* fin de promedia *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; promedia; salida; end.

    En el procedimiento promedia en la escritura del promedio, aparece

    writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *}

    donde Prom:5:2 significa que la variable Prom ser escrita en un formato de 5 caracteres, de los cuales 2 corresponden a los decimales, se necesita un carcter para el punto decimal.

    Repeat : esta solucin se utiliza cuando el ciclo debe incluir el ltimo valor ingresado. Ya que la pregunta se hace al final del ciclo.

    Ejemplo : Se ingresan una serie de nmeros distintos, el ltimo es el valor 12. Se pide un

    programa que calcule el promedio de los valores (incluir el ltimo valor), e imprimir los valo-res y su promedio.

    Pseudocdigo del ciclo

    procedimiento ciclo inicio (begin); N 0 S 0 repetir leo A imprimo A S S + A N N + 1 hasta_que A = 12 fin(end;) El cdigo del procedimiento es:

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 31 -

    procedure ciclo; {* comienzo el ciclo *} begin S := 0; N := 0; repeat {* comienza ciclo *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} writeln ; {* Salta una lnea *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} until A = 12; {* definicin al final del ciclo *} end; {* fin del ciclo *}

    Quedndonos el programa de la siguiente manera. Program Repeticion_4; {* Este es el ejemplo de Repeat - Until *} uses WinCrt; {declaraciones} {const} {* constantes no hay*} var A, N, S : integer; {* controla el ciclo *} Prom :real; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *} procedure ciclo; {* comienzo el ciclo *} begin S := 0; N := 0; repeat {* comienza ciclo *} write ( 'Ingrese un valor '); read (A); {* esta instruccin y la anterior son el ingreso de datos *} writeln ( 'El valor es : ',A ); {* esta instruccin imprime el valor *} writeln ; {* Salta una lnea *} S := S + A; {* Calcula la suma de valores *} N := N + 1; {* Calcula la cantidad de valores *} until A = 12; {* definicin al final del ciclo *} end; {* fin del ciclo *} procedure promedia; {* comienzo de promedia *} begin Prom := S / N; {* Calcula el promedio *} writeln ; {* Salta una lnea *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 32 -

    writeln ; {* Salta una lnea *} writeln ( 'Promedio es = ', Prom:5:2 ); {* Imprime el promedio *} end; {* fin de promedia *} procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *} begin limpieza; ciclo; promedia; salida; end.

    Como se puede observar esta estructura (repeat-until) carece de begin y end, ya que los

    dos extremos estn definidos por el propio ciclo. Anidacin

    Se pueden colocar un ciclo dentro de otro (anidar), esto quiere decir que una es-tructura contiene en su interior a otra. Las estructuras pueden ser de igual o de distinto tipo. Siempre que se cumpla con las condiciones que aparecen en la siguientes figuras.

    anidado anidado incorrecto

    Resumen:

    Existen tres tipos de estructuras repetitivas a) For b) While c) Repeat - until

    Cada uno tiene su aplicacin especfica y se debe tener cuidado cuando se anidan.

    Estructura de datos

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 33 -

    Hasta aqu se han visto distintos tipos de estructuras de control. A partir de este punto se ver la aplicacin de las mismas a distintos tipos de problemas.

    Estructura de datos: Una estructura de datos es una coleccin de datos que pueden ser caracterizados por su organizacin y las operaciones que se definen en ella. Dentro de ellas encontramos distintos tipos, los tipos de datos ms frecuentes en los dife-

    rentes lenguajes son:

    Tipos de datos

    entero (integer) Estndar real (real) carcter (char) simples lgico (boolean) Definidos por el programador subrango (subrange) (no estndar) enumerativo (enumerated) arrays (vectores/matrices) registros simples o estticos ficheros conjuntos estructurados cadenas (string) listas (pilas/colas) compuestos o dinmicos listas enlazadas rboles grafos

    Las estructuras estticas son aquellas en las que el tamao de memoria ocupado se define antes de que el programa se ejecute y no puede modificarse durante la ejecucin

    Las estructuras dinmicas son aquellas en las que no se debe definir previamente el tamao de memoria

    Los datos simples tienen en comn que cada variable representa un elemento, en los estructurados un identificador puede representar mltiples datos individuales, pudiendo cada uno de estos ser referenciados independientemente.

    Tratamiento de Cadenas de Caracteres

    Una cadena de caracteres (string), es una serie de caracteres cuya longitud puede va-riar entre 1 y 255 caracteres. A este tipo se lo define tipo string, para declarar este tipo de va-riable se puede hacer de cualquiera de las siguientes formas:

    Ejemplo

    var mensaje : string [80];

    type cadena50 = string [50]; var nombre : cadena50;

    Longitud de una cadena:

    La longitud de una cadena es igual al nmero de caracteres (contando como tales tam-bin los espacios en blanco), pero ocupara en memoria un byte ms. Por ejemplo:

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 34 -

    Nombre : string [10];

    Si en nombre utilizo Murcielago, ocupar en memoria 11 bytes, 1 por letra y uno ms por la longitud.

    Nmero de byte 0 1 2 3 4 5 6 7 8 9 10 10 M u r c i e l a g o

    En Turbo Pascal existen para una cadena dos longitudes:

    Longitud fsica:

    Es la cantidad de memoria que se le reserva a la cadena al comienzo del programa, 10 bytes en el caso de Nombre del ejemplo anterior.

    Longitud lgica:

    Es la cantidad el nmero de caracteres que se tienen almacenados en esa variable en un cierto momento.

    Por ejemplo: si durante el programa hago

    Nombre := Ada; La longitud lgica ser igual a 3.

    Se puede acceder a cualquier elemento de una cadena: para ello hay que indicar el n-mero del carcter al cual se quiere acceder.

    Ejemplo

    Var Carac : char; Nombre : string[10];

    begin Nombre := Murcielago Carac := Nombre [6];

    A partir de aqu la variable Carac toma el valor e

    OPERACIONES CON CADENAS

    Dos cadenas pueden sumarse.

    Pap de + Pepe Pap de Pepe

    Dos cadenas pueden compararse.

    Pap < Pepe porque a < e

    Lo que compara es el ASCII que le corresponde a los caracteres. Comienza comparando el primero con el primero, si son iguales lo hace con el segundo y as sucesivamente hasta en-contrar la desigualdad.

    Procedimientos y funciones con cadenas

    Funcin Concat:

    Es equivalente a la suma de string, si la cantidad de caracteres supera los 255 corta el excedente del string.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 35 -

    Concat(S1, S2, S3) S1 + S2 + S3

    Funcin Length(s):

    Devuelve un entero que es la longitud lgica del string s

    Length(nombre) 10

    Procedimiento Delete :

    Delete(s, posicin, nmero)

    Delete(nombre,3,4) Mulago

    Elimina a partir del tercer carcter, 4 caracteres (rcie).

    Procedimiento Insert:

    Insert(s ,cad1, posicin)

    Insert( 'ju', nombre, 4) Murjucielago

    Inserta el string s o en nuestro caso los caracteres entre apstrofos en cad1, a partir del carcter posicin.

    Funcin Pos:

    Pos(S1, S2) devuelve la posicin donde S1 = S2

    Pos('ci', nombre, ) 4

    Devuelve la posicin de un string dentro de la cadena.

    Funcin Copy:

    Copia parte de un string y lo almacena en otro.

    S2 := Copy(S1, posicin, nmero)

    S2 := Copy(Nombre, 5, 4) "iela"

    Procedimiento Str:

    Str(valor,cad1)

    Convierte un nmero en un string.

    Str(1573, S1) "1" "5" "7" "3"

    Procedimiento Val:

    Val(S1,nmero, cdigo)

    Ingresa un string S1 y devuelve un valor, si lo puede convertir el cdigo ser 0, caso contrario indica la posicin del carcter que no pudo convertir.

    Val(S1, V1, C1) si S1 = "1" "5" "." "7" "3" V1 =15.73 y C1 = 0

    Val(S1, V1, C1) si S1 = "1" "5" "a" "7" "3" V1 = 0 y C1 = 3

    Funcin Upcase:

    Convierte minsculas a maysculas.

    Upcase (char)

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 36 -

    Upcase (a) A

    Upcase (A) A

    Upcase (4) 4

    FUNCIONES PARA MANEJO DE PANTALLA y TECLADO

    La unidad WinCrt posee una serie de rutinas de salida a pantalla y otras sin salida a pan-talla como Delay, Sound, NoSound,

    ClrEol

    Borra todos los caracteres desde la posicin actual del cursor hasta el final de la lnea sin mover el cursor.

    ClrScr

    Borra todos los caracteres de la pantalla y coloca el cursor en la esquina superior izquier-da. Si se esta trabajando en una ventana, borrar los caracteres de la ventana y coloca el cur-sor en la esquina superior izquierda de la ventana.

    DelLine

    Borra la lnea donde se halla el cursor. Las lneas que se hallan por debajo son desplaza-das hacia arriba.

    GotoXY

    Coloca el cursor en la coordenada x y. X le indica la columna 1 a 80, e Y el nmero de l-nea de 1 a 25. El ngulo superior izquierdo tiene coordenadas (1,1). Si se opera en una venta-na, las coordenadas son relativas a la ventana.

    GotoXY(x, y) x e y son de algn tipo entero.

    InsLine

    Inserta una lnea vaca donde se halla el cursor. Desplazando las dems una hacia abajo.

    HighVideo

    Selecciona caracteres de alta intensidad.

    LowVideo

    Selecciona caracteres de baja intensidad.

    NormalVideo

    Fija el atributo del texto al valor que tena inmediatamente antes que el programa fuera ejecutado.

    TextBackground (Color :Byte)

    Define el color de fondo. Color toma valores de 0 a 7.

    TextColor (Color : Byte)

    Define el color del texto 0 a 15, y 128 (parpadeo).

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 37 -

    WhereX : byte

    Devuelve la columna donde se halla el cursor.

    WhereY : byte

    Devuelve la lnea donde se halla el cursor.

    Window : (x1, y1, x2, y2 :byte)

    Define una ventana de texto, dando las coordenadas del vrtice superior izquierdo y del vrtice inferior derecho.

    Sound (Frec : word)

    Emite un sonido de una frecuencia (Frec en herzios)

    NoSound

    Interrumpe la emisin de sonido.

    Delay (ms : word)

    Detiene la ejecucin del programa durante ms milisegundos.

    ReadKey char

    Lee un carcter del teclado. El carcter no se visualiza en pantalla.

    Key Pressed : boolean.

    Devuelve el valor verdadero si se pulsa una tecla, y falso en caso contrario.

    Vectores y Matrices

    ARRAY UNIDIMENSIONALES: VECTORES

    ARRAY (ARREGLO): Es un conjunto finito y ordenado de elementos homogneos. Ordenado : cada elemento del arreglo puede ser identificado Homogneo : son del mismo tipo de dato

    El tipo ms simple de arreglo es el unidimensional o vector (matriz de una dimensin).

    Por ejemplo podra ser un vector denominado NOTAS

    NOTAS[1] NOTAS[2] NOTAS[k] NOTAS[n] 5 8 .......... 7 ...... 3

    Los subndices 1, 2, k, n, indican la posicin del elemento, en Pascal van entre corchetes. El primer elemento es el 5, el segundo es el 8, el elemento k es 7 y el ensimo es 3.

    Un array puede ser declarado de dos formas distintas que son:

    Declaraciones Tipo Array

    En las declaraciones del tipo array usaremos los siguientes pasos.:

    1. La estructura del arreglo se describe en Type.

    2. Se le asigna ese tipo a una o ms variables.

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 38 -

    Type XX = array [1..3000] of real;

    Var: Alfa : XX;

    array y of son obligatorias

    [1...3000] indica los valores que toman los ndices del vector, son del tipo subrango.

    real identifica que tipo de elementos almacena el vector.

    Variables Tipo Array

    En las declaraciones de variable tipo array se har de la siguiente forma.:

    1. En la declaracin se describe la variable.

    Var: Alfa : array [1..3000] of real;

    Los elementos cumplen la misma funcin que en el caso anterior.

    Dentro de los distintos tipos que un array puede almacenar en sus posiciones, pue-de ser un tipo Array como el del siguiente tipo:

    Type Linea = array [1..40] of char; Hoja = array [1..30] of Linea; Libro = array [1..30] of Hoja;

    Las operaciones que se pueden hacer con un vector son:

    asignacin lectura/escritura recorrido (acceso secuencial) actualizar (aadir, borrar, insertar) ordenacin bsqueda

    Asignacin: Es darle un valor a un elemento de un vector

    Pseudocdigo Cdigo se programa A[3] 5 A[3] := 5;

    Para la asignacin como para otro procesos se debe recurrir a estructuras repetitivas (pa-ra, mientras o repetir).

    Ejemplo:

    A cada uno de los 55 elementos del vector CARGA se le debe asignar el valor 0

    Algoritmo de asigna

    Pseudocdigo

    Para I 1 hasta 55 hacer

    CARGA[I] 0

    Fin

    Cdigo se programa

    for I := 1 to 55 do

    CARGA[I] := 0;

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 39 -

    Pseudocdigo del programa

    nombre vector1(program); declaraciones (uses)

    WinCrt; constantes(const)

    A = 1; B = 55;

    tipo (type) matriz = array [1..55] de enteros variables (var) I entero CARGA matriz funciones(function)(NO hay); procedimientos (procedure); inicio (begin);

    limpieza(limpia la pantalla); asigna (hace ciclo y asigna); Salida

    fin(end)

    Como se puede ver tenemos la definicin del vector en tipo o type.

    El cdigo del procedimiento es:

    procedure asigna; {* comienzo de la asignacin *} begin for I := A to B do {* se define el ciclo de 1 a 55*} CARGA[I] := 0; {* asigna los valores *} end; {* fin del ciclo *}

    Quedndonos el programa de la siguiente manera.

    Program Vector_1; {* Este es el primer programa con vectores *}

    uses WinCrt; {declaraciones}

    const {* constantes *} A = 1; B = 55;

    type vector = array [1..55] of integer;

    var I: integer; {* controla el ciclo *} CARGA: vector;

    procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

    procedure asigna; {* comienzo de la asignacin *} begin for I := A to B do {* se define el ciclo de 1 a 55 *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 40 -

    CARGA[I] := 0; {* asigna la valores *}

    end; {* fin de la asignacin *}

    procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char;

    begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

    begin limpieza; asigna; salida; end.

    Lectura/escritura:

    Es una operacin de entrada salida sobre un vector. Manejado por estructuras repetitivas.

    Ejemplo:

    Ingresar por teclado cada uno de los 5 elementos de un vector de nombre vec. Y luego leerlos y presentarlos por pantalla en orden inverso al que entraron (de 5 a 1)

    Algoritmo de lectura

    Pseudocdigo en espaol

    para I = 1 hasta 5 hacer comienzo imprimo mensaje leo y almaceno en vec[I]

    fin

    Cdigo se programa

    for I := 1 to 5 do begin write ( ); read (vec[I] ); end;

    El cdigo del procedimiento es:

    procedure lectura (var vec:vector; inic, final:integer);

    var

    i: integer;

    {* almacena en el vector *} begin for i := inic to final do {* se define el ciclo de inic a final*} begin write ('Ingrese vec('i:1,') : '); readln(vec[i]); {* almacena en el vector *} end; end; {* fin de lectura *}

    Algoritmo que imprime

    Pseudocdigo en espaol Cdigo se programa

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 41 -

    para I = 1 hasta 5 hacer escribo vec[I]

    fin

    for I := 1 to 5 do writeln (vec[I] );

    El cdigo del procedimiento es:

    procedure impresion(vec:vector; inic, final:integer); {* imprime el vector *}

    var

    i:integer; begin for i := final downto inic do {* se define el ciclo de final a inic*} writeln ('vec(',i:1,') = ',vec[i]:2); {* imprime el contenido del vector por pantalla *} end; {* fin de impresion *}

    Pseudocdigo del programa

    Nombre vector2(program); Declaraciones (uses)

    WinCrt;

    tipo (type) Vector = array [1..10] de enteros variables (var) primero, ultimo: entero

    valores: Vector Funciones(function)(NO hay); Procedimientos (procedure); inicio (begin);

    limpieza{limpia la pantalla}; lectura (valores, primero, ultimo) {lee el vector) impresin (valores, primero, ultimo) {imprime el vector por pantalla} salida

    fin(end.)

    Program Vector_2 {* Este es el segundo programa con vectores *}

    uses Wincrt; {declaraciones}

    type vector = array [1..10] of integer;

    var valores: vector; primero, ultimo:integer; procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

    procedure lectura(var vec:vector; inic, final:integer); {* lee el vector *} var i: integer;

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 42 -

    begin for i := inic to final do {* se define el ciclo de inic a final *} begin write ('Ingrese vec(',i:1,') : '); readln(vec[i]); {* lee las componentes del vector *} end; end; {* fin de lectura *}

    procedure impresin(vec:vector; inic, final:integer) ; {imprime el vector por pantalla} var i:integer; begin for i:= final downto inic do {* se define el ciclo de final a inic *} writeln ('vec(',i:1,') = ',vec[i]:2); {*saca por pantalla *} end; {* fin de impresin *}

    procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

    begin limpieza; lectura(valores, primero, ultimo); impresin(valores;primero, ultimo); salida; end.

    Recorrer: Esta operacin se realiza cuando uno lee el vector, y se aplica tanto cuando se busca un elemento de un vector o cuando se desea listar el mismo, como lo vimos en el ejem-plo anterior. Actualizar Aadir: Se denomina as a la operacin de agregar un nuevo, elemento al final del vec-tor. la nica condicin necesaria para esta operacin consiste en la comprobacin de espacio libre en memoria.

    Ejemplo: Dado el vector U de 7 elementos aadir un elemento ms al vector

    Algoritmo de aade

    Pseudocdigo en espaol I 0

    repetir I I +1

    hasta que U[I] = 0 o i > k si i es menor o igual a k entonces

    Cdigo se programa

    I := 0; repeat I := I + 1;

    until U[I] = 0 or i >k

    if I

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 43 -

    leo nuevo U[I] sino imprimo No ms lugar fin_si

    else

    writeln(No mas lugar)

    El cdigo del procedimiento es:

    procedure agrega; {* agrega un elemento al vector *} begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} if I k si I es menor o igual a k

    entonces U[I] 0

    sino imprimo No existe el elemento fin_si

    Cdigo se programa

    read(Aux)

    I := 0; repeat I := I + 1;

    until U[I] = Aux or I > k

    if I

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 44 -

    repetir I I +1

    hasta que U[i] = Aux o I > k

    si i es menor o igual a k entonces

    repetir U[I] U[I + 1] I I +1

    hasta que U[i] = 0 o I > k sino

    imprimo No existe el elemento fin_si

    Readln(Aux);

    repeat I := I + 1; until U[i] = Aux or I >k

    if I k ; else writeln(No existe el elemento)

    Insertar: Se debe trabajar sobre un vector ordenado. Consiste en introducir un nuevo elemento al

    vector sin que este pierda el orden. Para ello se debe comprobar que haya lugar libre en el vec-tor, luego de lo cual se deber desplazar hacia bajo los elementos necesarios como para gene-rar un espacio libre en la posicin adecuada sin que se pierda el orden.

    Algoritmo de inserta (Ordenado creciente) Pseudocdigo en espaol

    I 0

    Lee Aux

    repetir I I +1

    hasta que U[i] = 0 o I > B

    si i es menor o igual a B entonces

    I I -1 mientras U[i] > Aux

    U[I+1] U[I] I I -1

    fin mientras U[I+1] Aux

    sino imprimo No hay lugar

    fin_si

    Cdigo se programa

    I := 0;

    Read(Aux);

    repeat I := I + 1; until U[i] = 0 or I >B

    if I Aux begin

    U[I+1] := U[I]; I := I - 1;

    end; U[I+1] = Aux;

    end else

    writeln(No hay lugar)

    Ordenacin:

    La ordenacin o clasificacin es, el proceso de clasificar datos en algn orden o secuen-cia especfica como creciente o decreciente. Existen varios mtodos de ellos elegiremos el de intercambio (decantacin).

    Algoritmo de ordena (Ordenado creciente) Pseudocdigo en espaol

    I 0

    repetir I I +1

    hasta que U[i] = 0 o I > B

    Cdigo se programa

    I := 0;

    repeat I := I + 1; until U[i] = 0 or I > B

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 45 -

    P I - 1

    para I 1 hasta P -1 hacer para J 1 hasta P - I hacer

    si U[J] > U[J +1] entonces (intercambiar)

    Aux U[J] U[J] U[J +1] U[J +1] Aux

    fin si fin

    fin

    P := I - 1;

    for I := 1 to P-1 do for J := 1 to P- I do

    if U[J] > U[J +1] then begin

    Aux := U[J]; U[J] := U[J +1]; U[J +1] := Aux ;

    end;

    Bsqueda:

    La bsqueda de un dato dentro de un array consiste en determinar si un elemento N per-tenece o no al conjunto de datos y posicin que el ocupa en el conjunto.

    Los distintos tipos de bsqueda se pueden clasificar en:

    bsqueda secuencial bsqueda binaria bsqueda por transformacin de claves (hash)

    Bsqueda Secuencial: Compara cada elemento del vector con el valor deseado. Si se encuentra es el mtodo que ofrece menor eficiencia pero el ms sencillo. Esto se puede ver en el ejemplo anterior.

    Ejemplo general

    Hacer un programa que permita operar con un vector de siete posiciones, que opere con nmeros naturales. Pudiendo agregar, eliminar o insertar un valor, tambin se podr listar to-dos los valores que tiene el vector.

    Usaremos como centinela el nmero 0 (cero) por lo cual lo primero que deber hacer el programa deber asignarle a todos los elementos del vector dicho valor .

    El programa cuenta con tres llamados.

    begin limpieza; {* limpia la pantalla *} asigna; {* asigna los 0 al vector *} menu; {* llama al mdulo men *} end.

    Los mdulos limpieza y asigna ya se han detallado. En cuanto a menu es un selector.

    Algoritmo de menu Pseudocdigo en espaol

    repetir repetir

    llama a Limpieza escribir Titulos escribir Opciones leer valor elegido (H)

    hasta que H > 0 y H < 7

    Cdigo se programa repeat

    repeat limpieza; writeln (' M E N U ');

    writeln ( ' 1. Ingresar un valor al vector '); writeln;

    write ( ' Elija una opcin ');

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 46 -

    opcion H de 1: llama a Agrega 2: llama a Lista 3: llama a Borra 4: llama a Ordena 5: Inserta sino limpia pantalla

    fin opcion de hasta que H = 6

    readln (H); {* lee la opcin *} until (H > 0) and (H < 7); case H of 1 : Agrega; 2 : Lista; 3 : Borra; 4 : Ordena; 5 : Inserta; else clrscr; end;

    until H = 6;

    En el procedimiento borra, lo que realiza el algoritmo es desplazar cada uno de los ele-mentos posteriores al que queremos eliminar a una posicin anterior a la que tenamos. Este procedimiento cuenta con dos partes.

    a) encuentra el elemento a borrar b) desplaza los elementos posteriores a una posicin anterior; la marca nos sirve

    para optimizar el proceso.

    program vectores; {* Programa de subrutinas de vectores *} uses wincrt; {*declaraciones*}

    const {* constantes *} NL = #13#10; {* Nueva Lnea Carrige Return, Line Feed*} A = 1; B = 7;

    type vector = array [1..7] of integer;

    var I: integer; {* controla el ciclo *} U: vector;

    procedure limpieza; {* comienzo de limpieza de la pantalla *} begin ClrScr; end; {* fin de limpieza de la pantalla *}

    procedure salida; {* comienzo del procedimiento salida *} {* solo sirve para ver resultados *} Var H :char; begin writeln ( 'Presione cualquier tecla '); readln (H); {* esta instruccin y la anterior son para dar tiempo para *} {* ver resultados *} end; {* fin del procedimiento salida *}

    procedure Lugar; {* determina cuantos lugares estn ocupados del vector *} begin I:=0; repeat I := I + 1; until (U[I]=0) or (I> 7); {* Se repite hasta que se encuentre una bandera o se termine el vector *} end; {* fin de lugar *}

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 47 -

    procedure asigna; {* comienzo de la asignacin *} begin for I := 1 to 7 do {* se define el ciclo de 1 a 7 *} U[I] := 0; {* asigna *} end; {* fin de la asignacin *}

    procedure Ordena; {* ordena el vector *} var J, P, Aux : integer; begin I := 0; repeat I := I + 1; until (U[I]=0) or ( I>B ); {* Determina cuantos valores validos hay en el vec-tor *} P := I - 1; for I := 1 to P - 1 do {* se define el ciclo hasta el anteltimo valor cargado *} for J := 1 to P - I do if U[J] > U[J+1] then begin {* Intercambia *} Aux := U[J]; U[J] := U[J+1]; U[J+1] := Aux; end end; {* fin del ordenamiento *}

    procedure lista; {* lee y lista el vector *} begin I := 1; while (U[I] 0) and (I

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 48 -

    procedure Borra; {* borra un elemento del vector *} var J : integer; H : char; begin I := 1; write ('Ingrese el valor a borrar : '); read (J); while (U[I] 0) and (I

  • ALGORTMICA Y PROGRAMACIN Introduccin al Pascal

    - 49 -

    Read (H); if (H = 'S') or (H = 's') then Ordena; write ('Ingrese el valor a insertar : '); Read (Aux); I := K - 1; while U[I] > Aux do begin U[I+1] := U[I]; I := I - 1; end; U[I+1] := Aux; end else begin write ('No hay mas lugar en el vector'); Read (H); end end; {* fin de agrega *}

    procedure menu; {* comienzo del procedimiento menu *} {* genera y maneja un menu de opciones *} Var H :integer; begin repeat repeat limpieza; writeln (' M E N U '); writeln (' -----------', NL, NL, NL); writeln ( ' 1. Ingresar un valor al vector ', NL); writeln ( ' 2. Listar el vector ', NL); writeln ( ' 3. Borrar un valor ', NL); writeln ( ' 4. Ordenar el vector ', NL); writeln ( ' 5. Insertar un valor ', NL); writeln ( ' 6. Salir del programa ', NL, NL); write ( ' Elija una opcin '); readln (H); {* lee la opcin *} until (H > 0) and (H < 7); case H of 1 : Agrega; {* Llamada al procedimiento de agregar *} 2 : Lista; {* Llamada al procedimiento de listar *} 3 : Borra; {* Llamada al procedimiento de borrar *} 4 : Ordena; {* Llamada al procedimiento de ordenar *} 5 : Inserta; {* Llamada al procedimiento de insertar *} else clrscr; {