Contactos

Presentación Pascual. Fundamentos de programación en Pascal. Cálculo del logaritmo natural

PASCAL INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN 2006 ESTRUCTURA DEL CURSO Interfaz y definiciones principales; estructura del programa; mostrar información de texto; entrada de teclado; conexión y uso de módulos del sistema; trabajar con tipos de datos básicos (entero, real, cadena, matriz, archivo), trabajar con gráficos; uso de subrutinas (procedimientos y funciones); uso de módulos. 2 INTERFAZ DEL ENTORNO PASCAL El lenguaje de programación Turbo Pascal 7.0 está encerrado en una carcasa de herramientas. Incluye: un editor de texto de múltiples ventanas; enlazador de programas; depurador de programas; sistema de ayuda; compilador. 3 INTERFAZ PASCAL ENVIRONMENT 4 Lista de archivos abiertos: Alt + 0 Acceso rápido a archivos abiertos: Alt +<№ окна> DEFINICIONES BÁSICAS Una palabra reservada es una palabra especial utilizada por un lenguaje de programación para separar áreas lógicas de un programa. Un operador es un comando de lenguaje que realiza alguna acción (comprobar una condición, organizar un ciclo, etc.) Un identificador es un nombre elegido libremente por un programador para los elementos del programa. El tipo de dato es una característica de un identificador que define el conjunto de valores que puede tomar (números enteros o fraccionarios, cadenas de caracteres, expresiones lógicas, etc.). 5 ESTRUCTURA GENERAL DEL PROGRAMA Programa Program_name; Utiliza la sección de complementos; Sección de descripción de la etiqueta de las etiquetas; Sección const de la declaración de constantes; Sección de tipo que describe los tipos de datos nativos; Sección de declaración de variables Var; Inicio El cuerpo principal del programa; final. Código mínimo: 6 SALIDA DE PANTALLA Para mostrar información en pantalla se utilizan los siguientes operadores: Write o Writeln. F9 - Compilar + Verificar Ctrl+F9 - Ejecutar F9 → Ctrl+F9 - Evitar errores Mostrar los resultados de la ejecución del programa 7 SCREEN Resultado de las sentencias: WRITE Sentencia "vacía" WRITELN agrega una línea vacía WRITELN 8 EJERCICIO Muestra información en la pantalla como se muestra a continuación ¡Hola! ¡Me alegro de verte! llámame computadora. Material utilizado: Sentencias de salida: Write, WriteLn Operador "Vacío" WriteLn; inserta una cadena vacía. 9 CONEXIÓN DE MÓDULOS ADICIONALES Los módulos adicionales amplían las capacidades de sus programas mediante la introducción de operadores adicionales. Los módulos se conectan en la sección Usos. ProgramaMi; Utiliza Módulo1, Módulo2; ________________________ ________________________ ________________________ ____________________________ MÓDULO 1 Conjunto de recursos 1 … MÓDULO N Módulos: Conjunto de recursos propios del sistema N Borrado de la pantalla de texto Esperando que se presione una tecla Módulo conectado llamado CRT 10 SALIDA DE PANTALLA ALEATORIA GotoXY (X, Y: entero) Donde X, Y – familiaridad coordinar en la pantalla. X puede tomar valores de 1 a 80, e Y de 1 a 25. Por ejemplo: Program My_program; (Conexión del módulo) Utiliza Crt; Comenzar (Borrar pantalla) ClrScr; (salida de datos) GotoXY(1, 1); escribir("▒"); Ir a XY(80, 1); escribir("▒"); Ir aXY(1, 25); escribir("▒"); Ir a XY(80, 25); escribir("▒"); (retardo de pantalla) ReadKey; final. El programa muestra el símbolo “▒” (código 177) en las esquinas de la pantalla. 11 SALIDA EN COLOR TextColor (Color); Especifica el color de los caracteres. Fondo de texto (color); Especifica el color de la familiaridad. ProgramaMiPrograma; Utiliza crt; Comenzar TextColor (Rojo); Fondo de texto (azul); Escribir("Fuera"); Color de texto (blanco); Escribir("hierba, "); Color de texto (verde); Fondo de texto (amarillo); Escribir("sobre la hierba"); Fondo de texto (Magenta); Escribir("leña. "); Fin. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Colores Negro Azul Verde Cian Rojo Magenta Marrón LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White 12 – negro – azul – verde – cian – rojo – lila - marrón - gris claro - gris oscuro - azul - verde claro - cian claro - rosa - lila claro - amarillo - blanco VALORES Operaciones de datos IDENTIFICADORES El término identificador se aplica a constantes, variables, funciones, procedimientos, componentes y otros definidos por el usuario objetos Caracteres permitidos: letras latinas, números, guión bajo Restricciones: no debe comenzar con un dígito, pero puede comenzar con un guión bajo No puede tener varias palabras No puede coincidir con ninguna de las palabras clave Los identificadores no distinguen entre mayúsculas y minúsculas . Identificadores incorrectos: Datos Mi nombre 2Array Var ( ( ( (se usan caracteres rusos) Hay un espacio) Comienza con un número) Coincide con la palabra clave) números, cadenas de caracteres, expresiones lógicas, etc.). 16 TIPO DE DATOS ENTEROS 17 Conjunto finito de valores posibles tipo byte shortint palabra entero longint range 0..255 -128..127 0..65535 -32768..32767 -2147483648..2147483647 ! ¡Fuera de rango da como resultado un error! tamaño DECLARACIÓN DE VARIABLES Una variable es un identificador capaz de almacenar algún valor (un número, una cadena, etc.) y cambiarlo durante la operación del programa. Sintaxis: Var<имя переменной> : <тип переменной>; Programa nombre_programa; Utiliza la sección de complementos; Sección de declaración de variables Var; Inicio El cuerpo principal del programa; final. Espacio reservado en la memoria de la computadora para 3 variables 18 AJUSTE DE VALORES A LAS VARIABLES Para establecer el valor de una variable, debe usar el operador de asignación: = Sintaxis del registro:<Переменная> := <Значение>; El valor 3 se ingresa en la variable (entero) denominada A 19 OPERACIONES CON VARIABLES ENTERAS 20 Operaciones aritméticas: + - * / Operaciones estándar: div | modificación | sqr No se puede usar con tipos enteros Una variable llamada S se establece en la suma de los valores almacenados en las variables X e Y El valor almacenado en una variable llamada S se muestra en la pantalla EJERCICIO 21 1. Escriba un programa que muestre el resultado de multiplicar los números 15 y 20 2. Escribir un programa que muestre el valor de la función f 2 x 3 y , cuando x=11, y=3 Material utilizado: Las variables se declaran en la sección Var El tipo entero se llama Entero La sintaxis para asignar un valor a una variable es:<Переменная> := <Значение> ; Se coloca un letrero después de cada operador; (excepto inicio y fin último) TIPO DE DATO REAL Conjunto de valores √ √ Tipo ordinal Tipo real Compatibilidad unidireccional: Real Integer Real! ¡Fuera de rango y el incumplimiento de las reglas de compatibilidad conduce a un error! 22 OPERACIONES CON VARIABLES REALES 23 Operaciones estándar: pi | cuadrado | pecado | Porque | abdominales | exp | Ronda Ln | Trunc (real → entero) Por ejemplo (X, S – Tipo real): X:= pi/3; S:= Sin(X) * 100; Escribir (Redondo (S)); La relación de los valores almacenados en las variables X e Y se ingresa en una variable llamada S. La posición del número y la cantidad de caracteres en la parte fraccionaria del número E indica la potencia del número. 5.6E-5 = 5.6·10-5 TIPO DE DATOS DE CADENA 24 Las cadenas son un conjunto ordenado de caracteres. Las cadenas se encierran entre apóstrofes. Las cadenas no son compatibles con tipos enteros y reales. Tipo Rango Cadena 255 caracteres ( operadores de cadena básicos ) + ( concatenación ) Longitud (S); (longitud de la cadena) Por ejemplo: X:= 'Vasya'; Write('En tu nombre', Longitud(X), 'lit.'); S:=X; X:=S; EJERCICIO Escriba un programa que muestre el resultado de dividir los números 12.89 y 0.22 con solo tres dígitos significativos después del punto decimal, en el siguiente formato: primer número dividido por el segundo número = resultado Escriba (X:1:3, ' razdelit na ' , y:1 :3, ' = ' z:1:3) Material utilizado: El tipo de cadena se denomina Cadena Las cadenas se encierran entre postrófos Las cadenas se concatenan con un signo + En la declaración de visualización, los diferentes tipos se separan con una coma 25 TECLADO ENTRADA 26 Para ingresar información desde el teclado, debe utilizar el operador de entrada: Read o ReadLn. Sintaxis: Leer (N1, N2, ... Nn); Donde N1, N2, ... Nn son variables (entero, real, cadena) En la variable X se ingresa el valor ingresado desde el teclado, luego de ingresar el valor se debe presionar la tecla Enter, si existen varias variables en el operador, se ingresan a través de un espacio o presionando una tecla Enter EJERCICIO 27 1. Escriba un programa de mini calculadora que calcule la suma de dos números ingresados ​​​​desde el teclado. 2. Escriba un programa que le pregunte su nombre y, después de escribir su nombre, muestre un saludo. Por ejemplo, si ingresó el nombre Vanya, el programa mostrará la frase: ¡Hola, Vanya! Material utilizado: Operadores de entrada: Read, ReadLn OPERADORES OPERADOR CONDICIONAL 29 El operador condicional implementa "branching", es decir cambia el orden de ejecución de los operadores dependiendo de la verdad o falsedad de alguna condición. Comprobación de condiciones NO Acción 1 Iré a la playa Está lloviendo SI Acción 2 Cogeré un paraguas Acción 3 Iré al cine COMPROBAR CONDICIONES Operaciones de comparación: > - más< - меньше = - равно >= - mayor o igual<= - меньше или равно <>- no igual a 30 Operaciones lógicas: No Y O - No -Y - O Por ejemplo: Si Mi altura > la altura de Petya, Entonces soy más alto que Petya Si (está lloviendo) O (está nevando), Entonces me quedaré en casa Si no ((está lloviendo) Y (viento)), entonces voy a dar un paseo Cuando se usan operaciones lógicas, las condiciones se encierran entre paréntesis SINTAXIS DEL OPERADOR CONDICIONAL Forma abreviada: Si<условие>luego<оператор>; Por ejemplo, si el valor en la variable X es menor que 0, entonces el valor 1 se escribe en la misma variable: Si X<0 Then X:= 1; Полная форма: If <условие>luego<оператор_1>demás<оператор_2>; Por ejemplo: Si X>5 Entonces X:= X - 1 Si no X:= X + 1; Solo se puede usar un operador después de las palabras Entonces y Si no Antes de la palabra Si no, firmar; falta 31 EJERCICIO 32 1. Escriba un programa que reciba una cantidad de entrada en dólares y una cantidad en euros, y luego muestre en qué moneda la cantidad es mayor (1 dólar = 28 rublos, 1 euro = 35 rublos) 2. Escriba un programa , que toma tres números como entrada y luego muestra el máximo de ellos. Material utilizado: Formas del operador condicional: If<условие>Luego<оператор>; Si<условие>Luego<оператор_1>Demás<оператор_2>; Antes de firmar Else; no establecido Operaciones de comparación: >< = <> >= <= Логические операции: Not Or And ОПЕРАТОРНЫЕ СКОБКИ Если после слов Then или Else необходимо записать несколько операторов, то их заключают в операторные скобки (составной оператор). Операторные скобки начинаются словом Begin, а заканчиваются словом End; Например: If Z >0 Entonces comienza X:= 1; Y:= -1; WriteLn('Información aceptada'); End Else WriteLn('Error'); 33 OPERADOR DE SELECCIÓN DE CASO La declaración de elección se utiliza para reemplazar construcciones de declaraciones condicionales anidadas. Sintaxis de notación de casos<порядковая_переменная>de<значение_1> : <оператор_1> ; <значение_2> : <оператор_2> ; ……… <значение_N> : <оператор_N>Demás<оператор_N+1>; final; Puede usar paréntesis en la instrucción select Cadena opcional 34 SELECT STATEMENT CASE Caso Estatura del estudiante de 16 a 30: Usted es un estudiante de escuela primaria; 31,32,33: Estás en la clase 5-6; 34..50: Eres un estudiante de secundaria Se usa una coma para enumerar valores, dos puntos se usan para seleccionar un rango De lo contrario, claramente no eres un estudiante; final; Caso x de -128..-1: writeln('Negativo'); 0: writeln('Nil'); 1..127: writeln('Positivo') Else WriteLn('Fuera de rango'); final; 35 EJERCICIO Escribe un programa que, dado un número, muestre el día de la semana correspondiente. Por ejemplo, ingrese el número 2, el programa debería generar 'Martes'. Si el número está fuera de 1..7, se debe mostrar un mensaje de que no existe tal día. Material utilizado: Operador de selección: Caso<порядковая_переменная>de<значение_1> : <оператор_1> ; ……… <значение_N> : <оператор_N>; Demás<оператор_N+1>; final; 36 CICLOS 37 Se denominan cíclicos los algoritmos en los que la ejecución de unos operadores se realiza repetidamente con los mismos datos modificados (por ejemplo, el procedimiento de multiplicación de números mediante su suma múltiple). Hay tres operadores de bucle en Pascal: For (bucle con un parámetro o para un número dado de repeticiones) Mientras (BUCEO MIENTRAS) Repetir (BUCEO ANTES) Si se conoce el número de repeticiones, entonces es mejor usar el operador de bucle con un parámetro BUCLE CON PARÁMETRO 38 Bucle para un número específico de repeticiones con valor de parámetro creciente o decreciente For (param) := (start_value) To (end_value) Do (operator) ; Cuerpo del bucle Comentarios El parámetro es un tipo entero; Puede usar corchetes de operador en un bucle; No puede cambiar el parámetro de bucle en el cuerpo del bucle; El parámetro de ciclo se incrementa en uno; Valor inicial > valor final; de lo contrario, se ignora el cuerpo del ciclo; Para disminuir el parámetro, en lugar de To, use DownTo. BUCLE CON PARÁMETRO 39 Escriba un programa que solicite números enteros (a, b), donde a := <нач_зн>Para<кон_зн>Hacer<оператор>; El parámetro es de tipo entero (generalmente Integer); Puede usar corchetes de operador en un bucle; El parámetro del bucle se incrementa en 1. 40 BUCLE WHILE El bucle Mientras primero prueba la condición, y sólo si es verdadera ejecuta el cuerpo del bucle. while (condición) do (sentencia); En el cuerpo del código escrito a continuación, el bucle nunca se ejecutará: x:=1; Mientras x>1 hacer x:=x-1; Puedes obtener un bucle infinito. Por ejemplo: x:=1 Mientras que x>0 do x:=x+1; 41 WHILE LOOP Un programa que muestra la suma de números de a a b. Mientras no se presione ninguna tecla, comience Delay(2000); final; El bucle se ejecuta hasta que la variable cambiante f se vuelve mayor que el valor b 42 EJERCICIO 43 1. Los astronautas decidieron plantar abedules en la luna, y cada año para duplicar el número de abedules, en el primer año plantaron 3 abedules. Imprima en la pantalla en cuántos años el número de abedules superará los 10 000. 2. Escriba un programa que determine el máximo de los números ingresados ​​​​desde el teclado (la entrada del número termina con el número 0). A continuación se muestra un diseño de pantalla recomendado: Introducir números. Ingrese 0 para completar la entrada 89 15 0 El número máximo es 89. Material utilizado: Mientras Instrucción de bucle: Mientras<условие>hacer<оператор>; El ciclo While primero prueba la condición y solo si es verdadera ejecuta el cuerpo principal del ciclo. REPEAT LOOP 44 El bucle Repeat primero ejecuta el cuerpo del bucle y sólo entonces comprueba la condición Repetir (cuerpo_del_bucle) Hasta (condición); No hay necesidad de usar una declaración compuesta en el bucle de repetición, porque esta construcción prevé la ejecución no de una, sino de varias sentencias encerradas entre las palabras Repetir y Hasta. REPEAT LOOP ("Hasta entonces") Un programa que muestra la suma de números de a a b. El bucle se ejecuta hasta que la variable cambiante f se vuelve mayor que el valor b 45 COMPARACIÓN DE BUCLES For While Repetir 46 La elección del modelo de bucle depende únicamente de la conveniencia de su uso en una situación particular. Casi siempre podemos usar otro tipo de ciclo en lugar de uno EJERCICIO Calcular el valor de la función y x 3 x 2 16 x 43 para x variando en el rango de -4 a 4 inclusive con un paso de 0.5. Material utilizado: Declaración de bucle Repetir: Repetir<тело_цикла>Hasta que<условие>El ciclo Repetir primero ejecuta el cuerpo del ciclo, y solo entonces verifica la condición. 47 INTERRUPCIÓN DE CICLOS 48 Los procedimientos se utilizan para el control flexible de los operadores cíclicos: Interrumpir - salir del ciclo; Continuar: finalización del siguiente paso del ciclo; Ejemplos: Encuentre el número mínimo i para el cual la suma de los números del 1 al i es mayor que 100. Tan pronto como s (la suma de los números del 1 al i) sea mayor que 100, se activa la instrucción break y el ciclo sale . s:=0; para I:= 1 a 100 comience si s>100 luego interrumpa; s:= s + yo; final; Writeln ('número mínimo i tal que (1+2+..+i)>100 es igual a ',i); Se ingresan 10 números desde el teclado y la suma de solo números positivos se considera en el bucle. Si el número es negativo, entonces se ejecuta la instrucción continuar, que inicia el siguiente paso del bucle. s:=0; para I:= 1 a 10 comience Readln(k); si k<0 then Сontinue; s:= s + k; end; Writeln (‘Сумма положительных чисел равна ’,s); МАССИВЫ МАССИВЫ 50 Простые типы: одна переменная – одно значение Структурированные типы: одна переменная – несколько значений Массив – это фиксированное количество значений одного типа. Доступ к конкретному значению осуществляется через индекс. Переменная массива Структура массива: A= Доступ к массиву: 0 1 2 3 Индекс 9 7 0 0 Значения <Имя массива> [ <Индекс>] A := 7; ARRAYS Una matriz se declara en la sección Var: (Nombre) : Array [ (start_value) .. (end_value) ] of (type) ; Ejemplos de declaraciones de matrices: Var A: matriz de cadenas; B: Arreglo de Reales; C: matriz de enteros; Ejemplos de cómo llenar arreglos con valores: A:='Vasya'; A:='Petia'; A:='Masha'; A:='Olesia'; Escribe un); Para f:=1 a 10 hacer C[f] := f*2; Para f:=1 a 10 haga WriteLn(C[f]); 51 EJERCICIO 52 Escriba un programa que solicite al usuario 7 enteros y los almacene en una matriz. La matriz contiene el elemento máximo y se muestra en la pantalla. Por ejemplo: Introduzca el primer número: 4 Introduzca el segundo número: 8 Introduzca el tercer número: 9 Introduzca el cuarto número: 2 Introduzca el quinto número: 4 Introduzca el sexto número: 5 Introduzca el séptimo número: 0 Número máximo: 9 Material utilizado: Declaraciones de matrices:<Имя>:Formación[<нач_зн> … <кон_зн>] de<тип>; Acceso a la matriz:<Имя массива> [ <Индекс>] GENERADOR DE NÚMEROS ALEATORIOS (RNG) Para generar números aleatorios en el programa se utilizan los siguientes operadores: Randomize – Inicialización de RNG. Se declara solo al comienzo del programa; Aleatorio: genera un número aleatorio de 0 a 1 (tipo real); Aleatorio (N): genera un número aleatorio de 0 a N-1 (tipo entero); 53 ARREGLOS MULTIDIMENSIONALES 54 Lista de intervalos para cada dimensión del arreglo (Nombre) : Array [ (start_value) .. (end_value) , (start_value) .. (end_value) , (etc) ] of (type) ; Un ejemplo de declaración de una matriz bidimensional (matriz, tabla) con 4 filas y 6 columnas: Var A: matriz de enteros; Un ejemplo de cómo llenar una matriz: For i:=1 to 4 do For j:=1 to 6 do A := i+j; Ai , j 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8 6 7 8 9 7 8 9 10 EJERCICIO Escriba un programa que llene una matriz bidimensional con números aleatorios de -10 a 20 e imprima la suma de los elementos situados a lo largo de la diagonal de la mesa. Material utilizado: Inicialización RNG: Aleatorizar Número aleatorio de 0 a N-1: Aleatorio (N) 55 TRABAJO CON ARCHIVOS TRABAJO CON ARCHIVOS 57 [correo electrónico protegido]$ku⌂|"Hd9v*9(L*M=BYGRMxduB █ 8e*BOtCDrTVzHGJ1aBD>@B\(r8sE) █ :wcJvAmRa"v/.Wai;$`SWI=y2]suB █ ?Hq>vF(LmBcV^Adz4P4 .6b]o(Qk²8 █ cu<6`8Z":M^1;:8ANwak;,b2-4…u5 █ 2]suB?Hq>vF(LmBcAdz4wcP]o(Qk █ 8c8df]e"v,su>+),VAEFÁjFV,W$Q- █ y0G1GjN$-eÁ|sqZ0`QnВ%\BD%y █ █ █ - terminador de línea █ - archivo terminador Variable Creación, lectura, escritura, cierre TRABAJO CON ARCHIVOS La secuencia de acciones cuando se trabaja con archivos: 1. Declarar una variable de archivo (FP) 2. Asociar un FP a un archivo 3. Abrir un archivo para lectura/escritura 4. Operaciones con archivo 5. Cierre del expediente (se rompe también la conexión entre el expediente y el FP) 1. Declaración del FP<Имя>: Archivo de<тип> ; <Имя>:texto; Varf: Texto; h: Archivo de Entero; 2. Asociación de la FP con el archivo Assign (<ФП>, <имя файла>); Asignar (f, 'c:\my\Data.ghm') 58 TRABAJAR CON ARCHIVOS 3. Abrir un archivo para lectura/escritura Restablecer (<ФП>); - abre el archivo para leer Rewrite (<ФП>); - abre el archivo para escribir 4. Operaciones con el archivo Leer (<ФП>, <П1> , <П2>, …); - lee en variables<П1>, <П2>etc un elemento en la posición del puntero. Escribe(<ФП> , <П1> , <П2>, …); - escribe los valores de las variables en el archivo<П1>, <П2>etc un elemento en la posición del puntero. EoLn(<ФП>); - devuelve True si se ha llegado al final de la cadena. EoF(<ФП>); - devuelve True si se ha llegado al final del archivo. 5. Cerrar el archivo Cerrar (<ФП>); 59 TRABAJO CON ARCHIVOS Simplifica el programa si sabes que la matriz es 5x5 (usa el bucle For) 60 EJERCICIO 61 Escribe el programa "DOM-3". El primer archivo contiene los nombres de los participantes en el caso nominativo. En el segundo, los mismos nombres, pero en acusativo. En el tercero, una lista de expresiones de sentimientos o algún tipo de acción (ama, no ama, besa, quiere morder, ama, respeta, odia, quiere ver, abraza). El programa debe tomar aleatoriamente información de estos archivos y crear uno nuevo de acuerdo con el siguiente principio:<имя в им. пад> <чувство/действие> <имя в вин. пад> Olga ama a Sergey Oleg quiere ver a Roman Katya respeta a Nastya Etc. Material utilizado: Nombre de los operadores: Asignar, Reescribir, Restablecer, Escribir, Leer, Cerrar. GRÁFICOS GRÁFICOS Para trabajar con gráficos en Pascal, se necesitan dos archivos: el módulo graph.tpu y el controlador del adaptador gráfico egavga.bgi. El primero está en el directorio \UNITS y el segundo está en \BGI. ! controlador egavga.bgi. ¡Requerido cuando se ejecuta un archivo exe! Para dibujar, necesita: 1. conectar el módulo GRAPH (en la sección Usos); 2. inicializar gráficos (InitGraph); 3. dibujar algo; 4. cerrar el modo gráfico (CloseGraph) 63 GRÁFICOS Inicialización del modo gráfico Dibujar una línea. El bolígrafo va del punto (0,0) al punto (639, 479). PROGRAMA Cartilla_1; Utilice Gráfico, crt; VarGd,Gm: Entero; COMENZAR Gd:=0; InitGraph (Gd,Gm,'d:\BP\bgi"); Línea (0,0,639,479); ReadKey; CloseGraph; END. 639 px. Sistema de coordenadas 479 px. triángulo 2. Dibuja un rectángulo en el centro de la pantalla con lados dos veces más pequeños que los lados correspondientes de la pantalla Material utilizado: Módulo de gráficos: Graph Inicialización de gráficos: InitGraph Modo gráfico de cierre: CloseGraph;GRAPHICS + COLOR SetColor(Color: word); Establece el color del lápiz GetColor: word; Devuelve el color del lápiz SetBkColor(color: palabra); Establece el color de fondo GetBkColor: palabra; Devuelve el color de fondo Colores Negro Azul Verde Cian Rojo Magenta Marrón LightGray DarkGray LightBlue LightGreen LightCyan LightRed LightMagenta Yellow White 66 - negro - azul - verde - cian – rojo – lila – marrón – gris claro – gris oscuro – azul cielo – verde claro – cian claro – rosa – lila claro – amarillo – blanco PRIMIDADES GRÁFICAS Línea (x, y); Dibuja una línea desde la coordenada actual de la pluma hasta las coordenadas (x, y). MoveTo(x, y); Establece la pluma en las coordenadas (x, y). PutPixel(x, y, Color); Dibuja un punto en las coordenadas (x,y) con Color. GetPixel(x, y): palabra; Devuelve el color del punto en las coordenadas (x,y). Rectángulo(x1, y1, x2, y2); Dibuja el contorno de un rectángulo. Círculo (x, y, r); Dibuja un círculo con centro en (x,y) y radio r. SetLineStyle (Ln, 0, T) Cambia los parámetros de los contornos. Ln - estilo de línea (0..3): 67 x1, y1 T - grosor de línea: 1 = normal; 3 = grueso. RellenarElipse(x, y, xr, yr); Dibuja una elipse rellena centrada en (x,y) con radios Xr e Yr. EstablecerEstiloRelleno(Tipo, Color); Establece el tipo (0..11) y el color del sombreado de las formas cerradas ClearDevice; Borra la pantalla gráfica pintándola con el color de fondo actual x2, y2 PRIMIDADES GRÁFICAS 68 EJERCICIO 69 1. Escriba un programa que dibuje una casa en la pantalla del monitor; 2. Escriba un programa que dibuje un cielo estrellado en la pantalla del monitor con estrellas de radio aleatorio (de 1 a 5 píxeles) y ubicación aleatoria. El color también es aleatorio (blanco, gris claro, gris oscuro); Material utilizado: SetColor (Color: palabra); - Establece el color del dibujo SetBkColor (color: palabra); - Establece el color de fondo actual. línea (x, y); - Dibuja una línea desde la coordenada actual de la pluma hasta las coordenadas (x,y). MoveTo(x, y); - Establece la pluma en las coordenadas (x,y). PutPixel(x, y, Color); - Dibuja un punto con coordenadas (x,y) con Color. Rectángulo(x1, y1, x2, y2); - Construye un contorno de rectángulo a partir de líneas del color actual. Círculo (x, y, r); - Dibuja un círculo con centro en (x,y) y radio r. RellenarElipse(x, y, xr, yr); - Dibuja una elipse rellena centrada en (x,y) con radios Xr e Yr. GRÁFICOS + ANIMACIÓN Pausa en mseg. 70 SUBPROGRAMAS SUBPROGRAMAS Las subrutinas le permiten seleccionar una parte repetitiva del código en fragmentos separados e insertarlos en los lugares necesarios del programa. Una función, a diferencia de un procedimiento, devuelve el resultado de la llamada. Procedimientos Funciones Subrutinas: se escriben entre las palabras clave Begin End; se identifican por nombres, que se escriben de acuerdo con las reglas para especificar identificadores; puede tener parámetros de entrada y salida; repetir completamente la estructura del programa principal. 72 Programa Mi; Subrutina 1 [Código de subrutina 1] Subrutina 2 [Código de subrutina 2] Comenzar Subrutina 2 Subrutina 1 Ejemplo de rutinas del sistema: Write("OK"); ClrScr; Longitud (S); aleatorio; // // // // procedimiento con un parámetro procedimiento sin parámetros función con un parámetro función sin parámetros Subrutina 2 Fin. SUBPROGRAMAS (SPR) Anidamiento de subprogramas Programa Subprograma 1 Subprograma 3 Subprograma 4 Subprograma 2 . Los nombres de las variables descritas en la DEP pueden ser los mismos que los nombres de las variables de otras DEP (se puede declarar la misma variable en cada una de las DEP). El nombre de una variable, descrito en el PPR, filtra las variables del mismo nombre del PPR que encierra al dado (si se declaran las mismas variables en el PPR1 y PPR3, entonces estas variables serán únicas en cada PPR). Las variables de programa se denominan globales y las variables de subprograma se denominan locales. PROCEDIMIENTOS SIN PARÁMETROS Sintaxis del registro: Procedimiento (nombre del procedimiento); (Sección de variables, constantes, tipos, etiquetas, módulos) Begin (Cuerpo del procedimiento); final; Ejemplo de uso de un procedimiento sin parámetros: 74 PROCEDIMIENTOS SIN PARÁMETROS Ejemplo de escape de variables del mismo nombre: Programa Mi_programa; Utiliza crt; varA:cadena; // Descripción del procedimiento Procedimiento My_Procedure; varA:cadena; Begin A:= "Subrutina"; escribir en (A); final; Empezar A:= "Cuerpo"; escribir en (A); mi_procedimiento; escribir en (A); final. // Llamada a procedimiento 75 PROCEDIMIENTOS CON PARÁMETROS 76 Para que las subrutinas sean más universales, se utilizan mecanismos especiales para el intercambio de datos entre el programa y sus subrutinas. Procedimientos del sistema con parámetros: SetColor (Rojo); ( Procedimiento con Rectangle (0, 0, 639, 479); ( Procedimiento con InitGraph (Gd,Gm,'d:\BP\bgi"); ( Procedimiento con ( parámetros un parámetro ) varios parámetros ) varios tipos diferentes ) ) Grabación procedimientos de sintaxis con parámetros Procedimiento (Nombre) ((Área de variables de entrada) Var (Área de variables de salida (cada variable tiene su propio Var))); Estructura de áreas: Variable_1, Variable_2, …: Tipo; .. ......... ............. Variable_N-1, Variable_N, ... : Tipo, cualquiera de las regiones puede estar ausente PROCEDIMIENTOS CON PARÁMETROS Uso de parámetros de entrada Procedimiento para dibujar un rectángulo que bordea la pantalla, color especificado Sin parámetros Con parámetros Procedimiento Cir; Begin SetColor (i); SetBkColor (b); Rectangle (0, 0, 639, 479); End; Procedimiento Cir (i, b:Integer); Begin SetColor (i); SetBkColor (b); Rectangle (0, 0, 639, 479); End; Llamada a un procedimiento en un programa: Llamada a un procedimiento en un programa: i:=6; b:=12; Cir; Cir (6, 12);77 PROCEDIMIENTOS CON PARÁMETROS Uso de parámetros de salida de un Procedimiento ra de convertir un ángulo de grados a radianes. PROGRAMA EX_26_3; VAR x,a: real; PROCEDIMIENTO Rad(alfa: real; var betta: real); (variable de salida) BEGIN Betta:= pi*alfa/180; FINAL; BEGIN Write("Ingrese el ángulo en grados: "); readln(x); Rad(x, a); (Llamada a procedimiento) Writeln("Es igual al ángulo en radianes = ",a:6:4); FINAL. 78 EJERCICIO 79 1. Escribe un procedimiento para dibujar un triángulo en el siguiente formato: Triángulo (x1,y1, x2,y2, x3,y3, Color) 2. Escribe un procedimiento para calcular el área de un rectángulo en el siguiente formato: SRect (a, b, S) donde S es el parámetro de salida del procedimiento. Material utilizado: Procedimiento (Nombre) ((Área variable de entrada) Var (Área variable de salida)); Estructura de área: Variable_1, Variable_2, … : Tipo; ........................ Variable_N-1, Variable_N, … : Tipo; FUNCIONES 80 Sintaxis de la función Función ((Área de variables de entrada) Var (Área de variables de salida)): (Tipo) ; Diseño de procedimientos Diseño de funciones Procedimiento S(a,b:real; var s:real); Comienzo s:= a+b; final; Función Suma(a,b: real): real; Comienzo Suma:= a+b; final; Llamada de procedimiento Llamada de función S(10, 20, A); Escribe un); R:= S(10, 20); EscribirLN(A); EscribirLN (S(20, 30)); Es recomendable diseñar alguna subrutina como función sólo si se espera algún resultado de su trabajo. Si una subrutina está enfocada únicamente a realizar una determinada secuencia de acciones (mostrar, dibujar, etc.), es mejor organizarla como un procedimiento. EJERCICIO Escriba una función para calcular el área de un rectángulo en el siguiente formato: SRect (a, b) Material utilizado: Función (Nombre) ((Variable de entrada área) Var (Variable de salida área)): (Tipo); Estructura de área: Variable_1, Variable_2, … : Tipo; ........................ Variable_N-1, Variable_N, … : Tipo; 81 MÓDULOS MÓDULOS 83 Una unidad (UNIT) es una unidad de programa independiente cuyos recursos (procedimientos y funciones) pueden ser utilizados por otros programas. ProgramaMi1; Utiliza Módulo1, Módulo2; __________________________ __________________________ ________________________________ __________________ MÓDULO 1 Kit de recursos 1 … Program My2; Utiliza Módulo1, Módulo2; __________________________ __________________________ ________________________________ __________________ MÓDULO N Conjunto de recursos N Los módulos se conectan al programa a través de la sección USOS DE MÓDULOS. ESTRUCTURA 84 El módulo consta de las siguientes partes: 1. Cabecera del módulo. 2. Parte de la interfaz. (descripciones de objetos visibles) 3. Parte de implementación. (descripciones de objetos ocultos) 4. Parte de inicialización (opcional). Unidad (nombre del módulo); Interfaz (Sección de variables globales, constantes, tipos) (Módulos) (Lista de encabezados de procedimientos y funciones) Implementación (Sección de variables locales, constantes, tipos) (Implementación de procedimientos y funciones) Begin (Parte de inicialización) End. ! ¡El nombre del encabezado del módulo debe coincidir con el nombre del archivo del módulo! MÓDULOS Ejemplo de módulo: Unidad Mi_Unidad; Interfaz Varms: Matriz de Real; ( Matriz global ) Función Cub(x:integer):Integer; (Función Cub = x^3) Función ext4(x:integer):Integer; ( Función ext4 = x^4 ) Función de implementación Cub(x:integer):Integer; (Implementación de la función Cub) Begin Cub:= x*x*x; final; Función Ext4(x:entero):Entero; (Implementación de la función ext4) Begin Ext4:= x*x*x*x; final; final. 85 EJERCICIO 86 Escriba un módulo con una función y un procedimiento: ( Función cálculo X1=1/x ) X1(a:real):real; ( El procedimiento para imprimir la palabra S en la pantalla, en la posición X, Y WriteXY(S: String; X, Y: Iteger); Material utilizado (estructura del módulo): Unidad (Nombre del módulo); Interfaz ( Sección de variables globales, constantes, tipos) (módulos) (Lista de encabezados de procedimientos y funciones) Implementación (Sección de variables locales, constantes, tipos) (Implementación de procedimientos y funciones) Begin (Parte de inicialización) End.)

Tema de la lección: "Ciclos (repetición) en programas"

1) Repetir y consolidar el conocimiento de la elaboración de programas de ramificación lineales; 2) Aprenda a escribir programas usando un operador cíclico - FOR i:=1 TO n DO Begin sentencias (cuerpo del bucle) end ; 3) Aplicar operadores en la resolución de problemas típicos. El propósito de la lección:

Falta insertar: Program Sql; Var A, B, C, D, XI, X2: ??? ; Begin Writeln ("Ingrese los coeficientes de la ecuación cuadrática '); Readln (???); D:=B*B-4*A*C; Si D

Preguntas al grupo: 1) ¿Cuál es la diferencia entre programas ramificados y lineales? 2) ¿Con la ayuda de qué operadores se realiza la elección en los programas? 3) comienzo….fin - ¿Qué es? ¿Cuáles son las reglas para usar el programa?

1) operadores de E/S; 2) operadores de elección; 3) a:=a+3 - ¿qué pasará? 4) Listar tipos de datos; 5) Eliminar AND, OR, END, NOT, IF innecesarios; 6); - ¿Qué significa eso? 7) ¿Cómo se marca el final del programa? 8) Haz una lista de las operaciones aritméticas. 9) ¿Cuánto es 120 mod 65 = ? 10) Declaraciones de bucle.

Organizar en consecuencia: 1. Lectura 2. Fin 3. Inicio 4. Número entero 5. ; 6. Si... Entonces 7. := 8. Entrar 9. Terminar 10. Números enteros 11. Asignar 12. Siguiente acción 13.Iniciar 14.Si...entonces

¿El resultado es menor que 3? a:= 7 b:= - 10 a:=a*(- 7) b:=159 a:=b+a

Encuentra 5 errores en el programa: Program krug ; VAR Pi, r, S: real; Pi:=3.14, WRITELN('vvedite radiuc r='), READ(r); S=Pi*r*r; ESCRIBIR('Ploshad kruga S= ', S) fin

círculo de programa; VAR Pi, r, S: real; begin Pi:=3.14 , WRITELN('vvedite radiuc r=') , READ(r); S:=Pi*r*r; ESCRIBIR('Ploshad kruga S= ', S) fin.

Tarea №1 Dado un número entero N , determinar si es par o impar. 2, 4, 6, ... son pares, porque dividido sin resto por 2(N mod 2 =0) 1, 3, 7, ... - impar, porque dividido por 2 con resto 1(N mod 2 =1)

Algoritmo Algoritmo Chislo; var N: números enteros; iniciar salida ('vvedite chislo') ; Entrada (N) ; IF N mod 2 = 0 T O Salida (N, '- chetnoe'); IF N mod 2 =1 A O Salida(N,'- nechetnoe'); el fin.

Tarea № 2 Dado un número entero de dos dígitos N (DE), donde D - el número de decenas, E - unidades. Determina si la suma de los dígitos de este número será 10. Ejemplo: el 28 tendrá la suma S=2+8=10, pero el 27 no tendrá S=2+7=9 Contaremos las decenas: D = N div 10 , y unidades: E= N mod 10

Algoritmo Algoritmo Chislo; vars N,E,D,S: enteros; iniciar salida ('vvedite chislo') ; Entrada (N) ; E:=N módulo 10; D:=N división 10; S:=E+D; IF S = 10 T O Output('summa= 10') De lo contrario ('summa10'); el fin.

Definición: Programas en los que el mismo tipo de acciones se repiten muchas veces - programas cíclicos (con repetición).

Tarea: Dados 100 números naturales del 1 al 100 (1,2,3, ... 99,100) Calcular su suma y salida a la variable S.

Algoritmo de suma; Variable i,S: enteros; Inicio S:=0; Para i:=1 a 100 repetir Inicio S:= S + i cuerpo Fin; ciclo Conclusión (S) Fin.

suma del programa; VAR i , S: entero; ComienzoS:=0; FOR i:=1 TO 100 DO begin S:=S+i body end; final del bucle WRITE(S).

suma del programa; VAR i , S: entero; ComienzoS:=0; PARA i:=1 A 100 COMIENZA S:=S+i ; cuerpo WRITE('S', i, '=', s) del final del ciclo; final.

El cuerpo del ciclo son las mismas acciones que deben repetirse muchas veces. Encerramos el cuerpo del ciclo entre paréntesis del operador begin…..end;

ALT + F9 - corregir errores CTRL + F9 - ejecutar el programa ALT + F5 - ver el resultado

Tarea: 1) Muestre la columna de la tabla de multiplicar de cualquier número entero N por números del 1 al 10. Ejemplo: N \u003d 5, entonces la columna será así: 1*5=5 2*5=10 3*5 =15 i * N = P , donde i cambia de …… .. 1…10 10*5=50

Tarea: comentario sobre el programa para la tarea "Sobre la columna de la tabla de multiplicar"

¡GRACIAS POR LA ATENCIÓN!

  1. 1 pascual
  2. 2. Pascal Pascal fue desarrollado por el científico suizo Niklaus Wirth. Pascal se considera la herramienta más importante para enseñar métodos de programación estructurada y desde 1983 se ha introducido en el plan de estudios de las escuelas para estudiantes que se especializan en informática. En el futuro, el lenguaje Pascal fue mejorado y adquirió nuevas propiedades que son diferentes a la versión del autor.
  3. 3. Pascal es relativamente fácil de aprender, bastante claro y lógico, y siendo el primer lenguaje de programación en aprender, enseña buen estilo.
  4. 4. Al igual que los lenguajes naturales, cada lenguaje de programación tiene su propio estilo y reglas. La sintaxis de un lenguaje de programación es un conjunto de reglas que determinan cómo construir programas correctos a partir de los caracteres del alfabeto.
  5. 5. Alfabeto pascual 26 minúsculas latinas y 26 mayúsculas latinas: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z guión bajo _ 10 dígitos: 0 1 2 3 4 5 6 7 8 9 signos de operación: + - * / =<> < > <= >= := @ delimitadores (separadores): . , " () (. .) ( ) (* *) .. : ; especificadores: ^ # $
  6. 6. Estructura del programa (1. encabezado del programa) program Program_Name; (2. sección para especificar módulos usados) uses List_of_Used_Modules; (3. Sección de descripción) label Label_Descriptions; const Descripciones_Consts; escriba TipoDescripciones; var Variable_Descripciones; procedimiento Descripciones_de_procedimientos_y_funciones; función exporta Descripciones de_Nombres_Exportados; (4. Sección de declaraciones) comienzan las declaraciones terminan.
  7. 7. Estructura simplificada del programa (1. encabezado del programa) program Program_Name; (2. sección para especificar módulos usados) uses List_of_Used_Modules; (3. Sección Descripciones) const Descriptions_Consts; var Variable_Descripciones; (4. Sección de declaraciones) comienzan Las declaraciones del programa terminan.
  8. 8. Los comandos del lenguaje de programación se llaman operadores El separador de operadores en Pascal es; (punto y coma)
  9. 9. Un comentario es un fragmento de texto del programa, delimitado por símbolos ( ). Los comentarios en el programa realizan una función informativa. (Mi primer programa) programa primero; begin writeln('¡Hola, mundo!') end.
  10. 10. Ejemplo: perímetro del programa del perímetro del rectángulo; (encabezado del programa) usa crt; (crt - necesario para borrar la pantalla) var a,b:integer; (declaración de variable) P:entero; Begin (inicio del programa) clrscr; (pantalla clara) a:=12; (asignamos el valor 12 a la variable a) b:=7; (asignamos el valor 7 a la variable b) P:=2*(a+b); (el valor de la expresión se asigna a P) write("P = ",P); (mostrar el valor de P) fin. (fin del programa)
  11. 11. El programa en su trabajo trata con datos. Algunos datos se configuran antes de que comience el programa, y ​​después de que comienza, conservan sus valores invariables durante toda la duración del programa. Estas son constantes. Otros datos pueden cambiar durante la ejecución del programa. Se llaman variables.
  12. 12.  La diferencia entre una variable y una constante es bastante obvia: durante la ejecución de un programa, se puede cambiar el valor de una variable, pero no el de una constante. variablesvariables constantesconstantes datosdatos
  13. 13. Por una variable, nos referimos a una celda ("caja") donde una computadora puede escribir ("agregar") datos. Por celda, en realidad queremos decir una "pieza de memoria" que almacena información. Para utilizar la información almacenada en una celda, cada celda debe tener su propio nombre o, como suele decirse, un identificador. a b suma 5 3 8
  14. 14. Identificadores. Los nombres (identificadores) son los elementos del lenguaje - constantes, etiquetas, tipos, variables, procedimientos, funciones, módulos, objetos.  Un identificador es una secuencia de letras, números y guiones bajos que comienza con una letra o guión bajo y no contiene espacios.
  15. 15. El nombre puede contener cualquier número de caracteres, pero 63 caracteres son significativos.  No se permite el uso de palabras de función y nombres estándar como nombres en el lenguaje PASCAL, que se utilizan para nombrar constantes estándar, tipos, procedimientos, funciones y archivos.  Ejemplos de nombres de lenguaje PASCAL: A b12 r1m SIGMA gamma I80_86
  16. 16. En Pascal, se ignora la diferencia entre letras minúsculas y mayúsculas, por lo que los nombres NaMe y name son iguales.
  17. 17. Palabra funcional es una palabra que en el lenguaje PASCAL tiene un significado semántico determinado que no se puede cambiar. A veces se le llama palabra clave.
  18. 18. Palabras de servicio (reservadas): EXPORTACIONES ABSOLUTAS CONJUNTO DE BIBLIOTECA ENSAMBLADOR MOD EXTERNA SHL Y NOMBRE FAR SHR ARRAY ARCHIVO NIL CADENA ASM PARA CERCA ENTONCES ENSAMBLADOR ADELANTE NO COMENZAR FUNCIÓN TIPO DE OBJETO CASO IR A UNIDAD CONST SI O HASTA CONSTRUCTOR IMPLEMENTACIÓN EMPAQUETADO UTILIZA DESTRUCTOR EN PRIVADO VAR DIV ÍNDICE PROCEDIMIENTO VIRTUAL DO PROGRAMA HEREDADO MIENTRAS ABAJO EN LÍNEA PÚBLICO CON ELSE INTERFAZ REGISTRO XOR FIN INTERRUPCIÓN REPETIR EXPORTACIÓN ETIQUETA RESIDENTE
  19. 19. No se pueden utilizar espacios dentro de caracteres dobles y palabras reservadas. Hay nombres que se llaman estándar. sin cos real true A diferencia de las palabras de función, el programador puede redefinir el significado de los nombres estándar.
  20. 20. Esta es una indicación al compilador de cuánta memoria reservar para las variables de nuestro programa.  En el programa compilado, a todas las variables se les asigna espacio en la memoria y a todas las variables se les asignan valores cero. Todas las variables utilizadas en el programa deben declararse en la sección de declaración de variables después de la palabra reservada var. Declaración de variables
  21. 21. Hay diferentes tipos de datos...
  22. 22. Tipos de datos Los nombres de los tipos estándar son identificadores predefinidos y son válidos en cualquier punto del programa. Se describen en el módulo Sistema estándar, que se incluye en la lista de módulos utilizados por defecto. Los tipos definidos por el usuario son tipos adicionales (simples y estructurados) declarados por el usuario.
  23. 23. Tipos de datos estándar 1. grupo de tipos enteros (Shortint, Integer, Longint, Byte, Word); 2. grupo de tipos reales (Single, Real, Double, Extended, Comp); 3. lógicos (tipos booleanos) (Boolean, ByteBool, WordBool, LongBool); 4. carácter (Carácter); 5. cuerda (Cadena); 6. índice (Puntero); 7. tipo de texto (Texto).
  24. 24. Grupo de tipos enteros Tipo nombre Tipo rango de valores memoria requerida Entero corto con signo Shortint -128 .. 127 1 byte Entero con signo Entero -32768 .. 32767 2 bytes Entero largo con signo Entero largo -2147483648 .. 2147483647 4 bytes Corto sin signo entero Byte 0 .. 255 1 byte Entero sin signo Palabra 0 .. 65535 2 bytes
  25. 25 Varb: byte; summa, cuenta: entero; Declarando variables de tipo entero summa:= -365; Utilizar
  26. 26. Los números en PASCAL generalmente se escriben en notación decimal. Se puede omitir el signo positivo del número. Los números enteros se escriben en forma sin punto decimal, por ejemplo: 217 -45 8954 +483
  27. 27. El grupo de tipos reales define los datos que se implementan mediante un subconjunto de números reales. Var A: real; empezar... A:=0.65; … final.
  28. 28. Nombre del tipo Tipo Rango de valores Número de dígitos de la mantisa Tamaño (bytes) Número real de precisión simple Real 2.9e-39 .. 1.7e+38 11 6 Número real Simple 1.5e-45 .. 3.4e+ 38 7 4 Número real de doble precisión Doble 5.0e-324 .. 1.7e+308 15 8 Precisión extendida Número real extendido 3.4e-4932 .. 1.1e+4932 19 10 Comp Real Entero -9.2e+18 .. 9.2e +18 19 8
  29. 29. Los números reales se escriben en forma con punto decimal o en forma usando el orden decimal, que se representa con la letra E: 28.6 0.65 -0.018 4.0 5E12 -1.72E9 73.1E-16
  30. 30. El tipo de dato booleano corresponde al identificador booleano. Las variables booleanas tienen un tamaño de 1 byte y pueden contener valores VERDADERO o FALSO. El valor FALSO corresponde a 0, cualquier número distinto de cero se considera VERDADERO. Botón Var, indicador: booleano; Botón de inicio:=verdadero;
  31. 31. El tipo de carácter corresponde al identificador estándar Char. Las variables y constantes de tipo carácter pueden tomar valores de un conjunto de caracteres de código ASCII. Var símbolo, bukva, z: char; Declaración de variables simbólicas
  32. 32. El tipo de cadena corresponde al identificador estándar Cadena. VarS: Cadena; (cadena de 0 a 255 caracteres) S2: Cadena; (cadena de 5 caracteres)
  33. 33. Una cadena de caracteres es una secuencia de caracteres del conjunto de caracteres ASCII entre comillas simples. Las cadenas en PASCAL son una secuencia de caracteres escritos entre apóstrofes. Si es necesario usar el apóstrofe como un carácter significativo en una cadena, se deben escribir dos apóstrofes. Ejemplos de cadenas: "STRING" "STRING" "AD" "UTANT"
  34. El tipo de carácter, así como los tipos enteros y booleanos, se denominan tipos ordinales.  El conjunto de valores válidos de cualquier tipo ordinal es una secuencia ordenada, cada elemento del cual tiene su propio número ordinal (a partir de 0).
  35. 35. La función Ord devuelve el número ordinal de este valor en la declaración de tipo. Ord(2)=2, Ord('0')=48 Writeln(ord('e')); WriteIn(ord('9'));
  36. 36. Tabla de codificación ASCII ASCII (Código estándar estadounidense para el intercambio de información; pronunciado "asci") es una codificación informática para representar el alfabeto latino, números arábigos, algunos signos de puntuación y caracteres de control. Fue presentado por el American Standards Institute ANSI.

diapositiva 1

LENGUAJE DE PROGRAMACIÓN PASCAL Bogdanov Vladimir Presentaciones gratuitas http://prezentacija.biz/

diapositiva 3

El lenguaje Pascal fue creado por Niklaus Wirth en 1968-1969 después de su participación en el trabajo del comité de desarrollo de estándares del lenguaje Algol-68. El lenguaje lleva el nombre del matemático, físico, escritor y filósofo francés Blaise Pascal, quien creó la primera máquina mecánica del mundo que suma dos números. La primera publicación de Wirth sobre el lenguaje data de 1970, presentando el lenguaje, el autor indicó como objetivo de su creación: la construcción de un lenguaje pequeño y eficiente que promueva un buen estilo de programación utilizando programación estructurada y datos estructurados. El trabajo posterior de Wirth tuvo como objetivo crear un lenguaje de programación de sistemas basado en Pascal, manteniendo la capacidad de realizar un curso sistemático y holístico de capacitación en programación profesional sobre esta base. El resultado de este trabajo es el lenguaje Modula-2.

diapositiva 4

UCSD Pascal Artículo principal: UCSD Pascal En 1978, el UCSD p-System fue desarrollado en la Universidad de California en San Diego, que incluía un puerto del compilador Wirth del lenguaje Pascal en código p portátil, un editor de código fuente, un sistema de archivos, etc., y también implementó una cantidad importante de extensiones del lenguaje Pascal, como módulos, cadenas de caracteres de longitud variable, directivas de traducción, manejo de errores de E/S, acceso a archivos por nombre y más. Posteriormente, las principales implementaciones del lenguaje Pascal se basaron en este dialecto.

diapositiva 5

Object Pascal] Artículo principal: Object Pascal En 1986, Apple desarrolló una extensión de objeto para el lenguaje Pascal, dando como resultado Object Pascal. Fue desarrollado por el grupo de Larry Tesler, quien consultó con Niklaus Wirth.

diapositiva 6

En 1983, apareció la primera versión del entorno de desarrollo integrado Turbo Pascal de Borland, basado en la implementación de Pascal del mismo nombre. En 1989, se agregó una extensión de lenguaje de objetos a Turbo Pascal versión 5.5. La última versión (7.0) ha sido renombrada a Borland Pascal. Las funciones de objetos se tomaron prestadas de Object Pascal de Apple y hay muy pocas diferencias de idioma entre Object Turbo Pascal 5.5 y Object Pascal de Apple. Casi al mismo tiempo que Borland, Microsoft lanzó su versión del lenguaje orientado a objetos Pascal y] Esta versión de Pascal no se usó mucho. Un mayor desarrollo de la implementación de Pascal de Borland dio lugar a la variante Object Pascal de Borland, más tarde, en el curso del desarrollo del entorno de programación Delphi, que recibió el mismo nombre.

Diapositiva 7

Un paso importante en el desarrollo del lenguaje es la aparición de implementaciones gratuitas de Pascal l y GNU Pascl, que no solo absorbieron las características de muchos otros dialectos del lenguaje, sino que también aseguraron una portabilidad extremadamente amplia de los programas escritos en él (por ejemplo , GNU Pascal admite más de 20 plataformas diferentes, bajo más de 10 sistemas operativos diferentes, Free Pascal proporciona modos especiales de compatibilidad con varios dialectos comunes del lenguaje, como Turbo Pascal (compatibilidad total), Delphi y otros). Desde Delphi 2003, se ha creado una implementación de lenguaje para la plataforma Net, aunque los desarrolladores continúan usando Delphi desde versiones anteriores. Poco se sabe actualmente sobre el desarrollo comercial en Free Pascal, GNU Pascal y TMT Pascal. Además, la Universidad Federal del Sur ha desarrollado PascalABC.NET, el lenguaje de programación Pascal, que incluye la mayoría de las funciones del lenguaje Delphi, así como varias extensiones propias. Se basa en la plataforma Microsoft.NT y contiene casi todas las características del lenguaje moderno: clases, sobrecarga de operadores, interfaces, manejo de excepciones, clases y subrutinas genéricas, recolección de basura, expresiones lambda.

Diapositiva 8

Las características del lenguaje son la tipificación estricta y la disponibilidad de herramientas de programación estructural (procedimiento). Pascal fue uno de los primeros lenguajes de este tipo. Según Wirth, el lenguaje debe contribuir a una programación disciplinada, por lo tanto, junto con una escritura fuerte, las posibles ambigüedades sintácticas se minimizan en Pascal, y el autor trató de hacer que la sintaxis en sí fuera intuitiva incluso en el primer contacto con el lenguaje.

Diapositiva 9

Sin embargo, inicialmente el lenguaje tenía una serie de limitaciones: la imposibilidad de pasar matrices de longitud variable a funciones, la falta de medios normales para trabajar con memoria dinámica, una biblioteca de E / S limitada, la falta de medios para conectar funciones escritas en otros lenguajes, la falta de herramientas de compilación separadas, etc. Brian Kernighan llevó a cabo un análisis detallado de las deficiencias del lenguaje Pascal de esa época en el artículo "Por qué Pascal no es mi lenguaje de programación favorito" (este artículo apareció a principios de 1980, cuando el lenguaje Modula-2, descendiente de Pascal, se liberó de la mayoría de sus defectos, y también dialectos más desarrollados de Pascal). Algunas deficiencias de Pascal se corrigieron en el estándar ISO de 1982, en particular, aparecieron matrices abiertas en el lenguaje, lo que hizo posible utilizar los mismos procedimientos para procesar matrices unidimensionales de varios tamaños.

diapositiva 10

Sin embargo, muchas de las carencias del lenguaje no aparecen o incluso se convierten en ventajas a la hora de aprender a programar. Además, en comparación con el principal lenguaje de programación en el entorno académico de la década de 1970 (que era Fortran, que tenía inconvenientes mucho más importantes), Pascal representó un importante paso adelante. En la década de 1980, Pascal se convirtió en la base de numerosos programas educativos, en algunos casos, se crearon lenguajes de programación de enseñanza especializados sobre esta base, por ejemplo, a principios de la década de 1980 en la URSS, Andrei Ershov desarrolló un lenguaje similar a Algol-Pascal. para enseñar a los escolares los conceptos básicos de informática y tecnología informática. "aprendizaje del lenguaje algorítmico".

diapositiva 11

La implementación más famosa de Pascal, que aseguró la amplia distribución y el desarrollo del lenguaje, es Turbo Pascal de Borland, que luego se convirtió en el objeto Pascal para DOS (comenzando con la versión 5.5) y Windows y más adelante en Delphi, en el que se incorporaron importantes extensiones del lenguaje. introducido. Los dialectos de Pascal utilizados en Turbo Pascal para DOS y Delphi para Windows se hicieron populares debido a la falta de otras implementaciones comerciales exitosas.

diapositiva 12

Después de que comenzó el uso de Pascal en 1970, y la aparición de implementaciones que diferían no solo en las adiciones, sino también en la sintaxis, se planteó la cuestión de estandarizar el lenguaje. El estándar de idioma fue desarrollado por Niklaus Wirth en 1974 con Kathleen Jensen. Posteriormente se adoptaron la norma internacional de ISO y la americana de ANSI. Por el momento, hay tres estándares fundamentalmente diferentes: Unextended Pascal (original), Extended Pascal (extendido), Object-Oriented Extensions to Pascal (extensión de Pascal orientada a objetos).

diapositiva 13

diapositiva 14

Construcciones de sintaxis y lenguaje Pascal, en su forma original, es un lenguaje puramente procedimental e incluye muchas estructuras y construcciones similares a Algol con palabras reservadas como si, entonces, más, mientras, para, etc. Sin embargo, Pascal también contiene una gran cantidad de funciones para estructurar información y abstracciones que no estaban presentes en el Algol-60 original, como definiciones de tipos, registros, punteros, enumeraciones y conjuntos. Estas construcciones fueron parcialmente heredadas o inspiradas en los lenguajes Simula-67, Algol-64, creados por Niklaus Wirth AlgolW (inglés) ruso. y sugerido por Hoare. En los dialectos modernos (Free Pascal), están disponibles operaciones como la sobrecarga de operadores y funciones.

diapositiva 15

programa p; comenzar fin. El programa no hace nada y contiene un bloque vacío de sentencias. Un ejemplo de un programa que imprime la cadena "¡Hola, mundo!":

diapositiva 16

begin writeln("¡Hola, mundo!"); (operador de salida de línea) fin.

diapositiva 17

diapositiva 18

diapositiva 19

diapositiva 20

En Pascal, las operaciones bit a bit están permitidas en tipos enteros (byte, shortint, word, integer, longint y sus rangos). Operaciones lógicas sobre bits: Las operaciones lógicas discutidas anteriormente se pueden realizar sobre los bits de dos operandos enteros: not, and, or, xor. La diferencia entre las operaciones bit a bit y lógicas es que las operaciones bit a bit (bit a bit) se realizan en bits individuales de los operandos, y no en su valor en representación decimal (normalmente). Se distingue el concepto de tipos de datos ordinales (ordinales), estos incluyen tipos enteros (con y sin signo), lógicos (booleanos), de carácter (char), tipos enumerados y tipos de rango. Los tipos ordinales se especifican mediante un número entero (código), que se puede obtener mediante la función ord. Todas las operaciones realizadas sobre tipos ordinales se realizan sobre sus códigos.

diapositiva 21

diapositiva 22

Para tipos ordinales, las operaciones inc, dec, succ, pred, ord, operaciones de comparación (=>

diapositiva 23

diapositiva 24

diapositiva 25

En Pascal de Jensen y Wirth, las cadenas se representaban como conjuntos empaquetados de caracteres; por lo tanto, tenían una longitud fija y, por lo general, estaban acolchados hasta esa longitud con espacios. En Pascal moderno, para trabajar con cadenas, se usa el tipo incorporado cadena, que admite concatenación (+) y comparación (> =

diapositiva 26

El tipo cadena [n] o simplemente cadena en los dialectos del idioma de los años 1970-1990 se definía como una matriz de caracteres matriz de caracteres (n por defecto era 80 en UCSD Pascal y 255 en Turbo/Borland Pascal), el carácter nulo El código en esta representación sirve para establecer la longitud de la cadena, respectivamente, la cadena podría tener un tamaño máximo de 255 caracteres. De forma predeterminada, en Delphi y FreePascal, el tipo AnsiString se usa como una cadena, cuya memoria es asignada y liberada dinámicamente por el compilador, y el tamaño máximo de cadena en las implementaciones actuales es de 2 gigabytes. Además, en Delphi y Free Pascal, el tipo WideString se puede usar como una cadena, donde se usa una representación de caracteres de 16 bits en codificación UCS-2, mientras que no hay herramientas para convertir cadenas de un solo byte a cadenas multibyte. y de vuelta en la biblioteca estándar del idioma.

diapositiva 27

Se pueden definir nuevos tipos a partir de los existentes: type (sección de declaración de tipos) x = Integer; y=x;

diapositiva 28

Además, los tipos compuestos se pueden construir a partir de tipos primitivos: tipo (sección de declaración de tipos) a = Array of Integer; (definición de matriz) b = registro (definición de registro) x: entero; y: carbón; final; c = Archivo de a; (definición de archivo)

diapositiva 29

Los tipos de archivo en Pascal se dividen en tipo, texto y archivos sin tipos. Como se muestra en el ejemplo anterior, los archivos escritos en Pascal son secuencias de elementos del mismo tipo. Para cada archivo, hay una variable de puntero de búfer, denotada por f^. Los procedimientos get (para leer) y put (para escribir) mueven el puntero al siguiente elemento. La lectura se implementa para que read(f, x) sea lo mismo que get(f); x:=f^. En consecuencia, la escritura se implementa de tal manera que write(f, x) es lo mismo que f^ := x; poner (f). Los archivos de texto text se definen como una extensión del archivo de tipo char y, además de las operaciones estándar en archivos tipeados (leer, escribir un carácter), permiten la entrada y salida de caracteres a un archivo de todos los tipos de datos, similar a la entrada de consola. producción.

diapositiva 30

Los archivos sin tipos se declaran como variables de tipo archivo. Con ellos, es posible realizar operaciones de E / S sin tipo byte a byte para varios bloques de bytes de una longitud específica a través de un búfer; para esto, se utilizan procedimientos especiales de lectura y escritura en bloque (extensión UCSD).

diapositiva 31

diapositiva 32

diapositiva 33

diapositiva 34

diapositiva 35

Punteros Pascal admite el uso de punteros (tipo ^tipo y puntero sin tipo): tipo a = ^b; b = registro x: Entero; y: carbón; z:a; final; var puntero_a_b:a;

diapositiva 36

Aquí, la variable pointer_to_b es un puntero al tipo de datos b, que es un registro. El tipo de un puntero con tipo se puede especificar antes de la declaración del tipo al que se refiere. Esta es una excepción a la regla de que cualquier cosa debe declararse antes de que pueda usarse. La introducción de esta excepción hizo posible organizar definiciones recurrentes de estructuras de datos, incluidas listas lineales, pilas y colas, incluido un puntero a una entrada en la descripción de esta entrada (ver también: puntero nulo - nil). Un puntero escrito tiene una operación de desreferencia (su sintaxis: puntero^). Para crear una nueva entrada y asignar el valor 10 y el carácter A a los campos x e y, se requieren las siguientes declaraciones:

Diapositiva 37

nuevo(puntero_a_b); (asignación de puntero) pointer_to_b^.x:= 10; ( desreferencia de puntero y acceso a campo de registro ) pointer_to_b^.y:= "A"; puntero_a_b^.z:= nil; ... disponer (puntero_a_b); (liberando memoria debajo del puntero)

diapositiva 38

También puede usar la declaración with para hacer referencia a campos en registros y objetos, como se muestra en el ejemplo: new(pointer_to_b); con pointer_to_b^ empieza x:= 10; y:= "A"; z:= final nulo; ... disponer (puntero_a_b);

Diapositiva 39

Tipo procedimental En el lenguaje original de Pascal Jensen y Wirth, el tipo procedimental se usaba solo cuando se describía un parámetro formal. Ya en TP había un tipo procesal completo. La declaración de tipo contiene el encabezado de un procedimiento o función (sin nombre), que generalmente describe la interfaz de la subrutina. Un valor de este tipo contiene un puntero a una subrutina con un título correspondiente al declarado en la declaración de tipo. Se puede usar un identificador de variable para llamar al procedimiento o función apropiados.

diapositiva 40

Pascal es un lenguaje de programación estructurado, lo que significa que un programa consta de declaraciones estándar individuales que se ejecutan secuencialmente, idealmente sin el uso del comando GOTO.

diapositiva 41

En las declaraciones while, for, if, case, un bloque se puede usar como una declaración ejecutada. Tal construcción, que es un enunciado o bloque ordinario, se denomina enunciado complejo. En Turbo Pascal, para controlar el proceso de compilación, existen directivas que se colocan en los comentarios y le permiten cambiar los modos de operación del compilador, por ejemplo, habilitar y deshabilitar las comprobaciones de operaciones de E/S, desbordamientos:

diapositiva 42

En Pascal, las subrutinas se dividen en procedimientos y funciones: sintácticamente, los procedimientos y funciones constan de un encabezado (que contiene la palabra clave procedimiento o función, un nombre que puede ir seguido de una descripción de los parámetros pasados ​​entre paréntesis, un tipo de retorno, separados por un carácter de dos puntos para funciones y un punto y coma para procedimientos), el encabezado va seguido del cuerpo seguido del carácter ;.

diapositiva 43

El cuerpo de un procedimiento, como un programa, puede a su vez contener descripciones de procedimientos y funciones. Por lo tanto, los procedimientos y las funciones se pueden anidar entre sí tan profundamente como se desee, mientras que el cuerpo del programa es el más alto de la cadena. Además, en su interior están disponibles los contenidos de los apartados de descripción de variables, tipos, constantes, cuerpo externo (procedimientos, funciones, programas) ubicados antes de la descripción del procedimiento/función. Además, en la mayoría de los dialectos, puede acceder a los parámetros de un procedimiento externo desde un procedimiento. Después del encabezado de procedimientos/funciones, en lugar del cuerpo, se puede colocar la palabra clave de avance, esto se hace si la descripción del procedimiento/función se encuentra en el programa después de su llamada y está asociada con la posibilidad de compilar el programa. en un solo paso soportado en Pascal. Los procedimientos se diferencian de las funciones en que las funciones devuelven un valor, mientras que los procedimientos no.

diapositiva 44

Antes de la llegada de los módulos vinculados en su forma moderna, algunas implementaciones de Pascal admitían la modularidad a través de un mecanismo para incluir archivos de encabezado, similar al mecanismo #include en C: usando una directiva especial formateada como pragma, por ejemplo, ($INCLUDE " file"), el contenido del archivo especificado se incluyó directamente en el texto del programa en su forma de texto original. Por lo tanto, fue posible dividir el código del programa en muchos fragmentos, para facilitar la edición, pero antes de la compilación, se combinaron automáticamente en un archivo de programa, que finalmente fue procesado por el compilador. Esta implementación de la modularidad es primitiva y tiene muchas fallas obvias, por lo que fue reemplazada rápidamente. Las implementaciones modernas de Pascal (comenzando con UCSD Pascal) admiten módulos. Los módulos de programa pueden ser de dos tipos: el módulo de programa principal, que, como es habitual, comienza con la palabra clave programa y cuyo cuerpo contiene código que se ejecuta después de cargar el programa en la memoria, y módulos auxiliares que contienen tipos, constantes, variables, procedimientos y funciones previstas para su uso en otros módulos, incluido el módulo principal.

diapositiva 45

La estructura general de un complemento en Pascal es la siguiente: unit UnitName1; interfaz ... implementación ... comenzar (puede omitirse; se usa si es necesario colocar declaraciones de inicialización) ... final.

diapositiva 46

También es posible otra opción: unit UnitName2; interfaz... implementación... inicialización... finalización.... fin.

diapositiva 47

A diferencia del programa principal, un archivo de unidad comienza con la palabra clave UNIT seguida del nombre de la unidad y un punto y coma. Las implementaciones modernas normalmente requieren que el nombre de un módulo sea el mismo que el nombre del archivo de código fuente que contiene el módulo. Un módulo contiene tres secciones: una sección de interfaz, una sección de implementación y un cuerpo de módulo.

diapositiva 48

La sección de interfaz viene primero, comienza con la palabra clave INTERFACE y termina en el punto del módulo donde comienza la sección o cuerpo de implementación. La sección de interfaz declara aquellos objetos (tipos, constantes, variables, procedimientos y funciones; se colocan encabezados para ellos) que deberían estar disponibles desde fuera del módulo. En este caso, se permite una declaración parcial de tipos: se pueden declarar sin especificar una estructura, con un solo nombre. Al utilizar este tipo en un programa externo, se permite declarar variables y parámetros de este tipo, asignar valores, pero es imposible acceder a los detalles de su implementación. Los procedimientos y funciones en la sección de la interfaz se declaran como reenvíos: encabezados con parámetros, pero sin cuerpo. La composición de la sección de interfaz del módulo es tal que es suficiente para generar código que utilice este módulo. Las variables declaradas en la sección de interfaz son globales, es decir, existen en una sola instancia y están disponibles en todas las partes del programa que usan este módulo.

diapositiva 49

La sección de implementación sigue a la sección de interfaz y comienza con la palabra clave IMPLEMENTATION. Contiene descripciones de procedimientos y funciones declarados en la sección de interfaz, así como descripciones de tipos, constantes, variables, procedimientos y funciones que son necesarios para implementar procedimientos y funciones de interfaz. La descripción de un procedimiento o función declarada en una sección de interfaz debe tener exactamente el mismo encabezado que en la declaración. El cuerpo puede utilizar otros procedimientos y funciones de este módulo, declarados tanto en la parte de interfaz como en la sección de implementación. Las variables declaradas en la sección de implementación son, de hecho, globales (es decir, solo hay una instancia de cada variable en todo el programa), pero solo se puede acceder a ellas desde los procedimientos y funciones descritos en la sección de implementación de este módulo. así como de su cuerpo. Si hay declaraciones de tipos abreviados en la sección de interfaz, esos tipos deben declararse completamente en la sección de implementación.

Diapositiva 50

El cuerpo de un módulo comienza con la palabra clave BEGIN en el nivel superior de anidamiento. El cuerpo contiene código de programa que se ejecuta una vez cuando se carga el módulo. El cuerpo se puede utilizar para la inicialización, la asignación de valores iniciales a las variables del módulo, la asignación de recursos para su funcionamiento, etc. Puede que falte el cuerpo del módulo. En varias implementaciones de Pascal, por ejemplo, en Delphi, se pueden usar dos secciones (también opcionales) en lugar del cuerpo del módulo: INICIALIZACIÓN y FINALIZACIÓN. Se colocan al final del módulo, después de la palabra clave correspondiente. La primera, la sección de inicialización, contiene el código que se debe ejecutar cuando se carga el módulo, la segunda, la sección de finalización, contiene el código que se ejecutará cuando se descargue el módulo. La sección de finalización puede realizar acciones inversas a la inicialización: eliminar objetos de la memoria, cerrar archivos, liberar recursos asignados. El módulo termina con la palabra clave END seguida de un punto.

diapositiva 51

Para usar un módulo, el programa principal u otro módulo debe importar el módulo, es decir, contener una declaración de su uso. Esta declaración se realiza con una declaración de inclusión de módulo, que es la palabra clave USES seguida de los nombres separados por comas de los módulos que se incluirán. La instrucción de conexión debe seguir inmediatamente al encabezado del programa, o después de la palabra clave INTERFACE si la conexión se realiza en un módulo.

diapositiva 52

Los módulos conectados en la sección de interfaz se pueden usar en todo el módulo, tanto en la sección de implementación como en el cuerpo. Pero la sección de implementación puede tener su propia declaración de inclusión (sigue a la palabra clave IMPLEMENTATION) que contiene los nombres de complementos que no están en la sección de interfaz pero que son necesarios para la sección de implementación. Una razón para usar una lista de conexiones separada para la sección de implementación es cuando dos o más módulos se usan entre sí. Para evitar referencias circulares en las declaraciones de uso de dichos módulos, al menos uno de ellos debe incluir al otro en la sección de implementación.

diapositiva 53

Cualquier objeto declarado en las secciones de interfaz de los módulos se puede utilizar en el programa donde se conectan estos módulos. Los nombres de los objetos importados desde complementos siguen siendo los mismos y se pueden usar directamente. Si dos o más módulos conectados tienen objetos con el mismo nombre y el compilador no puede distinguir entre ellos, un intento de usar dicho objeto generará un error de compilación: especificación de nombre ambiguo. En este caso, el programador debe aplicar la calificación de nombre: especifique el nombre en el formato "."

diapositiva 54

Pueden surgir problemas si es necesario utilizar dos módulos diferentes del mismo nombre en el programa. Si los módulos están disponibles solo en forma compilada (es decir, es imposible cambiar sus nombres), es imposible importarlos al mismo tiempo. No existe una solución estándar para tal colisión a nivel de idioma, pero los compiladores específicos pueden ofrecer una u otra forma de eludirla, en particular, los medios de asignar alias a los módulos importados y especificar directamente qué módulo tomar de qué archivo.

Diapositiva 55

Los módulos están diseñados para compilarse por separado: el compilador no tiene que compilar módulos importados para compilar el módulo que los usa. Sin embargo, para compilar correctamente un módulo, el compilador debe tener acceso a la sección de interfaz de todos los módulos que utiliza. Hay dos enfoques diferentes, a veces combinados, para organizar dicho acceso. Los módulos se compilan en archivos binarios de un formato especial (cada compilador tiene el suyo), que almacenan información detallada sobre los objetos declarados en la sección de la interfaz y también pueden contener el lenguaje del objeto creado durante la compilación del módulo, pero solo usa la sección de la interfaz. del módulo Si un módulo de biblioteca se proporciona en forma compilada (sin textos fuente completos), junto con el archivo binario hay un archivo de código fuente truncado del módulo que contiene solo la sección de la interfaz. Esto es suficiente para que el compilador procese correctamente las llamadas de los módulos en uso, y en la etapa de compilación del programa, el enlazador simplemente incluye el archivo binario en el programa.

diapositiva 56

Carga y descarga de módulos Para que un módulo funcione correctamente, es posible que deba realizar algunas acciones antes de comenzar a usarlo: inicializar variables, abrir los archivos necesarios, asignar memoria u otros recursos. Todo esto se puede hacer en el cuerpo del módulo, o en la sección de inicialización. La inversa de la inicialización se realiza en la sección de finalización.

Diapositiva 57

El orden de inicialización y finalización de los módulos está determinado indirectamente por el orden de declaración en la sección de usos, pero para los programas compilados estáticamente (donde el módulo se compila en un archivo ejecutable con el programa principal o se ubica en una biblioteca dinámica separada, pero cargado en la etapa de carga inicial), el compilador siempre garantiza que la inicialización se realizará antes del primer uso del módulo. La finalización se realiza cuando finaliza el programa, después de que finaliza el módulo principal, de modo que los módulos que se utilizan se finalizan más tarde que los que los utilizan.

Diapositiva 58

En el caso de carga dinámica de módulos controlados por el propio programador, los inicializadores se ejecutan en la carga, es decir, en el momento en que el comando de carga del módulo ha devuelto el control, su inicializador ya ha sido ejecutado. El finalizador se ejecuta después de la descarga, generalmente cuando se ejecuta el comando de descarga del módulo. Si no se llama a este comando, los módulos cargados dinámicamente se finalizan de la misma manera que todos los demás: al finalizar el programa.

Diapositiva 59

La programación orientada a objetos (POO) es una tecnología para crear software complejo que se basa en representar un programa como un conjunto de objetos, cada uno de los cuales es una instancia de una determinada clase, y las clases forman una jerarquía con herencia de propiedades.

diapositiva 60

La principal ventaja de OOP es la reducción en el número de llamadas entre módulos y la reducción en la cantidad de información transferida entre módulos. Esto se logra mediante una localización e integración de datos más completa con las rutinas de procesamiento.

diapositiva 61

Los principales inconvenientes de la programación orientada a objetos son una disminución del rendimiento debido a la organización más compleja del sistema de software, así como, por regla general, un aumento notable en la cantidad de código binario (especialmente cuando se usan bibliotecas de clases estándar en programas pequeños) debido al hecho de que la mayoría de los compiladores y enlazadores modernos no pueden identificar y eliminar todo el código que cae en clases no utilizadas, métodos virtuales y otros elementos OOP.

Diapositiva 62

En Object Pascal, las clases se definen utilizando el tipo de objeto, similar al registro, que, además de los campos de datos, puede contener encabezados de procedimientos y funciones (se denominan métodos). Los nombres de los métodos descritos siguen al nombre de la clase separados por un punto.

diapositiva 63

El constructor y el destructor se especifican como procedimientos normales, pero en lugar del identificador del procedimiento, se especifican las palabras clave constructor y destructor. En consecuencia, a diferencia de los lenguajes similares a C++, tienen un nombre diferente al nombre de la clase, puede haber varios destructores y pueden tener parámetros (en la práctica, esta característica rara vez se usa, generalmente una clase tiene un solo destructor Destroy que anula el virtual). destructor de la clase padre).

diapositiva 64

Se admiten herencia única, polimorfismo de clase, mecanismo de método virtual (la palabra virtual después del encabezado del método de clase). También hay métodos dinámicos (en TP se describen agregando un número entero después de la palabra virtual y se usan principalmente para el procesamiento de mensajes; en Delphi y FreePascal, la palabra mensaje se usa para este propósito, y la palabra dinámico se usa para crear ordinarios). métodos dinámicos), que difieren en un menor uso de memoria y menor velocidad de llamada debido a la falta de duplicación de los métodos dinámicos de los ancestros en el VMT del niño (sin embargo, FreePascal no distingue entre métodos virtuales y dinámicos). En Delphi, FPC implementó la sobrecarga de operaciones, métodos abstractos, directivas privadas, protegidas, públicas y publicadas (por defecto, los miembros de la clase son públicos):

Diapositiva 65

En el dialecto de Delphi, las clases también se pueden construir usando la palabra clase (además, no se permite la herencia mutua con clases de objetos) y se introducen interfaces (interfaz): todos los métodos son abstractos y no pueden contener campos de datos. Todas las clases (creadas con class) heredan de TObject, todas las interfaces derivan de IUnknown. Las clases creadas con class pueden implementar múltiples interfaces.

diapositiva 66

Las interfaces se introdujeron en Delphi para admitir la tecnología COM de Microsoft. Las clases (Clase), a diferencia de las clases ordinarias (Objeto), no necesitan asignación / desasignación de memoria explícita, la memoria para ellas es asignada dinámicamente por un constructor llamado Crear, llamado con el nombre de la clase y liberado cuando se llama un destructor llamado Destruir (ellos puede tener otros nombres). Una variable de tal clase, a diferencia de la clase de objeto, almacena la dirección de una instancia de clase en la memoria, el valor nulo se usa para indicar una referencia vacía, por lo tanto, para liberar un objeto, se define un método libre especial en TObject, que comprueba la referencia a nil y llama al destructor virtual Destroy. El código que usa tales clases se vería así:

Diapositiva 67



¿Te gustó el artículo? Compártelo