Чем отличаются статические и динамические величины
Перейти к содержимому

Чем отличаются статические и динамические величины

  • автор:

23. Отличие статистических, статических и динамических измерений

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

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

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

Статические измерения имеют место тогда, когда измеряемая велечина практически постоянна.

Динамические измерения связаны с такими велечинами, которые в процессе измерений претерпевают те или иные изменения.

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

24. Однократные и многократные измерения

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

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

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

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

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

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

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

25. Шкала измерений

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

В метрологической практике известны несколько разновидностей шкал: шкала наименований, шкала порядка, шкала интервалов, шкала отношений и др.

Шкала наименований — это своего рода качественная, а не количественная шкала, она не содержит нуля и единиц измерений. Примером может служить атлас цветов (шкала цветов). Процесс измерения заключается в визуальном сравнении окрашенного предмета с образцами цветов (эталонными образцами атласа цветов).

Шкала порядка — характеризуют значение измеряемой величины в баллах. Эти шкалы описывают свойства, для которых имеют смысл не только соотношения эквивалентности, но и соотношения порядка по возрастанию или убыванию количественного проявления свойства. Характерным примером шкал порядка являются существующие шкалы чисел твердости тел, шкалы баллов землятрясений, шкалы баллов ветра, шкала оценки событий на АЭС и т.п. Узкоспециализированные шкалы порядка широко применяются в методах испытаний различной продукции.

Шкалы разностей (интервалов) — отличаются от шкал порядка тем, что для описываемых ими свойств имеют смысл не только соотношения эквивалентности и порядка, но и суммирования интервалов (разностей) между различными количественными проявлениями свойств. Характерный пример — шкала интервалов времени. Интервалы времени (например, периоды работы, периоды учебы) можно складывать и вычитать, но складывать даты каких-либо событий бессмысленно.

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

Динамические структуры данных: списки

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

В языках программирования (Pascal, C, др.) существует и другой способ выделения памяти под данные, который называется динамическим. В этом случае память под величины отводится во время выполнения программы. Такие величины будем называть динамическими. Раздел оперативной памяти, распределяемый статически, называется статической памятью; динамически распределяемый раздел памяти называется динамической памятью (динамически распределяемой памятью).

Использование динамических величин предоставляет программисту ряд дополнительных возможностей. Во-первых, подключение динамической памяти позволяет увеличить объем обрабатываемых данных. Во-вторых, если потребность в каких-то данных отпала до окончания программы, то занятую ими память можно освободить для другой информации. В-третьих, использование динамической памяти позволяет создавать структуры данных переменного размера.

Работа с динамическими величинами связана с использованием еще одного типа данных — ссылочного типа. Величины, имеющие ссылочный тип, называют указателями.

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

Адрес величины — это номер первого байта поля памяти, в котором располагается величина. Размер поля однозначно определяется типом.

Далее будем более подробно обсуждать указатели и действия с ними в языке Pascal, примеры будем приводить на Pascal и C.

Величина ссылочного типа (указатель) описывается в разделе описания переменных следующим образом:

Вот примеры описания указателей:

Type Mas1 = Array[1..100] Of Integer; Var P1 : ^Integer; P2 : ^String; Pm : ^Mas1;

Здесь P1 — указатель на динамическую величину целого типа; P2 — указатель на динамическую величину строкового типа; Pm — указатель на динамический массив, тип которого задан в разделе Type.

Сами динамические величины не требуют описания в программе, поскольку во время компиляции память под них не выделяется. Во время компиляции память выделяется только под статические величины. Указатели — это статические величины, поэтому они требуют описания.

Каким же образом происходит выделение памяти под динамическую величину? Память под динамическую величину, связанную с указателем, выделяется в результате выполнения стандартной процедуры NEW. Формат обращения к этой процедуре:

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

Пусть в программе, в которой имеется приведенное выше описание, присутствуют следующие операторы:

NEW(P1); NEW(P2); NEW(Pm);

После их выполнения в динамической памяти оказывается выделенным место под три величины (две скалярные и один массив), которые имеют идентификаторы:

P1^, P2^, Pm^

Например, обозначение P1^ можно расшифровать так: динамическая переменная, на которую ссылается указатель P1.

Дальнейшая работа с динамическими переменными происходит точно так же, как со статическими переменными соответствующих типов. Им можно присваивать значения, их можно использовать в качестве операндов в выражениях, параметров подпрограмм и пр. Например, если переменной P1^ нужно присвоить число 25, переменной P2^ присвоить значение символа «Write», а массив Pm^ заполнить по порядку целыми числами от 1 до 100, то это делается так:

P1^ := 25; P2^ := 'Write'; For I := 1 To 100 Do Pm^[I] := I;

Кроме процедуры NEW значение указателя может определяться оператором присваивания:

В качестве ссылочного выражения можно использовать

  • указатель;
  • ссылочную функцию (т.е. функцию, значением которой является указатель);
  • константу Nil.

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

До присваивания значения ссылочной переменной (с помощью оператора присваивания или процедуры NEW) она является неопределенной.

Ввод и вывод указателей не допускается.

Рассмотрим пример. Пусть в программе описаны следующие указатели:

Var D, P : ^Integer; K : ^Boolean;

Тогда допустимыми являются операторы присваивания

D := P; K := Nil;

поскольку соблюдается принцип соответствия типов. Оператор K := D ошибочен, т.к. базовые типы у правой и левой части разные.

Если динамическая величина теряет свой указатель, то она становится «мусором». В программировании под этим словом понимают информацию, которая занимает память, но уже не нужна.

Представьте себе, что в программе, в которой присутствуют описанные выше указатели, в разделе операторов записано следующее:

NEW(D); NEW(P); D^ := 3; P^ := 5; P := D; WriteLn(P^, D^);

Таким образом, динамическая величина, равная 5, потеряла свой указатель и стала недоступной. Однако место в памяти она занимает. Это и есть пример возникновения «мусора». На схеме показано, что произошло в результате выполнения оператора P := D.

В Паскале имеется стандартная процедура, позволяющая освобождать память от данных, потребность в которых отпала. Ее формат:

DISPOSE();

Например, если динамическая переменная P^ больше не нужна, то оператор

DISPOSE(P)

удалит ее из памяти. После этого значение указателя P становится неопределенным. Особенно существенным становится эффект экономии памяти при удалении больших массивов.

В версиях Турбо-Паскаля, работающих под операционной системой MS DOS, под данные одной программы выделяется 64 килобайта памяти (или, если быть точнее, 65520 байт). Это и есть статическая область памяти. При необходимости работать с большими массивами информации этого может оказаться мало. Размер динамической памяти — много больше (сотни килобайт). Поэтому использование динамической памяти позволяет существенно увеличить объем обрабатываемой информации.

Следует отчетливо понимать, что работа с динамическими данными замедляет выполнение программы, поскольку доступ к величине происходит в два шага: сначала ищется указатель, затем по нему — величина. Как это часто бывает, действует «закон сохранения неприятностей»: выигрыш в памяти компенсируется проигрышем во времени.

Пример. Дан текстовый файл размером не более 64 Кб, содержащий действительные числа, по одному в каждой строке. Переписать содержимое файла в массив, разместив его в динамически распределяемой памяти. Вычислить среднее значение элементов массива. Очистить динамическую память. Создать целый массив размером 10000, заполнить его случайными целыми числами в диапазоне от –100 до 100 и вычислить его среднее значение.

Program Srednee; Const NMax = 10000; Type Diapazon = 1..NMax; MasInt = Array[Diapazon] Of Integer; MasReal = Array[Diapazon] Of Real; Var PIint : ^MasInt; PReal : ^MasReal; I, Midint : longInt; MidReal : Real; T : Text; S : string; Begin Write(‘Введите имя файла: ‘); ReadLn(S); Assign(T, S); Reset(T); MidReal := 0; MidInt := 0; Randomize; NEW(PReal); While Not Eof (T) Do Begin ReadLn(T, PReal^[I]); MidReal := MidReal + PReal^[I] End; DISPOSE(PReal); NEW(PInt); For I := 1 To NMax Do Begin PInt^[I] := -100 + Random(201); MidInt := MidInt + PInt^[I] End; WriteLn(‘среднее целое равно: ‘, MidInt Div NMax); WriteLn(‘среднее вещественное равно: ‘, (MidReal / NMax) : 10 : 6) End. // Язык C++ #include < stdio.h >#include < time.h >#include < stdlib.h >#include < iostream.h >#define NMax 10000 typedef int MasInt; typedef float MasReal; MasInt *PInt; MasReal *PReal; int I, n, MidInt; float MidReal; char S[255]; FILE *t; char *endptr; void main() < cout > S; t=fopen(S, «r»); MidReal = 0; MidInt = 0; randomize(); I=0; /*Выделение памяти под вещественный массив*/ PReal = (MasReal*) malloc (sizeof(MasReal)); /*Ввод и суммирование вещественного массива*/ while (!feof(t)) n=I+1; free (PReal); /*Удаление вещественного массива*/ PInt = (MasInt*) malloc(sizeof(MasInt)); /*Выделение памяти под целый массив*/ /* Вычисление и суммирование целого массива */ for (I=0; I < NMax; I++) < PInt[I] = -100 + random(201); MidInt += PInt[I];>/*Вывод средних значений*/ cout << "\nсреднее целое равно " << MidInt / double(NMax) << "\n"; cout << "среднее вещественное равно: " << MidReal / n

Списки

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

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

Если для обработки таких данных не использовать внешнюю память (файлы), то разумно расположить их в динамической памяти. Во-первых, динамическая память позволяет хранить больший объем информации, чем статическая. А во-вторых, в динамической памяти эти числа можно организовать в связанный список, который не требует предварительного указания количества чисел, подобно массиву. Что же такое «связанный список»? Схематически он выглядит так:

Здесь Inf — информационная часть звена списка ( величина любого простого или структурированного типа, кроме файлового ), Next — указатель на следующее звено списка; First — указатель на заглавное звено списка.

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

Для объявления списка сделано исключение: указатель на звено списка объявляется раньше, чем само звено. В общем виде объявление выглядит так.

Type U = ^Zveno; Zveno = Record Inf : BT; Next: U End;

Здесь BT — некоторый базовый тип элементов списка.

Если указатель ссылается только на следующее звено списка (как показано на рисунке и в объявленной выше структуре), то такой список называют однонаправленным, если на следующее и предыдущее звенья — двунаправленным списком. Если указатель в последнем звене установлен не в Nil, а ссылается на заглавное звено списка, то такой список называется кольцевым. Кольцевыми могут быть и однонаправленные, и двунаправленные списки.

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

Выделим типовые операции над списками:

  • добавление звена в начало списка;
  • удаление звена из начала списка;
  • добавление звена в произвольное место списка, отличное от начала (например, после звена, указатель на которое задан);
  • удаление звена из произвольного места списка, отличного от начала (например, после звена, указатель на которое задан);
  • проверка, пуст ли список;
  • очистка списка;
  • печать списка.

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

1. Добавление звена в начало списка

 Procedure V_Nachalo(Var First : U; X : BT); Var Vsp : U; Begin New(Vsp); Vsp^.Inf := X; Vsp^.Next := First; First := Vsp; End;

2. Удаление звена из начала списка

 Procedure Iz_Nachala(Var First : U; Var X : BT); Var Vsp : U; Begin Vsp := First; First := First^.Next; X := Vsp^.Inf; Dispose(Vsp); End;

3. Добавление звена в произвольное место списка, отличное от начала (после звена, указатель на которое задан)

 Procedure V_Spisok(Pred : U; X : BT); Var Vsp : U; Begin New(Vsp); Vsp^.Inf := X; Vsp^.Next := Pred^.Next; Pred^.Next := Vsp; End;

4. Удаление звена из произвольного места списка, отличного от начала (после звена, указатель на которое задан)

 Procedure Iz_Spiska(Pred : U; Var X : BT); Var Vsp : U; Begin Vsp := Pred^.Next;  Pred^.Next := Pred^.Next^.Next; X := Vsp^.Inf; Dispose(Vsp); End;

Приведём полный текст модуля.

 Unit Spisok; Interface Type BT = LongInt; U = ^Zveno; Zveno = Record Inf : BT; Next: U End; Procedure V_Nachalo(Var First : U; X : BT); Procedure Iz_Nachala(Var First : U; Var X : BT); Procedure V_Spisok(Pred : U; X : BT); Procedure Iz_Spiska(Pred : U; Var X : BT); Procedure Ochistka(Var First: U); Function Pust(First : U) : Boolean; Procedure Print(First : U); Implementation Procedure V_Nachalo; Var Vsp : U; Begin New(Vsp); Vsp^.Inf := X; Vsp^.Next := First; First := Vsp; End; Procedure Iz_Nachala; Var Vsp : U; Begin Vsp := First; First := First^.Next; X := Vsp^.Inf; Dispose(Vsp); End; Procedure V_Spisok; Var Vsp : U; Begin New(Vsp); Vsp^.Inf := X; Vsp^.Next := Pred^.Next; Pred^.Next := Vsp; End; Procedure Iz_Spiska; Var Vsp : U; Begin Vsp := Pred^.Next; Pred^.Next := Pred^.Next^.Next; X := Vsp^.Inf; Dispose(Vsp); End; Procedure Ochistka; Var Vsp : BT; Begin While Not Pust(First) Do Iz_Nachala(First, Vsp) End; Function Pust; Begin Pust := First = Nil End; Procedure Print; Var Vsp : U; Begin Vsp := First; While Vsp <> Nil Do Begin Write(Vsp^.Inf : 6); Vsp := Vsp^.Next End; WriteLn End; Begin End.

// Язык С++ #include < iostream.h >#include < conio.h >#include < stdlib.h >#include < time.h >typedef long BT; struct Zveno< BT Inf; Zveno *Next; >; Zveno *V_Nachalo(Zveno *First, BT X) < Zveno *Vsp; Vsp = (Zveno *) malloc(sizeof(Zveno)); Vsp->Inf=X; Vsp->Next=First; First=Vsp; return First; > Zveno *Iz_Nachala(Zveno *First) < Zveno *Vsp; Vsp=First->Next; free(First); return Vsp; > Zveno *V_Spisok(Zveno *Pred, BT X) < Zveno *Vsp; Vsp = (Zveno *) malloc(sizeof(Zveno)); Vsp->Inf=X; Vsp->Next=Pred->Next; Pred->Next=Vsp; return Vsp; > BT Iz_Spiska(Zveno *Pred) < BT X; Zveno *Vsp; Vsp=Pred->Next; Pred->Next=Pred->Next->Next; X=Vsp->Inf; free(Vsp); return X; > void Print(Zveno *First) < Zveno *Vsp; Vsp=First; while (Vsp) Inf Next;> cout int Pust(Zveno *First) < return !First; >Zveno *Ochistka(Zveno *First)

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

При реализации алгоритма будем использовать подпрограммы разработанного модуля. Это существенно облегчает решение задачи.

 Program Ex_sp_1; Uses Spisok; Var S1, S2, S3, V1, V2, V3 : U; A : BT; I, N : Byte; Begin Randomize; N := 1 + Random(20); S1 := Nil; A := -100 + Random(201); V_Nachalo(S1, A); V1 := S1; For I := 2 To N Do Begin A := -100 + Random(201); V_Spisok(V1, A); V1 := V1^.Next End; WriteLn('Исходный список: '); Print(S1); V1 := s1; S2 := Nil; S3 := Nil; While V1 <> Nil Do Begin If V1^.Inf > 0 Then If S2 = Nil Then Begin V_Nachalo(S2, V1^.Inf); V2 := S2 End Else Begin V_Spisok(V2, V1^.Inf); V2 := V2^.Next End; If V1^.Inf < 0 Then If S3 = Nil Then Begin V_Nachalo(s3, V1^.Inf); V3 := S3 End Else Begin V_Spisok(V3, V1^.Inf); V3 := V3^.Next End; V1:= V1^.Next End; WriteLn('Результирующий список из положительных элементов: '); Print(S2); WriteLn('Результирующий список из отрицательных элементов: '); Print(S3); Ochistka(S1); Ochistka(S2); Ochistka(S3); End.

// Программа на C++ #include "SPIS.CPP" void main() Print(S1); V1 = S1; S2 = NULL; S3 = NULL; while (V1) Inf > 0) if (!S2) Inf); V2 = S2;> else Inf); V2 = V2->Next;>; if (V1->Inf < 0) if (!S3) Inf); V3 = S3;> else Inf); V3 = V3->Next;>; V1= V1->Next;> cout

  1. Чем отличаются статические и динамические величины?
  2. Какая память называется динамически распределяемой?
  3. Что такое указатель?
  4. Какие виды указателей вам известны?
  5. Как определяется адрес переменной?
  6. Приведите примеры объявления указателей.
  7. Как выделить память под динамическую переменную? Как освободить память от динамической переменной?
  8. Что такое "разыменование"?
  9. Что в языке Pascal обозначает константа Nil (в языке C константа NULL)?
  10. В каком случае возможно присваивание указателей?
  11. Какие ситуации приводят к возникновению в динамически распределяемой памяти "мусора"?
  12. Что понимают под "связанным списком"?
  13. Как классифицируют связанные списки?
  14. Какие основные действия над списками и компонентами списков обычно реализуют?
  15. Как описывается список?
  16. Двунаправленный список объявлен следующим образом:

Type BT = Byte; U = ^Zveno; Zveno = Record Inf : BT; Pred, Next: U End;

Статические и динамические структуры данных программы, их особенности

Существуют динамические и статические объекты. У обычные переменные сразу после её описания резервируется область памяти, и эта область закрепляется за переменной на все время работы программы. Такого рода переменные называют статическими переменными. Часто бывает так, что какая-то переменная нужна не на всё время выполнение программы, а только на какую-то часть этого времени. Такие временные программные объекты могут занимать значительный объем памяти и одновременное существование всех таких объектов может потребовать столь большого объема машинной памяти, что соответствующая программа просто не сможет разместиться в ограниченной оперативной памяти машины. Переменные которые могут резервировать область памяти, а затем снова освобождать во время выполнения программы стали называть динамическими. Динамические объекты будут возникать в процессе выполнения программы, а действия над ними необходимо задавать уже до выполнения. В Паскале для работы с динамическими объектами предусматривается специальный тип переменных, так называемый ссылочный тип. Каждому динамическому объекту в программе сопоставляется статическая переменная ссылочного типа. В терминах этих ссылочных переменных обосновываются действия над соответствующими динамическими объектами. Динамические объекты и ссылки: = ^ , где ^ - называемая «крышка», признак ссылочного типа, - это имя либо статического, либо ранее описанного типа значения.Рассмотрим листинг программы написанный на языке Паскаль:

masiv = array[1..10] of Integer;

: array [1..15] of RefReal;

Значение переменной р может быть ссылкой на динамический объект целого типа. Значение переменной q - ссылка на динамический объект литерного типа. Значение переменной RabMas - ссылка на динамический объект значение, которого является массив из 10 целых чисел. Значения статических ссылочных переменных указывают место в памяти соответствующего динамического объекта. поэтому переменные ссылочного типа часто называют указателями. Динамическому объекту в отличие от статических не дается имен в обычном понимание этого слова. Для ссылки на динамический объект в Паскале имеется такое понятие как переменная с указателем: = ^,где - это имя той статической переменой ссылочного типа, которая в программе поставлена в соответствие данному динамическому типу. «Крышка» после ссылочной переменной свидетельствует о том, что здесь речь идет не о значении ссылочной переменной, а о значении того программного объекта на которой указывает эта ссылочная переменная. Отличия использования динамических переменных от статических переменных: вместо описания самих динамических переменных в программе даются описания указателей(статических переменных ссылочного типа) поставленных в соответствие динамическим переменным; в подходящем месте программы должно быть представлено порождение каждой из динамической переменной (в Паскале процедура New); для ссылки на динамическую переменную используется переменная с указателем. Если в процессе выполнения программы некоторая динамический объект созданный ранее становиться не нужным, то его можно уничтожить, что позволит освободить оперативную память, которую он занимал. Для статической структуры данных выделяется фиксированная область памяти, которая определяется перед выполнением программы. Использование статической структуры позволяет более эффективно использовать резерв времени выполнения программы, но к уменьшению размера свободной оперативной памяти. К статическим структурам данных относятся массивы и структуры. В Массивы объединяются элементы одного и того же типа. Массив может состоять из одного элемента, а может запомнить столько, сколько позволяет оперативная память. Элементы массива запоминаются в памяти последовательно, каждый элемент хранит одно значение типа с которым был объявлен массив. Массивы могут обладать одним, двумя и более измерениями. Структуры для объединения данных различного типа в одну группу. Они формируют оболочку вокруг одного или нескольких значений одного или нескольких типов данных. Элементы структуры хранятся в памяти вместе. Область памяти для динамической структуры данных определяется после начала выполнения программы и может меняться в процессе ее выполнения. Обычно их элементы используют указатели для ссылок на элементы, подобные им самим. Применение динамических структур данных позволяет экономичнее использовать память, но снижает скорость выполнения программы. К динамическим структурам данных относятся списки, стеки и деревья. В Список объединяются элементы, содержащие указатель на следующий элемент своего типа.

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

studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с) .

ЦП Автоматизированные системы управления и промышленная безопасность

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Статические и динамические модели. Статические модели относятся к объектам, практически неизменяющимся во времени или рассматриваемым в отдельные временные сечения. Динамические модели воспроизводят изменения состояний («движение») объекта с учетом как внешних, так и внутренних факторов.

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *