Реферат: 40гг первые цифровые компьютеры программирование путем коммутации проводов




Надъязыковый подход к изучению языков программирования

5 причин необходимости изучения концепций языков программирования

Больше возможности для выражения идей

Более обоснованный выбор подходящего языка

Повышение способности к изучению новых языков

Углубление понимания важности реализации

Повышение способности к разработке новых языков


Области применения программирования

Научные приложения

Коммерческие приложения

Искусственный интеллект

Системное программирование

Языки подготовки сценариев

Специализированные языки программирования


Категории языков программирования

Императивные

Декларативные

Объектно-ориентированные



История развития языков программирования

40гг. – первые цифровые компьютеры – программирование путем коммутации проводов.

программирование на машинном языке

появление ассемблеров – машинные команды получают мнемонические имена (LOAD, STORE, ADD, …)

конец 50х – создание первого компилятора для языка FORTRAN (FORmula TRANslator – транслятор формул)

более удобное средство для написания формул, чем ассемблер

переносимость кода



Исторические требования к ЯП

Архитектура языков программирования должна быть максимально приближена к архитектуре компьютеров для наиболее эффективного использования его ресурсов.

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


Парадигма языка программирования

Компьютер представляется в виде туповатого исполнителя, тем не менее поддающегося обучению.

Исполнитель может исполнять некоторые простейшие команды.

Обучение происходит путем формирования процедур из команд и использования их в дальнейшем вместо повторения последовательности команд.

Программа описывает процесс последовательного, пошагового решения задачи.



Наклонения предложений в грамматике

изъявительное (повествовательные)

вопросительное

повелительное (императивное)


Исторически первыми сформировались императивные

(директивные, процедурные) языки программирования


Программирование в повествовательном наклонении

Стиль программирования, в котором программа представляется в как совокупность утверждений получил название декларативный.

Программа на императивном языке программирования предписывает, как достичь требуемую цель; декларативная программа заявляет (декларирует), что должно быть достигнуто в качестве цели.


Предположим, требуется пройти в городе из пункта А в пункт Б.

^ Декларативная программа - это план города, в котором указаны оба пункта, плюс правила уличного движения. Руководствуясь этими правилами и планом города, курьер сам найдет путь от пункта А к пункту Б.

^ Императивная программа - это список команд примерно такого рода: от пункта А по ул. Садовой на север до площади Славы, оттуда по ул. Пушкина два квартала, потом повернуть направо и идти до Театрального переулка, по этому переулку налево по правой стороне до дома 20, который и есть пункт Б.


Характеристики и свойства языков программирования

Характеристики

Мощность

Уровень

Концептуальная целостность

Экономия понятий

Ортогональность понятий

Единообразие понятий

Универсальные и специализированные языки

Свойства

Надежность

Удобочитаемость

Полнота

Гибкость

Простота

Мобильность

Эффективность



Характеристики, свойства и требования





Методы реализации

Компиляция

Интерпретация

Смешанные системы реализации


Этапы разработки программ

Технический взгляд

Определение требований

Проектирование

Кодирование

Тестирование

Отладка

Документирование

Психологические этапы

Смятение

Понимание сути

Понимание способа реализации

Реализация основной функции

Реализация всех функций

Подготовка к отчуждению

Подготовка документации



Основные понятия ЯП

Базовые определения

Объекты данных

Типы данных

Выражения и операторы

Блоки и подпрограммы

Абстрактные типы данных

Дополнительные возможности



Базовые определения

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

Алфавит ЯП – набор символов, включающий буквы, цифры и специальные знаки (пунктуации, операций и т.д.).

Синтаксис ЯП – совокупность правил записи, которым должна удовлетворять любая программа.

Семантика ЯП – правила, определяющие, какие операции и в какой последовательности должна выполнить ЭВМ, работая по программе.



^ Состав языков программирования

Базовые определения

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

Алфавит ЯП – набор символов, включающий буквы, цифры и специальные знаки (пунктуации, операций и т.д.).

Синтаксис ЯП – совокупность правил записи, которым должна удовлетворять любая программа.

Семантика ЯП – правила, определяющие, какие операции и в какой последовательности должна выполнить ЭВМ, работая по программе.


Семантика ЯП

Семантика ЯП задается определением средств описания данных и действий.


Типы данных

Ранние языки

Вспомогательный прием для облегчения работы компилятора




Современные языки

Выражение задачи с большей ясностью

Обеспечение высокой надежности


Типичные классы ошибок

Объектам данных могут присваиваться логически некорректные значения

К объекту данных может быть применена логически некорректная операция



Типы данных

Простые

Целые

Действительные

Символьные

Логические

Структурные

Массивы

Записи

Объединения


Пример описания переменных и записи операция над данными различных типов

I: integer := 1;

С: character := '1';

В: boolean := true;

1+1

1<=2

С > 'А‘

В 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 записи R

U := ‘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 I<= 100 do

if 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,2

end block;


Функции


Функция — это специальная форма процедуры, предназначенная для вычисления одного значения.


block

I,J,K: integer;

МАХ2: integer;

function MAX

(PAR1,PAR2: in integer)

return(REZ:out,integer) is

begin

if PAR1 > PAR2 then

REZ:=PAR1;

else

REZ:=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.


Типово-правильная программа

Программа называется типово-правильной, если она удовлетворяет правилам типизации языка.

Правила типизации

приписывание типов переменным и константам,

определение типов выражений по типам их частей

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



Определение типовой правильности программ также производится на этапе компиляции.

Обозначим множество программ этого класса через Lt

Lt – подмножество 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<2<3 – истина и 3<2<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 real

range нижняя_граница..верхняя_граница 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)<0.00001*abs(X) then ...


Уменьшение погрешностей вычислений

складывать наименьшие члены сумм первыми;

определять все положительные и отрицательные слагаемые и складывать их поочередно;

избегать вычитания двух почти равных чисел; если это все же необходимо, производить вычитание до умножения или деления (т.е. лучше записать А*(В-С), чем А*В-А*С);

избегать показателей степени в форме действительных чисел, так как в этом случае степень вычисляется через 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

Вертикальная табуляция

\\



Обратная косая черта

\’

27

Апостроф

\"

22

Кавычка

\?

3F

Вопросительный знак

\0ddd

-

Восьмеричный код символа

\0xddd

ddd

Шестнадцатеричный код символа


Комментарии

Комментарий предназначается для записи поясняющей программу информации

Существует два вида комментариев

Строчный – начинается с двух символов «прямая косая черта» (//) и заканчивается символом перехода на новую строку

Блочный –заключается между символами-скобками /* и */.

Внутри комментария можно использовать любые допустимые на данном компьютере символы, а не только символы из алфавита языка C++, поскольку компилятор комментарии игнорирует.

Вложенные блочные комментарии стандартом не допускаются, хотя в некоторых компиляторах разрешены.


Простые типы данных

Для описания простых типов определены следующие ключевые слова:

int (целый);

char (символьный);

wchar_t (расширенный символьный);

bool (логический);

float (вещественный);

double (вещественный с двойной точностью).

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

Существует четыре спецификатора типа, уточняющих внутреннее представление и диапазон значений стандартных типов:

short (короткий);

long (длинный);

signed (знаковый);

unsigned (беззнаковый).


Целый тип (int)

Размер типа int зависит от компьютера и компилятора.

Размер short int <= Размер int <= Размер long 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 показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой, или просто константой.

При описании можно при
еще рефераты
Еще работы по разное