Надъязыковый подход к изучению языков программирования5 причин необходимости изучения концепций языков программированияБольше возможности для выражения идейБолее обоснованный выбор подходящего языкаПовышение способности к изучению новых языковУглубление понимания важности реализацииПовышение способности к разработке новых языковОбласти применения программированияНаучные приложенияКоммерческие приложенияИскусственный интеллектСистемное программированиеЯзыки подготовки сценариевСпециализированные языки программированияКатегории языков программированияИмперативныеДекларативныеОбъектно-ориентированныеИстория развития языков программирования40гг. – первые цифровые компьютеры – программирование путем коммутации проводов.программирование на машинном языкепоявление ассемблеров – машинные команды получают мнемонические имена (LOAD, STORE, ADD, …)конец 50х – создание первого компилятора для языка FORTRAN (FORmula TRANslator – транслятор формул)более удобное средство для написания формул, чем ассемблерпереносимость кодаИсторические требования к ЯПАрхитектура языков программирования должна быть максимально приближена к архитектуре компьютеров для наиболее эффективного использования его ресурсов.Компьютер состоит из процессора и памяти – значит программа должна состоять из последовательности инструкций, выполняемых процессором и модифицирующих память.Парадигма языка программированияКомпьютер представляется в виде туповатого исполнителя, тем не менее поддающегося обучению.Исполнитель может исполнять некоторые простейшие команды.Обучение происходит путем формирования процедур из команд и использования их в дальнейшем вместо повторения последовательности команд.Программа описывает процесс последовательного, пошагового решения задачи.Наклонения предложений в грамматикеизъявительное (повествовательные)вопросительноеповелительное (императивное)Исторически первыми сформировались императивные (директивные, процедурные) языки программированияПрограммирование в повествовательном наклоненииСтиль программирования, в котором программа представляется в как совокупность утверждений получил название декларативный.Программа на императивном языке программирования предписывает, как достичь требуемую цель; декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели. Предположим, требуется пройти в городе из пункта А в пункт Б. ^ Декларативная программа - это план города, в котором указаны оба пункта, плюс правила уличного движения. Руководствуясь этими правилами и планом города, курьер сам найдет путь от пункта А к пункту Б. ^ Императивная программа - это список команд примерно такого рода: от пункта А по ул. Садовой на север до площади Славы, оттуда по ул. Пушкина два квартала, потом повернуть направо и идти до Театрального переулка, по этому переулку налево по правой стороне до дома 20, который и есть пункт Б. Характеристики и свойства языков программированияХарактеристикиМощностьУровеньКонцептуальная целостностьЭкономия понятийОртогональность понятийЕдинообразие понятийУниверсальные и специализированные языкиСвойстваНадежностьУдобочитаемостьПолнотаГибкостьПростотаМобильностьЭффективностьХарактеристики, свойства и требованияМетоды реализацииКомпиляцияИнтерпретацияСмешанные системы реализацииЭтапы разработки программТехнический взглядОпределение требованийПроектированиеКодированиеТестированиеОтладкаДокументированиеПсихологические этапыСмятениеПонимание сутиПонимание способа реализацииРеализация основной функцииРеализация всех функцийПодготовка к отчуждениюПодготовка документацииОсновные понятия ЯПБазовые определенияОбъекты данныхТипы данныхВыражения и операторыБлоки и подпрограммыАбстрактные типы данныхДополнительные возможностиБазовые определенияЯзык программирования – множество текстов (последовательностей символов) некоторого алфавита, удовлетворяющих правилам синтаксиса и задающих порядок вычисления в соответствии с правилами семантики.Алфавит ЯП – набор символов, включающий буквы, цифры и специальные знаки (пунктуации, операций и т.д.).Синтаксис ЯП – совокупность правил записи, которым должна удовлетворять любая программа.Семантика ЯП – правила, определяющие, какие операции и в какой последовательности должна выполнить ЭВМ, работая по программе.^ Состав языков программированияБазовые определенияЯзык программирования – множество текстов (последовательностей символов) некоторого алфавита, удовлетворяющих правилам синтаксиса и задающих порядок вычисления в соответствии с правилами семантики.Алфавит ЯП – набор символов, включающий буквы, цифры и специальные знаки (пунктуации, операций и т.д.).Синтаксис ЯП – совокупность правил записи, которым должна удовлетворять любая программа.Семантика ЯП – правила, определяющие, какие операции и в какой последовательности должна выполнить ЭВМ, работая по программе.Семантика ЯПСемантика ЯП задается определением средств описания данных и действий.Типы данныхРанние языкиВспомогательный прием для облегчения работы компилятораСовременные языкиВыражение задачи с большей ясностьюОбеспечение высокой надежностиТипичные классы ошибокОбъектам данных могут присваиваться логически некорректные значения К объекту данных может быть применена логически некорректная операция Типы данныхПростыеЦелыеДействительныеСимвольныеЛогическиеСтруктурныеМассивыЗаписиОбъединенияПример описания переменных и записи операция над данными различных типовI: integer := 1;С: character := '1';В: boolean := true;1+11С > 'А‘В and false В or trueПример использования массива и записиA: array (1..5) of integer; R: record I: integer;C: character;B: boolean; end record; U: union integer; character; boolean; end union;A(4) – обращение к 4-му элементу массива АR. В – обращение к переменной B записи RU := ‘A’ присваивание переменной U символьного значенияМассивЗаписьОбъединениеТребования к средствам описания действийДолжны быть надежны (минимум ошибок при написании программы) Смысл должен быть очевиден и однозначен (чтобы можно было легко понять общую структуру программы)Должны обеспечивать достаточную гибкость (чтобы программист мог выразить свой алгоритм просто и эффективно) Требования противоречивы – при разработке языков пытаются достичь компромиссаВыражение и присваиваниеВиражение — это формула для вычисления значения некоторого типа. В общем случае выражение представляет собой один или несколько операндов, разделенных знаками операций Оператор присваивания “:=“ Слева от знака оператора указывается тот объект данных, которому в качестве значения присваивается значение стоящего справа выражения I,J: integer;PI: constant real := 3.1415926536;В: boolean;A: array (1..5) of real;R: record K: integer; D: character; end record;I:=I+J*2;J:=3*(I-J)+R.K;B:=B and (A(3)A(5):=PI**2+A(5);Операторы управленияОператор «if» - условное выполнение операторов. ^ Проверяет некоторое условие и в зависимости от истинности или ложности его выполняет те или иные операторы. Оператор «while» - циклическое выполнение операторов. ^ Выполняет заданные операторы до тех пор, пока истинно заданное условие, причем условие проверяется перед выполнением операторов. Подсчет суммы положительных элементов массива^ A: array (1..100) of integer;SUM: integer; I: integer; SUM:=0;while Iif A(I)>0 then SUM:=SUM+A(I); end if;J:=I+1; end do;Необходимость структурирования программыВыделение логических единицОсвобождение памяти от ненужных переменныхУправление областью видимости именПриближение места описания переменных к месту использованияПовторное использование кодаРешение проблем – введение в язык понятий блока и подпрограммыБлокПрограммная единица состоящая из: описания всех локальных (или внутренних) объектов данных иглобальных (или внешних) объектов данныхописания действий, которые должен выполнить блок block TEMP: integer; use I,J: in out integer; begin TEMP:=I; I:=J; J:=TEMP; end block; ПроцедурыПроцедура – описание действий, которые необходимо выполнить в какой-то момент выполнения программыДля выполнения действий, описанных в процедуре используется вызов процедурыblock I,J: integer; procedure ПЕРЕСТАВИТЬ is TEMP: integer; begin TEMP:=I; I:=J; J:=TEMP; end procedure; begin I:=l; J:=2;ПЕРЕСТАВИТЬ;ПЕРЕСТАВИТЬ; end block;Использование процедур с параметрамиПараметры процедуры – специальная конструкция языка, позволяющая указывать переменные, которые должны обрабатываться в функцииblock I,J,K: integer; procedure ПЕРЕСТАВИТЬ (М,N: in out integer)is TEMP: integer; begin; TEMP:=M;M=N;N:=TEMP; end procedure; begin I:=1; J:=2; K:=3;^ ПЕРЕСТАВИТЬ(I,J); //2,1,3 ПЕРЕСТАВИТЬ(J,К); //2,3,1 ПЕРЕСТАВИТЬ(К,I); //1,3,2end block;ФункцииФункция — это специальная форма процедуры, предназначенная для вычисления одного значения. blockI,J,K: integer; МАХ2: integer;function MAX (PAR1,PAR2: in integer)return(REZ:out,integer) is beginif PAR1 > PAR2 thenREZ:=PAR1; elseREZ:=PAR2; end if; end function; begin…MAX2 := 2*MAX(K,MAX(I,J)); …end block;ПакетыПакет – средство языка программирования для представления совокупности логически связанных вычислительных ресурсовПакеты могут объединять как подпрограммы, так и объекты данных и даже типы данных. Абстрактные типы данных^ Абстрактный тип данных представляет собой описание множества значений и набора операций, с помощью которых (и только с их помощью) можно обрабатывать эти значения.Дополнительные возможностиОбработка файловОбработка исключенийПараллельная обработкаМакрообработка.Типизация языков программированияОсновные вопросыПонятие типаОпределение типаСпособы контроля типовВиды и уровни типизацииЭквивалентность типовПоколения языков программированияПонятие типаПервоначально:Тип предназначался для выбора компилятором наиболее эффективное представление для объекта.С машинной точки зрения тип объекта — это форма представления его значений в памяти и определяемый этой формой способ доступа.Современные языки:Эффективность реализации как функция механизма типов отодвинута на второй план.Большее значение:возможность выбирать естественные структуры данныхделать программу более понятнойменее подверженной ошибкамлегче проверяемой (в т.ч. компилятором) и исправляемойПредшествующие определения типаКак множество значений, которые могут принимать объекты данного типа.Недостаточно точно – не дает однозначного пути для построения типоваггау(1. . 10) of integer иarray(1. . 11) of integer (различны или нет?)Множество значений и набор операций, выполняемых над этими значениями и обладающих некоторыми свойствами.Не решается проблема однозначности:Различны или нет типы двух списков, если их определения налагают разные ограничения на максимальное число элементов?Определение типаТип данных - множество с операциями (алгебра), учитывающая следующее:если дан новый тип, то можно описывать и инициализировать переменные этого типа;если дана переменная некоторого типа, то можно определить и изменить ее текущее значение;если даны два значения определенного типа, то можно сравнить их, по крайней мере на равенство или неравенство;описание типа дает некоторую интерпретацию определяемым синтаксисом языка символам, которые вводятся для обозначения констант.Если два типа отличаются по любым из перечисленных факторов, то такие типы считаются разными^ Запись определения нового типаtype имя_типа is описание_типа; Контроль типовКонтроль типов - определение типов выражений и их согласованности с типами, которые требуются по правилам языка в данном контексте программы (например, согласованности типов аргументов и параметров процедур) Синтаксически правильная программаПрограмма называется синтаксически правильной, если она удовлетворяет правилам синтаксиса языка, т.е. не содержит синтаксических ошибок. Определение синтаксической правильности программ производится на этапе компиляции. Обозначим множество программ этого класса через Ls.Типово-правильная программаПрограмма называется типово-правильной, если она удовлетворяет правилам типизации языка.Правила типизацииприписывание типов переменным и константам, определение типов выражений по типам их частейсогласование типов частей языковых конструкций (например, операторов присваивания)…Определение типовой правильности программ также производится на этапе компиляции. Обозначим множество программ этого класса через LtLt – подмножество Ls.Если Lt не определено – язык не типизированный, иначе – типизированный.Типовые ошибкиПрограмма называется программой без типовой ошибки, если при ее выполнении не возникает типовой ошибкиОбозначим множество программ этого класса через Le.Le входит в LtПрограмма называется программой с выловленными типовыми ошибками, если все возникающие при ее выполнении типовые ошибки обнаруживаются при контроле типов.Обозначим множество программ этого класса через Ld. Ld Lt \ LeКлассификация языков по способу контроля типовЕсли Lt = Le , т.е. типово-правильные программы не могут содержать типовых ошибок, то язык называется языком с полным статическим контролем типов.Если Ls=Lt, т.е. правила типизации языка очень слабые или их нет совсем (все синтаксически правильные программы являются типово-правильными), и, следовательно, вся работа по контролю типов производится во время выполнения программ, то язык называется языком с динамическим контролем типов.Если при этом Ld = Lt \ Le, т.е. все типовые ошибки обнаруживаются при динамическом контроле типов, то язык называется языком с полным динамическим контролем типов. Если Le Lt Ls, т.е. не все синтаксически правильные программы являются типово-правильными и типово-правильные программы могут содержать типовые ошибки, то язык называется языком со смешанным контролем типов. Если при этом Ld = Lt \ Le, то язык называется языком с полным смешанным контролем типов. Классификация ЯП по способу определения семантики языковых конструкцийЕсли семантика каждой языковой конструкции (например, операций) определяется по тексту программы, а не во время ее выполнения, т.е. статически, язык называется статически типизированным, в противном случае — динамически типизированным. Статически типизированные языки:слабо типизированный, если информация о типе используется только для обеспечения корректности программы на машинном уровне;сильно типизированный, если осуществляется полный контроль типов (статический, динамический или смешанный);защитно типизированный, если программы, содержащие конструкции с возможными типовыми ошибками, считаются недопустимыми, даже если эти ошибки никогда не могут возникнуть.^ Проблемы слабо типизированных языковОперация, которая может восприниматься машиной как корректная, может быть некорректной на абстрактном уровне программы^ С: character; С:=4;С:=‘4’;Неявное преобразование типов может привести к непредсказуемым результатамX,Y: real; I,J,K: integer;K:=X-J; Из-за использования неявного преобразования типов программа может иметь законную но не очевидную интерпретацию1Сильно типизированные языкиИспользуется операция явного преобразования типаX: real; I: integer; В: boolean; С: character;Х:=rеаl(I);C:=character(10); Эквивалентность типовТребования к реализацииинтуитивная привлекательностьлегкость реализацииэффективность выполненияЭквивалентность по структуре (структурная эквивалентность) – совпадают описания типовЭквивалентность по имени (именная эквивалентность) – типы с разными именами считаются разнымиtype TAБЛ1 is array (1..10) of integer;type ТАБЛ2 is array (1..10) of integer; X: array(l. . 10) of integer; Y: ТАБЛ1; Z: ТАБЛ2;В случае эквивалентности по структуре типы переменных X, Y, Z будут считаться одинаковыми, а в случае эквивалентности по имени — различными Преимущества эквивалентности типов по имениСильно упрощается распознавание эквивалентности типов по имениЗапрещение взаимодействия различных типов, даже если они имеют одинаковую структуру.Поколения языков Конкретная система типов представляет собой компромисс между эффективностями реализации и контроля типов.Первое поколение - языки с минимальными возможностями типизации Предоставляют лишь средства для описания переменных простых типов и массивов; никаких новых типов вводить нельзя.Фортран, Алгол-60. Второе поколение – языки, предоставляющие программисту основные конструкторы типов: массивы, записи, объединенияПЛ/1, Алгол-68, Паскаль, СТип рассматривается как множество значений, получаемых из базисных множеств с помощью конструкторов. Все операции над типами данных предопределенные — определяемые языком, а не программистом. Новые типы могут получать имена, но с ними нельзя связывать новых, специально вводимых операций.Третье поколение – языки, предоставляющие программисту средства определения абстрактных типов данных С++, C#, JavaТипы понимаются как множества с операциями. Простые типы данныхПростые типы данныхОбъекты простых типов не имеют внутренней структуры, они могут содержать лишь одно неделимое значение. Числовые типыЦелые числа – бесконечное множество дискретных значений.Действительные числа - неограниченный континуум значений Целые типы Описание типа имеет видtype имя_типа is integer range нижняя_граница..верхняя_граница;Переменные такого типа могут принимать любые целые значения в указанном диапазонеУказание диапазона позволяет:повысить надежность и удобочитаемостьвыбрать компилятору наиболее эффективный способ представления значенийЭффективность реализацииУказание диапазона позволяет строить мобильные программы, сохраняя эффективность их реализации.Желание отказаться от указания диапазона сталкивается со сложностью реализации. type BIG_INT is integer range -2147483648..2147483647,INT is integer range -32768..32767, SMALLINT is integer range -128..127;Атрибуты целого типаАтрибуты типа – конструкция языка, позволяющая получить информацию о свойствах типаимя_типа'FIRST имя_типа'LASTилиимя_переменной'FIRST имя_переменной'LASTОперации над переменными целых типовсложение (+)вычитание (-)умножение (*)деление (/)остаток от деления (mod) возведение в степень (**)сравнение на равенство (=) сравнение на неравенство (/=)сравнение на меньше (сравнение на меньше или равно (сравнение на больше (>)сравнение на больше или равно (>=)унарный плюс (+)унарный минус (-)абсолютное значение (abs)Деление и остаток от деленияРезультат операции деления всегда целыйОкругление производится в сторону нуля как для положительных, так и для отрицательных значенийОстаток от деления X mod У = Х-(Х/У)*У Действительные типы Описание имеет видtype имя_типа is real range нижняя_граница..верхняя_граница digits количество значащих цифр; илиtype имя_типа is realrange нижняя_граница..верхняя_граница delta абсолютная_точность; В случае если диапазон не указан предполагается, что значения лежат в некотором предопределенном диапазоне, зависящем от конкретной реализацииПеременные могут принимать любые действительные значения в указанном диапазоне, которые будут храниться либо с указанным количеством значащих цифр — плавающие типы, либо с указанной абсолютной точностью — фиксированные типы.type FLOAT is real range -7.2E75..7.2E75 digits 6, FIXED is real range -2.0..2.0 delta 0.01; Атрибуты действительных типоввместо имени типа можно указывать имя переменной имя_типа' FIRST — нижняя граница значенийимя_типа' LAST — верхняя граница значенийимя_типа' DIGITS — количество цифр мантиссы имя_типа' ^ EPSILON — абсолютное значение разности между 1.0 и ближайшим к 1.0 большим его числом данного типаимя_типа' SMALL — значение минимального положительного числаимя_типа' LARGE — значение максимального положительного числаимя_типа' DELTA — абсолютная точность Запись константзапись с точкой: 10.4 -0.000000000145запись с порядком: 104Е-1 -145Е-12запись с точкой и порядком: 1.04Е1-1.45Е-10Операции над переменными действительных типовсложение (+)вычитание (-)умножение (*)деление (/)возведение в степень (**)сравнение на равенство (=) сравнение на неравенство (/=)сравнение на меньше (сравнение на меньше или равно (сравнение на больше (>)сравнение на больше или равно (>=)унарный плюс (+)унарный минус (-)абсолютное значение (abs)Особенности округленияПри вычислении выражения с действительными числами с конечной точностью представления возникают погрешности, которые могут оказать существенное влияние на получаемые результаты Следует сравнивать действительные числа лишь на приближенное равенство и неравенство, напримерif abs(X-Y)Уменьшение погрешностей вычислений складывать наименьшие члены сумм первыми;определять все положительные и отрицательные слагаемые и складывать их поочередно;избегать вычитания двух почти равных чисел; если это все же необходимо, производить вычитание до умножения или деления (т.е. лучше записать А*(В-С), чем А*В-А*С);избегать показателей степени в форме действительных чисел, так как в этом случае степень вычисляется через log и ехр; напротив, G**2 (если такая операция допускается) вычисляется как G*G;использовать операцию извлечения квадратного корня sqrt (если она есть) вместо G**0.5, так как sqrt обычно вычисляется точнее;использовать в процессе вычисления максимально возможную точность, если это необходимо;уменьшать число операций;избегать цепочек операций, в которых используются неточные значения; Перечислимые типыОписание типа имеет вид:type имя-типа is (значение1, значение2, ... );type АЛФАВИТ is ^ (БУКВЫ, ЦИФРЫ, СПЕЦ_СИMB); type ДНИ_НЕДЕЛИ is (ПН, ВТ,СР,ЧТ, ПТ,СБ, ВС); Переменная такого типа может принимать значения только из списка в описании типа.Операции над переменными перечислимых типовВсегда определенысравнение на равенство (=) сравнение на неравенство (/=)Определены в некоторых языкахсравнение на меньше (сравнение на меньше или равно (сравнение на больше (>)сравнение на больше или равно (>=)Атрибуты перечислимых типоввместо имени типа можно указывать имя переменной имя_типа' POS — функция с одним параметром перечислимого типа, значением которой является порядковый номер значения параметраимя_типа' VAL — функция с одним параметром любого целого типа, значением которой является значение перечислимого типа, чьим порядковым номером является значение параметраимя_типа' ^ FIRST — минимальное значение указанного типа имя_типа' LAST — максимальное значение указанного типа имя_типа' SUCC — функция с одним параметром перечислимого типа, значением которой является следующее по порядку значение этого перечислимого типаимя_типа' PRED — функция с одним параметром перечислимого типа, значением которой является предыдущее по порядку значение этого перечислимого типаЛогический типОписание типа имеет вид:type boolean is (false, true); Операциисравнение на равенство (=) сравнение на неравенство (/=)логическое дополнение (not)логическое И (and)логическое ИЛИ (or) ПодтипыПодтипы используются для ограничения множества значений типаНапример:type ДНИ_НЕДЕЛИ is (ПН, ВТ,СР,ЧТ, ПТ, СБ, ВС); subtype ^ РАБОЧИЕ ДНИ is ДНИ_НЕДЕЛИ range ПН. . ПТ; X: РАБОЧИЕ ДНИ; Объекты типа РАБОЧИЕ_ДНИ могут свободно смешиваться с объектами типа ДНИ_НЕДЕЛИ, не требуя явного применения преобразования типа Анонимные типыЕсли нет необходимости вводить имя нового типа (будут описаны лишь один или два объекта этого типа) можно записать определение типа в том месте, где требуется имя типа.Например:type КЛЮЧ is (ВКЛ,ВЫКЛ); P,Q: КЛЮЧ;можно описать, используя механизм анонимных типов:P.Q: (ВКЛ.ВЫКЛ);Эквивалентность анонимных типовПеременные P и Q имеют один типP.Q: (ВКЛ.ВЫКЛ);Переменные P и Q имеют различные типыР: (ВКЛ.ВЫКЛ); Q: (ВКЛ.ВЫКЛ);Базовые средства языка С++Основные вопросыСостав языкаПростые типы данныхПеременныеСтруктура программыЭтапы создания исполняемой программыАлфавит языка С++Прописные и строчные латинские буквы и знак подчеркиванияАрабские цифры от 0 до 9;Cпециальные знаки: "{}.![]()+-/%*.\’:?!~;^Пробельные символы: пробел, символы табуляции, символы перехода на новую строку.Из символов алфавита формируются:идентификаторы;ключевые (зарезервированные) слова;знаки операций;константы;разделители (скобки, точка, запятая, пробельные символы).ИдентификаторыИдентификатор — это имя программного объекта. В идентификаторе могут использоваться латинские буквы, цифры и знак подчеркивания. Прописные и строчные буквы различаются, например, sysop, SySoP и SYSOP — три различных имени. Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Пробелы внутри имен не допускаются.Выбор идентификатораДлина идентификатора по стандарту не ограничена, но некоторые компиляторы и компоновщики налагают на нее ограничения. Идентификатор не должен совпадать с ключевыми словами Не рекомендуется начинать идентификаторы с символа подчеркивания, поскольку они могут совпасть с именами системных функций или переменныхНа идентификаторы, используемые для определения внешних переменных, налагаются ограничения компоновщика (использование различных компоновщиков или версий компоновщика накладывает разные требования на имена внешних переменных).^ Ключевые словаКлючевые слова — это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. ^ Список ключевых слов asm else new this auto enum operator throw bool explicit private true break export protected try case extern public typedef catch false register typeid char float reinterpret_cast typename class for return union const friend short unsigned const cast goto signed using continue if sizeof virtual default inline static void delete int static_cast volatile do long struct wchar_t double mutable switch while dynamic_cast namespace template КонстантыКонстантами называют неизменяемые величины. Различаются целые, вещественные, символьные и строковые константы. ^ Примеры констант Константа Формат Примеры Целая Десятичный: последовательность десятичных цифр, начинающаяся не с нуля, если это не число нульВосьмеричный: нуль, за которым следуют восьмеричные цифры (0,1,2,3,4,5,6,7)Шестнадцатеричный: Ох или ОХ, за которым следуют шестнадцатеричные цифры (0,l,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 8, 0, 199226 01, 020, 07155 ОхА, 0xlB8, 0X00FF Вещественная Десятичный: [цифры]. [цифры]Экспоненциальный: [цифры] [.] [цифры]{Е|е}[+-] [цифры] 5.7, .001, 35. 0.2Е6, .lle-3, 5E10 Символьная Один или два символа, заключенных в апострофы 'А', 'ю', '*', 'db', \0', \п\ •\012\ \xO7\xO7' Строковая Последовательность символов, заключенная в кавычки "ПЯВУ", «\tЗначение r=\0xF5\n" Управляющие последовательности Изображение Шестнадцатеричный код Наименование \а 7 Звуковой сигнал \b 8 Возврат на шаг \f С Перевод страницы (формата) \n А Перевод строки \r D Возврат каретки \t 9 Горизонтальная табуляция \v 6 Вертикальная табуляция \\ 5С Обратная косая черта \’ 27 Апостроф \" 22 Кавычка \? 3F Вопросительный знак \0ddd - Восьмеричный код символа \0xddd ddd Шестнадцатеричный код символа КомментарииКомментарий предназначается для записи поясняющей программу информации Существует два вида комментариевСтрочный – начинается с двух символов «прямая косая черта» (//) и заканчивается символом перехода на новую строкуБлочный –заключается между символами-скобками /* и */. Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы из алфавита языка C++, поскольку компилятор комментарии игнорирует. Вложенные блочные комментарии стандартом не допускаются, хотя в некоторых компиляторах разрешены.Простые типы данныхДля описания простых типов определены следующие ключевые слова:int (целый);char (символьный);wchar_t (расширенный символьный);bool (логический);float (вещественный);double (вещественный с двойной точностью).Первые четыре типа называют целочисленными (целыми), последние два — типами с плавающей точкой. Код, который формирует компилятор для обработки целых величин, отличается от кода для величин с плавающей точкой.Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:short (короткий);long (длинный);signed (знаковый);unsigned (беззнаковый).Целый тип (int)Размер типа int зависит от компьютера и компилятора. Размер short int Внутреннее представление величины целого типа — целое число в двоичном коде. При использовании спецификатора signed старший бит числа интерпретируется как знаковый (0 — положительное число, 1 — отрицательное). По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраивает программиста, он может явно указать требуемый тип с помощью суффиксов L, l (long) и U, u (unsigned).Например:константа 32L – signed long intконстанта 77U – unsigned intМожно использовать суффиксы L и U одновременно.Символьный тип (char)Под величину символьного типа отводится, как правило, 1 байт. Тип char может быть со знаком или без знака. В величинах со знаком можно хранить значения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255.Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.Логический тип (bool)Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false — 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.Типы с плавающей точкой (float, double и long double)Внутреннее представление вещественного числа состоит из двух частей — мантиссы и порядка. Мантисса — это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится. Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, 1 (long). Например:константа 2E+6L - тип long doubleконстанта 1.82f — тип float.Диапазоны значений простых типов Тип Диапазон значений Размер (байт) bool true и false 1 signed char -128 ... 127 1 unsigned char 0 ... 255 1 signed short int -32 768 ... 32 767 2 unsigned short int 0 ... 65 535 2 signed long int -2 147 483 648 ... 2 147 483 647 4 unsigned long int 0 ... 4 294 967 295 4 float 3.4e-38 ... 3.4e+38 4 double 1.7e-308 ... 1.7e+308 8 long double 3.4e-4932 ... 3.4e+4932 10 Тип voidМножество значений этого типа пусто.Он используется:для определения функций, которые не возвращают значения, для указания пустого списка аргументов функциикак базовый тип для указателей в операции приведения типов Структура программыПрограмма на языке C++ состоит из функций, описаний и директив препроцессора. Одна из функций должна иметь имя main. Выполнение программы начинается с первого оператора этой функции.^ Описание функции1>3>тип_возвращаемого_значения имя ([параметры ]){ операторы, составляющие тело функции}Если функция не должна возвращать значение, указывается тип void.Тело функции заключается в фигурныескобки;Функции не могут быть вложенными;Описание переменной[класс памяти] [const] тип имя [инициализатор];Необязательный класс памяти может принимать одно из значений auto, extern, static и register. Модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой, или просто константой.При описании можно при