Hoy en día existen muchos lenguajes de programación orientados hacia diferentes plataformas, como son los lenguajes visuales, tales como Visual BASIC, Delphi®, Visual C®, Visual Dbase®, entre muchos más, y los Lenguajes no visuales, entre estos están Cobol®, BASIC, Turbo Pascal®, Clipper®, C®, etc. El hecho esta que la principal diferencia entre uno y el otro es, en qué plataforma tienen que correr, los lenguajes visuales su característica principal es, que tienen que correr bajo el ambiente Windows® y los otros pueden correr tanto en MS-DOS® y en Windows®.
En este curso nos enfocaremos hacia el Lenguaje de Programación Turbo Pascal, la versión que se recomienda a utilizar es la 7, ya que el editor es más "amigable" en el aspecto de aquellas persona que están comenzando a manejarlo y no saben cuales son todas las palabras reservadas, ya que estas se resaltan de color blanco, y las demás palabras se distinguen de color amarillo, reconociendo de manera inmediata cuales son las palabras reservadas y si en un caso se escribió mal la palabra reservada. otra de las ventajas fueron mejoras en algunas funciones, bueno dejando aclarado ya lo anterior, pasamos a lo siguiente.
Un momento pero ¿Qué es una palabra reservada? Las palabras reservadas son todas aquellas palabras que son de uso exclusivo para el compilador y no se pueden utilizar como variables. Como por ejemplo:
and | asm | array | begin | case | const |
constructor | destructor | div | do | downto | else |
end | exports | file | for | function | goto |
if | implementation | in | inherited | inline | interface |
label | library | mod | nil | not | object |
of | or | packed | procedure | program | record |
repeat | set | shl | shr | string | then |
to | type | unit | until | uses | var |
while | with | xor |
Es una localidad de memoria que puede almacenar un tipo de dato especifico.
Existen cinco tipos de datos básicos:
Integer
Char Boolean Real String |
Son
números enteros que no contienes decimales.
Solo puede almacenar caracteres del código ASCII Solo puede almacenar valores de falso o verdadero Son números que pueden incluir una parte decimal Es un tipo de dato que puede almacenar varios caracteres |
Turbo Pascal provee cinco ya predefinidos tipos de datos enteros, como se demuestra a continuación:
|
|
|
Shortint
Integer Longint Byte Word |
-128..127
-32768..32767 -2147483648..2147483647 0..255 0..65535 |
con signo 8-bit
con signo 16-bit con signo 32-bit con signo 8-bit con signo 16-bit |
Asimismo tiene 5 tipos de datos de punto flotante o en otras palabras, de decimales. Cada uno de los siguientes tipos tiene un rango especifico y precisión.
|
|
|
|
real
simple double Extended comp |
2.9e-39..1.7e38
1.5e-45..3.4e38 5.0e-324..1.7e308 3.4e-4932..1.1e4932 -9.2e18..9.2e18 |
11-12
7-8 15-16 19-20 19-20 |
6
4 8 10 8 |
En Pascal no existe la diferencia en escribir las variables o palabras reservadas en minúsculas o mayúsculas, ya que el compilador no le da importancia y las toma por igual, ahora en el caso del lenguaje "C", a este si le importa. Lo que sí se recomienda es que se adopte un estilo de programación, ya que al cambiar de lenguaje es muy difícil pero no imposible, romper con una costumbre.
programa Ejemplo;
uses crt;
var i:byte;
begin
Writeln(‘Esto es un ejemplo...’);
for i:=1 to 10 do
begin
If i mod 2= 0 then
begin
writeln(‘esto es un par...’);
writeln(‘ y estoy en el bloque del
if ‘)
end
else
begin
writeln(‘esto es un impar...’);
writeln(‘ estoy en el bloque del else
‘);
end;
end;
end.
Este es el mismo ejemplo con identación....
programa Ejemplo;
uses crt;
var i:byte;
begin
Writeln(‘Esto
es un ejemplo...’);
for
i:=1 to 10 do
begin
If i mod 2= 0 then
begin
writeln(‘esto es un par...’);
writeln(‘ y estoy en el bloque del if ‘)
end
else
begin
writeln(‘esto es un impar...’);
writeln(‘ y estoy en el bloque del else ‘);
end;
end;
end.
A simple vista uno se da cuenta cual de los dos programas es más fácil de entender y determinar que instrucciones están en determinado bloques...
Ya con estas dos recomendaciones, continuamos con conceptos básicos, lo que un principiante debe de conocer y saber distinguir.
Cuando uno es inexperto para programar nos surgen muchas dudas como declarar una variable en nuestro programa. Como antes mencionaba existen varios tipos de datos, pero por el momento nos enfocaremos a los cinco tipos principales. Para no crear confusiones y sea más sencillo utilizar los tipos. Existe una parte especifica donde las variables deben de ser declaradas, cabe destacar que no es como en Basic, si alguno de ustedes a manejado Basic o C, uno podía declarar las variables donde uno quisiera no importando en que lugar lo haríamos, en especial todas las variables que utilicemos en un programa, deben de estar ya previamente declaradas como tales. Al declarar las variables estas deben de contener ya sea letras y números o letras, no se aceptan variables que tengan caracteres especiales tales como :* , - , /, @, ¨ etc., ni espacios en blancos, otra cosa también que la primera letra de la palabra debe de ser una letra, en el caso que se quieran mezclar números y letras, ya que si colocan al principio de la declaración de la variable un número, se marcara error, por identificador no valido...
Ejemplos de variables:
La sintaxis de la declaración
de una variable es la siguiente:
Var
Identificador,
identificador..:tipo;
...
Identificador,
identificador..:tipo;
Un ejemplo de declaración de
una variable:
Programa ejemplo2;
Var dato1, dato2:integer;
Cadena:string;
Begin
{aquí
va el código}
End.
Ya declare ya tres variables, dos que son de tipo entero y una de tipo cadena de caracteres.
Supóngase que usted tiene que resolver un pequeño programa que haga la suma de dos números y imprima en pantalla su resultado:
Programa ejemplo2;
Uses crt;
Var dato1, dato2:integer;
Cadena:string;
Begin
Clrscr;
Write('Dame
dato A :');
Write('Dame
dato B :');
End.
Existen una cantidad de posibles errores
que suelen ocurrir ya sea en tiempo de compilación y en tiempo de
ejecución, que son los que detecta turbo Pascal, pero hay un tipo
de error que es el mate para cualquier programador y es el de tipo lógico,
que son los errores más difícil para detectar, ya que depende
de la habilidad del programador para evitarlos.
Por ejemplo: si se desea pasar esta ecuación a turbo Pascal
Z = A+B
C
Siendo los valores A=10, B=5 y C=5, el resultado de la formula, lógicamente debe de ser 3.
En lenguaje de Pascal quedaría de la siguiente manera:
Z:=A+B/C;
No existe ningún error que pueda detectar el compilador, ya que esta correctamente escrito, si procedemos a evaluar la quedaría así
Z=10+5/5
Z=10+1
Z=10
Si nos damos cuenta el resultado es erróneo y esto se debió a que se interpreto mal la formula, ya que no se respetaron las prioridades, es decir, la suma de A y B, debió de ser primero que la división de B y C, este es un ejemplo típico de errores lógicos, la formula correcta quedaría así:
Z:=(A+B)/C
Ahora la evaluamos:
Z=(10+5)/5
Z=(15)/5
Z=3
Los errores en tiempo de compilación son aquellos en los cuales, escribimos mal el código y este nos señala el tipo de error que es, como una falta de punto y coma, falta paréntesis, se esperaba un identificador, etc.
Errores en tiempo de compilación son:
|
|
|
1
2 3 4 5 6 7 8 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 112 113 114 116 117 118 119 121 122 123 124 126 127 128 129 130 131 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
Out of memory
Identifier expected Unknown identifier Duplicate identifier Syntax error Error in real constant Error in integer constant String constant exceeds line Unexpected end of file Line too long Type identifier expected Too many open files Invalid file name File not found Disk full Invalid compiler directive Too many files Undefined type in pointer def Variable identifier expected Error in type Structure too large Set base type out of range File components may not be files or objects Invalid string length Type mismatch Invalid subrange base type Lower bound greater than upper bound Ordinal type expected Integer constant expected Constant expected Integer or real constant expected Pointer Type identifier expected Invalid function result type Label identifier expected BEGIN expected END expected Integer expression expected Ordinal expression expected Boolean expression expected Operand types do not match Error in expression Illegal assignment Field identifier expected Object file too large Undefined external Invalid object file record Code segment too large Data segment too large DO expected Invalid PUBLIC definition Invalid EXTRN definition Too many EXTRN definitions OF expected INTERFACE expected Invalid relocatable reference THEN expected TO or DOWNTO expected Undefined forward Invalid typecast Division by zero Invalid file type Cannot read or write variables of this type Pointer variable expected String variable expected String expression expected Circular unit reference Unit name mismatch Unit version mismatch Internal stack overflow Unit file format error IMPLEMENTATION expected Constant and case types do not match Record or object variable expected Constant out of range File variable expected Pointer expression expected Integer or real expression expected Label not within current block Label already defined Undefined label in preceding statement part Invalid @ argument UNIT expected ; expected : expected , expected ( expected ) expected = expected := expected [ or "(." expected ] or ".)" expected . expected .. expected Too many variables Invalid FOR control variable Integer variable expected Files and procedure types are not allowed here String length mismatch Invalid ordering of fields String constant expected Integer or real variable expected Ordinal variable expected INLINE error Character expression expected Too many relocation items Overflow in arithmetic operation No enclosing FOR, WHILE or REPEAT statement Debug information table overflow CASE constant out of range Error in statement Cannot call an interrupt procedure Must be in 8087 mode to compile this Target address not found Include files are not allowed here No inherited methods are accessible here Invalid qualifier Invalid variable reference Too many symbols Statement part too large Files must be var parameters Too many conditional symbols Misplaced conditional directive ENDIF directive missing Error in initial conditional defines Header does not match previous definition Cannot evaluate this expression Expression incorrectly terminated Invalid format specifier Invalid indirect reference Structured variables are not allowed here Cannot evaluate without System unit Cannot access this symbol Invalid floating point operation Cannot compile overlays to memory Pointer or procedural variable expected Invalid procedure or function reference Cannot overlay this unit Too many nested scopes File access denied Object type expected Local object types are not allowed VIRTUAL expected Method identifier expected Virtual constructors are not allowed Constructor identifier expected Destructor identifier expected Fail only allowed within constructors Invalid combination of opcode and operands Memory reference expected Cannot add or subtract relocatable symbols Invalid register combination 286/287 instructions are not enabled Invalid symbol reference Code generation error ASM expected Duplicate dynamic method index Duplicate resource identifier Duplicate or invalid export index Procedure or function identifier expected Cannot export this symbol Duplicate export name Executable file header too large Too many segments |
No hay memoria
Se esperaba un identificador Identificador desconocido Identificador duplicado Error de sintaxis Error en constante real Error en constante entera La cadena excede la línea Falta fin de archivo Línea demasiado larga Tipo de identificador esperado Demasiados archivos abiertos Invalido nombre de archivo Archivo no encontrado Disco lleno Directiva de compilador invalida Demasiados archivos No definido tipo en puntero def Se esperaba un identificador Error en tipo Estructura demasiado larga Conjunto del tipo de base fuera de rango Componente archivo puede no ser archivos o objetos Cadena de ruta invalida Tipo no corresponde Invalido subrango en tipo base Limite menor más grande que él limite superior Tipo de ordinal se esperaba Se esperaba un entero Se esperaba una constante Se esperaba un entero o un real Se esperaba un identificador de tipo puntero Invalida función por el resultado del tipo Se esperaba un identificador de etiqueta Se esperaba un begin Se esperaba un end Se esperaba una expresión entera Se esperaba una expresión ordinal Se esperaba una expresión Boolean Tipos de operandos no coinciden Error en expresión Ilegal asignación Se esperaba un campo identificador Archivo objeto demasiado largo Indefinido externo Invalida registro de archivo objeto Codigo de segmento muy largo Segmento de dato muy largo Se esperaba un do Invalida definicion public Invalida definicion extrn Demasiados extrn definiciones Se esperaba of Se esperaba interface Invalida referencia Se esperaba un then Se esperaba un to o downto Indefinido forward Invalido el typecast División por cero Invalido tipo de archivo No puedo leer o escribir variables de este tipo Se esperaba una variable de tipo puntero Se esperaba una variable de tipo string Se esperava una expresión de tipo cadena Referencia circular a la unidad Nombre de la unidad no corresponde Version de la unidad no corresponde Sobrefujo de la pila interna Error formato de la unidad de archivo Se esperaba implementation Constantes y tipo de casos no coinciden Registro o variable objeto se esperaba Constante fuera de rango Se esperaba una variable de tipo archivo Se esperaba una expresión de tipo puntero Se esperaba una expresión real o entera Etiqueta no esta en bloque actual Etiqueta definida lista Indefinida etiqueta en precedida parte de declaracion Argumento @ invalida Se esperaba unit Se esperaba ";" Se esperaba ";" Se esperaba "," Se esperaba "(" Se esperaba ")" Se esperaba "=" Se esperaba ":=" Se esperaba "[" o "(" Se esperaba "]" o ")" Se esperaba "." Se esperaba ".." Demasiadas variabes Invalida variable para el for Se esperaba una variable entera Tipos de archivos y procedimientos no se alojan aquí Tamaño de cadena no coincide Invalido orden de campos Se esperaba constante cadena Se esperaba variable real o entera Se esperaba variable ordinal Error INLINE Se esperaba expresión carácter Demasiados items de relocación Sobrefuljo en operación matematica No esta cerrado el bucle For, Repeat o While Tabla de sobreflujo de información debug Constante de case fuera de rango Error en estatuto No puedo llamar una interrupción al procedimiento Debe estar en modo 8087 para compilarlo Objetivo de dirección no encontrado Archivos incluidos no estan alojados aquí No hay metodos heredados aquí Calificador invalido Invalida referencia a la variable Demasiados simbolos Parte de la declaración demasiada larga Archivo debe de tener parametros Muchos simbolos condicionales Colocada mal directiva de compilación Endif directiva buscada Error en condicional inicial definida Encabezado no coincide con la previa definicion No puedo evaluar esta expresión Expresión incorrectamente terminada Formato invalido especificado Invalida referencia indirecta Estructuras variables no pueden ser alojadas aquí No puedo evaluar sin unidad system No puedo accesar a este simbolo Invalida operación de punto flotante No puedo compilar overlays a memoria Variable puntero o procedural se esperaba Invalido procedimiento o referencia a funcion No puedo overlay esta unidad Demasiadas jeraquizaciones Acceso al archivo denegado Tipo de objeto esperado Tipo de objeto local no son alojados aquí Se esperaba virtual Se esperaba metodo identificador Constructores virtuales no son alojados aquí Se esperaba identificador constructor Se esperaba identificador destructor El fail son puede alojarse dentro de los constructores Invalida combinación de opcode y operandos Se esperaba referencia a memoria No puedo añadir o substraer simbolos relocalizables Combinación invalida de registros 286/287 instrucciones no estan disponibles Referencia invalida a simbolo Error en generación de codigo Se esperaba ASM Deplicado metodo dinamico index Duplicado identificador refuente Duplicado o invalido export index Identificador procedimiento o función se esperaba No puedo exportar este simbolo Nombre exportado duplicado Cabecera de archivo ejecutable muy larga Demasidados segmentos |
Estos son los errores en tiempo de ejecución:
|
|
|
1
2 3 4 5 6 12 15 16 17 18 100 101 102 103 104 105 106 150 151 152 154 156 157 158 159 160 161 162 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
Invalid function number
File not found Path not found Too many open files File access denied Invalid file handle Invalid file access code Invalid drive number Cannot remove current directory Cannot rename across drives No more files Disk read error Disk write error File not assigned File not open File not open for input File not open for output Invalid numeric format Disk is write-protected Bad drive request struct length Drive not ready CRC error in data Disk seek error Unknown media type Sector Not Found Printer out of paper Device write fault Device read fault Hardware failure Division by zero Range check error Stack overflow error Heap overflow error Invalid pointer operation Floating point overflow Floating point underflow Invalid floating point operation Overlay manager not installed Overlay file read error Object not initialized Call to abstract method Stream registration error Collection index out of range Collection overflow error Arithmetic overflow error General Protection fault |
Invalido numero de función
Archivo no encontrado Ruta no encontrada Demasiados archivos abiertos Accso al archivo denegado Manejo de archivo invalido Codigo de acceso mal al archivo Numero invalido de drive No puedo remover el directorio actual No puedo renombrar atravez de este mecanismo No mas archivos Error de lectura en disco Error de escritura en disco Archivo no asignado Archivo no abierto Archivo no abierto para introducir Archivo no abierto para salida Invalido formato numerico Disco esta protegido Mala longitud de la estructura de la petición Drive no listo Crc error en datos Error en busqueda de disco Desconocido tipo de media Sector no encontrado Impresora sin papel Dispositivo escribe incidente Dispositivo lee incidente Hardware fallando División por cero Error en chequeo de rango Error en sobreflujo de pila Error de sobreflujo en monton Inalida operación de puntero Sobreflujo en punto flotante Sobreflujo en capacidad inferior de punto flotante Invalida operación de punto flotante Manejador de overlay no instalado Error en lectura de archivo overlay Objeto no inicializado Llamada a metod abstracto Error en registracion de Stream Colección de indices fuera de rango Error de colección de sobreflujo Error en sobreflujo aritemtico Proteccion general en dispositivo |
En este momento estare trabajando en la proxima entrega, con más fundamentos de programación, desearia no llevarme mucho tiempo y tener para el jueves o viernes mas información, para ser colgada en esta pagina, desearia mucho tener una respuesta acerca de este curso y si hay interes para el aprendizaje de este tan bonito y preciado lenguaje.
Aquí les dejo un pseudocodigo, para que lo analizen y si lo pueden pasar a lenguaje Pascal, esta es una alternativa de muchas que hay...
Antes que nada declara las variables que se van a utilizar poco a poco van saliendo, ve colocando el nombre de la variable y con su tipo, es decir: TECLA ES UN CARÁCTER, etc...
A) Bueno lo primero que tienes que hacer es lo siguiente tener la lista de palabras cargadas en un archivo.
REPETIR
LEER
CADENA
AÑADIR
LA CADENA AL ARCHIVO
LEER
TECLA
HASTA TECLA= ‘N’
B) Despues leerlas y cargarlas si se te hace mas fácil en un arreglo de un tamaño adecuado para que entren las palabras que están en el archivo.
I ASIGNALE 0
MIENTRAS QUE NO SEA FIN DE ARCHIVO
INCREMENTA
I +1
LEER
CADENA DEL ARCHIVO
AÑADIR
LA CADENA AL ARREGLO[I]
END MIENTRAS
C) Ya que están cargadas en el arreglo determinar el orden en como quieres que se visualizen las palabras a descifrar, ya sea en ORDEN SECUENCIAL o en ORDEN ALEATORIO. Aquí ya viene lo bueno, la palabra se debe de colocar de la siguiente manera, para adivinarla.
Esta es la palabra clave
I N S T I T U T O
Y así se debe de desplegar en
pantalla
__ __ __ __ __ __ __ __ __
Tienes que determinar cuantos intentos se van a aceptar, te propongo que sean de 3 a 5 intentos.
REPETIR
INTENTOS
ASÍGNALE 5
NUM_INTENTOS
ASIGNALE 0
TOTAL
ASIGNALE 0
CADENA
ASIGNALE VECTOR[ALEATORIO(I)]
CADENA2
ASIGNALE CADENA
GANO
ASIGNALE VERDADERO
LIMPIA
PANTALLA
GOTOXY(2,1)
{ POSICIONA
EL CURSOR EN COLUMNA 2 Y FILA 1}
FOR
J ASIGNALE 1 HASTA EL TAMAÑO DE CADENA HACER
ESCRIBE (‘_ ’)
ENDFOR
REPEAT
ENCONTRADO ASIGNALE FALSE
ESCRIBE (‘Dame una letra’)
LEER (TECLA)
FOR J ASIGNALE 1 HASTA EL TAMAÑO DE CADENA HACER
SÍ (CADENA[J]=TECLA) Y (CADENA2[J] <> ‘@’) ENTONCES
ENCONTRADO ASIGNALE TRUE
TOTAL ASIGNALE TOTAL + 1
GOTOXY(J+1)
ESCRIBE (TECLA)
CADENA2[J] ASIGNALE ‘@‘
SI TOTAL= TAMAÑO DE CADENA ENTONCES
GANO=VERDADERO
END SI
END SI
SI ENCONTRADO = FALSE ENTONCES
NUM_INTENTOS ASIGNALE NUM_INTENTOS ENDSI
ENDFOR
HASTA
NUM_INTENTOS=5 Ó GANO=VERDADERO
SI
NUM_INTENTOS= 5 THEN
ESCRIBE(‘PERDISTES...’)
ESCRIBE (‘LA CADENA ERA ‘,CADENA)
ENDSI
ESCRIBE(‘DESEA
DE NUEVO JUGAR [S/N]:’)
LEER
TECLA
HASTA TECLA=’N’
Este paso es ya pasarlo a código
de Turbo Pascal o Quick Basic, si en algo no le entiendes mándame
un Email.
Las cadenas si te das cuenta las manejo como si fueran arreglos y la verdad son arreglos pero de caracteres... (se aceptan cualquier comentario o mejoras relacionado al curso...)