headerphoto

Ayudantía I de Pascal

Ayudantía desarrollada en la UTFSM. Este documento es un draft o sea falta modificar algunas cosas yo solo ocupaba esto como apoyo.


Ayudantía I

Francisco Riveros E.

 

21/03/2006

I .Introducción: Programas antiguos ->Programación de ahora.

II. INTRODUCCION PSEUDOCODIGO

clip_image002

PALABRA

UTILIZACIÓN

ABRE

Abre un archivo

CASO

Selección entre múltiples alternativas

CIERRA

Cierra un archivo

ENTONCES

Complemento de la selección
SI - ENTONCES

ESCRIBE

Visualiza un dato en pantalla

FIN

Finaliza un bloque de instrucciones

HASTA

Cierra la iteración HAZ - HASTA

HAZ

Inicia la iteración HAZ - HASTA

INICIO

Inicia un bloque de instrucciones

LEER

Leer un dato del teclado

MIENTRAS

Inicia la iteración mientras

NO

Niega la condición que le sigue

II.a SELECCIÓN

También conocida como la estructura SI-CIERTO-FALSO, plantea la selección entre dos alternativas con base en el resultado de la evaluación de una condición o predicado; equivale a la instrucción IF de todos los lenguajes de programación y se representa gráficamente de la siguiente manera:

clip_image003

III. ESTRUCTURA GENERAL DE UN PROGRAMA PASCAL

Program identificador ; {cabecera opcional en Turbo Pascal}

Uses identificadores

Label lista de etiquetas ; {sección de etiquetas}

Const

definiciones de constantes

Type

declaración de tipos de datos definidos por el usuario

Var

declaración de variables

Procedure

definiciones de procedimientos

Function

definiciones de funciones

begin {cuerpo del programa}

sentencias

end.



Program MiPrimerPrograma; {cabecera}


Uses 


  Crt; {declaraciones}


Const


  iva =0.10;


Type


  cadena =string[35];


  meses  =1..12;


Var


  sueldo :real;


  numero :integer;


  nombre :cadena;


  Nmes   :meses;


begin


  ClrScr; {Limpia la pantalla} 


  Write ('Escribe tu nombre : ');


  {Visualiza información en pantalla} 


  ReadLn(nombre);{Leer un dato del teclado}


  WriteLn ('Bienvenido ', nombre);


  {Visualiza información en pantalla} 


  Readkey; {Espera la pulsación de una tecla}


  ClrScr


end. 




ADVERTENCIA:



Todo objeto referenciado en un programa debe haber sido previamente definido.























IV. IDENTIFICADORES





En la mayoría de los programas de computador, es necesario manejar datos de entrada o de salida, los cuales necesitan almacenarse en la memoria principal del computador en el tiempo de ejecución. Para poder manipular dichos datos, necesitamos tener acceso a las localidades de memoria donde se encuentran almacenados; esto se logra por medio de los nombres de los datos o IDENTIFICADORES.





Las reglas para formar los identificadores en Pascal son las siguientes:




  1. Pueden estar compuestos de caracteres alfabéticos, numéricos y el carácter de subrayado ( _ ).


  2. Deben comenzar con un carácter alfabético o el carácter de subrayado.


  3. Puede ser de cualquier longitud (sólo los 63 primeros caracteres son significativos).


  4. No se hace distinción entre mayúsculas y minúsculas.


  5. No se permite el uso de los IDENTIFICADORES RESERVADOS en los nombres de variables, constantes, programas o sub-programas.



Identificadores válidos



Nombre


Cadena


Edad_Maxima


X_Y_Z


Etiqueta2


Identificadores no válidos



Num&Dias : carácter & no válido


X nombre : Contiene un blanco


begin    : es una palabra reservada


eje@s    : carácter @ no válido 




V. DEFINICION DE CONSTANTES



El identificador reservado Const debe encabezar la instrucción, seguido por una lista de asignaciones de constantes. Cada asignación de constante debe consistir de un identificador seguido por un signo de igual y un valor constante, como se muestra a continuación:



Const


  valor_maximo =255;


  precision    =0.0001;


  palabra_clave='Tutankamen';


  encabezado   =' NOMBRE DIRECCION TELEFONO '; 


CONSTANTES PREDEFINIDAS :










































Nombre



Tipo



Valor



pi



real



3.1415926536 (Sólo en Turbo Pascal)



false



boolean


 

true



boolean


 

MaxInt



integer



32767





VI. DEFINICION DE TIPOS



La asignación de tipos a los datos tiene dos objetivos principales:




  1. Detectar errores de operaciones en programas.


  2. Determinar cómo ejecutar las operaciones.



Los tipos definidos por el programador pueden utilizarse para definir nuevos tipos, por ejemplo :



Type


  entero      = integer;


Var


   i,n :entero;


VI.a TIPOS ENTEROS


Tipos enteros predefinidos


















































Tipo



Rango



Formato



byte



0 .. 255



8 bits sin signo



integer



-32768 .. 32767



16 bits con signo



longint



-247483648 .. 2147483647



32 bits con signo



shortint



-128 .. 127



8 bits con signo



word



0 .. 65535



16 bits sin signo





VI.b TIPOS REALES


REAL



En el contexto de Pascal, un número real es aquel que está compuesto de una parte entera y una parte decimal, separadas por un punto. El rango de estos números está dado entre los valores 1E-38 y 1E+38 .



BOOLEAN



Un valor de tipo boolean puede asumir cualquiera de los valores de verdad denotados por los identificadores true y false, los cuales están definidos de tal manera que false < true .



CHAR



Un valor de tipo char es cualquier carácter que se encuentre dentro del conjunto ASCII ampliado, el cual está formado por los 128 caracteres del ASCII más los 128 caracteres especiales que presenta, en este caso, IBM.


Los valores ordinales del código ASCII ampliado se encuentran en el rango de 0 a 255. Dichos valores pueden representarse escribiendo el carácter correspondiente encerrado entre apóstrofes.



Así podemos escribir :



        'A' < 'a' 


        Que significa : " El valor ordinal de A es menor que el de a " o " A está antes que a 


STRING



Un tipo string (cadena) es una secuencia de caracteres de cero o más caracteres correspondientes al código ASCII, escrito en una línea sobre el programa y encerrado entre apóstrofos.



El tratamiento de cadenas es una característica muy potente de Turbo Pascal que contiene ISO Pascal estándar.



Ejemplos:



VAR

Nombre : String[30];


{Permite un máximo de 30 caracteres en la variable, si no es 255}


BEGIN


Nombre := 'Ernesto Chávez';


WriteLn (Nombre[5]);


{Visualiza el 5to caracter de la cadena}


END.



        'Turbo Pascal','Tecnológico', #13#10  


 







Nota:




  • Una cadena sin nada entre los apóstrofos se llama cadena nula o cadena vacía.


  • La longitud de una cadena es el número de carácteres encerrados entre los apóstrofos.




 


PROGRAM Test;


VAR


   x : REAL;        { variable name is x, type is real


   i : INTEGER:     { variable name is i, type is integer


   c : CHAR;        { variable name is c, type is character


   s : STRING;      { variable name is s, type is string


BEGIN


    x := -34.55;    { valid real number assigned to variable x }


    x := -3.9E-3;   { valid real number assigned to variable x }


    WRITELN(x);     { x contains the value -3.9E-3 }


    i := 10;        { valid integer number assigned to variable i }


    i := i * i;     { valid (!) - i will be 100 now }


    i := 9933;      { valid integer number assigned to variable i }


    i := -99999;    { invalid integer - too small }


    i := 999.44;    { invalid assignment - types do not match }


    c := '1';       { valid character assigned to variable c }


    c := 1;         { invalid assignment - types do not match }


    c := 'Bert';    { invalid assignment - types do not match }


    c := 'd';       { valid character assigned to variable c }


    WRITELN(c);     { c contains the value 'd' }


    d := 'c';       { unknown variable - the variable d is not declared }


    WRITELN(s);     { invalid reference - s has undefined value }


END.


 


 


VII. OPERADORES


En Pascal, se manejan tres grupos de operadores:




  1. ARITMÉTICOS


  2. RELACIONALES


  3. LÓGICOS



1.- OPERADORES ARITMETICOS BASICOS.


























































































Operador



Operación



Operandos



Ejemplo



Resultado



+



Suma



real , integer



a + b



suma de a y b



-



Resta



real , integer



a - b



Diferencia de a y b



*



Multiplicación



real , integer



a * b



Producto de a por b



/



División



real , integer



a / b



Cociente de a por b



div



División entera



integer



a div b



Cociente entero de a por b



mod



Módulo



integer



a mod b



Resto de a por b





Conviene observar lo siguiente:




  1. Cuando los dos operandos sean del tipo integer, el resultado será de tipo integer.


  2. Cuando cualquiera de los dos operandos, o ambos, sean del tipo real, el resultado será de tipo real.


  3. Cuando, en la operación div, OPERANDO-1 y OPERANDO-2 tienen el mismo signo, se obtiene un resultado con signo positivo; si los operandos difieren en signo, el resultado es negativo y el truncamiento tiene lugar hacia el cero.



Ejemplos:



        7    div 3     = 2


        (-7) div (-3)  = 2 


        (-7) div 3     = -2


        7    div (-3)  = -2 


        15.0 div 3.0   = no válido


        15   div (4/2) = no válido


La operación div almacena sólo la parte entera del resultado, perdiéndose la parte fraccionaria (truncamiento).






  1. La operación MODULO está definida solamente para OPERANDO-2 positivo. El resultado se dará como el entero no negativo más pequeño que puede ser restado de OPERANDO-1 para obtener un múltiplo de OPERANDO-2 ; por ejemplo :



6     mod 3    = 0


   mod 3    = 1


(-6)  mod 3    = 0


(-7)  mod 3    = -1


(-5)  mod 3    = -2


(-15) mod (-7) = -1     


En la operaciones aritméticas, debe asegurarse que el resultado de sumar, restar o multiplicar dos valores, no produzca un resultado fuera de los rangos definidos por la implementación para los diferentes tipos.



2.- OPERADORES RACIONALES
















































Símbolo



Significado



=



IGUAL que



<>



NO IGUAL que



<



MENOR que



>



MAYOR que



<=



MENOR o IGUAL que



>=



MAYOR o IGUAL que





Ejemplos






































Relación



Resultado



20 = 11



false



15 < 20



true



PI > 3.14



true



'A' < 20



false



'A' = 65



true





3.- OPERADORES LOGICOS



NOT



Sintaxis : not operando



Descripción : Invierte el valor de verdad de operando.



AND



Sintaxis : operando.1 and operando.2



Descripción : Produce un resultado con valor de verdad true cuando ambos operandos tienen valor de verdad true; en cualquier otro caso el resultado tendrá un valor de verdad false.



OR



Sintaxis : operando.1 or operando.2



Descripción : Produce un resultado con valor de verdad false cuando ambos operadores tienen valores de verdad false; en cualquier otro caso el resultado tendrá un valor de verdad true.



Expresiones




































Precedencia de operadores



5



- (Menos unario)



4



not



3



* / div mod and shl shr



2



+ - or xor



1



= <> > < >= <=







Las reglas de evaluación para las expresiones son :




  1. Si todos los operadores en una expresión tienen la misma precedencia, la evaluación de las operaciones se realiza de izquierda a derecha.


  2. Cuando los operadores sean de diferentes precedencias, se evalúan primero las operaciones de más alta precedencia (en una base de izquierda a derecha ), luego se evalúan las de precedencia siguiente, y así sucesivamente.


  3. Las reglas 1) y 2) pueden ser anuladas por la inclusión de paréntesis en una expresión.



Ejemplos :



·  3 + 2*5   {*,+}


   4 + 10 =14


·  20*4 div


  {Igual prioridad de izquierda a derecha : *,div}


80     div 5 = 16


 


3 - 5 * (20+(6/2))


3 - 5 * (20+(6/2)) = 3 - 5 * (20 + 3)


{paréntesis más interno}


= 3 - 5 * 23 {segundo paréntesis}


= 3 - 115 {Multiplicación}


= -112 {resta}


 


VIII.INSTRUCCIONES DE ASIGNACION


 


numero     := 100 ;


importe    := precio * cantidad ; 


hipotenusa := sqrt(sqr(cateto_op)+sqr(cateto_ad ));


 


 


begin 


  suma  := 1000.0; 


  incr  := 20.0; 


  total := suma + incr 


  {Obsérvese la ausencia de punto y coma


   al final de la instrucción}


end. 


 


 


READLN y READ 


 


Var


  nombre   :string[30] ;


  edad     :integer;


  estatura :real;


    .


    .


    .


  ReadLn(nombre);


  ReadLn(edad);


  ReadLn(estatura);


WRITELN Y WRITE



Write  ('! HOLA ');


WriteLn('AMIGOS !'); 


Ejemplo



Valor:= 25.0776;










































































Sentencias



Resultados



Comentario



WriteLn (Valor);



2.5077600000E+01


 

WriteLn(Valor:2);



2.5E+01


 

WriteLn(Valor:2:1);



25.1



Notese el redondeo



WriteLn(Valor:2:4);



25.0776


 

WriteLn(Valor:2:8);



25.07760000


 

WriteLn('Tec':1);



Tec


 

WriteLn('Tec':3);



Tec


 

WriteLn('Tec':5);



_ _ Tec



Espacios vacios _





IX. IF-THEN-ELSE



Dado que una condición produce un valor verdadero o falso, se necesita una sentencia de control que ejecute determinada sentencia si la condición es verdadera , y otra si es falsa. En Pascal esta alternativa se realiza con la sentencia IF-THEN-ELSE. A continuación se describe el diagrama de flujo y el formato de la sentencia.



clip_image003[1]



Formatos de la sentencia IF:








if <condición>


  then


<instrucción_1>


  else


<instrucción_2>


if <condición> then


<instrucción_1>


  else


<instrucción_2>




En este caso, primero se evalúa condición y si el resultado arroja un valor de verdad(verdadero), se ejecuta instrucción_1 ; en caso contrario se ejecuta instrucción_2.



La condición es una expresión Booleana que puede ser verdadera o falsa (true o false). Una expresión Booleana se forma comparando valores de las expresiones utilizando operadores de relación (relacionales) o comparación y los operadores lógicos vistos anteriormente.



Ejemplos :



Sin ELSE


Program Edades;


Uses Crt;


Var


  edad : integer ;


begin


  WriteLn('Escribe tu edad : ');


  ReadLn(edad);


  if edad >= 18 then


     WriteLn('!Eres Mayor de edad !');


  WriteLn('Esta instrucción siempre se ejecuta');


  ReadKey


end.           


Con ELSE:



Program Edades;


Uses Crt;


Var


  edad : integer ;


begin


  WriteLn('Escribe tu edad : ') ;


  ReadLn(edad) ;


  if edad >= 18 then


    begin


      WriteLn('!Eres Mayor de edad !');


      WriteLn('!Ya puedes Votar!') 


    end


  else


    begin


      WriteLn('!Eres Menor de edad !');


      WriteLn('!Aún no puedes votar!')


    end;


  WriteLn('Esta instrucción siempre se ejecuta');


  ReadKey


end.