
Lect5
.pdfАлгоритмические компилируемые языки. Алгоритм
Алгоритм – это упорядоченная совокупность точных (формализованных) и полных команд исполнителю алгоритма (человек, ЭВМ), задающих порядок и содержание действий, которые он должен выполнить для нахождения решения любой задачи из рассматриваемого класса задач.
А.В.Гаврилов |
11 |
Кафедра АППМ, НГТУ
Алгоритмические компилируемые языки.
•Любой алгоритм ориентирован на некоторый
общий метод решения класса задач и представляет собой формализованную запись метода, процедуры.
•Алгоритм, записанный на некотором алгоритмическом, формальном языке, состоит из
заголовка алгоритма (описания параметров,
спецификаций класса задач) и тела алгоритма
(последовательности команд исполнителя,
преобразующих входные параметры в выходные).
•Для записи, исполнения, обмена и хранения
алгоритмов существуют различные средства,
языки, псевдокоды – блок-схемы, структурограммы (схемы Нэсси-Шнайдермана), Р-схемы, школьный алгоритмический язык (ШАЯ), различные языки
программирования.
А.В.Гаврилов |
12 |
Кафедра АППМ, НГТУ
Алгоритмические компилируемые языки. Основные свойства алгоритма
•Детерминированность — определённость. В каждый момент времени следующий шаг работы однозначно определяется состоянием системы. Таким образом, алгоритм выдаёт один и тот же результат (ответ) для одних и тех же исходных данных.
•Понятность — алгоритм для исполнителя должен включать только те команды, которые ему (исполнителю) доступны, т.е. которые входят в его систему команд.
•Завершаемость (конечность) — при корректно заданных исходных данных алгоритм должен завершать работу и выдавать результат за конечное число шагов. С другой стороны, вероятностный алгоритм может и никогда не выдать результат, но вероятность этого равна 0.
•Массовость — алгоритм должен быть применим к разным наборам исходных данных.
А.В.Гаврилов |
13 |
Кафедра АППМ, НГТУ
Алгоритмические компилируемые языки. Базовые алгоритмические структуры
Различают три базовые алгоритмические структуры: следование, ветвление, повторение.
•Структура следование состоит из двух команд с указанной очередностью их выполнения и имеет вид:
<команда – предшественник>;<команда – преемник>.
•Структура типа ветвления в полной форме состоит из некоторого условия, проверяемого на истинность при выполнении структуры, команды, выполняемой при выполнении проверяемого условия, и команды, выполняемой при невыполнении условия. Структура имеет вид
if <условие> then <команда, выполняемая при выполнении условия> else <команда, выполняемая при невыполнении условия>;.
•Структура повторения (цикл) служит для компактной записи одного и того же набора команд, повторяемых для различных значений параметров команд. Телом цикла называется последовательность повторяемых команд, которая может быть
и пустой. |
А.В.Гаврилов |
14 |
|
Кафедра АППМ, НГТУ

Алгоритмические компилируемые языки. Примеры базовых алгоритмических структур
Условный оператор if :
if (выражение_условие) |
Вход |
|
|
Условие |
|
||
оператор_1; |
ДА |
НЕТ |
|
|
|
||
else |
|
истинно? |
|
|
|
|
|
оператор_2; |
|
|
|
|
Действие 1 |
|
Действие 2 |
А.В.Гаврилов Выход 15 Кафедра АППМ, НГТУ

Алгоритмические компилируемые языки. Примеры базовых алгоритмических структур
Один из операторов цикла –
цикл типа while (пока):
while (условие) оператор; Пример: Вычислить АN:
…
n=7; a=-3; i=1; p=1;
while (i<=n)
{ нет
p*=a;
i++;
}
…
n=7 a=-3
i=1
p=1
да
i<=n
p*=a
i++
А.В.Гаврилов |
16 |
Кафедра АППМ, НГТУ
Ключевые понятия любого алгоритмического языка
•Синтаксис языка
–Как выглядит исходный текст программы
•Семантика языка
–Чему соответствует в исполняемой программе то, что написано в исходном тексте
•Переменная:
–Идентификатор (имя переменной)
–Тип
–Область видимости (локальные, глобальные переменные)
•Присваивание
–Значений переменным
•Оператор – синтаксически законченный фрагмент программы, имеющий определенную семантику
•Связывание
–Имен переменных и функций с их адресом в виртуальной памяти
•Процедуры и функции (поименованные части программы, которые можно многократно вызывать в программе)
А.В.Гаврилов |
17 |
Кафедра АППМ, НГТУ

Пример подготовки программы на |
||||||
алгоритмическом компилируемом |
||||||
Файл ppppp.c |
|
языке С |
|
|||
Исходный |
|
Обработка директив |
Полный |
|
||
текст на СИ |
|
|
|
|||
|
Препроцессор |
|
текст |
Компилятор |
||
|
|
|
||||
|
|
программы |
||||
|
|
|
|
|||
Включаемые |
|
|
(единица |
|
||
|
|
трансляции) |
Компиляция или |
|||
файлы |
Файл xxxxx.h |
|||||
|
|
|||||
|
|
|
трансляция |
|||
|
|
|
|
|
||
Объектный |
Файл ppppp.obj |
|
|
|
||
код |
|
|
|
|
|
|
программы |
|
|
|
|
||
|
|
Компоновщик |
|
Исполняемая |
||
Стандартные |
|
программа |
||||
|
|
|
||||
библиотеки |
Связывание |
|
Файл |
ppppp.exe |
||
|
|
А.В.Гаврилов |
|
18 |
||
|
|
Кафедра АППМ, НГТУ |
|
#include <stdio.h> // включение в текст
//файла с функциями
//ввода-вывода
/* Пример 1 */ void main(void)
{
int a, b, sum;// описание (определение) переменных printf("Введите два числа а и b \n");
scanf("%d%d", &a, &b); // ввод переменных sum=a+b;
printf("a= %d b= %d Сумма= %d \n", a,b,sum);
}// пример вывода: а=10 b=20 Сумма=30
А.В.Гаврилов |
19 |
Кафедра АППМ, НГТУ

Пример |
#include <stdio.h> |
программы на С |
void main() |
|
|
|
{ |
Программа вводит строку с |
char st[10], c; |
int n, i; |
|
клавиатуры, |
gets(st); |
инвертирует ее (переписывает |
n = sizeof(st); |
наоборот) и выводит. |
n = 0; |
Строка запоминается в строковой |
while (st[n] != 0) n++; |
n >> 1; |
|
переменной (массиве символьных |
for (i = 0; i<n/2; i++) |
переменных) st и не может превышать |
{ |
9 символов |
c = st[i]; |
Обратите внимание на обмен |
st[i] = st[n-i-1]; |
st[n-i-1] = c; |
|
значениями двух элементов массива с |
} |
использованием дополнительной |
puts(st); |
переменной c |
} |
А.В.Гаврилов |
20 |
Кафедра АППМ, НГТУ