Добавлен: 20.05.2023
Просмотров: 356
Скачиваний: 4
СОДЕРЖАНИЕ
2. ОСНОВНЫЕ СВОЙСТВА АЛГОРИТМОВ
3. ОБЩИЕ ПРИНЦИПЫ РАЗРАБОТКИ АЛГОРИТМОВ
4. СПОСОБЫ ОПИСАНИЯ АЛГОРИТМОВ
5. РАЗВЕТВЛЯЮЩИЙСЯ АЛГОРИТМ С++
5.1. РЕАЛИЗАЦИЯ АЛГОРИТМОВ НА ЯЗЫКАХ ПРОГРАММИРОВАНИЯ
5.2. СОСТАВ И ОПИСАНИЕ АЛГОРИТМИЧЕСКОГО ЯЗЫКА
5.3.1. ТИПЫ ДАННЫХ В ЯЗЫКЕ С++
5.3.2. АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ И ОПЕРАТОРЫ ОТНОШЕНИЯ ЯЗЫКА С++
Языки программирования характеризуются ограниченным числом слов, смысл которых понятен транслятору, и строгими правилами записи команд, называемых операторами. Совокупность таких требований образует синтаксис языка, а смысл каждой команды и других конструкций языка – его семантику.
Для получения работающей программы ее текст, созданный с помощью языка программирования, переводится в машинный код при помощи программы-транслятора для дальнейшего использования либо отдельно от исходного текста, либо для выполнения указанных в тексте команд языка. К трансляторам относятся программы-компиляторы и программы-интерпретаторы.
Компилятор переводит текст программы в машинный код: полностью обрабатывает текст, называемый исходным кодом, т.е. производит поиск синтаксических ошибок, выполняет определенный смысловой анализ, переводит (транслирует) на машинный язык (генерирует машинный код).
Интерпретатор выполняет команды языка, указанные в тексте программы. Сначала структура очередного оператора текста анализируется, транслируется в некоторое промежуточное представление или даже в машинный код, после чего оператор исполняется; если текущий оператор успешно выполнен, анализируется следующий оператор. Без соответствующего интерпретатора текст программы является просто набором символов. Таким образом, интерпретатор моделирует некую виртуальную вычислительную машину, для которой базовыми инструкциями являются не элементарные команды процессора, а операторы программирования. Недостатком интерпретаторов является то, что интерпретированные программы работают медленнее, чем откомпилированные программы.
Разные типы процессоров имеют различные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня (операторы языка близки к машинному коду).
Одним из языков низкого уровня является ассемблер, который представляет каждую команду машинного кода символьным условным обозначением, называемым мнемоникой. Каждой конкретной компьютерной архитектуре соответствует свой язык ассемблера. Обычно ассемблеры применяются для написания небольших системных приложений, драйверов устройств.
Языки программирования высокого уровня больше понятны человеку, чем компьютеру, и в них особенности конкретных компьютерных архитектур не учитываются. К языкам программирования высокого уровня относятся такие языки, как Фортран, Алгол, Паскаль, Си, C++ и др.
5.2. СОСТАВ И ОПИСАНИЕ АЛГОРИТМИЧЕСКОГО ЯЗЫКА
Алгоритмический язык – формальный язык, который используется для записи и реализации алгоритмов. Любой императивный (процедурный) язык программирования является алгоритмическим языком, хотя не всякий алгоритмический язык пригоден для использования в качестве языка программирования. Алгоритмический язык содержит следующие элементы: символы, элементарные конструкции, выражения, операторы. Они составляют иерархическую структуру, так как элементарные конструкции образуются из последовательности символов, выражения – из последовательности элементарных конструкций и символов, оператор – из последовательности выражений, элементарных конструкций и символов.
Описание языка – это описание четырех элементов: символов, элементарных конструкций, выражений и операторов.
Описание символов заключается в перечислении допустимых символов языка, являющихся основными неделимыми знаками, в терминах которых пишутся все тексты на языке. Основные символы языка – буквы, цифры и специальные символы – составляют алфавит языка.
Под описанием элементарных конструкций понимают правила их образования. Элементарные конструкции (лексемы) – минимальные единицы языка, имеющие самостоятельный смысл и образующиеся из основных символов языка.
Описание выражений – это правила образования любых выражений, имеющих смысл в данном языке. Выражение состоит из элементарных конструкций и символов и задает правило вычисления некоторого значения.
Описание операторов включает рассмотрение всех типов операторов, допустимых в языке. Оператор задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия используется группа операторов, тогда операторы объединяются в составной оператор (блок). Как правило, действия, заданные операторами, выполняются над данными.
Предложения алгоритмического языка, в которых даются сведения о типах данных, называются описаниями (объявлениями), являющимися неисполняемыми операторами. Описание каждого элемента языка задается его синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка. Семантика определяет смысл и правила использования тех элементов языка, для которых были даны синтаксические определения.
Объединенная единым алгоритмом совокупность описаний (объявлений – неисполняемых операторов) и исполняемых операторов составляет программу на алгоритмическом языке.
5.3. ОСНОВЫ ЯЗЫКА С++
C++ представляет собой результат развития языка C, является универсальным языком программирования, позволяющим разрабатывать как объектно-ориентированные, так и алгоритмические программы.За исключением второстепенных деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи.
Ключевым понятием С++ является класс. Класс - это определяемый пользователем тип. Классы обеспечивают упрятывание данных, их инициализацию, неявное преобразование пользовательских типов, динамическое задание типов, контролируемое пользователем управление памятью и средства для перегрузки операций. В языке С++ концепции контроля типов и модульного построения программ реализованы более полно, чем в С. Кроме того, С++ содержит усовершенствования, прямо с классами не связанные: символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип. В С++ сохранены все возможности С эффективной работы с основными объектами, отражающими аппаратную "реальность" (разряды, байты, слова, адреса и т.д.).
Как язык, так и стандартные библиотеки С++ проектировались в расчете на переносимость. Имеющиеся реализации языка будут работать в большинстве систем, поддерживающих С. В программах на С++ можно использовать библиотеки С. Большинство служебных программ, рассчитанных на С, можно использовать и в С++.
5.3.1. ТИПЫ ДАННЫХ В ЯЗЫКЕ С++
Каждое имя и каждое выражение обязаны иметь тип. Именно тип определяет операции, которые могут выполняться над ними.
Описание - это оператор, который вводит имя в программу. В описании указывается тип имени. Тип, в свою очередь, определяет, как правильно использовать имя или выражение.
Основные типы данных языка С++ приведены в таблице 1.
|
Тип |
байт |
Диапазон принимаемых значений |
|
Целочисленный (логический) тип данных |
||
|
bool |
1 |
0 / 255 |
|
целочисленный (символьный) тип данных |
||
|
char |
1 |
0 / 255 |
|
целочисленные типы данных |
||
|
short int |
2 |
-32 768 / 32 767 |
|
unsigned short int |
2 |
0 / 65 535 |
|
int |
4 |
-2 147 483 648 / 2 147 483 647 |
|
unsigned int |
4 |
0 / 4 294 967 295 |
|
long int |
4 |
-2 147 483 648 / 2 147 483 647 |
|
unsigned long int |
4 |
0 / 4 294 967 295 |
|
типы данных с плавающей точкой |
||
|
float |
4 |
-2 147 483 648.0 / 2 147 483 647.0 |
|
long float |
8 |
-9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 |
|
double |
8 |
-9 223 372 036 854 775 808 .0 / 9 223 372 036 854 775 807.0 |
Таблица 1
Вся таблица делится на три столбца. В первом столбце указывается зарезервированное слово, которое будет определять, каждое свой, тип данных. Во втором столбце указывается количество байт, которое отводится под переменную с соответствующим типом данных. В третьем столбце показан диапазон допустимых значений.
Первый в таблице — это тип данных bool — целочисленный тип данных, так как диапазон допустимых значений — целые числа от 0 до 255. Но как Вы уже заметили, в круглых скобочках написано — логический тип данных, и это тоже верно. Так как bool используется исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов true или false. true — если логическое выражение истинно, false — если логическое выражение ложно.
Но так как диапазон допустимых значений типа данных bool от 0 до 255, то необходимо было как-то сопоставить данный диапазон с определёнными в языке программирования логическими константами true и false. Таким образом, константе true эквивалентны все числа от 1 до 255 включительно, тогда как константе false эквивалентно только одно целое число — 0.
Тип данных char — это целочисленный тип данных, который используется для представления символов. То есть, каждому символу соответствует определённое число из диапазона [0;255]. Тип данных char также ещё называют символьным типом данных, так как графическое представление символов в С++ возможно благодаря char. Для представления символов в C++ типу данных char отводится один байт, в одном байте — 8 бит, тогда возведем двойку в степень 8 и получим значение 256 — количество символов, которое можно закодировать. Таким образом, используя тип данных char можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII.
ASCII ( от англ. American Standard Code for Information Interchange) — американский стандартный код для обмена информацией.
Целочисленные типы данных используются для представления чисел. В таблице 1 их аж шесть штук: short int, unsigned short int, int, unsigned int, long int, unsigned long int. Все они имеют свой собственный размер занимаемой памяти и диапазоном принимаемых значений. В зависимости от компилятора, размер занимаемой памяти и диапазон принимаемых значений могут изменяться. В таблице 1 все диапазоны принимаемых значений и размеры занимаемой памяти взяты для компилятора MVS2010. Причём все типы данных в таблице 1 расположены в порядке возрастания размера занимаемой памяти и диапазона принимаемых значений. Диапазон принимаемых значений, так или иначе, зависит от размера занимаемой памяти. Соответственно, чем больше размер занимаемой памяти, тем больше диапазон принимаемых значений. Также диапазон принимаемых значений меняется в случае, если тип данных объявляется с приставкой unsigned — без знака. Приставка unsigned говорит о том, что тип данных не может хранить знаковые значения, тогда и диапазон положительных значений увеличивается в два раза, например, типы данных short int и unsigned short int.
Приставки целочисленных типов данных:
short — приставка укорачивает тип данных, к которому применяется, путём уменьшения размера занимаемой памяти;
long — приставка удлиняет тип данных, к которому применяется, путём увеличения размера занимаемой памяти;
unsigned (без знака) — приставка увеличивает диапазон положительных значений в два раза, при этом диапазон отрицательных значений в таком типе данных храниться не может.
Так, что, по сути, мы имеем один целочисленный тип для представления целых чисел — это тип данных int.
Благодаря приставкам short, long, unsigned появляется некоторое разнообразие типов данных int, различающихся размером занимаемой памяти и (или) диапазоном принимаемых значений.
Типы данных с плавающей точкой
В С++ существуют два типа данных с плавающей точкой: float и double. Типы данных с плавающей точкой предназначены для хранения чисел с плавающей точкой. Типы данных float и double могут хранить как положительные, так и отрицательные числа с плавающей точкой. У типа данных float размер занимаемой памяти в два раза меньше, чем у типа данных double, а значит и диапазон принимаемых значений тоже меньше. Если тип данных float объявить с приставкой long, то диапазон принимаемых значений станет равен диапазону принимаемых значений типа данных double. В основном, типы данных с плавающей точкой нужны для решения задач с высокой точностью вычислений, например, операции с деньгами.
Итак, мы рассмотрели главные моменты, касающиеся основных типов данных в С++. Осталось только показать, откуда взялись все эти диапазоны принимаемых значений и размеры занимаемой памяти. А для этого разработаем программу, которая будет вычислять основные характеристики всех, выше рассмотренных, типов данных.
Если, например, переменной типа short int присвоить значение 33000, то произойдет переполнение разрядной сетки, так как максимальное значение в переменной типа short int это 32767. То есть в переменной типа short int сохранится какое-то другое значение, скорее всего будет отрицательным. Раз уж мы затронули тип данных int, стоит отметить, что можно опускать ключевое слово int и писать, например, просто short. Компилятор будет интерпретировать такую запись как short int. Тоже самое относится и к приставкам long и unsigned.