Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на ЯП.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
661.54 Кб
Скачать

Разновидности массивов. Статические

Статические – массив со статическим связыванием по диапазонам индексов и таких размещением в памяти, которое происходит до начала работы программы.

Статические массивы достаточно эффективны, поскольку отсутствуют затраты времени как на динамическое размещение в памяти, так и на удаление из нее.

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

В языках С и С++ статистическими являются массивы, которые объявляются в функциях со спецификатором static.

Явные стековые массивы - массив со статическим связыванием по диапазонам индексов и таким размещением в памяти, которое происходит по итогам обработки объявления в ходе выполнения программы.

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

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

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

Массивы, объявленные в функциях С и С++ без спецификатора static, считаются явными стековыми массивами.

Стековые - массив с динамическим связыванием по диапазонам индексов и динамическим размещением в памяти, которое происходит в ходе обработки объявления.

Связанность диапазонов индексов и размещение массива в памяти сохраняются в течении всей жизни переменной.

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

Явные динамические массивы - связывание и по диапазонам индексов, и по памяти происходит после размещения в памяти. (одноразовое)

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

Преимущества является гибкость: изменение размера массива всегда остается проблемой.

Недостаток - на размещение в куче тратится времени больше, чем на размещение в стеке.

Языки С С++ используются стандартные библиотечные функции malloc (размещение), free (освобождение памяти), которые являются операциями для размещения в куче и удаления из нее соответственно.

Для управления кучей применяют операторы new и delete.

Динамические

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

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

- На многократное размещение (удаление) в куче тратится много времени (и все оно приходится на период вычислений).

Массивы в Perl

Имена всех массивов должны начинаться с символа @.

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

На элемент массива в Perl можно сослаться при помощи отрицательного индекса. Отрицательное значение индекса обозначает номер позиции элемента с конца. Индекс – 1 соответствует последнему элементу массива, -2 –предпоследнему.

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

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

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

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

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

Массив массивов – многомерный массив, в котором не требуется, чтобы длины у строк были одинаковыми. Еще называют не выровненными массивами.

Int[][]jaggedarray2 = new int []

{ new int [] {1,3,4,5,6},

New int[] {2,3,4},

New int[] {2,7}};

Сечение – подструктура массива, которая сама является массивом.

Сечение для трехмерного массива - двумерный, для двумерного – одномерный.

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

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

Ассоциативные массивы в питоне называют словарями.

В РНР применяются как обычные, так и ассоциативные массивы. Язык обеспечивает функции как индексированного, так и хешированного доступа к элементам.

Строки

Строка – последовательность символов.

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

Различают 3 вида:

1. Строки фиксированной длины

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

3. Неограниченные по длине строки (строки с неограниченной динамической длиной)

Строки фиксированной длины (со статической длиной) – поддержка на аппаратном уровне.

#String в java

Правила

1. Значениями могут быть строки символов только этой длины.

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

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

Подобные строки приняты в языках С и С++. Вместо объявления длины строки используются ограничивающий нуль - символ \0, который помещается за последним символом строки.

Правила

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

2. Фактические строки могут иметь меньшее количество символов

3. Текущая длина строки может меняться, но при превышении максимума лишние символы отсекаются

Неограниченные по длине строки (строки с неограниченной динамической длиной).

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

Операции со строками

• Конкатенация (объединение) – объединение две короткие строки в одну.

• Операции отношений над строками (сравнение ) > <

• Операции основываются на правиле лексикографического (алфавитного) упорядочения символов: строка Х меньше строки Y, если первый символ Х меньше первого символа Y, если совпадают, то по второму.

Выделение подстрок при помощи индексов.

Выделение подстроки на основе сопоставления с образцом.

45. Механизмы логического вывода. Прямая и обратная цепочки рассуждений.

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

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

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

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

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

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

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

46. Пространство имен, область видимости, время жизни переменных.

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

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

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

Область видимости имени (англ. scope) — понятие в некоторых языках программирования, означающее места в исходном коде, в которых может использоваться данное имя.

По области видимости переменных делятся на: локальные (которые «видны» внутри данной структуры — файла, подпрограммы или оператора) и глобальные (которые «видны» во всей программе). В некоторых языках появились ещё и общие переменные.[источник?]

Область видимости переменной может задаваться с помощью классов памяти или пространства имён.

В C++ область доступа поля класса можно задавать с помощью ключевых слов public, private и protected.

Области видимости определяются и для языков разметки. Например, в HTML областью видимости имени элемента управления является форма (HTML) от <form> до </form>