¿El operador de asignación está escrito correctamente en Pascal? operador de asignación Operadores de entrada, salida y asignación

Tipo de lección:

  • educativo. Los estudiantes son introducidos a un nuevo operador de lenguaje Pascal;
  • repetición del tema memoria interna computadora";
  • reforzando los conocimientos adquiridos.

Tema de la lección:“Programación en Pascal. operador de asignación

Metas:

  • Introducir el concepto de "Operador de Asignación".
  • Distinguir operaciones válidas para números enteros y reales.
  • Componer y evaluar correctamente expresiones utilizando el operador de asignación.
  • Escribir programas para tareas sencillas.

Duración de la lección: 1 hora 30 minutos.

DURANTE LAS CLASES

Primera lección

1. Repetición del tema de la lección anterior "Tipos de datos". Ejemplos de uso de palabras que suenan igual pero tienen significados diferentes.

El profesor y los alumnos trabajan en forma de “pregunta-respuesta” (10 minutos).

2. El profesor explica el nuevo tema usando la lección-presentación multimedia “Programación en Pascal. operador de asignación Se da la definición del concepto de "operador de asignación", se da la forma general y estructural del operador. Antes de considerar el trabajo del operador de asignación, recordamos y repetimos el tema "Memoria de acceso aleatorio, propiedades Memoria de acceso aleatorio».

Acompañado de una presentación. Apéndice 1 (15 minutos).

3. Los estudiantes trabajan de forma independiente, leyendo y tomando notas sobre un tema nuevo (la presentación de la lección está pregrabada en las computadoras de los estudiantes, las preguntas para tomar notas las determina el maestro). Aquí, los estudiantes pueden familiarizarse con los textos de los programas que utilizan el operador de asignación. Apéndice 2(20 minutos).

Segunda lección

4. Los estudiantes trabajan en la pizarra, haciendo ejercicios. (12-15 minutos).
1. El docente realiza el control de conocimientos en forma de prueba. El programa de prueba está pregrabado en las computadoras de los estudiantes. La puntuación la establece el programa. Anexo 5(10 minutos).
5. Los estudiantes hacen un poco de trabajo independiente en las tarjetas, o escriben y depuran un programa en LPL Pascal, que usa el (los) operador (es) de asignación (el maestro llama a los números de las tarjetas con las tareas). Los estudiantes son calificados por su trabajo. Anexo 3 . Apéndice 4(15 minutos).
Tareas para el hogar. Se invita a los estudiantes a escribir el texto de un programa simple en LPL Pascal, que utiliza el (los) operador (es) de asignación (para aquellos estudiantes que no tuvieron tiempo para completar la tarea en clase).

Recomendaciones:

  • A través del bloque 1 repetición del tema de la lección anterior.
  • A través de los bloques 2, 3 y 4 se da y fija un nuevo tema “Operador de Asignación”.
  • A través de los bloques 5 y 6 se realiza el control del conocimiento.

Programación en Pascal

Lección #1 (2 horas). Variables y constantes. operador de asignación

  1. Comprobación de la tarea.
  2. Nuevo tema.
  3. Tareas para el hogar.

Comprobación de la tarea.

2. Nuevo tema: “Variables y constantes. Operador de Asignación"

Variable - es el nombre del área de memoria (el tamaño del área depende del tipo de datos) que almacena el valor asignado a la variable. Una variable se puede comparar con una caja que contiene un valor (la mejor comparación es con un edificio de apartamentos, ya que puedes sacar algo de la caja y será el último, es decir, la caja queda vacía y la variable, incluso si se usó, permanece en el área de memoria).
Constante - valores numéricos o de texto únicos fijos que no se pueden cambiar durante la ejecución del programa.
operador de asignación Uno de los operadores más utilizados. operador de asignación Vista general del operador de asignación:

nombre de variable:= expresión;

La expresión puede ser tanto un valor específico (es decir, un número entero o real, por ejemplo, 22 o 2,5, un valor simbólico: "ABC", un valor lógico: VERDADERO o FALSO), como alguna expresión (valores + operaciones sobre ellos), cuyo resultado se asignará a la variable del lado izquierdo.

EJEMPLOS:

PAG:= 10;(valor específico como un número);
X:= X + 1;(expresión);
C:=B;(nombre de la variable);
G:= 'HOLA'; ( valor simbólico específico);
X:= (-A + SIN(Y) - 4 * B * X) / (2 * C);(expresión matemática);
Y:= VERDADERO;(valor lógico específico).

La diferencia entre la operación de asignación en matemáticas y programación.

En matemáticas, la expresión = en significa que los valores calculados para a y b deben ser iguales.
En programación, A := B se entiende que significa que un valor almacenado en un área de memoria llamada B se coloca en un área de memoria llamada A. Por lo tanto, la expresión inversa
B:= A da un resultado diferente.
Ejemplo: Los valores 5 y 9 se colocan en A y B, respectivamente.

R: = 5;
segundo:=9

a) El resultado de la operación A:= B;

b) El resultado de la operación B:= A;

Aquí hay otra diferencia significativa entre el signo igual y el operador de asignación: A = A + 1;
En matemáticas, tal expresión simplemente no tiene sentido, ya que la identidad es falsa. No existen tales valores numéricos de A para los que sería cierto. En programación, esto significa que se agrega 1 al valor almacenado en la celda A, y el valor recién obtenido reemplaza el anterior en la celda A. Por ejemplo, si A tenía un valor de 5 antes de ejecutar esta instrucción, luego de la ejecución ser 6

La siguiente diferencia: la expresión matemática A + 9 - B = X es bastante razonable y puede significar que cuando sustituyes algunos números en lugar de A y B en el lado izquierdo de la expresión, obtendrás N. Al mismo tiempo, en programar esta expresión no tiene sentido, ya que el lado izquierdo de la expresión debe contener el nombre del área de memoria a la que se asigna el valor calculado en el lado derecho. Si intenta insertar una expresión de este tipo en su programa, recibirá un mensaje de error, porque el nombre de la variable es A + 9 - B no entenderá.

escribir en la forma habitual:

(- b + sqrt(sqr(b) - 4 * a * c))/(2 * a);
a / b * (c + d) - (a - b) / b / c + 1E - 8;

Bibliografía:

  • V. B. Popov"TURBO PASCAL para escolares I", "Finanzas y estadísticas", Moscú, 1996
  • AUTOMÓVIL CLUB BRITÁNICO. Cherno en "Sinopsis de lecciones de informática en los grados 9 - 11", "Profesor", Volgogrado, 2004.
  • D. M. Zlatopolski“Voy a una clase de informática. Problemas de programación, grados 7 - 11", "Primero de septiembre", Moscú, 2001.

Operador- una orden para realizar acciones específicas. El lenguaje de programación Pascal contiene 11 operadores.

Operador de asignación en Pascal

El operador de asignación es el operador más utilizado en Turbo Pascal.

Formato de registro: X:=A;
donde: X- nombre de la variable;
A- expresión ;
:= - señal de asignación.

Trabajo del operador: Durante la ejecución de la instrucción, el valor del lado derecho de la expresión se calcula y asigna al nombre de la variable.

El tipo de la variable y el tipo de la expresión deben coincidir, excepto cuando la expresión es de tipo entero y la variable es de tipo real. En este caso, el valor calculado de la expresión se convierte en un tipo real.

Ejemplo 9.1. Escriba un programa para calcular funciones:

y=cosa+inb; n=k+1; r=ord(#65).

Var
a, b, y: reales;
k, n: entero;
r: carbón;
t, v, u: booleano;
* * *
y:= cos(a)+ln(b);
n:=k+1;
r:=orden(#65);
t:=(v y u) o (v y no u);
* * *
fin.

Operador de salto en Pascal

En Turbo Pascal se adopta el orden natural de ejecución de los operadores, es decir en el orden en que aparecen en el texto del programa. La sentencia de salto interrumpe el orden natural de ejecución de sentencias y transfiere el control a la sentencia marcada con la etiqueta especificada en la sentencia de salto.

Formato de grabación: GoTo m;

donde: ir a- ir a;
metro- etiqueta.

Trabajo del operador: La declaración de salto transfiere el control a la declaración marcada con la etiqueta metro.
El uso de una declaración de salto en un TR no es deseable porque viola la integridad estructural del programa. Tal programa es difícil de leer, depurar y modificar. El uso del operador salto en el TR está sujeto a restricciones que impiden su uso indiscriminado.

Con la declaración de salto, puede transferir el control dentro de un nivel o saltar de un nivel interno a uno externo. Se prohíben las transiciones de la capa exterior a la capa interior. Por ejemplo, de un programa al cuerpo de una subrutina o dentro de una declaración de bucle o una declaración condicional.


El operador de asignación es el operador más simple y común.

Formato del operador de asignación

Un operador de asignación es una notación que contiene el símbolo = (signo igual), a la izquierda del cual está el nombre de la variable ya la derecha, la expresión. El operador de asignación termina con un signo; (punto y coma).

Variable = Expresión ; // operador de asignación

El operador de asignación se puede distinguir en el texto del programa por la presencia de un signo igual. Una expresión puede ser una constante, una variable, una llamada de función o la propia expresión.

Regla de ejecución del operador de asignación

El operador de asignación, como cualquier otro operador, es ejecutable. Esto significa que la entrada que conforma la instrucción de asignación se ejecuta de acuerdo con la regla. Cuando se ejecuta un operador de asignación, se evalúa el valor del lado derecho y luego este valor se asigna a la variable a la izquierda del signo igual. Como resultado de la ejecución de la declaración de asignación, la variable del lado izquierdo siempre obtiene un nuevo valor; este valor puede ser diferente o igual al valor anterior de esta variable. La expresión del lado derecho del operador de asignación se evalúa de acuerdo con el orden en que se evalúan las expresiones (ver Operaciones y Expresiones).

Ejemplos de instrucciones de asignación

En un operador de asignación, se permite una declaración de tipo de variable a la izquierda del signo igual:

int entrada = 3 ;
do doble = 2.0 ;
booleano Bo = verdadero;
color Co = 0 x008000 ; // A la variable Co se le asigna un valor constante
cadenaSt = "sss"; // A la variable St se le asigna el valor de una constante
fecha y hora Da = D "01/01/2004"; // A la variable Da se le asigna el valor de una constante

Las variables previamente declaradas se utilizan en una declaración de asignación sin especificar un tipo.

entrada = 7 ; // A la variable In se le asigna el valor de una constante
Hacer = 23,5; // A la variable Do se le asigna el valor de una constante
Bo = 0; // A la variable Bo se le asigna el valor de una constante

En un operador de asignación, no se permite declarar el tipo de una variable en el lado derecho del signo igual:

Entrada = int Entrada_2; // Está prohibido declarar el tipo de variables en el lado derecho
Do = doble Do_2; // Está prohibido declarar el tipo de variables en el lado derecho

La declaración de asignación no permite la declaración repetida del tipo de variables.

int en; // Declaración de tipo de variable In
int Entrada = Entrada_2; // No se permite la redeclaración de una variable (In)

Ejemplos de uso en el lado derecho de las funciones personalizadas y estándar:

En = Mi_Funcion(); // En se establece en el usuario. funciones
Do = Gipo (Do1 , Do1 ) ; // Establecer en usuario. funciones
Bo = EstáConectado(); // Bo establecido en estándar. funciones
St = NombreObjeto(0) ; // St se establece en estándar. funciones
Da = TiempoActual(); // Da se establece en std. funciones

Ejemplos de uso en el lado derecho de las expresiones:

En = (Mi_Función() + En2) / 2; // Variable In es asignada
// ..valor de expresión
Do = MathAbs (Do1 + Gipo (Do2 , 5 ) + 2.5 ) ; // Se asigna la variable Do
// ..valor de expresión

Al calcular en un operador de asignación, se aplican las reglas para la conversión de tipos de datos (consulte Conversión de tipos).

Ejemplos de tareas de formato corto

MQL4 también utiliza una forma abreviada de operadores de asignación. Esta es una forma de instrucciones de asignación que utiliza operaciones de asignación distintas de la operación de asignación. = (signo igual) (ver Operaciones y Expresiones). Los operadores de formato corto están sujetos a las mismas reglas y restricciones. La forma abreviada de operadores de asignación se usa en el código para mayor claridad. El programador, a su discreción, puede utilizar una u otra forma del operador de asignación. Cualquier operador de asignación de formato corto se puede reescribir fácilmente en uno de formato completo y el resultado de la ejecución del operador no cambiará.

En /= 33 ;
Entrada = Entrada / 33 ;

St += "_exp7"; // Forma abreviada del operador de asignación
St = St + "_exp7"; // La forma completa del operador de asignación

Hemos considerado los programas más simples escritos en Pascal en el entorno PascalABC.Net. Allí realizamos operaciones aritméticas con números y luego las generamos usando el operador write (o writeln). Pero no usamos el operador de asignación, que es muy común en programación. Entonces, ¿qué es la asignación?

Considere algunas variables M y N que tienen ciertos valores, digamos, M = 12, N = 34. Para cada uno de estos valores, la computadora asigna un área de memoria separada, que es una cierta cantidad de celdas o bits (1 celda = 1 un poco). Múltiples números (u otro tipo de datos) no se pueden almacenar en la misma ubicación de memoria por la misma razón que dos litros de agua no caben en una jarra de un litro.

Muy a menudo se hace necesario quitar el valor de la variable M, igual a 12, y en su lugar volverlo igual al valor de la variable N, es decir, 34. ¿Qué hace la computadora? Encuentra la ubicación de memoria donde el valor de N está “oculto”, lo copia (el número 34), regresa a la ubicación de almacenamiento M (igual a 12), borra su valor e inserta uno nuevo, es decir, 34. Como como resultado, M = 12 se convirtió en M = 34.

La asignación es el registro de datos en el área de la memoria de la computadora asignada para el valor de M, los datos que se almacenan en otra área de la memoria de la computadora, donde se registra el valor de N.

La asignación se escribe como M:= N , lo que significa que el valor de N va a M. Surge la pregunta natural: ¿qué pasó con el valor de N? Nada, simplemente “compartió” el valor con la variable M, pero ella misma no cambió. A veces, los recién llegados a la programación piensan que las variables M y N están intercambiadas, pero no es así. Para ilustrar este fenómeno, considere el problema:

Una tarea. Se dan números: M = 12, N = 34. Intercambiar sus valores.

Necesitamos asignar 34 al número M y 12 al número N (viceversa). Muy a menudo, los programadores novatos escriben así:


En la primera línea del código, M está asignada a N, es decir, M:= 34. En la segunda línea, N está asignada a M, pero la última variable ya no es igual a 12, ya que cambió su valor en la línea anterior a 34. Por tanto, ambas variables serán igual a 34. Para demostración escribiremos el código completo que deberás reescribir en el entorno de programación PascalABC.Net:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 variable M, N: tipo entero;

Descripción:

")" onmouseout="información sobre herramientas()">entero
; comenzar escribir ( "Ingrese los números M y N:" <-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } M := N; { <== M присваивается N, поэтому M = 34 } N := M; { <== N присваивается M, поэтому N = 34 } fin.

Ejecute el programa para su ejecución; ingrese 12 cuando se le solicite M, ingrese 34 para N y presione Enter. Si todo se hace correctamente, debería ver:

Introduzca los números M y N:
METRO=12
N=34
Resultado:
M=34 N=34

Como puede ver en la última línea, esto no es lo que queríamos: intercambiar los valores de M y N en algunos lugares.

Para lograr el resultado correcto, es necesario fijar el valor inicial de la variable M, por ejemplo, s:= M ("recordar" M escribiendo su valor en la variable s). Como resultado, le asignaremos al número N no el valor de la variable M, que ya ha cambiado, sino que usaremos el valor s igual a él:


De acuerdo con los últimos cambios, el programa anterior tomará la forma:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 variable M, N, S: tipo entero;

Descripción:
Representa un entero de 32 bits con signo.

Rango de valores: -2 147 483 648 .. 2 147 483 647")" onmouseout="información sobre herramientas()">entero
; comenzar escribir ( "Ingrese los números M y N:") ; escribir("M="); readln(M); (<-- вводим 12 } write (" N = " ) ; readln (N) ; { <-- вводим 34 } s := M; { <== запоминаем M, равное 12 } M := N; ( M = 34 porque N = 34 ) N := s; (N = 12 ya que s = 12) writeln("Resultado:" ); escribir(" M = " , M, " N = " , N) ; leer fin.

Vuelva a escribir este programa en PascalABC.Net y ejecútelo (tecla F9 en el teclado). Si la respuesta es:

Introduzca los números M y N:
METRO=12
N=34
Resultado:
M=34 N=12

entonces el programa funciona correctamente. Como puede ver en la última línea, los valores de los números M y N están intercambiados.

Asignación- un mecanismo de enlace en la programación que le permite cambiar dinámicamente los enlaces entre los nombres de los objetos de datos (generalmente variables) y sus valores. Estrictamente hablando, el cambio de valores es un efecto secundario de la operación de asignación y, en muchos lenguajes de programación modernos, la operación en sí también devuelve algún resultado (generalmente una copia del valor asignado). A nivel físico, el resultado de una operación de asignación es escribir y reescribir celdas de memoria o registros del procesador.

La asignación es una de las construcciones centrales en los lenguajes de programación imperativos, implementada de manera eficiente y simple en la arquitectura de von Neumann que es la base de las computadoras modernas.

En los lenguajes de programación orientados a objetos, la semántica de asignación es bastante diferente. Por ejemplo, en el lenguaje Kotlin, al asignar, el objeto se copia, y en el lenguaje Rust, el objeto se mueve (move-semantics) y el paquete antiguo deja de ser válido.

colocar<целевая_переменная> <выражение>

Esta notación es equivalente a llamar a una función. Del mismo modo, en COBOL de estilo antiguo:

MULTIPLICA 2 POR 2 DANDO CUATRO.

algoritmo de trabajo

  • Calcular el valor de la izquierda del primer operando. En esta etapa, se conoce la ubicación del objeto de destino, el receptor del nuevo valor.
  • Calcule el valor de la mano derecha del segundo operando. Este paso puede ser arbitrariamente grande e incluir otras declaraciones (incluidas las asignaciones).
  • Asigne el valor de la mano derecha calculado al valor de la mano izquierda. En primer lugar, en caso de conflicto de tipos, se deben lanzar (o se emite un mensaje de error debido a su imposibilidad). En segundo lugar, la asignación real de valores en los lenguajes de programación modernos puede sustituirse e incluir no solo la transferencia de valores de celdas de memoria (por ejemplo, a "propiedades" de objetos en , sobrecarga de operadores).
  • Devuelve el valor de la derecha calculado como resultado de la operación. No se requiere en todos los idiomas (por ejemplo, no se necesita en Pascal).

Designación

La elección del símbolo de asignación es motivo de controversia entre los diseñadores de lenguajes. Existe la opinión de que el uso del símbolo = para la asignación confunde a los programadores y también plantea la cuestión de elegir un símbolo para el operador de comparación, que es difícil de resolver bien.

Un mal ejemplo bien conocido es la elección de un signo igual para denotar una asignación, que se remonta a Fortran en 1957 y todavía se repite ciegamente por una gran cantidad de desarrolladores de lenguajes. Esta mala idea echa por tierra la antigua tradición de usar el signo "=" para denotar una comparación de igualdad, un predicado que se evalúa como "verdadero" o "falso". Pero en Fortran, este símbolo comenzó a denotar asignación, coerción a la igualdad. En este caso, los operandos están en una posición desigual: el operando izquierdo, la variable, debe igualarse al operando derecho, la expresión. Entonces x = y no significa lo mismo que y = x.

Texto original (inglés)

Un ejemplo notorio de una mala idea fue la elección del signo igual para indicar la asignación. Se remonta a Fortran en 1957 y ha sido copiado a ciegas por ejércitos de diseñadores de lenguajes. por qué es una mala idea? Porque derroca una tradición de un siglo de dejar que "=" denote una comparación de igualdad, un predicado que es verdadero o falso. Pero Fortran hizo que significara asignación, la aplicación de la igualdad. En este caso, los operandos están en pie de igualdad: el operando izquierdo (una variable) debe ser igual al operando derecho (una expresión). x = y no significa lo mismo que y = x.

La implementación de esta posición de Wirth se puede considerar que en el lenguaje Pascal, del cual es autor, el operador de asignación es: =, mientras que para la comparación, simplemente se usa =.

La elección del carácter operador de igualdad en el lenguaje al utilizar = como asignación se resuelve:

  • Mediante la introducción de un nuevo símbolo de lenguaje para el operador de prueba de igualdad.
A = B = C

a la variable A se le asigna el valor booleano de la expresión de relación B = C. Esta notación conduce a una disminución en la legibilidad y rara vez se usa.

Características semánticas

Lejos de ser siempre "intuitiva" (para los programadores de lenguajes imperativos), la forma de interpretar la asignación es la única verdadera y posible.

A partir de la sintaxis utilizada en los lenguajes imperativos, no siempre es posible comprender cómo se implementa la semántica de asignación a menos que esté explícitamente definida en el lenguaje.

A = b = a a = 1000

Después de eso, b tendrá un valor, simplemente porque, de hecho, su valor es el valor de a. El número de referencias al mismo objeto de datos se llama su cardinalidad, y el objeto en sí se mata (destruido o entregado al recolector de basura) cuando su cardinalidad llega a cero. Los lenguajes de programación de bajo nivel (como C) permiten al programador controlar explícitamente si se usa la semántica de puntero o la semántica de copia.

Operación sustitución

Muchos idiomas brindan la capacidad de cambiar el significado de una asignación, ya sea a través del mecanismo de propiedad o mediante la sobrecarga del operador de asignación. La sustitución puede ser necesaria para realizar comprobaciones sobre la validez del valor asignado o cualquier otra operación adicional. La sobrecarga del operador de asignación se usa a menudo para proporcionar una "copia profunda", es decir, copiar valores en lugar de referencias, que se copian de forma predeterminada en muchos idiomas.

Dichos mecanismos permiten brindar comodidad en el trabajo, por lo que para un programador no hay diferencia entre usar un operador incorporado y uno sobrecargado. Por la misma razón, los problemas son posibles, ya que las acciones del operador sobrecargado pueden ser completamente diferentes de las acciones del operador predeterminado, y la llamada a la función no es obvia y puede confundirse fácilmente con una operación integrada.

Diseños extendidos

Construcciones de asignación en varios lenguajes de programación

Dado que el operador de asignación se usa ampliamente, los desarrolladores de lenguajes de programación están tratando de desarrollar nuevas construcciones para simplificar la escritura de operaciones típicas (para agregar el llamado "azúcar sintáctico" al lenguaje). Además, en los lenguajes de programación de bajo nivel, el criterio de inclusión suele ser la capacidad de compilar en un código ejecutable eficiente. El lenguaje C es especialmente famoso por esta propiedad.

Múltiples objetivos

Una alternativa al operador simple es la capacidad de asignar el valor de una expresión a varios objetos. Por ejemplo, en PL/1, el operador

SUMA TOTAL = 0

asigna cero simultáneamente a SUM y TOTAL. En Ada, la asignación también es una declaración, no una expresión, por lo que la notación para la asignación múltiple es:

SUMA, TOTAL: Entero:= 0;

Una tarea similar en Python tiene la siguiente sintaxis:

Suma = total = 0

A diferencia de PL/1, Ada y Python, donde la asignación múltiple se considera solo una notación abreviada, en C, Lisp y otros, esta sintaxis tiene una base estricta: el operador de asignación simplemente devuelve el valor que se le asignó (ver arriba). Así que el último ejemplo es en realidad:

Suma = (total = 0)

Una línea como esta funcionará en C (si agrega un punto y coma al final), pero provocará un error en Python.

Asignación paralela

La última opción solo funciona con tipos que admiten operaciones de bits (por ejemplo, para double, el compilador del lenguaje no le permitirá intercambiar valores de variables de esta manera).

un ||= 10

Esta construcción asigna un valor a la variable a solo si el valor aún no ha sido asignado o es igual a falso.

declaraciones compuestas

El operador de asignación compuesto le permite abreviar una forma de asignación de uso común. Con este método, puede acortar la notación de una asignación que usa la variable de destino como el primer operando en el lado derecho de la expresión, por ejemplo.