449.57K
Category: programmingprogramming

Основы алгоритмизации и программирования на С/Си++

1.

Основы алгоритмизации
и программирования
на С/Си++

2.

ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ
Алгоритм — конечный набор правил, который
определяет последовательность операций для решения
конкретного множества задач.
Алгоритмический язык — формальный язык,
используемый для записи, реализации или изучения
алгоритмов.
Язык программирования — формальная знаковая
система, предназначенная для записи компьютерных
программ.
Программа — совокупность данных и команд,
предназначенных
для
реализации
определённого
алгоритма.
Программирование — научная и практическая
деятельность по созданию программ.
2

3.

3
• Язык
программирования
определяет
набор
лексических, синтаксических и семантических правил,
задающих внешний вид программы и действия,
которые выполнит компьютер под её управлением.
• Синтаксис устанавливает правила построения всех
элементов языка и описывает структуру программы
как
набор
символов
(обычно
говорят:
«безотносительно к содержанию»).
• Семантика
определяет
смысл
и
правила
использования каждой синтаксической конструкции.
• Любой
язык
программирования
является
алгоритмическим
языком,
но
не
всякий
алгоритмический язык пригоден для использования в
качестве языка программирования.

4.

4
• Машинный код.
Программа, непосредственно выполняемая процессором
компьютера, представляет собой последовательность нулей и
единиц, одни участки которой кодируют команды, а другие —
данные. Подобная последовательность называется машинным
кодом.
Язык ассемблера представляет собой удобную для
восприятия человеком форму записи машинных команд.
Между машинным кодом и кодом на языке ассемблера
существует взаимно однозначное соответствие. Программа,
которая переводит текст с языка ассемблера в машинный код,
называется ассемблером. Для каждого процессора имеется свой
набор машинных команд и, следовательно, свой ассемблер.
Для написания программы требуется иметь полный
контроль над процессором.

5.

5
• Чаще всего на первый план выходят такие задачи, как
быстрое написание читаемого и переносимого кода. Для этих
целей были созданы языки высокого уровня.
• Язык программирования высокого уровня — язык
программирования, разработанный для быстроты и удобства
использования
программистом.
Основная
черта
высокоуровневых языков — это абстракция, то есть введение
смысловых конструкций, кратко описывающих такие
структуры данных и операции над ними, описания которых на
машинном коде (или другом низкоуровневом языке
программирования) очень длинны и сложны для понимания.
• Программа, написанная на языке высокого уровня, состоит
из инструкций (операторов). Каждый оператор языка
высокого уровня соответствует последовательности из
нескольких низкоуровневых инструкций (машинных команд).

6.

6
Парадигмы программирования.
• Языки высокого уровня, предназначенные для решения
сходных задач сходными методами принято разделять на
группы, называемые парадигмами.
• Парадигма программирования — это совокупность идей и
понятий, определяющих стиль написания программ. В рамках
каждой парадигмы существуют свои соглашения о том, какие
подходы применяются при решении различных типов задач,
как оформлять программный код и т. д.
• Все языки программирования делятся на две группы:
декларативные и императивные.

7.

7
• Программа
на
императивном
языке
программирования с математической точки зрения
представляет собой общее решение поставленной задачи,
иными словами, ответ на вопрос «как делать?». Это
последовательность команд, которые должен выполнить
исполнитель.
• Программа
на
декларативном
языке
программирования
является
сочетанием
формализованной в рамках языка программирования
задачей и всех необходимых для её решения теорем,
проще говоря, ответ на вопрос «что делать?».

8.

8
• В рамках императивной парадигмы существуют
несколько подходов к разбиению задач на подзадачи;
основные из них: процедурное программирование и
объектно-ориентированное программирование.
• Структурное программирование — методология
разработки программного обеспечения, в основе которой
лежит представление программы в виде иерархической
структуры блоков. В соответствии с данной методологией
любая
программа
представляет собой
структуру,
построенную из трёх типов базовых конструкций (рис.):

9.

9
Рис. Базовые конструкции структурного
программирования:
а) последовательное исполнение;
б) ветвление;
в) цикл с предусловием
а)
б)
в)

10.

10
последовательное
исполнение

однократное
выполнение операций в том порядке, в котором они записаны в
тексте программы;
— ветвление — однократное выполнение одной из двух или
более операций, в зависимости от выполнения некоторого
заданного условия;
— цикл — многократное исполнение одной и той же операции
до тех пор, пока выполняется некоторое заданное условие.

• В программе базовые конструкции могут быть вложены друг
в друга произвольным образом.
• Фрагменты программы, представляющие собой логически
целостные
вычислительные
блоки

том
числе,
повторяющиеся фрагменты) могут оформляться в виде так
называемых подпрограмм (процедур или функций).

11.

11
• Трансляция: интерпретация и компиляция.
Есть два способа выполнения программы
компьютером:
она
может
быть
подвергнута
компиляции или интерпретации.
В простейшем случае интерпретатор читает
исходный текст программы по строкам, выполняет
инструкции, описанные в этой строке, и затем
переходит к следующей. Так, например, работали
ранние версии языка Basic. В языках типа Java
исходный текст программы сначала конвертируется в
промежуточную форму (байт-код), а затем уже
интерпретируется при выполнении программы.

12.

12
Компилятор конвертирует программу в объектный
код, то есть транслирует исходный текст программы в
форму, более пригодную для непосредственного
выполнения компьютером. Объектный код также называют
двоичным или машинным кодом; он зависит от того, для
какой платформы (какого процессора) производится
компиляция программы. В общем случае интерпретируемая
программа выполняется медленнее, чем скомпилированная.
Программа,
написанная
на
любом
языке
программирования, может как компилироваться, так и
интерпретироваться, однако многие языки изначально
созданы для выполнения преимущественно одним из этих
способов. При разработке языка С/С++ его конструкции
оптимизировались для компиляции.

13.

13
• Трансляция — преобразование программы,
представленной на одном языке программирования, в
программу на другом языке, в определённом смысле
равносильную первой.
• Таким образом, компилятор — это транслятор,
который преобразует программы в машинный язык, а
интерпретатор — это транслятор, осуществляющий
пооператорную
(покомандную)
обработку
и
выполнение исходной программы.

14.

14
• Под компиляцией понимают процесс, при котором
содержимое текстового файла преобразуется в
исполняемый
машинный
код,
понимаемый
процессором компьютера. Однако компилятор создает
не готовую к исполнению программу, а только
объектный код (файл с расширением *.obj). Этот код
является промежуточным этапом при создании готовой
программы.

15.

Дело в том, что создаваемая программа может
содержать функции стандартных библиотек языка
С++, реализации которых описаны в объектных
файлах библиотек.
Например, в программе используется функция printf()
стандартной библиотеки «stdio.h». Это означает, что
объектный файл с расширением .obj будет содержать
лишь инструкции по вызову данной функции, но код
самой функции в нем будет отсутствовать.
Для того чтобы итоговая исполняемая программа
содержала все необходимые реализации функций,
используется компоновщик объектных кодов.

16.

Компоновщик – это программа, которая объединяет
в единый исполняемый файл объектные коды
создаваемой
программы,
объектные
коды
реализаций библиотечных функций и стандартный
код запуска для заданной операционной системы.
В итоге и объектный файл, и исполняемый файл
состоят из инструкций машинного кода. Однако
объектный файл содержит только результат
перевода на машинный язык текста программы,
созданной программистом, а исполняемый файл –
также и машинный код для используемых
стандартных библиотечных подпрограмм и для кода
запуска.
English     Русский Rules