Пример динамического массива на Delphi
byteArray:ArrayofByte;// Одномерныймассив
multiArray:ArrayofArrayofstring;// Многомерныймассив
Статические массивы в отличие от динамических задают свой размер непосредственно в типе. Память под такие массивы выделяется сразу при описании.
Тип статического массива конструируется следующим образом:
array [тип индекса1, ..., тип индексаN] of базовый тип
Тип индекса должен быть порядковым. Обычно тип индекса является диапазонным и представляется в виде a..b, где a и b - константные выражения целого, символьного или перечислимого типа. Например:
type
MyEnum = (w1,w2,w3,w4,w5);
Arr = array [1..10] of integer;
var
a1,a2: Arr;
b: array ['a'..'z',w2..w4] of string;
c: array [1..3] of array [1..4] of real;
Работа с массивами.
Есть два эквивалентных способа создания массива:
var a = new Array() |
var a = [] |
Или, сразу со значениями
var a = new Array("a", 1, true) |
var a = ["a", 1, true] |
Эти способы работают одинаково, кроме объявления вида newArray(10), когда у конструктора есть единственный аргумент-число.
Такое объявление создаст пустой массив (все элементы undefined) длиной 10. По возможности, не используйте newArray.
Отсчет элементов начинается с нуля:
alert(a[0]) // => "a" |
Массив хранит данные по численным ключам, но внутри он использует точно такой же хэш (ту же структуру данных), как и обычный объект, поэтому можно сделать так:
var a = [] |
a[1] = 1 |
a[999999] = 2 |
и массив a будет занимать память, нужную для хранения этих двух соответствий, а не займет длинный непрерывный кусок памяти, как это произошло бы в языке С.
Билет №11
1) Методы трансляции программ: компиляция, интерпретация.
Существуют два принципиально различных метода трансляции. Они называются соответственно компиляция и интерпретация.
Компиляция является аналогом полного предварительного перевода; интерпретация — аналогом синхронного перевода. Транслятор, работающий по принципу компиляции, называется компилятором; транслятор, работающий методом интерпретации, — интерпретатором.
При компиляции в память ЭВМ загружается программа-компилятор. Она воспринимает текст программы на ЯПВУ как исходную информацию. После завершения компиляции получается программа на языке машинных команд. Затем в памяти остается только программа на ЯМК, которая выполняется, и получаются требуемые результаты.
Интерпретатор в течение всего времени работы программы находится во внутренней памяти. В ОЗУ помещается и программа на ЯПВУ. Интерпретатор в последовательности выполнения алгоритма «читает» очередной оператор программы, переводит его в команды и тут же выполняет эти команды. Затем переходит к переводу и выполнению следующего оператора. При этом результаты предыдущих переводов в памяти не сохраняются. При повторном выполнении одной и той же команды она снова будет транслироваться.
При компиляции исполнение программы разбивается на два этапа: трансляцию и выполнение. При интерпретации, поскольку трансляция и выполнение совмещены, программа на ЭВМ проходит в один этап. Однако откомпилированная программа выполняется быстрее, чем интерпретируемая. Поэтому использование компиляторов удобнее для больших программ, требующих быстрого счета. Программы на Паскале, Си, Фортране всегда компилируются. Бейсик чаще всего реализован через интерпретатор.
2) Условный оператор, егоформы, примеры.
Условный оператор. Формат условного оператора следующий:
if (выражение) оператор].; else оператор2;
Это полная форма оператора, программирующая структуру полного ветвления. Обычно выражение — это некоторое условие, содержащее операции отношения и логические операции. Значение выражения приводится к целому и интерпретируется в соответствии с правилом: равно нулю — ложь, не равно нулю — истина. Если выражение истинно, выполняется оператор]., если ложно — оператор2.
Необходимо обратить внимание на следующие особенности синтаксиса условного оператора:
• выражение записывается в круглых скобках;
• точка с запятой после оператора 1 ставится обязательно. Последнее обозначает, что правило Паскаля — не ставить точку с запятой перед else — здесь не работает. Возможно использование неполной формы условного оператора if (выражение) оператор; Вот пример использования полной формы условного оператора для нахождения большего значения из двух переменных а и b:
if(a>b) max=a; else max=b; 197
Та же самая задача может быть решена с использованием неполного ветвления следующим образом:
max=a; if(b>a) mах=Ь;
Пример 1. Алгоритм с полными вложенными ветвлениями:
if(х<=0) if(x==0) y=0; else у=-1; else у=1;
3) Программирования ветвящихся алгоритмов. Условный оператор. Примеры.
Для программирования ветвящихся алгоритмов в языке Си имеется несколько различных средств. К ним относятся рассмотренная выше операция условия ?:, условный оператор if и оператор выбора switch.
Условный оператор. Формат условного оператора следующий:
if (выражение) оператор].; else оператор2;
Это полная форма оператора, программирующая структуру полного ветвления. Обычно выражение — это некоторое условие, содержащее операции отношения и логические операции. Значение выражения приводится к целому и интерпретируется в соответствии с правилом: равно нулю — ложь, не равно нулю — истина. Если выражение истинно, выполняется оператор]., если ложно — оператор2.
Необходимо обратить внимание на следующие особенности синтаксиса условного оператора:
• выражение записывается в круглых скобках;
• точка с запятой после оператора 1 ставится обязательно. Последнее обозначает, что правило Паскаля — не ставить точку с запятой перед else — здесь не работает. Возможно использование неполной формы условного оператора if (выражение) оператор; Вот пример использования полной формы условного оператора для нахождения большего значения из двух переменных а и b:
if(a>b) max=a; else max=b; 197
Та же самая задача может быть решена с использованием неполного ветвления следующим образом:
max=a; if(b>a) mах=Ь;
Пример 1. Алгоритм с полными вложенными ветвлениями:
if(х<=0) if(x==0) y=0; else у=-1; else у=1;
Билет 12
1. Основные понятия языка программирования: алфавит, синтаксис, семантика. Способы описания языков программирования: языка Бэкуса – Наура формул (БНФ), синтаксические диаграммы Вирта.
Алфавит – фиксированный для данного языка набор символов (букв, цифр, специальных знаков и т.д.), которые могут быть использованы при написании программы.
Синтаксис языка - совокупность правил, определяющих допустимые конструкции (слова, предложения) языка, его форму.
Семантика языка - совокупность правил, определяющих смысл синтаксически корректных конструкций языка, его содержание.
Для описания синтаксиса языка программирования требуется язык, который называют метаязык «надъязык». Наиболее распространенными метаязыками в литературе по программированию являются металингвистические формулы Бекуса-Наура (язык БНФ) и синтаксические диаграммы.
В БНФ всякое синтаксическое понятие описывается в виде формулы, состоящей из правой и левой части, соединенных знаком ::=, смысл которого эквивалентен словам «по определению есть». Слева от знака ::= записывается имя определяемого понятия (метапеременная), которое заключается в угловые скобки <>, а в правой части записывается формула или диаграмма, определяющая все множество значений, которые может принимать метапеременная.
Синтаксис языка описывается путем последовательного усложнения понятий: сначала определяются простейшие (базовые), затем все более сложные, включающие в себя предыдущие понятия в качестве составляющих.
В записях метаформул приняты определенные соглашения. Например, формула БНФ, определяющая понятие «двоичная цифра», выглядит следующим образом:<двоичная цифра>::=0|1
Значок | эквивалентен слову «или». Это определение можно представить на языке синтаксических диаграмм.
В диаграммах стрелки указывают на последовательность расположения элементов синтаксической конструкции; кружками обводятся символы, присутствующие в конструкции.
Понятие «двоичный код» как непустую последовательность двоичных цифр БНФ описывает так:
<двоичный код>::=<двоичная цифра>|<двоичный код><двоичная цифра>
Определение, в котором некоторое понятие определяется само через себя, называется рекурсивным. Рекурсивные определения характерны для БНФ.