ekzamen
.docxКоротко: если мы передаем параметры в функцию через ссылку(void funct(int &a), то если мы изменим этот параметр в функции, он изменится во всей программе.
А если так: void funct(int a), то если мы изменим его в функции, он изменится только в функции, а не во всей программе.
Что такое байт-код и какова схема запуска программ на языках, которые используют байт-код?
Байт-код- Промежуточный код, в который транслируется программа.
Байткод — это набор инструкций, созданный для эффективного исполнения интерпретатором и состоящий из компактных числовых кодов, констант и ссылок на память.
Схема:
Исходный код -˃ байт код(промежуточный код) -˃ Испольняющий механизм
Байт-код - стандартное промежуточное представление, в которое может быть переведена компьютерная программа автоматическими средствами. По сравнению с исходным кодом, удобным для создания и чтения человеком, байт-код — это компактное представление программы, уже прошедшей синтаксический и семантический анализ. В нём в явном виде закодированы типы, области видимости и другие конструкции. С технической точки зрения байт-код представляет собой машинно-независимый код низкого уровня, генерируемый транслятором из исходного кода. По форме байт-код похож на машинный код, но предназначен для исполнения не реальным процессором, а виртуальной машиной. В качестве виртуальной машины обычно выступает интерпретатор соответствующего языка программирования. Один и тот же байт-код может исполняться на разных платформах и архитектурах, для которых реализован интерпретатор. Байт – код используют Perl, PHP, Ruby, Python
Семантика – смысл слова
Лексика – словарный состав языка
Что такое параметры функции и возвращаемое значение в C++?
Параметр функции — это переменная, которая используется в функции, и значение которой предоставляет вызывающий объект. Параметры указываются при объявлении функции в круглых скобках. Если их много, то они перечисляются через запятую, например:
int sum(int a, int b)
Возвращаемое значение функции — это значение возвращаемое в точку вызова функции, после её выполнения, причём значение может и не возвращаться, так как пользователь указывал на тип данных функции — void (в языке C++).
int sum(int a, int b)
{
int s;
s = a + b;
return s; //s - это возвращаемое значение
}
если тип возврата функции не void, то она должна возвращать значение указанного типа (использовать оператор return). Единственно исключение — функция main(), которая возвращает 0, если не предоставлено другое значение.
Функции могут возвращать значения. Для этого нужно указать тип возвращаемого значения (или «тип возврата»). Он указывается при объявлении функции, перед её именем. Обратите внимание, тип возврата не указывает, какое именно значение будет возвращаться. Он указывает только тип этого значения.
Почему программы, собранные под Windows, нельзя запустить в Linux и наоборот?
Ассемблерные инструкции разные для разных ОС
Формат исполняемых файлов Linux очень сильно отличается от Windows.
Синтаксис C++ унаследован от языка C. Изначально одним из принципов разработки было сохранение совместимости с C. Тем не менее C++ не является в строгом смысле надмножеством C; множество программ, которые могут одинаково успешно транслироваться как компиляторами C, так и компиляторами C++, довольно велико, но не включает все возможные программы на C.
В С++ добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев //. Получившийся язык перестал быть дополненной версией классического С и был переименован из С с классами в С++.
Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.
По мере разработки C++ в него были включены другие средства, которые перекрывали возможности конструкций C, в связи с чем неоднократно поднимался вопрос об отказе от совместимости языков путём удаления устаревших конструкций.
Как соотносятся С и C++?
C++ — это улучшенный C. У этих языков одинаковый на 99% синтаксис и команды, но C — это больше про структурное и процедурное программирование, а C++ — про объектно ориентированное.
Приведите два способа обойти элементы списка в Python.( не точно)
1 способ
a=[1,3,4,2,1,3,4,2,]
for e in a: \
print(e)
2 способ
for i in range(len(a)):
print(a[i])
Что означает оператор return 0 в функции main в C++?
Инструкция return обеспечивает механизм завершения работы функции. Если оператор return сопровождается некоторым значением (в данном примере 0), это значение становится возвращаемым значением функции. В нашем примере возвращаемое значение 0 говорит об успешном выполнении функции main().
Что такое JSON? Для чего используется?
JSON (JavaScript Object Notation) – это текстовый формат, предназначенный для хранения структурированных данных.
используется для передачи данных между сервером и клиентом.
JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript.
Что такое рекурсия?
рекурсия – это функция, которая сама вызывает себя.
В программировании: рекурсия – вызов функции (процедуры) из нее же самой, непосредственно (простая рекурсия) или через другие функции (сложная или косвенная рекурсия). Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.
Что такое декомпозиция? Для чего она применяется?
Декомпозиция — это разбиение одной большой задачи на меньшие, связанные между собой.
Одна из причин по которой декомпозиция применяется в программировании это попытка сделать так, что бы мозг смог видеть решение текущей мелкой задачи целиком. Это позволяет проще и быстрее найти решение, а так же абстрагироваться от других задач.
вторая причина — программирование в команде. Над большим проектом всегда работает много людей. Они просто не смогут работать вместе, если задача не будет разбита на мелкие части. А если разбить общую задачу на множество небольших подзадач, то каждый разработчик сможет писать универсальный код, который будет взаимодействовать с кодом других разработчиков.
каждый кто хочет научиться программировать — должен уметь разбивать задачи на мелкие подзачи. И чем меньшей будет подзача — тем проще ее будет решить.
Какова была концепция работы всемирной паутины на момент ее создания?
Изобретателями всемирной паутины считаются Тим Бернерс-Ли
Проект «Всемирная паутина» подразумевал публикацию гипертекстовых документов, связанных между собой гиперссылками, что облегчило бы поиск и консолидацию информации для учёных. официально годом рождения Всемирной паутины нужно считать 1989 год.
В чем преимущества и недостатки интерпретируемых языков программирования? Приведите примеры таких языков
Интерпретируемый язык программирования — язык программирования, исходный код на котором выполняется методом интерпретации. Классифицируя языки программирования по способу
исполнения, к группе интерпретируемых относят языки, в которых операторы программы друг за другом отдельно транслируются и сразу выполняются (интерпретируются) с помощью специальной программы-интерпретатора (что противопоставляется компилируемым языкам, в которых все операторы программы заранее оттранслированы в объектный код). Такой язык может реализовывать конструкции, позволяющие динамические изменения на этапе времени выполнения (модификация существовавших или создание новых подпрограмм). Эти конструкции затрудняют компиляцию и трансляцию на компилируемый язык.
+ меньше времени уходит на разработку и отладку
+ не требует затрат на компиляцию небольших программ
+ пошаговое отслеживание выполнения программы
+ возможность разрабатывать и тестировать код постепенно
+ разрешают использовать динамические техники программирования (например, метапрограммирование)
- медленное выполнение программы
- во время выполнения интерпретатор всегда должен быть загружен в память
- комментарии могут снижать производительность
Пример: Python, BASIC, Lisp, Javascript, Ruby, Perl, PHP
. Какой массив называется статическим?
Статические массивы как и другие статические типы данных это объекты размер которых известен на этапе компиляции. То есть до выполнения кода, когда программа запрашивает память у операционной системы она может выделить память в области данных, - по младшим адресам сегмента программы. Такие массивы существуют всё время жизни программы. Размер их неизменен. Данные в них изменять можно. Динамические массивы создаются на этапе исполнения так как размер их во время компиляции неизвестен.
Перечислите несколько операций, которые поддерживает вектор в C++.
После этого vi становится контейнером, поддерживающим набор операций, среди которых: vi.push_back(elem) // добавление элемента elem в конец
vi.pop_back() // удаление последнего элемента
vi.clear() // очистка вектора
vi.size() // текущее количество элементов
vi[N] // доступ к элементу с индексом N
Чем отличаются статически и динамически типизированные языки программирования?
Динамически типизированные языки проверяют соответствие типов в процессе выполнения.
Для чего необходимо указание MIME-типа? Перечислите несколько MIME-типов.
MIME (Multipurpose Internet Mail Extension, Многоцелевые расширения почты Интернета) — спецификация для передачи по сети файлов различного типа: изображений, музыки, текстов, видео, архивов и др. Указание MIME-типа используется в HTML обычно при передаче данных форм и вставки на страницу различных объектов.
Audio
Image
Message
Text
Video
Как происходит передача вектора в качестве параметра функции в C++?
По ссылке : void func( vector<string>& words)
Как происходит передача статического массива в качестве параметра функции в C++?
При передаче переменные в качестве аргументов функции данные передаются как копии. Это означает, что если внутри функции произойдет изменение значения параметра, то это никак не повлияет на его значение внутри вызывающей функции. Если в функцию передается адрес переменной (или адрес массива), то все операции, выполняемые в функции с данными, находящимися в пределах видимости указанного адреса, производятся над оригиналом данных, поэтому исходный массив (или значение переменной) может быть изменено вызываемой функцией.
Если функция принимает в качестве параметра массив, то фактически в эту функцию передается указатель на первый элемент массива. То есть как и в случае с указателями нам доступен адрес, по которому мы можем менять значения. Поэтому следующие объявления функции будут по сути равноценны:
1 2 |
void print(int numbers[]); void print(int *numbers); |
Приведите два способа обойти элементы вектора в C++.
1 способ:
vector vi = {12, 10, -5, 0};
for(auto x : vi)
{ cout << x; }
2 способ :
for (int i = 0; i < vi.size(); i++) {
cout<< vi[i];
}
Чем отличается функция в математике и функция в программировании?
В математике функция принимает одно значение и возвращает другое. В программировании — это программа в программе, отдельный участок кода, к которому можно обратиться по имени. Если у вас есть код, который используется несколько раз в рамках программы, то функция позволяет написать код один раз, а потом просто вызывать его при необходимости. Так мы не дублируем код и лучше его структурируем.
Что такое массив? Перечислите свойства массива.
Массив – это конечная последовательность однотипных данных.
Свойства:
Каждый член этой последовательности называется элементом массива.
Доступ к элементам массива производится по их номеру в последовательности, который в этом случае называется индексом.
Количество элементов в массиве называется размерностью массива. Причем важно заметить, что если размерность массива равна n, то индекс этого массива изменяется от 0 до n-1.
При определении массива его можно проинициализировать. Инициализация представляет собой набор начальных значений элементов массива, указанных в фигурных скобках, и разделенных запятыми. Например, int a[3] = {0, 1, 2};
Доступ к элементам массива выполняется при помощи оператора индексирования [ ], результатом выполнения которого является значение элемента массива с заданным индексом.