- •51.1. Понятие системы счисления. Позиционные и непозиционные системы счисления. Методы перевода чисел из одной системы счисления в другую.
- •52.1 Представление чисел с фиксированной и плавающей запятой. Диапазон и точность представления
- •52.2 Типы звеньев данных. Понятие звена данных.
- •52.3 Системы искусственного интеллекта. Методы представлениязнаний. Рассужденияизадачи.
- •53.1 Выполнение операции алгебраического сложения с плавающей запятой
- •53.2 Локальные вычислительные сети. Особенности. Основные распространенные протоколы, методы доступа
- •53.3 Определение базы данных. Уровни представления данных, принцип независимости данных. Схема базы данных
- •54.1 Умножение чисел со старших разрядов в прямом коде
- •Умножение с младших разрядов в дополнительном коде
- •Умножение со старших разрядов в дополнительном коде
- •55.1 Методы выполнения операции деления.
- •2 Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •55.2 Язык программирования php. Синтаксис. Основные операторы.
- •56.1 Основные положения и законы алгебры логики
- •56.2 Dhtml. JavaScript. Возможности и области применения
- •2. Моделированиеэкспоненциальнойслучайнойвеличины
- •1. Алгоритм реализации датчика дискретной с.В.
- •2. Пуассоновская с.В
- •58.1.Минимизация логической функции.
- •59.1 Синтез комбинационных логических схем в различных базисах.
- •59.2 Интерфейс программного обмена данными. Структура системной шины.
- •59.3. Реляционная алгебра. Sql
- •60.1.Основные характеристики и параметры интегральных логических элементов. Виды интегральных схем по функциональному назначению.
- •Итнернет технологии
- •2.1 Как работают механизмы поиска
- •60.3 Проектирование реляционной бд, функциональные зависимости, декомпозиция отношений, нормальные формы.
- •62.1 Законы Кирхгофа и преобразование электрических цепей на их основе.
- •63. 1 Электрические источники вторичного питания.
- •Трансформаторный (сетевой) источник питания
- •Габариты трансформатора
- •Достоинства трансформаторных бп
- •Недостатки трансформаторных бп
- •Импульсный источник питания
- •Достоинства импульсных бп
- •Недостатки импульсных бп
- •68.3 Понятие и принципы построения математической модели, параметры и ограничения. Задачи математического программирования, классификация.
- •69.1Аналого-цифровые преобразователи.
- •70.1Цифро-аналоговые преобразователи.
- •70.2 Логические единицы работы многозадачных операционных систем и их использование
- •71.1Источники опорного напряжения и тока.
- •Ион на полевых транзисторах
- •72.3 Общие положения стандарта шифрования данных гост 28147-89 и режим простой замены в стандарте шифрования данных гост 28147-89.
- •73.1 Принципы конвейерной обработки информации в эвм.
- •73.2. Способы адресации и их использование в ассемблерных программах.
- •2. Непосредственная адресация
- •73.3 Понятие политики безопасности: общие положения, аксиомы защищённых систем, понятия доступа и монитора безопасности.
- •1 Человек-пользователь воспринимает объекты и получает информацию о состоянии ас через те субъекты, которыми он управляет и которые отображают информацию.
- •2 Угрозы компонентам ас исходят от субъекта, как активного компонента, изменяющего состояние объектов в ас.
- •3 Субъекты могут влиять друг на друга через изменяемые ими объекты, связанные с другими субъектами, порождая субъекты, представляющие угрозу для безопасности информации или работоспособности системы.
- •74.1Организация памяти эвм. Горизонтальное и вертикальное разбиение. Расслоение обращений. Организация памяти эвм. Горизонтальное и вертикальное разбиение памяти. Расслоение обращений.
- •74.2 Сравнение программных возможностей современных операционных систем ( Windows, Unix).
- •По удобству использования и наличию особых режимов
- •Вопрос 1
- •Вопрос 2
- •Понятие энтропии Энтропия как мера неопределенности
- •Свойства энтропии
- •75.1 Подходы к организации эвм. Эвм, управляемые данными. Эвм, управляемые запросами.
- •Методика построения помехоустойчивых кодов. Информационный предел избыточности
- •1.1. Принципы помехоустойчивого кодирования
- •761 Организация ввода-вывода информации в эвм. Программный обмен, обмен через прерывания, режим прямого доступа к памяти.
- •Организация ввода/вывода информации в эвм. Программный обмен, обмен через прерывания, режим прямого доступа к памяти.
- •Глава II
- •11.1. Проблемы организации систем ввода-вывода
- •11.2. Прямой доступ к памяти
- •9.16. Принципы организации системы прерывания программ.
- •76.2 Динамические структуры данных. Основные виды, способы построения.
- •76.3 Системный анализ, определение и этапы. Сущность системного подхода и его применение при проектировании асоиу.
- •2 Системный анализ. Определение и этапы.
- •77.1 История развития и современное состояние в области микропроцессорных систем.
- •77.2 Стандартные и структурированные типы данных.
- •77.3 Математическое описание объектов управления. Цель и задача управления. Принцип отрицательной обратной связи.
- •2.1. Математические методы построения оптимальных и адаптивных систем управления
- •2.1.1. Математическое описание объектов управления
- •2.1.2. Цель и задача управления
- •2.1.3. Задача оптимального управления и критерии качества
- •78.1 (Он же 80.1) Организация микроЭвм на базе микропрограммируемого микропроцессорного комплекта, типовые циклы функционирования.
- •78.2 Жизненный цикл программных средств. Этапы разработки программного обеспечения.
- •Программное обеспечение
- •Прог. Комплекс Документы
- •78. 3 Критерий качества. Методы решения задач оптимального управления
- •79.2 Нисходящее проектирование алгоритмов на примере моделирования арифметических операций сложения, вычитания, с плавающей запятой.
- •79.3 Понятия управляемости, достижимости и наблюдаемости динамических систем.
- •80.1 Организация микроЭвм на базе микропрограммируемого микропроцессорного комплекта, типовые циклы функционирования.
- •80.2 Восходящий метод проектирования алгоритмов и программ. Спроектировать схему универсального алгоритма перевода чисел из любой системы счисления в любую другую.
- •80.3 Методология структурного проектирования sadt.
77.2 Стандартные и структурированные типы данных.
Структура данных - это способ хранения данных в компьютере, обеспечивающий их эффективное использование. Зачастую правильно подобранная структура данных позволяет создать более эффективный алгоритм. Выбор структуры данных обычно начинается с выбора абстрактной структуры данных. Хорошо спроектированная структура данных оптимизирует использование ресурсов (таких как время выполнения операций или используемый объём оперативной памяти), требуемых для выполнения наиболее критичных операций.Различают статические и динамические структуры данных.
Статические структуры относятся к разряду непримитивных структур, которые, фактически, представляют собой структурированное множество примитивных, базовых, структур. Например, вектор может быть представлен упорядоченным множеством чисел. Поскольку по определению статические структуры отличаются отсутствием изменчивости, память для них выделяется один раз и ее объем остается неизменным до уничтожения структуры.
Простейшая статическая структура данных – массив (статический).
Индексный массив - простая статическая структура данных, предназначенная для хранения набора единиц данных, каждая из которых идентифицируется индексом или набором индексов.
Достоинства:
легкость вычисления адреса элемента по его индексу (поскольку элементы массива располагаются один за другим);
одинаковое время доступа ко всем элементам;
малый размер элементов: они состоят только из информационного поля.
Недостатки:отсутствие динамики, невозможность удаления или добавления элемента без сдвига других.
К другим статическим структурам данных можно отнести также структуры и классы (или их аналогии в других языках программирования). Однако структуры и классы не обязательно являются статическими – это зависит от конкретной реализации.
Например:
var m1:array[-2..2] of real;
Вектор (одномерный массив) - структура данных с фиксированным числом элементов одного и того же типа. Каждый элемент вектора имеет уникальный в рамках заданного вектора номер. Обращение к элементу вектора выполняется по имени вектора и номеру требуемого элемента.
Массив - такая структура данных, которая характеризуется:
фиксированным набором элементов одного и того же типа;
каждый элемент имеет уникальный набор значений индексов;
количество индексов определяют мерность массива, например, два индекса - двумерный массив, три индекса - трехмерный массив, один индекс - одномерный массив или вектор;
обращение к элементу массива выполняется по имени массива и значениям индексов для данного элемента.
Синтаксис описания массива представляется в виде:
<Имя> : Array [n1..k1] [n2..k2] .. [nn..kn] of< Тип >.
Следует отметить, что большинство современных языков программирования позволяют объявлять динамические массивы (их размер определяется и может быть изменен в процессе работы программы).
Среди наиболее распространенных динамических структур данных следует выделить следующие:
связные списки;деревья;стеки;графы.
Главным достоинством динамических структур данных является возможность изменения их размера в процессе выполнения программы. Другими словами мы можем добавлять и удалять новые элементы в структуру по мере надобности.
Работа с динамическими величинами связана с использованием еще одного типа данных — ссылочного типа. Величины, имеющие ссылочный тип, называют указателями.
Указатель содержит адрес поля в динамической памяти, хранящего величину определенного типа. Сам указатель располагается в статической памяти.
Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом.Величина ссылочного типа (указатель) описывается следующим образом:имя_типа *<идентификатор>;
Вот примеры описания указателей: int *P1; char *P2;
Здесь P1 — указатель на динамическую величину целого типа; P2 — указатель на динамическую величину символьного типа.
Сами динамические величины не требуют описания в программе, поскольку во время компиляции память под них не выделяется. Во время компиляции память выделяется только под статические величины. Указатели — это статические величины, поэтому они требуют описания.
Каким же образом происходит выделение памяти под динамическую величину? Память под динамическую величину, связанную с указателем, выделяется в результате выполнения стандартной процедуры malloc. Формат обращения к этой процедуре:
идентификатор = (тип_идентификатора*) malloc (sizeof(тип_идентификатора))
Считается, что после выполнения этого оператора создана динамическая величина, имя которой имеет следующий вид:
<имя динамической величины> = *<указатель>
Стандартные и структурированные типы данных
В соответствии с тем, что было сказано раньше, тип данных – система соглашений о том,
как интерпретировать значения (как они размещаются в памяти, какие допустимые
диапазоны и т. д.).
В программах используются как стандартные типы данных, так и типы, определяемые
программистом.
Приведем краткий обзор стандартных типов данных в разных языках и покажем, как
определяются пользовательские типы данных.
>>>>TurboPascal
Типы данных подразделяются на
простые
целый Shortint, Integer, Longint, Byte, Word (знаковые и беззнаковые)
логический Boolean, ByteBool, WordBool, LongBool (версия 7.0)
символьный Char (полный набор ASCII-символов)
перечисляемый
тип-диапазон
вещественный Single, Real, Double, Extended, Comp
структурированные
указатели
процедурные
объектные
Простые типы и использовать просто. Нужно только следить за границами изменения
значений.
Простые перечисляемые типы приближают язык программирования к языку предметной
области. Например,
type
Color = (white, red, green, blue, black);
Operation = (Add, Sub, Mul, Dvd);
Каждое значение из списка отождествляется с целым числом: 0, 1, и так далее.
>>>>>C++
В языках C и C++ к простым типам относятся: char, int, float, double .
( поддерживается разная длина в 16- и 32-битных моделях данных ).
Широко используются модификаторы длины short, long, signed, unsigned .
Например,
unsigned long int 32 бита 0 . . 4294967295
Предусмотрены модификаторы доступа: const и volatile . Первый запрещает изменять
значения переменных (эти значения назначаются при инициализации), а второй
предупреждает транслятор, что значения данных могут изменяться, но не самой
программой, а каким-либо другим образом.
Например,
const volatile unsigned char *port = 0x30;
У перечисляемыхтипов, например
enum suit (clubs, diamonds, hearts, spades);
enum answer (yes, no, maybe = -1);
значениям могут соответствовать любые целые константы, в том числе и отрицательные.
Разрешается автоматическое преобразование типов в смешанных выражениях. Естьдва
основныхправила:
char, short, enum>int, остальное> unsigned
long double > double > float > unsigned long > long > unsigned >int
Приведение типа может быть назначено явно, например так:
x = (float) ((int) y + 1;
>>>>Turbo Pascal
Структурированные типы подразделяются на:
тип-массив
тип-запись
тип-множество
тип-файл
Типы-массивы используются в программах очень часто. Например,
type
Mas = array [1..1000] of Real;
Tab = array [1..10, 1..15] ofInteger;
Формальными параметрами подпрограмм могут быть открытые массивы.
procedure Zero (var x: array of Real);
var j : Integer;
begin
for j := 0 to High(x) do x[j] := 0;
end;
По умолчанию нижняя граница индекса – нуль, а верхняя определяется встроенной
функцией High(). Cимвольные строки в Паскале представляют собой массивы:
string [n] = array [0 . . n] of Char;
Поэтому можно обращаться к отдельным символам строк. Если размер строки не указан,
то память резервируется по максимуму: на 255 элементов.
Пример.
var
s: string[50]; t: string;
В TurboPascal имеются также ASCIIZ-строки – переменные типа PChar. Размер таких
строк может доходить до 65535 байтов, признак конца строки – символ с ASCII-кодом 0.
Если переустановить ключ компилятора $X+ (так по умолчанию) в $X-, то переменные
типа PChar будут рассматриваться как указатели на символьный тип char.
Для объединения в единое целое данных различных типов предусмотрены типы-записи.
Например,
type
Comp = record
Re, Im: Real;
end;
Data = record
Year: Integer;
Month: 1 . . 12;
Day: 1 . . 12;
end;
При доступе к полям записей используются составные имена:
var
D: Data;
begin
D.Year := 2008;
Возможны различные варианты объявления записей, есть несколько способов обращения
к полям. Вопримеры:
var
A, B, C: record Re, Im Real; end;
const
OneR: Comp = (Re : 1; Im : 0);
with A do
begin Re:=1.2; Im := -3.7; end;
Вариантные записи позволяют интерпретировать одни и те же области памяти как аписи с
разными полями. По аналогии с принятыми обозначениями в Delphi можно задавать
размеры прямоугольника разными способами:
Пример.
type
Point = record
x, y : Integer;
end;
Rectangle = record case Word of
0: (Left, Top, Right, Bottom: Integer);
1: (TopLeft, BottomRight: Point);
end;
var R: Rectangle;
begin
R.Left:=0; R.Top:=7; R.Right:=12; R.Bottom:=25;
Writeln(R.TopLeft.x,' ',R.TopLeft.y);
Readln;
end.
C++
В языках C и C++ структурированные типы данных в целом такие же, как в Паскале, но
имеются некоторые отличия.
Переопределяются типы данных с помощью конструкций вида
typedefdoublereal;
У массивов по умолчанию нижняя граница индекса равна нулю.
ПримеризC :
#include<stdio.h>
int main(void)
{
int a[100];
int j;
for (j=0; j<100; ++j) a[j] = j;
for (j=0; j<200; ++j) printf(“%d “, a[j]);
return 0;
}
Здесь есть одно тонкое место (побочный эффект). На печать выводится символов больше,
чем имеется в массиве. Язык C не отслеживает границы индексов у массивов (из
экономии времени, пусть будет виноват программист), но в C++ такая проверка
предусмотрена.
Имя массива рассматривается как указатель на первый элемент массива. Поэтому можно
сделать так:
inta[100];
int *p;
p = &a[0];
но можно последнюю строку написать проще:
p = a;
Для размещения массивов в динамической памяти используют функцию malloc(), а для
освобождения памяти – функцию free() .
Например, в C
char *p;
p = malloc(1000);
p[77] = ...... free(p);
Первые две строки этого кода не работают в C++ (типизированные указатели перестали
быть совместимыми), поэтому надо написать
p = (char *) malloc(1000);
У многомерных массивов индексы стали более самостоятельными:
doublematr [10] [20] [30];
Объединения, как и вариантные записи Паскаля, позволяют интерпретировать одни и те
же участки памяти как значения разных типов. Например,
unionintchar {
int i;
charc;
};
Структуры в C++ используются по следующей схеме:
structaddr { объявление структуры,
charname[30]; имя типа часто называют
char building[4]; ярлыкилишаблон,
charstreet[40]; а поля – членами структуры
char city[20];
unsigned long int zip;
};
structaddrvin, pnb; объявление переменных
structaddrprepod[120]; массив структур
structaddr *p; указатель на структуру
p = &pnb; адрес помещается в указатель
pnb.namep->city доступ к полям
vin = pnb; присваивание
Обратим внимание: доступ к полям структуры осуществляется или с помощью оператора
«точка», или с помощью оператора «стрелка»