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

44. Динамические переменные. Выделение и освобождение памяти при выполнении программы

Выделение памяти осуществляется с помощью оператора new и имеет вид: тип_данных *имя_указателя = new тип_данных;, например int *a = new int;. После удачного выполнения такой операции, в оперативной памяти компьютера происходит выделение диапазона ячеек, необходимого для хранения переменной типа int.

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

Инициализация значения, находящегося по адресу указателя выполняется схожим образом, только в конце ставятся круглые скобки с нужным значением: тип данных *имя_указателя = new тип_данных(значение). Например: int *b = new int(5).

45. Построение списковых (последовательных) структур

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

То есть, мы просто делаем вот такие структурочки (сам писал):

#include "stdafx.h"

#include <iostream>

using namespace std;

struct Something {

int someData;

Something* next;

};

int main()

{

Something* last = new Something();

Something* first = last;

for (int i = 0; i < 10; i++) {

last->someData = i;

last->next = new Something();

last = last->next;

}

while (first->next != 0) {

cout << first->someData << endl;

first = first->next;

}

system("pause > nul");

return 0;

}

Выведет N чисел от 0 до N-1.

46. Последовательные, циклические и рекурсивные алгоритмы

Циклический алгоритм - это такой алгоритм, действия которого повторяются, т.е. выполняются в цикле. Существует 3 типа циклических структур:

  • Цикл с предусловием;

  • Цикл с послеусловием;

  • Цикл с параметром;

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

Также см. пункты 36, 37. А про рекурсию см. 16.

Можно ещё примеров привести: последовательные алгоритмы – это просто, например, алгоритм определения четности числа. Циклический - сортировка. Рекурсивный – классический пример нахождения чисел Фибоначчи.

47. Базовая структура цифровой машины с хранимой программой

В основе архитектуры современных вычислительных машин лежит представление алгоритма реше-

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

ВМ, где определенным образом закодированные команды программы хранятся в памяти, известна под названием вычислительной машины с хранимой в памяти программой. Идея принадлежит создателям вычислителя ENIAC Эккерту, Мочли и фон Нейману. Еще до завершения работ над ENIAC они приступили к новому проекту — EDVAC, главной особенностью которого стала концепция хранимой в памяти программы, на долгие годы определившая базовые принципы построения последующих поколений вычислительных машин. Относительно авторства существует несколько версий, но поскольку в законченном виде идея впервые была изложена в 1945 году в статье фон Неймана, именно его фамилия фигурируеттв обозначении архитектуры подобных машин, составляющих подавляющую частьтсовременного парка ВМ и ВС. Сущность фон-неймановской концепции вычислительной машины можно свести к четырем принципам:

  • двоичного кодирования (согласно этому принципу, вся информация, как данные, так и команды, кодируется двоичными цифрами 0 и 1);

  • программного управления (все вычисления, предусмотренные алгоритмом решения задачи, должны быть представлены в виде программы, состоящей из последовательности управляющих слов — команд);

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

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