Contactos

Lenguaje algorítmico ruso. Lenguajes algorítmicos y programación. Estructura de ramificación básica

Ministerio de Educación Federación Rusa Universidad Técnica Estatal de Perm

Departamento tecnologías de la información y sistemas automatizados

Vikentieva O. L.

Apuntes de clase del curso " Lenguajes algorítmicos y programación "(Fundamentos del lenguaje C ++, I semestre)

Introducción

En el primer semestre se consideran las construcciones básicas del lenguaje C y la tecnología de programación básica (programación estructurada).

La programación estructurada es una tecnología para la creación de programas que permite, al observar ciertas reglas, reducir el tiempo de desarrollo y el número de errores, así como facilitar la posibilidad de modificar un programa.

1.1. Algoritmo y programa

El algoritmo es una prescripción precisa que determina proceso computacional pasar de un dato inicial variable al resultado final, es decir, es una receta para conseguir un objetivo.

El conjunto de herramientas y reglas para representar un algoritmo en una forma adecuada para su ejecución por una computadora se llama lenguaje de programación, un algoritmo escrito en este lenguaje se llama programa.

Primero, siempre se desarrolla un algoritmo de acciones y luego se escribe en uno de los lenguajes de programación. El texto del programa es procesado por programas de utilidad especiales: traductores. Los lenguajes de programación son lenguajes artificiales. Se diferencian de los lenguajes naturales por un número limitado de "palabras" y reglas muy estrictas para escribir comandos (operadores). La totalidad de estos requisitos forma la sintaxis del lenguaje de programación, y el significado de cada construcción es su semántica.

1.2 Propiedades del algoritmo

1. Masividad: el algoritmo debe aplicarse no a un problema, sino a toda una clase de problemas similares (un algoritmo para resolver una ecuación cuadrática no debe resolver una ecuación, sino todas las ecuaciones cuadráticas).

2. Eficiencia: el algoritmo debe conducir a un resultado en un número específico de pasos (al dividir 1 por 3, se obtiene una fracción periódica de 0.3333 (3); para lograr el resultado final, es necesario estipular la precisión de la obtención de esta fracción , por ejemplo, hasta 4 lugares decimales).

3. Certeza (determinismo): cada acción del algoritmo debe ser clara para su ejecutor (las instrucciones para un electrodoméstico en japonés para una persona que no habla japonés no es un algoritmo, porque no tiene la propiedad del determinismo).

4. Discreción: el proceso debe describirse utilizando indivisible

operaciones realizadas en cada paso (es decir, los pasos no se pueden dividir en pasos más pequeños).

Los algoritmos se pueden presentar en las siguientes formas:

1) una descripción verbal del algoritmo.

2) descripción gráfica del algoritmo.

3) usando un lenguaje de programación algorítmico

1.2. Compiladores e intérpretes

CON utilizando un lenguaje de programación, se crea un texto que describe un algoritmo previamente compilado. Para obtener un programa que funcione, debe traducir este texto en una secuencia de instrucciones del procesador, que se realiza utilizando programas especiales que se llaman traductores. Hay dos tipos de traductores: compiladores e intérpretes. El compilador traduce el texto del módulo fuente a código máquina, llamado módulo objeto, en un proceso continuo. Al mismo tiempo, primero examina el código fuente del programa en busca de errores de sintaxis... El intérprete ejecuta el módulo fuente del programa en modo operador por operador,

avance del trabajo, traduciendo cada operario al lenguaje de máquina.

1.3 lenguajes de programación

Los diferentes tipos de procesadores tienen diferentes conjuntos de instrucciones. Si un lenguaje de programación se centra en un tipo específico de procesador y tiene en cuenta sus peculiaridades, entonces se denomina lenguaje de programación de bajo nivel. El lenguaje de nivel más bajo es el lenguaje ensamblador, que simplemente representa cada instrucción del código de máquina en forma de símbolos especiales llamados mnemónicos. Con la ayuda de lenguajes de bajo nivel, se crean programas muy eficientes y compactos, ya que el desarrollador accede a todas las capacidades del procesador. Porque conjuntos de instrucciones para diferentes modelos Los procesadores también son diferentes, entonces cada modelo de procesador corresponde a su propio lenguaje ensamblador, y el programa escrito en él solo se puede usar en este entorno. Se utilizan lenguajes similares para escribir pequeños aplicaciones del sistema, controladores de dispositivos, etc.

Lenguajes de programación nivel alto no tienen en cuenta las peculiaridades de arquitecturas informáticas específicas, por lo tanto programas creados en el nivel de fuente, se pueden migrar fácilmente a otras plataformas si se han creado los traductores correspondientes para ellos. Desarrollar programas en lenguajes de alto nivel es mucho más fácil que en lenguajes de máquina.

Los lenguajes de alto nivel son:

1. Fortran es el primer lenguaje compilado creado en Años 50 del siglo XX. Implementó una serie de conceptos de programación esenciales. Para este idioma fue creado gran cantidad bibliotecas que van desde complejos estadísticos hasta gestión de satélites, por lo que sigue utilizándose en muchas organizaciones.

2. Cobol - Lenguaje compilado para decisiones y cálculos económicos Los problemas empresariales se desarrollaron a principios de los años 60. En Cobol se implementaron herramientas muy poderosas para trabajar con grandes cantidades de datos almacenados en medios externos.

3. Pascal - creado al final El matemático suizo de los 70 Niklaus Wirth específicamente para enseñar programación. Te permite desarrollar el pensamiento algorítmico, construir un breve y bien programa legible, demuestra las técnicas básicas de algoritmo, también es muy adecuado para la implementación de grandes proyectos.

4. BÁSICO - creado en 60 también para enseñar programación. Hay compiladores e intérpretes para ello, es uno de los lenguajes de programación más populares.

5. C - fue creado en los años 70 y originalmente no se consideró como un lenguaje de programación convencional. Se pretendía reemplazar al ensamblador para que pudiera crear programas lo más eficientes y cortos posible sin depender del procesador. Es en muchos aspectos similar a Pascal y tiene características adicionales trabajar con la memoria. Contiene muchos aplicados y programas del sistema, y sistema operativo Unix.

6. C ++ es una extensión orientada a objetos del lenguaje C, creada por Bjarne Stroustrup en 1980.

7. Java es un lenguaje que fue creado por Sun al principio Años 90 basado en C ++. Está diseñado para simplificar el desarrollo de aplicaciones C ++ eliminando características de bajo nivel. caracteristica principal el lenguaje es que no se compila en código de máquina, sino en código de bytes independiente de la plataforma (cada instrucción toma un byte). Este código se puede ejecutar mediante un intérprete: la máquina virtual Java (JVM).

2.La estructura de un programa C ++

Un programa en C tiene la siguiente estructura: # directivas de preprocesador

. . . . . . . . .

# las directivas del preprocesador funcionan a ()

operadores de función en ()

operadores

void main () // función, que inicia las sentencias de ejecución del programa

descripciones

asignaciones

función operador vacío

compuesto

transición

Directivas de preprocesador: controlan la transformación del texto del programa antes de que se compile. Programa original preparado en SI en la forma Archivo de texto, pasa por 3 etapas de procesamiento:

1) transformación de preprocesador de texto;

2) compilación;

3) maquetación (edición de enlaces o ensamblaje).

Después de estas tres etapas, se forma el código ejecutable del programa. La tarea de prepro-

cessor: transformación del texto del programa antes de compilarlo. El programador define las reglas de preprocesamiento mediante directivas de preprocesador. La directiva comienza con #. Por ejemplo,

1) #define: indica las reglas de reemplazo en el texto. #define CERO 0.0

Significa que cada uso del nombre CERO en el programa será reemplazado

2) #incluir< имя заголовочного файла>- destinado a la inclusión en el texto del programa del texto del catálogo "Archivos de cabecera" suministrado con bibliotecas estándar... Cada función de la biblioteca C tiene una descripción correspondiente en uno de los archivos de encabezado. La lista de archivos de encabezado está definida por el estándar de idioma. El uso de la directiva include no incluye la biblioteca estándar correspondiente

biblioteca, pero solo le permite insertar descripciones del archivo de encabezado especificado en el texto del programa. Los códigos de la biblioteca se conectan en la etapa de vinculación, es decir, después de la compilación. Aunque los archivos de encabezado contienen todas las descripciones de las funciones estándar, solo las funciones que se utilizan en el programa se incluyen en el código del programa.

Después del procesamiento previo, no queda ni una sola directiva de procesamiento previo en el texto del programa.

Un programa es un conjunto de descripciones y definiciones, y consta de un conjunto de funciones. Estas funciones siempre deben incluir una función denominada main. Sin él, el programa no se puede ejecutar. El nombre de la función está precedido por información sobre el tipo de valor devuelto por la función (el tipo de resultado). Si la función no devuelve nada, entonces se indica el tipo void: void main (). Cada función, incluida la principal, debe tener un conjunto de parámetros, puede estar vacía, luego (void) se indica entre paréntesis.

El cuerpo de la función se coloca detrás del encabezado de la función. El cuerpo de una función es una secuencia de definiciones, descripciones y declaraciones ejecutables entre llaves. Cada definición, descripción o declaración termina con un punto y coma.

Definiciones: introducir objetos (un objeto es un área de memoria con nombre, un caso especial de un objeto es una variable) necesarios para representar los datos procesados ​​en el programa. Un ejemplo es

int y = 10; // nombrada constante flotante x; //variable

Descripciones: notifica al compilador de las propiedades y los nombres de los objetos y funciones descritos en otras partes del programa.

Operadores: determinan las acciones del programa en cada paso de su ejecución.

Un ejemplo de un programa en C:

#incluir // directiva de preprocesador

Preguntas de control

1. ¿Cuáles son las partes de un programa C ++?

2. ¿En qué se diferencia una definición de un anuncio?

3. Enumere las etapas de la creación de un programa ejecutable en C ++.

4. ¿Qué es un preprocesador?

5. ¿Qué es una directiva de preprocesador? Dé ejemplos de directivas de preprocesador.

6. Escriba un programa que imprima el texto "Mi primer programa en C ++"

2. Medios básicos del lenguaje C ++ 2.1. La composición del lenguaje

En un texto en cualquier lenguaje natural, se pueden distinguir cuatro elementos principales: símbolos, palabras, frases y oraciones. El lenguaje algorítmico también contiene tales elementos, solo las palabras se llaman lexemas (construcciones elementales), frases - expresiones, oraciones - operadores. Los lexemas se forman a partir de símbolos, expresiones de tokens y símbolos, operadores de símbolos de expresiones y tokens (Fig. 1.1)

Arroz. 1.1. Composición del lenguaje algorítmico Así, los elementos del lenguaje algorítmico son:

Los identificadores son los nombres de los objetos para los programas SI. El identificador puede contener letras latinas, números y guiones bajos. Se distinguen letras mayúsculas y minúsculas, por ejemplo, PROG1, prog1 y Prog1 son tres identificadores diferentes. El primer carácter debe ser una letra o un guión bajo (pero no un número). No se permiten espacios en identificadores.

Las palabras clave (reservadas) son palabras que tienen un significado especial para el compilador. No se pueden utilizar como identificadores.

- Los caracteres de operación son uno o más caracteres que definen una acción en un operando. Las operaciones se dividen en unario, binario y ternario según el número de operandos involucrados en esta operación.

Las constantes son valores inmutables. Hay constantes enteras, reales, de caracteres y de cadena. El compilador selecciona una constante como token (construcción elemental) y la asigna a uno de los tipos por su apariencia.

Los separadores son corchetes, punto, coma, espacios en blanco.

2.1.1. Constantes en C ++

Una constante es un token que representa una imagen de un valor numérico, de cadena o de carácter fijo.

Las constantes se dividen en 5 grupos:

Wholes;

- real (punto flotante);

Enumerable;

Simbólico;

Cuerda.

El compilador extrae un token y lo asigna a un grupo u otro, y luego internamente

tres grupos a un tipo determinado según su forma de grabación en el texto del programa y según su valor numérico.

Las constantes enteras pueden ser decimales, octales y hexadecimales. Una constante decimal se define como una secuencia de dígitos decimales que comienzan con un número distinto de 0, si el número no es 0 (ejemplos: 8, 0, 192345). Una constante octal es una constante que siempre comienza en 0. A 0 le siguen dígitos octales (ejemplos: 016 - valor decimal 14, 01). Las constantes hexadecimales son una secuencia de dígitos hexadecimales precedidos por caracteres 0x o 0X (ejemplos: 0xA, 0X00F).

V dependiendo del valor de la constante entera el compilador la presentará de manera diferente

v memoria de la computadora (es decir, el compilador asignará el tipo de datos correspondiente a la constante).

Las constantes reales tienen una forma diferente de representación interna en la memoria de la computadora. El compilador reconoce tales constantes por su apariencia. Las constantes reales pueden tener dos formas de representación: coma fija y coma flotante. Tipo de constante de coma fija: [dígitos]. [Dígitos] (ejemplos: 5.7 ,. 0001, 41.). Tipo de constante de coma flotante: [dígitos] [.] [Dígitos] E | e [+ | -] [dígitos ] (ejemplos: 0.5e5, .11e-5, 5E3). En la notación de constantes reales, se puede omitir la parte entera o fraccionaria, el punto decimal o el signo del exponente con el exponente.

Las constantes enumeradas se ingresan usando la palabra clave enum. Estas son constantes enteras ordinarias a las que se asignan designaciones únicas y fáciles de usar. Ejemplos: enum (uno = 1, dos = 2, tres = 3, cuatro = 4);

enum (cero, uno, dos, tres): si omite los signos = y en la definición de constantes enumeradas valores numéricos, los valores se asignarán de forma predeterminada. En este caso, el identificador más a la izquierda recibirá el valor 0, y cada uno de los siguientes aumentará en 1.

enum (diez = 10, tres = 3, cuatro, cinco, seis);

enum (domingo, lunes, martes, miércoles, jueves, viernes, sábado

Las constantes de caracteres son uno o dos caracteres entre apóstrofos. Las constantes de carácter que constan de un carácter son de tipo char y ocupan un byte en la memoria, las constantes de caracteres que constan de dos caracteres son de tipo int y ocupan dos bytes. Las secuencias que comienzan con \ se denominan secuencias de control y se utilizan:

- Para representar símbolos que no tienen pantalla gráfica, por ejemplo:

\ a - señal de sonido,

\ b - retrocede un paso, \ n - salto de línea,

\ t - pestaña horizontal.

- Para representar caracteres: \, ',? , "(\\, \’, \ ?, \ ").

- Para representar caracteres usando códigos hexadecimales u octales (\ 073, \ 0xF5).

Una constante de cadena es una secuencia de caracteres entre comillas.

Los caracteres de control también se pueden usar dentro de cadenas. Por ejemplo: "\ nNueva línea",

“\ N \” Lenguajes de programación algorítmica de alto nivel \ ””.

2.2. Tipos de datos en C ++

Los datos se muestran en el programa en todo el mundo. El propósito del programa es procesar datos. Datos diferentes tipos almacenados y procesados ​​de diferentes formas. El tipo de datos define:

1) representación interna de datos en la memoria de la computadora;

2) un conjunto de valores que pueden tomar valores de este tipo;

3) operaciones y funciones que se pueden aplicar a datos de este tipo.

V Dependiendo de los requisitos de la tarea, el programador elige el tipo de objetos del programa. Los tipos de C ++ se pueden dividir en tipos simples y compuestos. Los tipos simples son tipos que se caracterizan por un solo valor. C ++ define 6 tipos de datos simples:

int (entero)

char (personaje)

wchar_t (carácter ancho) bool (booleano) float (real)

doble (doble precisión real)

Hay 4 especificadores de tipo para especificar la representación interna y el rango de tipos estándar.

corto largo firmado

no firmado

2.2.1. Tipo de int

Los valores de este tipo son números enteros.

El tamaño del tipo int no está definido por el estándar, pero depende de la computadora y del compilador. Para un procesador de 16 bits, se le asignan 2 bytes, para un procesador de 32 bits - 4 bytes.

Si int está precedido por el especificador corto, entonces se asignan 2 bytes para el número, y si el especificador largo, 4 bytes. La cantidad de memoria asignada para el objeto depende del conjunto de valores válidos que el objeto puede tomar:

short int - toma 2 bytes, por lo tanto, tiene un rango de –32768 .. + 32767;

long int: ocupa 4 bytes, por lo tanto, tiene un rango de –2 147 483 648 .. + 2147483 647

El tipo int es el mismo que short int en PC de 16 bits y long int en PC de 32 bits.

Los modificadores firmados y sin firmar también afectan el conjunto de valores válidos que puede tomar un objeto:

unsigned short int - ocupa 2 bytes, por lo tanto, tiene un rango de 0 ..65536; unsigned long int - ocupa 4 bytes, por lo tanto, tiene un rango de 0 .. + 4294967

2.2.2. Tipo de char

Los valores de este tipo son miembros de un conjunto de caracteres ordenados finitos. A cada carácter se le asigna un número llamado código de carácter. Se asigna 1 byte para el valor del tipo de carácter. El tipo char se puede utilizar con los especificadores firmados y sin firmar. El tipo de datos de caracteres con signo puede almacenar valores en el rango de –128 a 127. Cuando se usa el tipo de datos de caracteres sin firmar, los valores pueden variar de 0 a 255. ASCII (Código estándar americano para intercambio internacional) se usa para codificación. Los caracteres con códigos de 0 a 31 se refieren a los de servicio y tienen significado independiente solo en declaraciones de E / S.

Los valores de tipo char también se utilizan para almacenar números de los rangos especificados.

2.2.3. Tipo de wchar_t

Diseñado para trabajar con un conjunto de caracteres para los que 1 byte no es suficiente, por ejemplo Unicode. Este tipo es generalmente del mismo tamaño que el corto. Las constantes de cadena de este tipo se escriben con el prefijo L: L “Cadena # 1”.

2.2.4. Tipo bool

El tipo bool se llama booleano. Sus valores pueden ser verdaderos y falsos. La forma interna es falsa: 0, cualquier otro valor se interpreta como verdadero.

2.2.5. Tipos de coma flotante.

La representación interna de un número real consta de 2 partes: la mantisa y el orden. En las PC compatibles con IBM, los valores flotantes ocupan 4 bytes, de los cuales un bit está reservado para la mantisa, 8 bits para la orden y 24 para la mantisa.

Los valores de los tipos dobles ocupan 8 bytes, se asignan 11 y 52 bits para la orden y la mantisa, respectivamente. La longitud de la mantisa determina la precisión del número y la longitud es del orden de su rango.

Si hay un especificador largo antes del nombre del tipo doble, se asignan bytes para el valor.

2.2.6. Tipo vacío

PARA los tipos principales también incluyen el tipo vacío. El conjunto de valores de este tipo es

2.3. Variables

Una variable en C ++ es un área de memoria con nombre que almacena datos de cierto tipo. Una variable tiene un nombre y un valor. El nombre se utiliza para hacer referencia al área de memoria en la que se almacena el valor. Cualquier variable debe declararse antes de su uso. Ejemplos:

Vista general del operador de descripción:

[clase de memoria] tipo nombre [inicializador];

La clase de memoria puede tomar los siguientes valores: auto, extern, static, register. La clase de memoria define la duración y el alcance de la variable. Si la clase de memoria no se especifica explícitamente, el compilador la determina basándose en el contexto de la declaración. La vida útil puede ser constante, durante la ejecución del programa o temporal, durante el bloque. El alcance es una parte del texto del programa desde la que se permite el acceso normal a una variable. Por lo general, el alcance es el mismo que el alcance. Excepto en el caso de que exista una variable con el mismo nombre en el bloque interno.

Const: indica que esta variable no se puede cambiar (denominada constante). Al describir, puede asignar un valor inicial a la variable (inicialización). Clases de memoria:

auto es una variable local automática. El especificador automático solo se puede especificar al definir objetos de bloque, por ejemplo, en el cuerpo de una función. Para estas variables, la memoria se asigna al entrar en el bloque y se libera al salir. Tales variables no existen fuera del bloque.

extern es una variable global, se encuentra en otro lugar del programa (en otro archivo o más adelante en el texto). Se utiliza para crear variables que están disponibles en todos los archivos de programa.

static es una variable estática, solo existe dentro del archivo donde se define la variable.

registro: son similares a los automáticos, pero la memoria para ellos se asigna en los registros del procesador. Si esto no es posible, las variables se tratan como automáticas.

int a; // variable global void main () (

int b; // variable local

extern int x; // variable x se define en otro lugar static int c; // variable estática local a = 1; // asignación a una variable global

int a; // variable local a

a = 2; // asignación a una variable local :: a = 3; // asignación a una variable global

int x = 4; // definición e inicialización de x

En el ejemplo, la variable a se define fuera de todos los bloques. El alcance de la variable a es el programa completo, excepto aquellas líneas donde se usa la variable local a. Las variables byc son locales, su alcance es bloque. La vida útil es diferente: la memoria bajo b se asigna cuando se ingresa al bloque (ya que por defecto la clase de memoria es auto), y se libera cuando se sale del bloque. La variable con (estática) existe mientras se ejecuta el programa.

Si el valor inicial de las variables no se especifica explícitamente durante la definición, el compilador establecerá las variables globales y estáticas en cero. Las variables automáticas no se inicializan.

El nombre de la variable debe ser único en su ámbito.

Una declaración de variable se puede realizar como una declaración o como una definición. La declaración contiene información sobre la clase de memoria y el tipo de variable, la definición junto con esta información da una instrucción para asignar memoria. En el ejemplo extern int x; - declaración, y el resto son definiciones.

2.4. Signos de operación en C ++

Los signos de operación proporcionan la formación de expresiones. Las expresiones constan de operandos, signos de operador y paréntesis. Cada operando es, a su vez, una expresión o un caso especial de una expresión: una constante o una variable.

Operaciones unarias

& obteniendo la dirección del operando

* Abordar la dirección (desreferenciar)

- menos unario, cambia el signo del operando aritmético

++ Incrementar en uno:

operación de prefijo: incrementa el operando antes de que se use

La operación postfijo incrementa el operando después de que se ha utilizado

int a = (m ++) + n; // a = 4, m = 2, n = 2

int b = m + (++ n); // a = 3, m = 1, n = 3

disminuir en uno:

operación de prefijo: disminuye el operando antes de que se use

La operación de sufijo disminuye el operando después de que se usa

calcular el tamaño (en bytes) de un objeto del tipo que

tiene un operando

tiene dos formas

tamaño de expresión

sizeof (flotador) // 4

sizeof (1.0) // 8, ya que las constantes reales por defecto

Lenguaje algorítmico - es un sistema de notación y reglas para el registro uniforme y preciso de algoritmos y su ejecución. Un lenguaje algorítmico es un medio para grabar algoritmos en forma analítica, intermedio entre la grabación de un algoritmo en un lenguaje natural (humano) y una grabación en un lenguaje informático (lenguaje de programación).

Existe una diferencia entre los conceptos de "lenguaje algorítmico" y "lenguajes de programación". En primer lugar, un programa escrito en un lenguaje algorítmico no está destinado necesariamente a una computadora. La implementación práctica de un lenguaje algorítmico es un tema separado en cada caso específico.

Como todo idioma, un lenguaje algorítmico tiene su propio vocabulario. La base de este diccionario está formada por las palabras utilizadas para escribir los comandos incluidos en el sistema de comando del ejecutor de uno u otro algoritmo. Estos comandos se denominan comandos simples. En un lenguaje algorítmico, se utilizan palabras, cuyo significado y método de uso se establece de una vez por todas. Estas palabras se llaman Servicio. El uso de palabras funcionales hace que el registro del algoritmo sea más descriptivo y la forma de presentación de varios algoritmos es uniforme.

Un algoritmo escrito en un lenguaje algorítmico debe tener un nombre. Es aconsejable elegir el nombre para que quede claro qué solución del problema describe el algoritmo dado. Para resaltar el nombre del algoritmo, delante de él se escribe la palabra de servicio ALG (ALGoritm). Nombre del algoritmo (generalmente con nueva línea) escribe sus mandamientos. Para indicar el comienzo y el final del algoritmo, sus comandos se incluyen en un par de palabras de servicio START (START) y KON (END). Los comandos se escriben secuencialmente.

ALG - el nombre del algoritmo

serie de comandos de algoritmo

Por ejemplo, un algoritmo que determina el movimiento de un ejecutante de robot puede ser el siguiente:

ALG - w_warehouse

Al construir nuevos algoritmos, se pueden utilizar los algoritmos compilados anteriormente. Los algoritmos que se utilizan en su totalidad como parte de otros algoritmos se denominan algoritmos auxiliares. Cualquier algoritmo de los previamente compilados puede ser auxiliar. También es posible que un algoritmo que contenga en sí mismo un enlace a algoritmos auxiliares pueda resultar auxiliar en una determinada situación.

Muy a menudo, a la hora de compilar algoritmos, se hace necesario utilizar el mismo algoritmo como auxiliar, lo que, además, puede resultar muy complejo y engorroso. Sería irracional empezar a trabajar cada vez que recomponer y memorizar tal algoritmo para su posterior uso. Por lo tanto, en la práctica, los llamados algoritmos auxiliares integrados (o estándar) se utilizan ampliamente, es decir tales algoritmos que están constantemente a disposición del intérprete. La referencia a tales algoritmos se realiza de la misma manera que a los algoritmos auxiliares "habituales". El robot ejecutor tiene un algoritmo auxiliar incorporado que puede moverse al almacén desde cualquier punto del campo de trabajo; para el ejecutor, el lenguaje de programación BASIC, este es, por ejemplo, el algoritmo SIN incorporado.

El algoritmo puede contener una apelación a sí mismo como auxiliar, y en este caso se llama recursivo. Si el comando para direccionar el algoritmo a sí mismo está en el algoritmo mismo, entonces dicha recursividad se llama derecho. Hay casos en los que una llamada recursiva de un algoritmo dado proviene de un algoritmo auxiliar, al que en este algoritmo hay un llamamiento. Esta recursividad se llama indirecto. Un ejemplo de recursión hacia adelante:

ALG - movimiento

tráfico

Los algoritmos, en cuya ejecución se determina el orden de los comandos en función de los resultados de la verificación de ciertas condiciones, se denominan derivación. Para describirlos en un lenguaje algorítmico, se utiliza un comando compuesto especial: el comando derivación. Según se aplica al ejecutante del robot, la condición puede ser verificar si el robot está en el borde del campo de trabajo (borde / no_ borde); comprobar la presencia de un objeto en la celda actual (sí / no) y algunos otros:

IF condición IF condición IF flanco

A la serie 1 A la serie A la derecha

ELSE series2 TODO LO DEMÁS adelante

La siguiente es una notación algorítmica del comando de selección, que es un desarrollo del comando de ramificación:

CUANDO condición 1: serie 1

CUANDO condición 2: serie 2

CUANDO condición N: serie N

ELSE serie N + 1

Los algoritmos, en cuya ejecución se ejecutan repetidamente comandos individuales o series de comandos, se denominan cíclicos. Para organizar algoritmos cíclicos en un lenguaje algorítmico, se utiliza una instrucción especial de bucle compuesto. Corresponde a los diagramas de bloques del tipo "iteración" y puede adoptar la siguiente forma:

MIENTRAS condición NTS

serie hasta condicion

Algoritmo: una instrucción precisa y comprensible para el ejecutante para realizar una secuencia de acciones destinadas a resolver la tarea asignada.

El nombre "algoritmo" proviene de la forma latina del nombre del matemático de Asia Central al-Khwarizmi - Algorithmi. El algoritmo es uno de los conceptos básicos de la informática y las matemáticas.

Un ejecutor de algoritmo es un sistema abstracto o real (técnico, biológico o biotecnológico) capaz de realizar las acciones prescritas por el algoritmo.

El ejecutante se caracteriza por:

acciones elementales;

sistema de mando;

El entorno (o escenario) es el "hábitat" del artista. Por ejemplo, para un robot intérprete de un libro de texto escolar, el miércoles es un campo celular sin fin. Las paredes y las celdas sombreadas también forman parte del entorno. Y su ubicación y la posición del propio Robot determinan el estado específico del entorno.

Cada ejecutor puede ejecutar comandos solo de una determinada lista estrictamente especificada: el sistema de comandos del ejecutor. Para cada comando, se deben especificar las condiciones de aplicabilidad (en qué estados del entorno se puede ejecutar el comando) y se deben describir los resultados de la ejecución del comando. Por ejemplo, el comando "arriba" del Robot se puede ejecutar si no hay una pared sobre el Robot. Su resultado es un desplazamiento del Robot una celda hacia arriba.

Después de llamar al comando, el ejecutor realiza la acción elemental correspondiente.

Las fallas del ejecutor ocurren cuando se invoca un comando con un estado no válido del entorno.

Por lo general, el ejecutor no sabe nada sobre el propósito del algoritmo. Ejecuta todos los comandos que recibe sin hacer las preguntas de "por qué" o "por qué".

En informática, la computadora es el ejecutor universal de algoritmos.

Las principales propiedades de los algoritmos son las siguientes:

Comprensibilidad para el intérprete, es decir el ejecutor del algoritmo debe saber ejecutarlo.

Discreción (discontinuidad, separación) - es decir el algoritmo debe representar el proceso de resolución del problema como una ejecución secuencial de pasos (etapas) simples (o previamente definidos).

Definición - es decir cada regla del algoritmo debe ser clara, inequívoca y no dejar lugar a la arbitrariedad. Debido a esta propiedad, la ejecución del algoritmo es mecánica y no requiere instrucciones adicionales o información sobre el problema que se está resolviendo.

Rendimiento (o extremidad). Esta propiedad consiste en que el algoritmo debe conducir a la solución del problema en un número finito de pasos.

Carácter de masas. Esto significa que el algoritmo para resolver el problema se desarrolla en vista general, es decir. debería ser aplicable para una cierta clase de problemas que difieren solo en los datos iniciales. En este caso, los datos iniciales se pueden seleccionar de un área determinada, que se denomina área de aplicabilidad del algoritmo.

En la práctica, las siguientes formas de presentación de algoritmos son las más comunes:

verbal (registros en lenguaje natural);

gráfico (imágenes de símbolos gráficos);

pseudocódigos (descripciones semiformalizadas de algoritmos en un lenguaje algorítmico condicional, que incluyen tanto elementos del lenguaje de programación como frases en lenguaje natural, notación matemática generalmente aceptada, etc.);

software (textos en lenguajes de programación).

La forma verbal de escribir algoritmos es una descripción de las etapas secuenciales del procesamiento de datos. El algoritmo se establece en forma libre en lenguaje natural.

Por ejemplo. Escribe el algoritmo para encontrar el máximo común divisor (MCD) de dos números naturales.

El algoritmo puede ser el siguiente:

establecer dos números;

si los números son iguales, tome cualquiera de ellos como respuesta y deténgase; de ​​lo contrario, continúe con el algoritmo;

determinar el mayor de los números;

reemplace el mayor de los números con la diferencia entre el mayor y el menor de los números;

repita el algoritmo del paso 2.

El algoritmo descrito es aplicable a cualquier número natural y debería conducir a la solución del problema. Compruébelo usted mismo utilizando este algoritmo para determinar el máximo común divisor de 125 y 75.

La forma verbal no tiene generalizado las siguientes razones:

tales descripciones no están estrictamente formalizadas;

sufren de verbosidad en los registros;

permitir la ambigüedad en la interpretación de las prescripciones individuales.

La forma gráfica de presentar los algoritmos es más compacta y clara en comparación con la verbal.

En una presentación gráfica, el algoritmo se representa como una secuencia de bloques funcionales interconectados, cada uno de los cuales corresponde a la ejecución de una o más acciones.

Tal representación grafica llamado diagrama de flujo o diagrama de flujo.

En el diagrama de flujo, cada tipo de acción (entrada de datos iniciales, cálculo de valores de expresión, verificación de condiciones, control de repetición de acciones, finalización de procesamiento, etc.) corresponde a una figura geométrica presentada en forma de símbolo de bloque. Los símbolos de bloque están conectados por líneas de transición que determinan el orden en que se realizan las acciones.

La Tabla 1 enumera los símbolos más utilizados.

El bloque "proceso" se utiliza para designar una acción o una secuencia de acciones que cambian el valor, la forma de presentación o la ubicación de los datos. Para mejorar la claridad del diagrama, se pueden combinar varios bloques de procesamiento separados en un bloque. La representación de operaciones individuales es bastante gratuita.

El bloque "decisión" se utiliza para indicar transiciones de control condicionales. Cada bloque de "solución" debe indicar la pregunta, condición o comparación que define.

El bloque "modificación" se utiliza para organizar estructuras cíclicas. (La palabra modificación significa modificación, transformación). El parámetro de bucle se escribe dentro del bloque, para lo cual se especifica su valor inicial, la condición de límite y el paso de cambiar el valor del parámetro para cada repetición.

El bloque "proceso predefinido" se utiliza para indicar llamadas a algoritmos auxiliares que existen de forma autónoma en forma de algunos módulos independientes y para llamadas a rutinas de biblioteca.

El pseudocódigo es un sistema de reglas y notación diseñado para registrar algoritmos de manera consistente.

Ocupa un lugar intermedio entre los lenguajes naturales y formales.

Por un lado, está cerca del lenguaje natural ordinario, por lo que los algoritmos se pueden escribir y leer en él como un texto ordinario. Por otro lado, el pseudocódigo utiliza algunas construcciones formales y notación matemática, lo que acerca la notación del algoritmo a la notación matemática generalmente aceptada.

El pseudocódigo no acepta las reglas sintácticas estrictas para escribir comandos inherentes a los lenguajes formales, lo que facilita la escritura de un algoritmo en la etapa de diseño y permite utilizar un conjunto más amplio de comandos diseñados para un ejecutor abstracto. Sin embargo, el pseudocódigo generalmente contiene algunas construcciones que son inherentes a los lenguajes formales, lo que hace que sea más fácil pasar de escribir en pseudocódigo a escribir un algoritmo en un lenguaje formal. En particular, en el pseudocódigo, al igual que en los lenguajes formales, hay palabras funcionales, cuyo significado se determina de una vez por todas. Están resaltados en negrita en el texto impreso y subrayados en el texto escrito a mano. No existe una definición única o formal de pseudocódigo, por lo tanto, son posibles varios pseudocódigos, que difieren en el conjunto de palabras de servicio y construcciones básicas (básicas).

Un ejemplo de pseudocódigo es un lenguaje algorítmico escolar en notación rusa (escuela AY), descrito en el libro de texto por A.G. Kushnirenko et al. "Fundamentals of Informatics and tecnología informática", 1991. De aquí en adelante llamaremos a este lenguaje simplemente" lenguaje algorítmico ".

Palabras de servicio básico

Vista general del algoritmo:

nombre del algoritmo alg (argumentos y resultados)

se dan las condiciones de aplicabilidad del algoritmo

necesitas el objetivo del algoritmo

iniciar descripción de valores intermedios

| secuencia de comandos (cuerpo del algoritmo)

La parte del algoritmo desde la palabra alg hasta el inicio de la palabra se denomina encabezado, y la parte encerrada entre las palabras inicio y final se denomina cuerpo del algoritmo.

En la oración al, después del nombre del algoritmo, se indican las características (arg, res) y el tipo de valor (entero, cosa, sim, iluminado o log) de todas las variables de entrada (argumentos) y salida (resultados) entre paréntesis. Al describir matrices (tablas), se utiliza la pestaña de palabra de servicio, complementada con pares de límites para cada índice de elementos de matriz.

Ejemplos de oraciones alg:

alg Volumen y área de un cilindro (elemento arg R, H, elemento res V, S)

alg Roots KvUr (arg cosa a, b, c, rez cosa x1, x2, rez lit t)

alg Excluir elemento (arg entero N, arg rez cosa pestaña A)

alg diagonal (arg cel N, arg cel tab A, res lit Otvet)

Se dan sugerencias y deben ser opcionales. Se recomienda escribir en ellos declaraciones que describan el estado del entorno del ejecutor del algoritmo, por ejemplo:

alg Reemplazo (arg iluminado Str1, Str2, arg res lit Text)

dado | las longitudes de las subcadenas Str1 y Str2 son las mismas

es necesario | en todas partes de la cadena de texto, la subcadena Str1 se reemplaza por Str2

alg Número de máximos (arg int N, arg real tab A, res integer K)

dado | N> 0

es necesario | K - el número máximo de elementos en la tabla A

alg Resistencia (arg cosa R1, R2, arg int N, res cosa R)

dado | N> 5, R1> 0, R2> 0

es necesario | R - resistencia del circuito

Aquí en oraciones se da y es necesario después de "|" los comentarios se registran. Los comentarios se pueden colocar al final de cualquier línea. El traductor no los procesa, pero hacen que el algoritmo sea mucho más fácil de entender.

Los algoritmos se pueden considerar como algunas estructuras, que consisten en elementos básicos separados (es decir, básicos).

Naturalmente, con este enfoque de los algoritmos, el estudio de los principios básicos de su diseño debe comenzar con el estudio de estos elementos básicos.

Para describirlos usaremos el lenguaje de esquemas algorítmicos y el lenguaje algorítmico escolar.

La estructura lógica de cualquier algoritmo se puede representar mediante una combinación de tres estructuras básicas:

seguir,

derivación,

Las estructuras básicas se caracterizan por la presencia de una entrada y una salida.

Lenguaje de programación algorítmica- un lenguaje formal utilizado para escribir, implementar y aprender algoritmos. A diferencia de la mayoría de los lenguajes de programación, el lenguaje algorítmico no está ligado a la arquitectura de la computadora, no contiene detalles relacionados con la estructura de la máquina.

Para estudiar los conceptos básicos de la algoritmización, el llamado Lenguaje algorítmico ruso(lenguaje algorítmico de la escuela), utilizando palabras en ruso comprensibles para el alumno.

El académico A. P. Ershov introdujo en uso un lenguaje algorítmico similar a un algoritmo con sintaxis rusa a mediados de la década de 1980, como base para un curso de informática "sin máquinas".

Las principales palabras funcionales del lenguaje algorítmico.

Descripción del algoritmo

  • alg(algoritmo)
  • arg(argumento)
  • Corte(resultado)
  • temprano(inicio) - el comienzo del algoritmo
  • estafa(fin) - fin del algoritmo
  • dado- datos iniciales en cualquier forma
  • necesario- el objetivo del algoritmo

Tipos de datos:

  • intacto(entero)
  • cosas(verdadero)
  • Sim(personaje)
  • litas(literal) - cadena
  • Iniciar sesión(lógico)
  • pestaña(tabla) - para denotar una matriz
  • longitudes(longitud) - número de elementos de la matriz

Designación de condición

  • si
  • de lo contrario
  • elección
  • sentido

Notación de ciclo

  • nts(inicio de ciclo)
  • kts(fin de ciclo)
  • tiempo

Funciones y valores booleanos para construir expresiones

De entrada y salida

  • aporte
  • producción

Vista general del algoritmo

1
2
3
4
5
6

alg nombre del algoritmo (argumentos y resultados)
| dado condiciones de aplicabilidad del algoritmo
| necesario el propósito del algoritmo
temprano descripción de valores intermedios
| secuencia de comandos (cuerpo del algoritmo)
estafa

Parte del algoritmo de la palabra alg a la palabra temprano llamado el título, y la parte entre las palabras temprano y estafa- el cuerpo del algoritmo.

En una frase alg después del nombre del algoritmo entre paréntesis están las características ( arg, Corte) y tipo de valor ( intacto, cosas, Sim, litas o Iniciar sesión) de todas las variables de entrada (argumentos) y salida (resultados). Al describir matrices (tablas), se usa una palabra especial pestaña, complementado con pares de límites para cada índice de los elementos de la matriz.

Registro de algoritmo palabras clave generalmente subrayado o en negrita. Para resaltar los bloques lógicos, se aplica sangría y las palabras emparejadas del principio y el final del bloque se conectan con una línea vertical.

Estructuras algorítmicas básicas

En este artículo se ofrece una descripción detallada de las principales estructuras algorítmicas. A continuación se muestran las plantillas para componer estas estructuras en un lenguaje algorítmico.
Horquilla incompleta

| si condición
| | luego comportamiento
| todos

Tenedor completo

1
2
3
4
5

| si condición
| | luego acción 1
| | de lo contrario acción 2
| todos

Derivación

1
2
3
4
5
6
7
8

| elección parámetro
| | al significado valor 1
| | | acción 1
| | al significado valor 2
| | | acción 2
| | de lo contrario
| | | acciones predeterminadas
| todos

Bucle con condición previa

| nc adiós condición
| | comportamiento
| kts

Bucle con poscondición

La mayoría de las veces, las instrucciones están escritas en un lenguaje algorítmico. Es necesario para la prescripción precisa de todos los pasos y su ejecución. Existen claras diferencias entre el lenguaje algorítmico de la escuela y los lenguajes de programación. Como regla general, no solo una computadora actúa como intérprete en la primera versión, sino también otro dispositivo que es capaz de realizar un trabajo. Cualquier programa escrito en un lenguaje algorítmico no tiene que ser realizado por tecnología. La implementación de todas las instrucciones en la práctica es un tema completamente separado. A continuación también se considerará una descripción del algoritmo en lenguaje algorítmico. Le ayudará a comprender la estructura de este sistema.

Estudiando en la escuela

El lenguaje algorítmico a menudo se enseña en las escuelas, más conocido como lenguaje de enseñanza. Se ha generalizado debido al hecho de que utiliza palabras que son más comprensibles para cualquier estudiante. Hace mucho tiempo que se introdujo un lenguaje similar con sintaxis en ruso, es decir, a mediados de la década de 1980. Se utilizó para dar una base a los escolares y enseñarles un curso de informática sin computadora. Publicado idioma dado estaba en 1985 en uno de los libros de texto. También se reimprimió varias veces para libros especiales que estaban destinados a la enseñanza en los grados 9 y 10. La tirada total de la publicación fue de 7 millones de copias.

Secuencia de grabación de algoritmos

En primer lugar, debe escribir la combinación de letras ALG. Sigue el nombre del algoritmo. Luego, después del NACH, debe describir una serie de comandos. Operador KOH significa el final del programa.

Descripción del algoritmo en lenguaje algorítmico:

Compañía ALG

COMIENZO

girar 90 grados a la izquierda

KOH

Al escribir, las palabras clave deben estar subrayadas o en negrita. Para indicar bloques lógicos, debe usar sangría, y si hay palabras emparejadas al principio y al final, debe usar la barra vertical, que denota la conexión.

Compilación de algoritmos

Las notas antiguas se pueden utilizar para redactar nuevas instrucciones. Estas instrucciones se denominan instrucciones auxiliares. Un algoritmo similar puede ser cualquiera de los descritos anteriormente. También es posible que en este sistema se aplique un algoritmo adicional, que a su vez recibió una referencia a sistemas auxiliares.

A menudo, al crear una instrucción, es necesario utilizar solo un algoritmo como uno adicional. Esta es la razón por la que las grabaciones a menudo pueden ser complejas y engorrosas. Pero vale la pena señalar que la capacidad de hacer una referencia es más fácil que reescribir los mismos registros varias veces.

Por eso, en la práctica, a menudo se utiliza un algoritmo auxiliar estándar, que está constantemente subordinado al usuario. Se puede hacer referencia a la instrucción, tanto a sí misma como a cualquier otra persona. Los comandos de lenguaje algorítmico están diseñados para tales acciones. Estas instrucciones se denominan recursivas.

El comando self-bind está dentro del propio sistema. Esta recursividad es sencilla. Una indirecta es aquella en la que se llama al algoritmo en cualquier otra instrucción auxiliar.

Los algoritmos, que tienen un cierto orden de instrucciones, pueden cambiar constantemente dependiendo de los resultados de la ejecución de partes especiales del programa. Estos sistemas se denominan sistemas de ramificación. Para crearlos, debe usar un comando de rama especial. Tiene un esquema de ortografía abreviado y completo. No es raro ver algoritmos cíclicos que ejecutan comandos específicos varias veces.

Taller electrónico

Para mejorar el estudio de la teoría en el lenguaje gramatical, los profesionales de la Facultad de Mecánica y Matemáticas de la Universidad Estatal de Moscú en 1985 crearon un compilador especial. Se llamó "E-taller". Con su ayuda fue posible ingresar, modificar y ejecutar programas. Al año siguiente, se lanzó un conjunto específico de artistas. Está sobre "Robot", "Dibujante", "Bípedo", "Vehículo todo terreno". Esto hizo posible implementar los algoritmos de forma sencilla y sencilla. Este compilador se ha vuelto muy popular y se ha utilizado en algunas computadoras. Suficiente largo tiempo este lenguaje de programación se ha perfeccionado y cambiado. En 1990, apareció una versión posterior en un libro de texto.

Ídolo

Ahora el lenguaje algorítmico de la escuela está experimentando su renacimiento, después de que se desarrolló un paquete especial "Idol" para Windows y Linux. El sistema funciona con varios artistas. Clásicos entre ellos son "Robot", "Dibujante". El mismo paquete está incluido en archivo de instalación Linux "Escuela". Este sistema fue desarrollado especialmente por orden de la Academia de Ciencias de Rusia. Se distribuye de forma gratuita y gratuita. En los últimos años, el lenguaje descrito se ha propuesto activamente para ser utilizado en el examen como uno de los

Asignación de idioma

El lenguaje algorítmico se utiliza para resolver una amplia gama de problemas. Es adecuado para dominar tanto las matemáticas como los ejercicios de otras materias. Cabe señalar que también se utiliza para facilitar a los escolares el estudio de temas similares.

Diferencias entre lenguajes algorítmicos y de máquina

El representante más famoso de los lenguajes dependientes de la máquina es "Ensamblador". Durante la programación en él, una persona debe indicar claramente al traductor, gracias a operadores especiales, qué celdas de memoria deben llenarse o transferirse. Dado que la sintaxis de "Assembler" es lo más cercana posible a la forma de escritura por computadora, es bastante difícil estudiarla. Es por eso que el lenguaje algorítmico se enseña en la escuela, así como al inicio de la enseñanza de la programación en el primer año de educación superior.

Funciones estándar

El lenguaje algorítmico tiene especial funciones estándar, que han recibido el estado de "integrado". Es gracias a ellos que puede escribir fácilmente muchas operaciones con números y expresiones sin realizar entradas de rutina. El programa de lenguaje algorítmico es bastante simple. Las funciones estándar pueden permitirle calcular la raíz cuadrada, los logaritmos, el módulo, etc. Los métodos integrados más populares son los siguientes:

  • Abs absoluto del módulo (X);
  • raíz cuadrada sqrt (X);
  • natural y ln (X), lg (X);
  • mínimo y máximo min (X, Y), max (X, Y);
  • funciones trigonométricas sin (X), cos (X), tg (X), ctg (X).

Gracias a esto, cualquier programador o simplemente una persona que aprenda a trabajar con un lenguaje algorítmico puede escribir fácilmente un problema matemático sin recurrir a la invención de la bicicleta. Por lo tanto, debe tenerse en cuenta que este lenguaje es bastante fácil de usar. Es simple de entender y también tan fácil de entender como sea posible. No en vano se incluyó en el plan de estudios de la escuela. Los escolares están felices de estudiarlo.



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