Конспект лекций ( Глазковой В. В., 320 группа )




НазваниеКонспект лекций ( Глазковой В. В., 320 группа )
страница1/21
Дата публикации31.07.2013
Размер1.95 Mb.
ТипКонспект
skachate.ru > Информатика > Конспект
  1   2   3   4   5   6   7   8   9   ...   21
-2003
Языки программирования (ЯП)

Конспект лекций ( Глазковой В. В., 320 группа )

Лекция 1




Структура курса


Основная задача курса – концепции ЯП.

Введение

  1. Традиционные ЯП (языки, которые основаны на принципах фон Неймана; основной оператор – присваивание).

  2. Объектно-ориентированные ЯП.

  3. Другие парадигмы.



Введение


  1. Определения ЯП.

  2. Исторический очерк развития ЯП.

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




  1. Определения.




  • Экстенсиональное - определение понятия через его объем.

Явно перечислим те конкретные языки, которые нас заведомо интересуют.

Язык программирования – это С, С++, С#, Pascal, Java и т.д. (их конечное число, т.к. конечно количество авторов-создателей). В 1969 в США уже существовало 400 ЯП. Сейчас активно используется около100 ЯП.


  • Интенсиональное - определение понятия через его признаки .

Язык программирования – это набор правил, определяющих, какие последовательности символов составляют программу и какое вычисление осуществляет программа (М. Бен-Ари).

Но свести ЯП к набору правил фактически невозможно. Даже сами создатели языка постоянно доопределяют язык в силу сложности.

Хочется иметь возможность на основе определения говорить, является ли данный язык языком программирования. Такое определение должно опираться на существенные свойства языков. Дадим ещё одно из возможных интенсиональных определений.

^ ЯП – это инструмент планирования (программирования) поведения исполнителя.

Пример : русский язык – не ЯП (в силу неоднозначности).

ЯП дает возможность программисту описать вычисления абстрактно и в то же время позволяет программе перевести его описания в детализированную форму, необходимую для выполнения на компьютере.
2. Исторический очерк развития ЯП.
Можно выделить 3 основных периода возникновения ЯП:

  1. 1954-1960 - появление

  2. 1960-1980 – рост

  3. 1980-2003 – стабилизация


2.1. 1954-1960 – период появления.
1954-1957 - Бэкус руководил группой по созданию языка FORTRAN или транслятора формул(FORmula TRANslator).

Этот язык был создан для научных приложений, которые обычно имеют дело с простыми структурами данных и значительным количеством арифметических вычислений. FORTRAN оказался весьма удачным языком и оставался доминирующим вплоть до 70-х годов. Следующая версия FORTRAN вышла в 1958 и стала называться FORTRAN II, а спустя несколько лет появился FORTRAN IV. Поскольку каждый производитель ЭВМ реализовывал для своих компьютеров собственную версию языка, то, естественно, царил хаос. В 1966 FORTRAN IV стал стандартом под названием FORTRAN 66 и с тех пор дважды подвергался пересмотру, в результате чего возникли стандарты FORTRAN 77, FORTRAN 90 (существует и сейчас).
^ Экологическая ниша ЯП – область применения языка. Любой экологической нише соответствуют свои технологические потребности. Поскольку самыми первыми на компьютерах рассчитывались научные задачи, FORTRAN первый занял свою экологическую нишу и стал стандартным языком в науке и технике, и только теперь на смену ему приходят другие языки.

Подобно большинству первых ЯП, FORTRAN имел серьезные недостатки в деталях самого языка, и, более того, в нем отсутствовала поддержка современных концепций структурирования модулей и данных.
1958-1960 – ученый комитет под руководством Питера Наура разработал язык ALGOL60. Перед разработчиками языка ALGOL стояли следующие цели:

  1. Сделать систему обозначений в ALGOL как можно ближе к стандартной математической.

  2. Приспособить ALGOL для описания алгоритмов.

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

  4. Обеспечить независимость языка от архитектуры компьютера.

Многие из этих целей оказались не достижимы.

Чтобы обеспечить независимость от архитектуры, в этот язык не были включены возможности ввода-вывода; для таких операций следовало создавать специальные процедуры. Хотя это и обеспечивало независимость языка от архитектуры компьютера, но в то же время приводило к тому, что каждая реализация неизбежно была несовместима с любой другой.

ALGOL не получил широкого коммерческого применения , тем не менее его влияние на другие языки было достаточно велико.

От языка ALGOL произошли два важных языка: Jovial – использовался военно-воздушными силами США для систем реального времени, и Simula – один из первых языков моделирования.
^ 1959 – в США был разработан первый универсальный язык для бизнес-приложений – язык COBOL.

Класс приложений этого типа включал в себя программы для учета поступления заказов, управления ресурсами и персоналом, а также для начисления зарплаты. Они были предназначены для считывания большого объема данных, собранных за длительный период времени, и созданию новых данных, обновленных в результате незначительных тривиальных преобразований.

За пределами США язык COBOL широкого применения не получил.
1959 –1960 – создание языка LISP.

Это язык функционального программирования. LISP был первым широко используемым языком программирования, созданным для применения в области искусственного интеллекта. LISP разрабатывался как функциональный язык обработки списков символов. Отличительной особенностью программ, написанных на языке LISP, является реализация алгоритмов, осуществляющих поиск в больших объемах данных. Естественной областью приложения LISP явилась разработка стратегии ведения игры, поскольку обычная программа, написанная на языке LISP, могла создавать дерево возможных направлений движения (как связанный список) и, продвигаясь по этому дереву, искать оптимальную стратегию. Другой естественной областью применения этого языка стал автоматический машинный перевод текста, где одна цепочка символов может заменяться на другую. Почему же LISP не стал промышленным языком программирования? В языке LISP отсутствовало понятие типа данных, т.е. была полная однородность данных, что вело к неэффективности.


Лекция 2.

^

Основные языки периода 1954-60


область применения (экологическая ниша)

FORTRAN

научно-технические приложения

ALGOL

научные вычисления, запись алгоритмов

COBOL

бизнес-приложения

LISP

научные приложения (искусственный интеллект)


Введём ещё одно важное понятие: мобильность (переносимость).

Различают два аспекта:

· мобильность программ – сохранение функциональности при переходе с одной машины на другую (например, GNU C – удачно организованная мобильная система);

· мобильность знаний – это свойство знаний сохранять свою ценность при переходе с одной платформы на другую.


    1. 1960 – 1980 гг. - период экспоненциального роста; появление основных концепций ЯП.


Этот период характеризуется попытками создания единого ЯП, который смог бы занять все важные ниши.

^ 1961 – создание системы IBM/360 (единая система команд, единое программное обеспечение и т.д.)

1964 – с началом серийного выпуска в 1963 новых моделей 360, IBM в 1964 разработала новый язык NPL (New Programming Language), в дальнейшем переименованный в PL/I.

Универсальный язык PL/I объединил в себе вычислительные возможности языка FORTRAN и возможности бизнес программирования языка COBOL. PL/I имел ряд недостатков:

-конструкция список ввода из FORTRAN перешла в PL/I;

-закрывающие конструкции END заменены на END_M, что вело к появлению ошибок.

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

Язык PL/I широкого распространения не получил. Первая попытка создания универсального языка оказалась неудачной. В связи с этим появилась шутка : верблюд – это лошадь, созданная комитетом.
^ 1968 – другая независимая попытка создания нового универсального ЯП.

Он получил название ALGOL-68 и был формально (синтаксически и семантически) описан W-грамматикой.

Это был язык-ядро (небольшое количество основных конструкций).

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

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

Язык ALGOL-68 оказался слишком сложным для понимания и эффективной реализации.

Эта попытка создания универсального ЯП также оказалась неудачной.

В 60-е была разработана концепция пользовательских типов данных. Язык Simula-67 разработанный норвежцами, ввел концепцию классов в ALGOL. В 80-е это натолкнуло Страуструпа на идею создания С++ как расширения языка С с добавлением понятия классов.
1967-1968 – предложена концепция структурного программирования (Хоар и др.)
1969 – Н. Вирт создал язык Pascal.

Целью разработки было создание языка, который можно было бы использовать для демонстрации идей объявления типов и контроля их соответствия.

Язык Pascal имел небольшое число конструкций и требовал малые ресурсы по реализации (компилятор создан самими студентами).

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

Но Pascal имел один большой недостаток – стандартный Pascal вообще не имел никаких средств для деления программы на модули, хранящиеся в отдельных файлах, и поэтому не мог использоваться для программ в несколько тысяч строк. Вирт сразу понял, что модули являются необходимой частью любого практического языка, и разработал язык Modula.
^ 1968 – Д.Ритчи разработал язык С как язык реализации операционной системы UNIX.

Операционные системы традиционно писали на ассемблере, поскольку языки высокого уровня считались неэффективными. Язык С абстрагируется от деталей программирования, присущих ассемблерам, предлагая структурированные управляющие операторы и структуры данных (массивы и записи) и сохраняя при этом всю гибкость ассемблерного низкоуровневого программирования (указатели и операции на уровне битов). Язык С обеспечивает очень эффективное выполнение программ и позволяет получить полный доступ к операционной системе и аппаратной части ЭВМ.
В 1977 Министерство Обороны США решило провести унификацию ЯП, в основном, чтобы сэкономить на обучении и стоимости поддержки операционных сред разработки программ для различных военных систем.

Основные требования к ЯП:

    • надежность;

    • эффективность;

    • модифицируемость.

После оценки существующих языков было принято решение провести конкурс на разработку нового языка, положив в основу хороший существующий язык, такой как Pascal( PL/I и ALGOL).

В конце концов был выбран язык, который назвали Ada (стандартизован в 1983).

Язык Ada уникален в ряде аспектов:

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

    • он был разработан для написания переносимых программ;

    • он расширяет область применения ЯП, обеспечивая обработку ошибок и параллельное программирование.

Несмотря на техническое совершенство и преимущества ранней стандартизации, язык Ada не достиг большой популярности вне военных и других крупномасштабных проектов.

Этот язык оказался слишком трудным. Это связано с тем, что он поддерживает многие аспекты программирования (параллелизм, обработку исключительных ситуаций, переносимые числовые данные), которые другие языки (С, Pascal) оставляют ОС.
^ 2 принципа построения ЯП:

- принцип критичных технологических потребностей;

- принцип минимальности языковых конструкций (по этому принципу в язык включаются только те конструкции без которых он теряет свою функциональность).


    1. 1980-2003 – стабилизация.


В 80-е основное внимание уделяется объектно-ориентированным ЯП.

В 1980 Б. Страуструп создал язык С с классами.

^ 1983 – появление языка С++.

90-е годы – стандартизация ANSI C++.

Создатель языка С++ решил проблему совместимости языков С и С++.

Популярность языка С сыграла значительную роль в популярности языка С++, хотя по сути это разные языки.

1995 – язык Java (чисто объектно-ориентированный ЯП).

1998 – язык С#.

Языки С# и Java идейно основаны на концепции языка С.

^ 1991 – язык Delphi.

1988 – язык Oberon-1 (ООР ЯП, компилятор языка Oberon занимает около 4000 строк – это немного)

1991 – в языке Oberon появляется динамическое связывание.

Лекция 3
На прошлой лекции мы рассмотрели, что попытки создать единый ЯП, который смог бы занять все экологические ниши, закончились неудачей.

За 90-е появилось много новых ЯП:

Delphi – 1990-91,

Java – 1995,

C # - 1999.

Это очень общие ЯП.

В какой обстановке они развивались? Какого рода приложения можно разрабатывать в рамках индустрии программирования?

Приложение Microsoft Office – это очень крупный проект (менеджер затруднился ответить, сколько денег вложено в этот проект). Подобного рода проекты пишутся на языках системного программирования. Мало кому из программистов удается поучаствовать в таких проектах. Программисты создают информационные системы.

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

Язык Java предлагает единую технологию. Он оказался достаточно простым языком. Язык Java обладал надежностью, недостающей в С++, и более выразительными средствами. Тем не менее поскольку программы на языке Java интерпретируются в виртуальной

Java-машине (JVM), скорость выполнения программ на Java несколько ниже, чем скорость выполнения программ на компилируемых языках (интерпретация байт-кода всегда медленнее, чем трансляция).

Для того, чтобы средства программирования было легко интегрировать, предлагается использовать единую среду программирования. CLR – единая библиотека. Знания программиста при программировании над единой средой программирования портируются (переносятся) полностью. В отличие от JVM, технология JIT осуществляет моментальную трансляцию в бинарный код.
^ 3. Основные понятия ЯП

Рассмотрим концептуальную схему рассмотрения ЯП.


    1. Виды программирования:

  1. игровое программирование (программирование только для себя; в основном на Visual Basic)

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

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

ЯП для этих видов программирования разные. Например, FORTRAN – язык научного программирования.

Мы будем заниматься языками индустриального программирования.


    1. Основные позиции при рассмотрении ЯП .


1.Технологическая позиция

Эта позиция отражает взгляд человека, желающего пользоваться ЯП как технологическим инструментом на каком-либо из этапов создания и использования программных изделий.

ЯП создается, чтобы занять экологическую нишу. Любой экологической нише соответствуют свои технологические потребности.

Языки игрового программирования не подразумевали понятия разделяющейся трансляции. Для научного и индустриального программирования необходимо разбиение программ на части для использования библиотек и написания разных частей программы разными программистами. Т.о., модульность – это критичная технологическая потребность индустриального программирования.
2.Реализаторская позиция – то, как какая-либо технологическая потребность реализуется в ЯП. Любой хороший ЯП можно объяснить в терминах высокоуровневых понятий. Многие вещи становятся более понятны, если ясно как они реализованы (например, не слишком ли накладны виртуальные методы с точки зрения реализации; надо понимать какие накладки это может вызвать).
^ 3.Авторская позиция

Язык – это система компромиссов (например, если при создании ЯП включать в него все конструкции многих ЯП (например, ЯП PL/I), то такой язык будет неудачным).

Книга Страуструпа «Дизайн и эволюция языка С++» во многом посвящена авторской позиции.

^ 4.Семиотическая позиция

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

Семиотическую позицию можно представить как позицию человека, знакомого с некоторыми знаковыми системами и желающего узнать, чем выделяются такие знаковые системы как ЯП.
^ 5.Социальная позиция

Любой ЯП – социальный феномен. Например, ЯП Visual Basic гораздо более популярен, чем Delphi, хотя Delphi превосходит его во многих отношениях. Никакими причинами, кроме социальных это не объяснить.

Позиции 4-5 в нашем курсе подробно рассматривать не будем.
3.3.Схема рассмотрения ЯП
1.Базис:

  • скалярный (примитивные типы данных и операции над ними)

  • структурный (составные типы данных, множества, управляющие структуры).

Со временем базис ЯП не усложняется.
2. Средства развития – новые абстракции. Например, сложность – ключевая проблема современного программирования и программирования вообще. С 60-х люди стали создавать программы в миллионы строк (непрерывная распечатка текста занимает несколько ящиков!) Ориентироваться, знать и понимать такую программу невозможно.

^ Причинасемантический разрыв между базисными средствами и реальными объектами. Что необходимо, чтобы в языке были средства развития?

  • процедурная абстракция,

  • средства разделения данных между подпрограммами.

Например, язык С обладает средствами развития за счет

  • понятия модульности,

  • понятия функций.

Язык С++ наиболее мощный язык с точки зрения средств развития:

  • понятие класса,

  • наследование,

  • динамический полиморфизм,

  • статический полиморфизм,

  • шаблоны.


3.Средства защиты – это средства, которые поддерживают цельность создаваемых абстракций. Например, в ЯП С отсутствуют средства защиты. В языке С++ средства защиты также недостаточно хороши вследствие совместимости с языком С.

С точки зрения п.2 и 3 ЯП в основном и различаются.
3.4.Понятие о виртуальной машине языка
Стандартная библиотека – это совокупность функций и структур данных, которые должны присутствовать в любой реализации языка.

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



КОМПЬЮТЕР ^ WEB –ПРИЛОЖЕНИЯ (реализованный как HTML – страница)

Виртуальный WEB-компьютер (браузер – программа на языке С или Java)

^ Виртуальный компьютер ЯЗЫКА С (реализуется программами из библиотеки поддержки выполнения, загружаемой вместе с откомпилированной программой)

^ ВИРТУАЛЬНЫЙ КОМПЬЮТЕР ОПЕРАЦИОННОЙ СИСТЕМЫ (реализуется программами на машинном языке, которые выполняются на виртуальном программно-аппаратном компьютере)

^ ПРОГРАММНО-АППАРАТНЫЙ ВИРТУАЛЬНЫЙ КОМПЬЮТЕР (машинный язык этого компьютера реализуется микропрограммами, выполняемыми на аппаратном компьютере)

^ РЕАЛЬНЫЙ АППАРАТНЫЙ КОМПЬЮТЕР (реализован физическими устройствами)


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

^ Виртуальная машина – некоторый абстрактный интерпретатор языка программирования. Пример виртуальной машины ЯП – Java VM (в ее состав входит интерпретатор байт-кода и системные библиотеки).

Лекция 4 (при составлении конспекта использовалась диктофонная запись)
3.5. Данные, операции и связывание
Это самые основные понятия во всех языках программирования, поэтому их рассмотрение мы выносим во введение. Мы уже определили ЯП как инструмент для планирования поведения исполнителя (Кауфман, «ЯП»). Данными обычно считают любые обрабатываемые объекты независимо от их внутренней природы. Совершенно очевидно, что любой исполнитель работает с какими-либо данными и обрабатывает их путем совершения некоторого рода операций. И поэтому данные – это безусловно самая важная абстракция. С другой стороны, прежде чем начать характеризовать понятия операции и данные, необходимо отметить дуализм этого понятия, т.е. данные и операции это взаимосвязанные понятия. Т.е. все, что мы делаем с данными, с точки зрения исполнителя, называется операциями. Операции –это суть воздействия изменения данного, некоторого вычисления. Между операциями и данными существует глубокий дуализм, и в структуре современных ЯП этот дуализм подчеркивается.

Что же считать данными и что считать операциями? Здесь существует 2 мнения.
Рассмотрим язык Delphi, который произошел от языка Turbo Pascal. В нем есть понятие строка (string); есть операция length(s), и в применении к данным типа string она возвращает длину строки. Функция – это абстракция понятия операция; есть пользовательские функции – это пользовательские операции, которые мы вводим над данными. С этой точки зрения, длина length(s) – это операция.
С другой стороны, вспомним язык Turbo Pascal. Что там представляет тип данных string? Это строка длиной не более чем 256 символов, и в 1-ом байте этой строки находится длина. Иначе говорят, что эти строки с признаком длины. И с этой точки зрения, что из себя представляет длина строки? Безусловно – это данные. Более того, многие программисты этим пользуются. Фактически, length(s) – это обращение к нулевому байту соответствующего массива.

Пусть есть var s:string;

Хорошим стилем программирования на Turbo Pascal считалось:

len: byte absolute s;

Слово absolute в Turbo Pascal служило для отождествления двух переменных различных типов. Т.е. по этому объявлению переменная len начиналась с того же самого адреса, что и переменная s. И поэтому i:=len; было то же самое, что и i:=length(s);

Тем самым, здесь программист заведомо использовал дуализм понятия длины строки.
Что же теперь считать длиной строки в современной стратегии? В Delphi понятие строки – это существенно более сложное понятие. Там строка – это настоящая динамическая строка; когда речь идет о строке – речь идет о некотором дескрипторе; частью этого дескриптора является указатель на символьный массив, который является строкой. Т.о., строка – это настоящая динамическая строка, размер которой может достигать 2 мегабайт.

Чем в Delphi является string? Это данные или операция? Вообще говоря непонятно. Все зависит от того, каким образом реализован string.

А если речь идет о string языка С, то строка – это любая последовательность символов, которая заканчивается нулем. Там операция strlen – это безусловно настоящая операция, которая влечет за собой сканирование области памяти.

Этот пример показывает, что данные и операции между собой связаны очень тесно.
Еще более ясен этот дуализм в некоторых языках, где есть понятие свойства.

Свойство (property) – это некоторый атрибут объекта, который выглядит как данное.

Например, в системах с графическим пользовательским интерфейсом любая визуальная компонента (т.е. компонента, которая отображается на экране) имеет свое окно. Там будут такие свойства : x, y, width, height .

Пусть Box – некоторая компонента, и у нее есть свойства box.x и box.y ;

(x,y) – координаты левого верхнего угла окна. Выглядят такие свойства исключительно как данные, т.е. запись box.x=0; box.y=0; с точки зрения ЯП выглядит как присваивание x и y компоненты box нуля, т.е. надо отправить её в левый верхний угол контейнера. На самом деле изменение свойств x и y - это целая совокупность операций:

  1. найти окно

  2. запросить у ОС возможность изменения геометрии окна

  3. производится операция изменения положения окна

  4. производится операция перерисовки.

Кроме того, соответствующая операция может и не выполнится, если какой-либо пункт запрещен. А с точки зрения ЯП все выглядит как изменение одного данного.

Т.о., понятие свойства явным образом демонстрирует дуализм операций и данных.

Более того, многие языки явным образом поддерживают понятие свойства (Delphi, С#), т.е. можно программировать свои классы и в них указывать что-либо как свойства, т.е. объявлять свойства как данные и в то же время связывать с этим свойством операции изменение его значения (set) и извлечение его значения (get).
Поговорим подробнее о данных.

Вообще говоря, в процедурных ЯП ( т.е. в ЯП, основанных на фон неймановской модели) ключевым понятием является понятие переменная/константа. И переменная и константа – это так называемые объекты данных (ОД). Это важнейшие понятия в любом ЯП.


Атрибуты (свойства) понятия переменная в любом языке:

  1. имя

  2. значение

  3. тип

  4. адрес

  5. время жизни

  6. область видимости


1.Имя.

Каждый ли объект данных имеет имя ( в Pascal, C)?

Нет(например, константа I =5; имени не имеет, а имеет только изображение).

Есть языки (например, LISP), в которых объекты данных могут имени не иметь.

Какие ОД не имеют имени в стандартном Pascal? Например, объекты динамической памяти, и единственно возможный способ к ним обратиться – через указатель.
2.Значение.

Любой ОД имеет какое-то значение. В чем основное отличие между переменными и константами? Во времени связывания – когда значение связывается с объектом данных.

Для переменной время связывания динамическое, а для константы – статическое. Очень четко надо понимать, что представляет собой время связывания. Например, для константы значение связывается с ОД только один раз.

В связи с этим сравним похожие на первый взгляд языки С и С++. В обоих этих языках есть понятие константы.

сonst int I=1;

В чем же отличие констант в С и в С++?

С константой значение связывается 1 раз (до начала выполнения основной программы (main)).

В языке С любая константа связывается со значением на этапе загрузки или редактирования связей, но не на этапе трансляции.

В языке С++ неявно константы разбиваются как бы на 2 класса:

  • связывание происходит во время трансляции (для констант простых типов);

  • связывание происходит перед входом в main , т.е. в момент загрузки программы на счет.


Введём два понятия:

  • стандартного пролога (это некоторые действия, которые выполняются перед началом выполнения программы);

  • стандартного эпилога (это некоторые действия, которые выполняются после завершения работы программы).


Пример. Можно ли в языке С/C++ написать:

const int N=10;

и после описывать:

int a[N];

Здесь проявляется разница этих языков. В С++ такая конструкция корректна, а в С нет.

  1   2   3   4   5   6   7   8   9   ...   21

Похожие:

Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций для студентов дистанционной формы обучения
Конспект лекций содержит кратко изложенный курс лекций и список учебников и учебных пособий, которые позволят студентам усвоить содержание...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций Общая социология: конспект лекций Купить книгу "Общая...
Проект социологии у Конта подразумевал, что общество – особая сущность, отличная от индивидов и государства и подчиненная собственным...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций Минск 2010 удк 338. 45
Конспект лекций разработан кандидатом экономических наук, доцентом Забродской Наталией Георгиевной
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций Глазковой В. В. 205 гр. Лектор Машечкин И. В. Развитие...
Пенсильванском университете США была разработана вычислительная машина eniac (Electronic Numerical Integrator and Computer), которая...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций по курсу технология материалов и изделий
Конспект лекций предназначено для изучения курса «Технология материалов и изделий электронной техники»
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект по курсу лекций Операционные системы Граур Светлана группа 203
Основные блоки: 1)введение (историческое развитие вычислительных систем (ВС), определяемое появлением и развитием программного обеспечения...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект по курсу лекций Операционные системы Граур Светлана группа 203
Основные блоки: 1)введение (историческое развитие вычислительных систем (ВС), определяемое появлением и развитием программного обеспечения...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКонспект лекций для студентов специальностей 1-38 01 01 «Механические...
Конспект лекций предназначен для студентов специальности 1-38 01 01 «Механические и электромеханические приборы и аппараты» и1-54...
Конспект лекций ( Глазковой В. В., 320 группа ) iconКафедра «экономики и менеджмента» конспект лекций по курсу "Организация,...
Конспект лекций по курсу "Организация, планирование и управление производственным предприятием"
Конспект лекций ( Глазковой В. В., 320 группа ) iconЛабораторные работы по дисциплине “Объектно-ориентированное программирование”
Еще более эффективно сначала прочитать весь конспект лекций и только затем приступать к выполнению лабораторных работ, возвращаясь...

Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2014
контакты
skachate.ru
Главная страница