Компилируемые и интерпретируемые языки. Интерпретируемый язык программирования

Желающие освоить язык программирования сталкиваются с такими понятиями, как компилятор и интерпретатор. Компиляция и интерпретация — это основа работы языков программирования.

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

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

Компилируемые языки

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

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

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

Примерами компилируемых языков являются Pascal, C, C++, Erlang, Haskell, Rust, Go, Ada.

Интерпретируемые языки

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

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

Примерами интерпретируемых языков являются PHP, Perl, Ruby, Python, JavaScript. К интерпретируемым языкам также можно отнести все скриптовые языки.

Многие языки в наши дни имеют как компилируемые, так и интерпретируемые реализации, сводя разницу между ними к минимуму. Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету». Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

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

Хочешь получать новые статьи первым? Вступай в сообщества ITmentor

Лекция 1 – Языки программирования. Visual Basic

{Материал из Википедии - свободной энциклопедии}Язы́к программи́рования - формальнаязнаковая система, предназначенная для описанияалгоритмов в форме, которая удобна для исполнителя (например,компьютера ). Язык программирования определяет наборлексических ,синтаксических исемантических правил, используемых при составлениикомпьютерной программы . Он позволяетпрограммисту точно определить то, на какие события будет реагировать компьютер, как будут храниться и передаватьсяданные , а также какие именно действия следует выполнять над этими данными при различных обстоятельствах. Со времени создания первых программируемых машин человечество придумало уже более двух с половиной тысяч языков программирования (См.Список языков программирования (англ.)). Каждый год их число пополняется новыми. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.Cоздатели языков по-разному толкуют понятиеязык программирования . Среди общих мест, признаваемых большинством разработчиков, находятся следующие:

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

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

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

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

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

    Типов и структур данных

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

    Семантические конструкции языка

    Библиотеки примитивов (например, инструкции ввода-вывода)

    Философии назначения и возможностей языка

Для многих широко распространённых языков программирования созданы международные комитеты по стандартизации, которые выполняют регулярное обновление и публикацию спецификаций и формальных определений соответствующего языка. В рамках таких комитетов продолжается разработка и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций.

Типы данных

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

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

Структуры данных

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

Компилируемые и интерпретируемые языки

Языки программирования делятся на два класса - компилируемые иинтерпретируемые . Программа на компилируемом языке при помощи специальной программыкомпилятора преобразуется (компилируется ) в набор инструкций для данного типа процессора (машинный код) и далее записывается висполняемый файл , который может быть запущен на выполнение как отдельная программа. Другими словами, компилятор переводит программу с языка высокого уровня на низкоуровневый язык, понятный процессору. Если программа написана на интерпретируемом языке, тоинтерпретатор непосредственно выполняет (интерпретирует ) ее текст без предварительного перевода. При этом программа остается на исходном языке и не может быть запущена без интерпретатора. Можно сказать, что процессор компьютера - это интерпретатор машинного кода. Кратко говоря, компилятор переводит программу на машинный язык сразу и целиком, создавая при этом отдельную программу, а интерпретатор переводит на машинный язык прямо во время исполнения программы. Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например,Паскаль , можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов). Для любого интерпретируемого языка можно создать компилятор - например, язык Лисп, изначально интерпретируемый, может компилироваться без каких бы то ни было ограничений. Создаваемый во время исполнения программы код может так же динамически компилироваться во время исполнения. Как правило, скомпилированные программы выполняются быстрее и не требуют для выполнения дополнительных программ, так как уже переведены на машинный язык. Вместе с тем при каждом изменении текста программы требуется ее перекомпиляция, что создает трудности при разработке. Кроме того, скомпилированная программа может выполняться только на том же типе компьютеров и, как правило, под той же операционной системой, на которую был рассчитан компилятор. Чтобы создать исполняемый файл для машины другого типа, требуется новая компиляция. Интерпретируемые языки обладают некоторыми специфическими дополнительными возможностями (см. выше), кроме того, программы на них можно запускать сразу же после изменения, что облегчает разработку. Программа на интерпретируемом языке может быть зачастую запущена на разных типах машин и операционных систем без дополнительных усилий. Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без дополнительной программы-интерпретатора. Некоторые языки, например,Java иC# , находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня,байт-код . Далее байт-код выполняетсявиртуальной машиной . Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation,JIT ). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine,JVM ), для C# -Common Language Runtime . Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный языкФорт(Forth) , который является как бы одновременно интерпретируемым и компилируемым.

Существует несколько подходов к определению семантики языков программирования.

Наиболее широко распространены разновидности следующих трёх: операционного, денотационного (математического) и деривационного (аксиоматического).

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

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

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фоннеймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (Forth, Factor, Postscript и др.), а также функциональное (Лисп, Haskell, ML и др.) и логическое программирование (Пролог) и язык Рефал, основанный на модели вычислений, введённой советским математиком А.А. Марковым-младшим.

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

Компилируемые и интерпретируемые языки

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

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

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

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

Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# -- Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный язык Форт(Forth) имеющий и интерпретатор и компилятор.

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие).

Подробнее по этой теме см.: Русские языки программирования.

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других -- арабскими, а третьих -- китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

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

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

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

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

Разделение на компилируемые и интерпретируемые языки является несколько условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

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

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# -- Common Language Runtime.

Подобный подход в некотором смысле позволяет использовать плюсы как интерпретаторов, так и компиляторов. Следует упомянуть также оригинальный язык Форт(Forth) имеющий и интерпретатор и компилятор.

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ " :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большую популярность подобные языки не завоевали (исключение составляет. Встроенный язык программирования 1С: Предприятие).

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других -- арабскими, а третьих -- китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

Задание №1

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

1. Для создания на диске D папок первого уровня нужно выполнить следующие действия:

Открыть Мой компьютер, перейти на диск D:

Выбрать пункт меню Файл, Создать, Папку, напечатать имя создаваемой папки П1.

Аналогично создаются папки П2 и П3.

Для создания папок второго уровня необходимо:

Перейти в папку первого уровня, в которой нужно создавать папку второго уровня. Например папку П21 нужно создавать в папке П2, папку П31 - в папке П3 и т.д.

Повторить действия из 1-го пункта при создании папок 3-его уровня нужно папку П311 создавать в папке П31 и т.д.

2. Чтобы переименовать папку нужно

Выбрать папку П31

Выбрать пункт меню Файл, Переименовать, напечатать фамилию Хомченко

Выбрать папку П1 и дать имя Инна.

3. Для переноса 9-ой папки во 2-ю папку нужно

Выбрать папку П312

Выбрать пункт меню Правка, Вырезать

Перейти в нужную папку П2

Выбрать пункт меню Правка, Вставить.

4. Дерево диска D до выполнения пунктов 2-3 будет выглядеть так:

Так выглядит дерево диска D: после выполнения пунктов 2-3:

Пояснения к выполнению задания №4

1. Для форматирования ячеек нужно выполнить следующее:

* выделить ячейку или диапазон ячеек

* выбрать пункт меню Формат, ячейки, выравнивание.

2. Чтобы ввести в ячейку формулу нужно:

* активизировать нужную ячейку

* набрать знак =, а затем нужную формулу вручную на клавиатуре или с использованием мыши.

Например, в ячейку H7 нужно ввести формулу: =G7+C7-F7

3. Для заполнения колонки Примечание 1 нужно использовать функцию

ЕСЛИ(). Таким образом в ячейке К7 будет размещена формула:

ЕСЛИ(I7>=15000;"Очень хорошая работа"; ЕСЛИ(I7>=5000; "Хорошая работа"; ЕСЛИ(I7<0; "Надо больше покупать валюты"; "Надо меньше продавать валюты")))

4. Для заполнения колонки Примечание 2, предварительно необходимо преобразовать условие в таблицу:


Затем в ячейку L7 занести формулу:

ПРОСМОТР(I7;$O$7:$O$12;$P$7:$P$12)

В результате у вас должно получиться такое же значение, как и в колонке Примечание 1;


5. Для использования "автозаполнения" нужно

* выделить ячейку с формулой

* указатель мыши установить в правый нижний угол ячейки, чтобы появился маркер заполнения

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

6. Для заполнения итоговой строки нужно: установите курсор в нужную ячейку и произвести двойной щелчок по кнопке Автосуммирование на панели инструментов.

Описание выполнения пункта №2

Установить курсор в любую свободную ячейку и ввести формулу:

МАКС(F7:F16). Аналогично: =МИН(G7:G16) и =СРЗНАЧ(H7:H16). Формулу можно

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

Для создания имени нужно

* выделить диапазон (например H7:H16)

* выбрать поле имен и задать нужное имя (например Остаток) или выбрать пункт меню Вставка, Имя, Присвоить.

Тогда формула из предыдущего пункта будет выглядеть так:

СРЗНАЧ(Остаток)

Для построения диаграммы нужно

  • ? выделить диапазон данных по которым будем строить диаграмму например В2:D8. Левый столбец и верхняя строка будет использоваться в качестве меток осей.
  • ? вызываем мастер диаграмм.
  • ? выбираем тип диаграммы, например гистограмма, трехмерная.
  • ? Вводим соответствующие надписи для осей и название диаграммы.
  • ? выбираем лист, на котором будем строить диаграмму и выбираем кнопку Готово.

Для распечатки списка имен нужно выбрать пункт меню Вставка, Имя, Вставить, Все имена.

Чтобы получить таблицу с расчетными формулами нужно выбрать пункт меню

Сервис, Параметры, Вид, Параметры окна, Формулы.

Для оформления колонтитулов можно

* выбрать пункт меню Вид, Колонтитулы.

* выбрать пункт меню Файл, Параметры страницы, Колонтитулы.

Чтобы убрать сетку для печати нужно выбрать

Файл, Параметры страницы, Лист и отменить печать сетки.

Для распечатки полученной книги нужно выбрать:

  • ? Файл, Печать или
  • ? соответствующую пиктограмму на панели инструментов

Если диаграмма построена на том же рабочем листе, что и таблица, то печатать следует вместе с таблицей. Если диаграмма построена на новом рабочем листе, то нужно:

  • ? перейти на лист с построенной диаграммой
  • ? выполнить печать как в пункте №5

Пояснения к выполнению задания №5

  • 1. Для того чтобы отсортировать список необходимо:
    • ? установить курсор на то поле списка, по которому нужно провести

сортировку.

  • ? выбрать соответствующую пиктограмму на панели инструментов.
  • 2. Для работы с автофильтром необходимо:

установить курсор в любую ячейку списка.

выбрать пункт меню Данные, Фильтр, автофильтр.

1. выбрать изделия, цена которых <= 100000 и >300000 или расход которых не превышает 100 единиц.

Описание выполнения пункта 1.

  • 1. Включаем Автофильтр.
  • 2. Нажимаем кнопку автофильтра в поле Цена.
  • 3. Выбираем пунк меню Условие:
    • ? задаем условие
    • ? выбираем логическое условие И
    • ? задаем условие >300000
    • ? кнопка ОК

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

Базовый материал

Компилятор

Ранее мы увидели, что наиболее часто используемые инструменты в D - текстовый редактор и компилятор . Программы на D пишутся в текстовых редакторах (прим. ваш КО).

При использовании компилируемых языков , таких как D, необходимо понимать концепцию компиляции и функцию компилятора.

Машинные коды

Мозгом компьютера является микропроцессор (или ЦПУ, сокращение от центрального процессорного устройства ). Кодированием называется указывание, что именно должен делать ЦПУ, и инструкции, которые используются при этом, называются машинными кодами .

Большинство архитектур ЦПУ используют специфичные для них машинные коды. Эти машинные инструкции определяются с учетом ограничений аппаратных средств во время проектирования архитектуры. На самом низком уровне эти инструкции реализованы как электические сигналы. Так как простота программирования на этом уровне не является главной целью, написание программ напрямую в машиннах кодах ЦПУ является очень сложной задачей.

Эти машинные инструкции представляют собой специальные числа, которые представляют различные операции, поддерживаемые конкретным ЦПУ. Например, для воображаемого 8-битного ЦПУ, число 4 может представлять операцию загрузки, число 5 - операцию сохранения, и число 6 - операцию увеличения значения на единицу. Предполагая, что первые 3 бита слева - номер операции и 5 последующих бита - значение, которое используется в этой операции, программа-пример в машинных кодах этого ЦПУ может выглядеть следующим образом:
Operation Value Meaning 100 11110 LOAD 11110 101 10100 STORE 10100 110 10100 INCREMENT 10100 000 00000 PAUSE

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

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

Языки программирования разработаны быть эффективным способом программирования ЦПУ с возможностью представления высокоуровневых концепций. Языкам программирования не приходится иметь дело с ограничениями аппаратуры; их главная задача - простота использования и выразительность. Языки программирования легче понимаются людьми, они ближе к естественным языкам:
if (a_card_has_been_played()) { display_the_card(); }

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

Компилируемые языки

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

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

D - компилируемый язык.

Интерпретируемые языки

Некоторые языки программирования не требует компиляции. Такие языки называются интерпретируемыми . Программа может запущена прямо из свеженапечатанного исходного кода. Некоторые примеры интерпретируемых языков: Python, Ruby и Perl. Так как этап компиляции отсутствует, для таких языков разработка программы может быть проще. С другой стороны, так как инструкции программы должны быть разобраны для интерпретации каждый раз, когда программа запускается, программа на таких языках медленнее, чем их эквиваленты, написанные на компилируемых языках.

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

Компилятор

Назначение компилятора - трансляция: он транслирует программы, написанные на языке программирования, в машинный код. Это перевод из языка программиста на язык ЦПУ. Такая трансляция называется компиляцией . Каждый компилятор понимает какой-то конкретный язык программирования и описывается, как компилятор для этого языка, например «компилятор для D».

Ошибки компиляции

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

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

Фундаментальные типы

Ранее мы выяснили, что мозгом компьютера является ЦПУ. Большинство задач программы выполняются на ЦПУ, и остальные распределены по другим частям компьютера.

Наименьшая единица данных в компьтере называется битом , которая может принимать значения 0 или 1.

Так как тип данных, который может содержать только значения 0 или 1 имел бы очень ограниченное применение, ЦПУ определяет бОльшие типы данных, которые являются комбинациями из более одного бита. Например, байт содержит 8 битов. Наиболее производительный тип данных определяет битность ЦПУ: 32-битный ЦПУ, 64-битный ЦПУ и т.п.

Типов, определенных ЦПУ, все еще недостаточно: они не могут описать высокоуровневые понятия, как имя студента или игральная карта . D предоставляет множество полезных типов данных, но даже этих типов не хватает для описания многих высокоуровневых концепций. Такие концепции должны быть определены программистом как структуры (struct) или классы (class), которые мы увидим в следующих главах.

Фундаментальные типы D очень похожи на фундаментальные типы многих других языков, как показано в следующей таблице. Термины, появляющиеся в этой таблице, объяснены ниже:

Тип Определение Начальное значение
bool Логическое значение Истина/Ложь false
byte 8 битное число со знаком 0
ubyte 8 битное число без знака 0
short 16 битное число со знаком 0
ushort 16 битное число без знака 0
int 32 битное число соз знаком 0
uint 32 битное число без знака 0
long 64 битное число со знаком 0
ulong 64 битное число без знака 0
float 32 битное действительное число с плавающей точкой float.nan
double 64 битное действительное число с плавающей точкой double.nan
real наибольшое число с плавающей точкой, которое поддерживается оборудованием real.nan
ifloat мнимая часть комплексного числа для float float.nan * 1.0i
idouble мнимая часть комплексного числа для double double.nan * 1.0i
ireal мнимая часть комплексного числа для real real.nan * 1.0i
cfloat комплексный вариант float float.nan + float.nan * 1.0i
cdouble комплексный вариант double double.nan + double.nan * 1.0i
creal комплексный вариант real real.nan + real.nan * 1.0i
char символ UTF-8 (code point) 0xFF
wchar символ UTF-16 (code point) 0xFFFF
dchar символ UTF-32 (code point) 0x0000FFFF

В довесок к вышеперечисленным, ключевое слово void описывает сущности не имеющие типа . Ключевые слова cent и ucent зарезервированы для будущего использования для представления знаковых и безнаковых 128-битных значений.

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

Разъяснения понятий, представленных в таблице

Логическое значение : тип логического выражения, имеющий значения true для истины и false для лжи.

Тип со знаком: Тип, который может принимать отрицательные и положительные значения. Например, byte может иметь значения от 0 до 255. Буква u в начале названия этих типов взята от слова unsigned .

Число с плавающей точкой: Тип может представлять значения с десятичной дробной частью, как у 1.25. Точность вычислений с плавающей точкой напрямую зависит от числа битов в типе: больше число битов, получаем более точные результаты.

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

Комлексные типы чисел: Эти типы могут представлять комплексные числа из математики.

Мнимые типы чисел: Эти типы могут представлять только мнимую часть комплексных чисел. Буква i , которая находится в колонке начальных значений, в математике является квадратным корнем из -1.

nan: Сокращение от «not a number», представляющее некорректное значение с плавающей точкой .

Комментарии переводчика

Может показаться странным, что для чисел с плавающей точкой используются NaN значения как инициализаторы. Оффициальное объяснение от разработчиков (хотя я не согласен с этой позицией):

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

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

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

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

Из-за особенностей реализации ЦПУ, NaN отсутствует для целочисленных, поэтому вместо этого D использует 0. Нулевое значение не имеет таких преимуществ для обнаружения ошибок, какими обладает NaN, но, по крайней мере, ошибки от непреднамеренной инициализации будут повторимы и поэтому более отлаживаемыми.

Свойства типов

В D у типов есть свойства . Чтобы получить значение свойства, нужно написать имя свойства после типа через точку. Например, sizeof свойство int вызывается так: int.sizeof . В этой главе рассматриваются только следующие четыре атрибута:
  • stringof: имя типа
  • sizeof: размер типа в байтах (для кол-ва битов умножьте на 8)
  • min: минимальное значение, которое может принимать тип
  • max: максимальное значение, которое может принимать тип

Программа, которая печатает эти свойства для int

import std.stdio ;

void main()
{
writeln("Тип: " , int .stringof ) ;
writeln("Длина в байтах: " , int .sizeof ) ;
writeln("Минимальное значение: " , int .min ) ;
writeln("Максимальное значение: " , int .max ) ;
}


Примечания переводчика

Некоторые типы имеют другие свойства, например float и double не имеют свойства min , вместо него используется -float.max и -double.max , .

size_t

Вы также встретитесь с типом size_t , имя которого расшифровывается как «size type». Он не является самостоятельным типом, а псевдонимом безнакового типа, которого хватит для представления всех возможных адресов в памяти. Поэтому этот тип зависит от системы: uint на 32-х битных, ulong для 64-х битных системах и т.д.

Можно использовать свойство .stringof , чтобы увидеть на какой тип ссылается size_t на вашей системе:

Код

import std.stdio ;

void main()
{
writeln(size_t .stringof ) ;
}

Вывод на моей системе:
ulong

Упражнения

Распечатайте свойства других типов.

Примечание :Нельзя использовать зарезервированные типы cent и ucent в любой программе; как исключение, void не имеет свойств .min и .max .

Решение

import std.stdio ;

void main()
{
writeln("Тип: " , short .stringof ) ;
writeln("Размер в байтах: " , short .sizeof ) ;
writeln("Минимальное значение: " , short .min ) ;
writeln("Максимальное занчение: " , short .max ) ;

Writeln() ;

Writeln("Тип: " , ulong .stringof ) ;
writeln("Размер в байтах: " , ulong .sizeof ) ;
writeln("Минимальное значение: " , ulong .min ) ;
writeln("Максимальное занчение: " , ulong .max ) ;
}



Базовый материал

Оператор присваивания и порядок вычислений

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

Оператор присваивания
Вы будете встречать подобные строчки практически во всех программах, практически во всех языках программирования:
a = 10;

Значение этой строчки - «сделай значение a равным 10». Аналогично следующая строчка обозначает «сделай значение b равным 20»:
b = 20;

На основе вышеизложенной информации что можно сказать о следущей строчке?
a = b;

К сожалению, эта строчка не содержит оператор сравнения из математики, который, я предполагаю, все знают. Выражение выше не означает «a равно b»! Когда мы используем ту же логику, что и в предыдущих двух строчках, выражение выше должно означать «сделай значение a равным значению b ».

Хорошо известный символ = в математике имеет совершенно другой смысл в программировании: «сделать значение слева равным значению с правой стороны».

Порядок вычислений
Операции программы выполняются шаг за шагом в определенном порядке. Предыдущие три выражения в программе можно увидеть в следующем порядке:
a = 10; b = 20; a = b;

Смысл этих строк вместе: «сделай значение a равным 10, затем сделай значение b равным 20, затем сделай значение a равным значению b ». Соответственно, после выполнения этих трех операций оба значения a и b будут равны 20.

Упражнение

Изучите, как следующие три операции меняют местами значения a и b . Если в начале их значения были равны 1 и 2 соответственно, то после выполнения операций значения становятся равны 2 и 1:
c = a; a = b; b = c;

Решение

Значения a , b и c напечатаны справой стороны каждой операции:
в начале → a 1, b 2, c неважно c = a → a 1, b 2, c 1 a = b → a 2, b 2, c 1 b = c → a 2, b 1, c 1
В конце значения a и b меняются местами.


Теги:

  • dlang
  • tutorials
  • tutorials d
Добавить метки