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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



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

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

Синтаксическая диаграмма:

Описание типа массива задается следующим образом:

<имя типа> = ARRAY [ <сп.инд.типов> ] OF <тип>

Здесь <имя типа> - правильный идентификатор;

ARRAY, OF - зарезервированные слова (массив, из);

<сп.инд.типов> - список из одного или нескольких индексных типов, разделенных запятыми; квадратные скобки, обрамляющие список, - требование синтаксиса;

<тип> - любой тип Турбо Паскаля.

В качестве индексных типов в Турбо Паскале можно использовать любые порядковые типы, кроме LONGINT и типов-диапазонов с базовым типом LONGINT.

Определить переменную как массив можно и непосредственно при описании этой переменной, без предварительного описания типа массива, например:

var

а,b: array [1..10] of Real;

В Турбо Паскале можно одним оператором присваивания передать все элементы одного массива другому массиву того же типа, например:

var

а,b:array [1..5] of Single;

begin

a:= b;

end.

 

 

Операции и выражения в языке программирования Паскаль.

Операции: унарные not, @; мультипликативные *, /, div, mod, and, shl, shr; аддитивные +, -, or, xor; отношения =, <>, <, >, <=, >=,in.

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

Унарная операция @ применяется к операнду любого типа и возвращает результат типа POINTER, в котором содержится адрес операнда, если операция @ применяется к процедуре, функции или методу в объекте, ее результатом будет адрес точки входа в эту процедуру (функцию, метод). Этот адрес можно использовать только в подпрограмме, написанной на ассемблере, или в фрагментах INLINE.

Логические операции: not - логическое НЕ; and - логическое И; or - логическое ИЛИ; хоr - исключительное ИЛИ.

Логические операции применимы к операндам целого и логического типов. Если операнды - целые числа, то результат логической операции есть тоже целое число.

Операция отношения IN применяется к двум операндам. 1 операндом должно быть выражение любого порядкового типа, 2 - множество, состоящее из элементов того же типа, или идентификатор множественного типа. Например:

var

с: char; type

digit = set of ' 0 '..' 9 '; begin

if с in digit then.......

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

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

Y

(а + b) * с

sin(t)

а > 2

not Flag and (а = b)

NIL

[1, 3..7] * set1

Операторы цикла паскаль

Цикл – это многократно повторяющиеся фрагменты программ. В ТР сущест­вует три оператора цикла: цикл с предусловием; цикл с постусловием; цикл с параметром.

Особенности: значения переменных ис­пользуемых в цикле определены до входа в цикл; вход в цикл возможен только через его начало; выход их цикла осуществляется как в результате его естественного окончания, так и с помощью операторов пе­рехода. Оператор цикла с предусло­вием реализует следующую базовую конструкцию: Формат записи: While L do OP; где: While - пока не; do – выполнить; L – выражение логического типа; OP – тело цикла; опера­тор (простой или составной).

Работа оператора: Вычисляется значение логического выражения, если вычис­ленное значение истинно, то выполняется оператор OP после чего повторяется проверка условия и выполнение операторов тела цикла. В противном случае осуществляется выход из цикла. Вычисление значения логического выражения предшествует выполнению операторов тела цикла, поэтому этот оператор цикла называется циклом с предусловием.

Оператор цикла с постусловием реализует следующую конструкцию: Формат записи: Repeat OP Until L; где: Repeat - повторять; Until – пока не; L – выражение логиче­ского типа; OP – тело цикла; оператор (простой или составной).Работа опера­тора: Выполняется оператор OP после чего вычис­ляется значение логического выражения L, если вычисленное значение False, то снова выполняется оператор OP в противном случае осуществляется выход из цикла. Вычисление значения логического выражения следует после выполнения операторов тела цикла, по­этому этот оператор цикла называется циклом с посту­словием. В отличие от цикла с предусловием, в цикле с постусловием тело цикла выполняется о край­ней мере один раз не зависимо от условия. В операторе цикла с постусловием ключевые слова Repeat и Until играют роль операторных ско­бок.

Формат записи: 1. For P:=Pn to Pk do OP; 2. For P:=Pk downto Pn do OP; где: For - для; to – до; downto – уменьшая до do – выполнить; OP – тело цикла; оператор (простой или составной); P - параметр цикла, переменная по­рядкового типа; Pn, Pk – начальное и конечное значение параметра. Работа опе­ратора: Вычисляется начальное значение параметра цикла Pn и присваивается параметру P. Проверяется условие P?Pk, и если оно True выполняются опера­торы тела цикла OP. После чего наращивается значение P на единицу и опять проверяется условие P?Pk. Если условие False осуществляется выход из цикла. В операторе с downto шаг изменения параметра цикла равен –1. Примеры за­писи: For i:=1 to n do n:=sqr(i)+1; For s:=’A’ to ‘Z’ do R:=R+ord(s)/127; For L:=False to True do H:= (False or L) And Not (L);

 

 

Параметры

Список формальных параметров необязателен и может отсутствовать. Если же он есть, то в нем должны быть перечислены имена формальных параметров и их типы, например:

Procedure SB(a: Real; b: Integer; c: Char);

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

Если параметры определяются как параметры-переменные, перед ними необходимо ставить зарезервированное слово VAR, а если это параметры-константы,- слово CONST, например:

Procedure MyProcedure (var a: Real; b: Real; const c: String);

Здесь A - параметр-переменная, В -параметр-значение, а С - параметр-константа.

Пример

а: Integer = 5;

b: Integer = 7;

{-----------------}

Procedure Inc2 (var c: Integer; b: Integer);

begin {Inc2}

с:= с + с;

b:= b + b;

WriteLn ('удвоенные: ', c:5, b:5)

end {inc2};

{--------------}

begin {main}

WriteLn('исходные: ', a:5, b:5);

Inc2(a,b);

WriteLn('результат: ', a:5, b:5)

end {main}.

В результате прогона программы будет выведено:

исходные: 5 7

удвоенные: 10 14

результат: 10 7

Массивы данных в Си.

Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Объявление массива имеет два формата:

- спецификатор-типа описатель [константное-выражение];

- спецификатор-типа описатель [ ];

Описатель - это идентификатор массива.

Спецификатор-типа задает тип элементов объявляемого массива. Элементами массива не могут быть функции и элементы типа void.

Константное-выражение в квадратных скобках задает количество элементов массива. Константное-выражение при объявлении массива может быть опущено в следующих случаях:

- при объявлении массив инициализируется,

- массив объявлен как формальный параметр функции,

- массив объявлен как ссылка на массив, явно определенный в другом файле.

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

Каждое константное-выражение в квадратных скобках определяет число элементов по данному измерению массива, так что объявление двухмерного массива содержит два константных-выражения, трехмерного - три и т.д. Отметим, что в языке СИ первый элемент массива имеет индекс равный 0.

Примеры: int a[2][3]; /* представлено в виде матрицы

a[0][0] a[0][1] a[0][2] a[1][0] a[1][1] a[1][2] */ double b[10]; /* вектор из 10 элементов имеющих тип double */ int w[3][3] = { { 2, 3, 4 }, { 3, 4, 8 }, { 1, 0, 9 } }; В последнем примере объявлен массив w[3][3]. Списки, выделенные в фигур­ные скобки, соответствуют строкам массива, в случае отсутствия скобок ини­циализация будет выполнена неправильно. В языке СИ можно использовать сечения массива. Сечения формируются вследствие опускания одной или нескольких пар квад­ратных скобок. Пары квад­ратных скобок можно отбрасывать только справа на­лево и строго последова­тельно. Примеры: int s[2][3]; Если при обращении к некоторой функции написать s[0], то будет переда­ваться нулевая строка массива s. int b[2][3][4]; При обращении к массиву b можно написать, например, b[1][2] и будет пере­даваться вектор из четырех элементов, а обращение b[1] даст двухмерный мас­сив размером 3 на 4. Объявление символьного массива: char str[] = "объявление символьного мас­сива"; 11 Структуры данных в Си. Структуры - составной объект, в который вхо­дят элементы любых типов, за исключением функций. В отличие от массива, ко­торый является однородным объектом, структура может быть неоднородной.

Тип структуры определяется записью вида: struct {список определений}

В структуре обязательно должен быть указан хотя бы один компонент. Определение структур имеет следующий вид: тип-данных описатель; где тип-данных указывает тип структуры для объектов, определяемых в описателях. В простейшей форме описатели представляют собой идентификаторы или мас­сивы. Пример: struct { double x,y; } s1, s2, sm[9]; struct { int year; char moth, day; } date1, date2; Переменные s1, s2 определяются как структуры, каждая из которых состоит из двух компонент х и у. Переменная sm определяется как массив из девяти струк­тур. Каждая из двух переменных date1, date2 состоит из трех компонентов year, moth, day.Существует и другой способ ассоциирования имени с типом структуры, он ос­нован на использовании тега структуры. Тег структуры аналогичен тегу пере­числимого типа. Тег структуры определяется следующим образом: struct тег { список описаний; }; где тег является идентификатором. В приведенном ниже примере идентификатор student описывается как тег структуры: struct student { char name[25]; int id, age; char prp;}; Тег структуры используется для последующего объявления структур данного вида в форме: struct тег список-идентификаторов.Пример: struct studeut st1,st2; Использование тегов структуры необходимо для описания рекурсивных струк­тур. Ниже рассматривается использование рекурсивных тегов структуры. struct node { int data; struct node * next; } st1_node; Тег структуры node действительно является рекурсивным, так как он исполь­зуется в своем собственном описании, т.е. в формализации указателя next. Структуры не могут быть прямо рекурсивными, т.е. структура node не может со­держать компоненту, являющуюся структурой node, но любая структура может иметь компоненту, являющуюся указателем на свой тип, как и сделано в приве­денном примере. Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента, например: st1.name="Иванов"; st2.id=st1.id; st1_node.data=st1.age;

Операции и выражения в СИ

Унарные операции

* (косвенная адресация): выражение должно быть указателем, а рез-том явл-ся l_значение (lvalue), ссылающееся на тот объект, на кот.

указ-ет выражение.

& (взятие адреса):рез-т - указатель на объект, на кот. ссылается l_значение.

- (минус): рез-т - ее операнд, взятый с противоположным знаком. Для unsigned рез-т получ-ся вычитанием ее знач-я из 2**n, где n-число битов в int.

Унарной операции + (плюс) не существует.

! (логическое отрицание): результат - 1, если знач-е ее операнда равно 0, и 0, если знач-е ее операнда отлично от нуля. Результат имеет тип int. Эта операция применима к любому арифметическому типу или указателям.

~ (дополнение до единицы) – дает обратный код своего операнда. Вып-ся обычн. арифм. преобразования. Операнд должен быть целочисленного типа.

++(инкремент). Объект, на который ссылается операнд l_значения операции ++, увеличивается. Выражение ++х эквивалентно х += 1.

-- (декремент) - аналогична префиксной операции ++, но приводит к уменьшению своего операнда l_значения.

() (cast) - Заключенное в круглые скобки имя типа данных, стоящее перед выражением, вызывает преобраз-е знач-я эт. выражения к указанному типу.

sizeof выдает размер своего операнда в байтах. Может быть примен. и к заключенному в круглые скобки имени типа. Тогда она выдает размер в байтах объекта указанного типа.

Мультипликативные операции *, /, и % группируются слева направо.

% выдает остаток от дел-я перв. выраж-я на второе. Операнды должны быть целого типа.

Аддитивные операции + и - группируются слева направо.

Операции сдвига << и >> группируются слева направо. Операнды целого типа. Правый операнд преобразуется к типу int; результат имеет тип левого операнда. Результат не определен, если правый операнд отрицателен или больше или равен, чем длина объекта в битах.

Операции отношения < (меньше), > (больше), <= (меньше или равно) и >=

(больше или равно) дают 0, если указанное отношение ложно, и 1, если оно истинно. Результат имеет тип int.

Операции равенства == (равно) и!= (не равно)

Операция присваивания

выражение_присваивания:

l_значение = выражение l_значение (op)= выражение

op: -, *, /, %, >>, <<, &, ^, |

 

Объекты и классы С

Объекты в C – это программные конструкции, формируемые так называемыми классам. Определение пере­менной класса также называется созданием экземпляра класса (class instantiation). Классы – это структуры, которые содержат не только объявления данных, но и функций. Эти функции называются функциями-членами (member functions) и определяют, что может делать класс. Для того чтобы использовать класс, его нужно вначале объявить. Полное объявление класса может появиться в программе только один раз. Рассмот­рим пример объявления простого класса:

class Counter {

long count;

public:

void SetValue(long);

long GetValue();};

Ключевое слово class вводит объявление класса. Далее следует имя клас­са. Тело класса должно заключаться в фигурные скобки, после которых стоит точка с запятой. Классы могут содер­жать не только объявления функций, но и их полные определения. Переменные, объявленные внутри класса, принадлежат этому классу. Идентификаторы переменных и функций внутри класса застрахованы от конфликтов с идентификаторами других классов.

Объявление двух классов с оди­наковыми именами недопустимо, независимо от того, идентичны объявления или нет.

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

Класс Counter содержит объявление функций SetValue (long) и GetValue (), которые называются функ­циями-членами (member function) класса. Эти функции пока не определены, они только объявлены. Реальное их определение для класса Counter было опущено и приводится только сейчас:

void Counter::Setvalue(long value)

{count = value;}

long Counter::GetValue()

{return count;}

При определении функции-члена после типа возвращаемого значения нужно всегда указывать, членом какого класса является функция. Для этого нужно написать имя класса и поставить за ним два двоеточия. Как и другие функции в C, функции-члены должны быть объявлены до использования. Объявление должно быть полным, включая тип возвращаемого значения и типы аргументов. В C типы аргументов функции должны быть объяв­лены одновременно с функцией-членом с помощью следующей записи: int foo (int parm1, long parm2);

Для того чтобы использовать класс, нужно определить объект этого класса. Объек­ты класса определяются точно так же, как структурные или скалярные переменные. Чтобы определить переменную people типа Counter, используйте следующую запись: Counter people;

 

Спецификатор Назначение

public класс доступен объектам своего пакета и вне его

не задан класс доступен только в своем пакете (friendly)

final класс не может иметь подклассов

abstract класс содержит абстрактные методы, объекты такого класса могут создавать только подклассы

Конструкторы классов

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

Имя конструктора всегда совпадает с именем класса. Конструктор не может использовать оператор return и для него не указывается никакого типа возвращаемого значения. При объявлении конструктора можно указать модификаторы доступа public, protected или private.

Наличие явно описанного конструктора в классе не является обязательным. В этом случае при создании объекта используется конструктор по умолчанию. Такой конструктор не получает параметров и вызывает непосредственно конструктор суперкласса: super().

При этом, если суперкласс не имеет конструктора без списка параметров, то происходит ошибка компиляции.

Конструкторы не наследуются подклассами.

Тело конструктора заключается в фигурные скобки.

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

Конструктор может иметь следующее формальное описание:

ИмяКласса (СписокПараметров) {

ВызовКонструкторов

БлокОператоров

}

Вызов конструкторов выполняется операторами this и super с указанием в скобках списка параметров.

Например(Java):

public class C extends A {

public C() {this(1,20); }

// Вызов конструктора данного класса

public C(int i, int j) { }

}

Вызов конструкторов подчиняется следующим правилам:

- при создании объекта любого заданного класса будет неявно выполнена цепочка вызовов всех конструкторов его суперклассов;

- первым будет выполнено тело конструктора для Object;

- каждый последующий конструктор в цепочке будет выполняться только после выполнения конструктора своего непосредственного суперкласса;

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

Наследование классов

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

Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса.

Простое наследование

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).

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

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность, можно отметить Python. Множественное наследование поддерживается в языке UML.

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

Большинство современных объектно-ориентированных языков программирования поддерживает возможность одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним классом. Этот механизм позволяет во многом заменить множественное наследование – методы интерфейсов необходимо переопределять явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков. Пример наследования в Java: public class MyClass2 extends MyClass {…}

 

Абстрактные классы

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

Массивы объектов

Допускается создание и инициализация статических и автоматических массивов из объектов класса. Синтаксически инициализация напоминает синтаксис для стандартных типов данных.

Point2D P1[3]={Point2D(2,4),Point2D(3,3),Point2D(4,6)};

Point2D P2[3]={Point2D(5),Point2D(4),Point2D(3)};

Point2D P3[3]={5,4,3};

Point2D P4[3]={Point2D(4),5,Point2D(3,1)};

На первый взгляд кажется, что для каждого элемента массива создается временный элемент типа Point2D, а потом массив инициализируется этим объектами, с помощью конструктора копий. На самом деле лишних действий нет. Вызываются лишь конструкторы для областей памяти, соответствующих элементов массива. Если у класса конструктор операции new [], можно создать массив в динамической области памяти. Инициализация такого массива не допустима.

Операция new гарантирует вызов конструктора для каждого объекта массива.Чтобы можно было описать массив объектов класса с конструктором, этот класс должен иметь стандартный конструктор, т.е. конструктор, вызываемый без параметров. Например, в соответствии с определением table tbl[10]; будет создан массив из 10 таблиц, каждая из которых инициализируется вызовом table::table(15), поскольку вызов table::table() будет происходить с фактическим параметром 15. В описании массива объектов не предусмотрено возможности указать параметры для конструктора. Если члены массива обязательно надо инициализировать разными значениями, то начинаются трюки с глобальными или статическими членами. Когда уничтожается массив, деструктор должен вызываться для каждого элемента массива. Для массивов, которые размещаются не с помощью new, это делается неявно. Однако для размещенных в свободной памяти массивов неявно вызывать деструктор нельзя, поскольку транслятор не отличит указатель на отдельный объект массива от указателя на начало массива, например:

void f()

{

table* t1 = new table;

table* t2 = new table[10];

delete t1; // удаляется одна таблица

delete t2; // неприятность:

// на самом деле удаляется 10 таблиц

}

В данном случае программист должен указать, что t2 - указатель на массив. Функция размещения хранит число элементов для каждого размещаемого массива. Требование использовать для удаления массивов только операцию delete[] освобождает функцию размещения от обязанности хранить счетчики числа элементов для каждого массива. Исполнение такой обязанности в реализациях С++ вызывало бы существенные потери времени и памяти и нарушило совместимость с С.

Проектирование баз данных

В реляционных базах данных любая таблица рассматривается как отно­шение между ключем и остальными элементами данных в строке (сам термин "реляционная" от relation - отношение). Таким образом, процесс проектирова­ния базы данных - это определение состава отношений.

Процесс проектирования состоит из следующих этапов:

1) определение объектов, сведения о которых отображаются в базе данных;

2) определение связей между объектами;

3) определение атрибутов объектов;

4) нормализация отношений.

Различают три типа взаимосвязей между объектами:

1) взаимосвязь "один к одному" (обозначается <---->): каждому экземпляру объекта одного типа соответствует один и только один экземпляр объекта дру­гого типа. На практике такой тип взаимосвязи встречается достаточно редко, т.к. такие отношения можно без потери общности объединить в одно. Разделе­ние информации между двумя отношениями может иметь смысл из соображе­ний производительности и секретности. Например, все сведения о преподавате­лях разделяются на активно используемую небольшую таблицу основных све­дений (табельный номер, ФИО, должность, кафедра) и большую, редко исполь­зуемую таблицу анкетных данных, доступ к которой ограничен соответствую­щим уровнем полномочий;

2) взаимосвязь "один ко многим" (обозначается <---->>): одному экземп­ляру первого (родительского) объекта соответствует несколько экземпляров второго (дочернего) объекта. Это основной вид связи между объектами.

3) взаимосвязь "многие ко многим" (обозначается <<---->>): одному экзем­пляру первого объекта соответствует несколько экземпляров второго и наобо­рот. Такой вид связи не допускается в реляционных базах данных непосредст­венно и реализуется путем введения промежуточного объекта, хранящего иден­тификаторы связанных объектов.

Третий этап проектирования - определение атрибутов объектов.

В состав атрибутов объекта должны быть включены:

1) ключевые атрибуты, однозначно определяющие экземпляр объекта;

2) ключи связанных объектов. Для связи "один к одному" каждый объект должны содержать ключ связанного, или оба объекта должны иметь одинако­вое значение ключа для связанных экземпляров (например, табельный номер преподавателя как ключ в обоих таблицах: основных сведений и анкетных дан­ных). Для связи "один ко многим" дочерний объект должен содержать ключ родительского;

3) неключевые атрибуты, характеризующие объект.

Состав отношений и группировку атрибутов по отношениям в базе дан­ных можно определить различными способами. Для получения наиболее рацио­нальной совокупности отношений используется их нормализация (4-й этап проектирования БД).

Таблица – Table

CREATE TABLE Student (

Code INTEGER NOT NULL,

Name CHAR (30) NOT NULL,

Address CHAR (50),

Mark DECIMAL

);

Представление – VIEW

CREATE VIEW London_view AS SELECT * FROM Salespeople WHERE city = ‘London’;

Команда DROP TABLE предназначена для удаления одной или нескольких таблиц: DROP TABLE table_name [,table_name,...]

Команда ALTER TABLE позволяет изменить структуру таблицы. Эта команда позволяет добавлять и удалять столбцы, создавать и уничтожать индексы, пере­именовывать столбцы и саму таблицу. Команда имеет следующий синтаксис:

ALTER TABLE table_name alter_spec

Создание внешнего ключа:

CREATE TABLE Orders
(O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id))

Редактирование внешнего ключа:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

 

Современные системы печати.

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

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

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

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

3D-принтер устройство, использующее метод послойного создания физического объекта на основе виртуальной 3D-модели

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

Лазерное спекание – при этом лазер выжигает в порошке из легкосплавного пластика, слой за слоем, контур будущей детали. После этого лишний порошок стряхивается с готовой детали

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

Струйная Застывание материала при охлаждении – раздаточная головка выдавливает на охлаждаемую платформу-основу капли разогретого термопластика. Капли быстро застывают и слипаются друг с другом, формируя слои будущего объекта.

Определения ОС

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

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

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

Функции ОС:

- Распределение ресурсов

- Организация мультипрограммных режимов

- Разработка программ

- Отладка программ

- Выполнение программ

- Управление (заданиями, задачами, данными памятью, процессами)

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

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

ОС является посредником между ЭВМ и человеком, другими словами это логическое расширение функций аппаратуры в сторону человека. Она позволяет от физического уровня аппаратуры перейти к более высокому логическому уровню, который становится уровнем вычислительной системы и который более удобен для человека.

При разработке ОС или отдельных ее компонентов приходится исходить из требований решения тех или иных проблем стоящих перед системами обработки данных и отображать их на возможности аппаратуры.

 

Методы распределения памяти

1. Без использования внешней памяти

- Фиксированными разделами

- Динамическими разделами

- Перемещаемыми разделами

2. С использованием внешней памяти

- Страничное распределение

- Сегментное размещение

- Сегментно-страничное распределение

Распределение памяти фиксированными разделами

Разделение ОП на несколько разделов фиксированной величины. Очередная задача помещается либо в общую очередь, либо в очередь к некоторому разделу.

Подсистема управления памятью, задачи:

- Сравнив размер программы поступившей на выполнение, выбирает подходящий раздел

- Загрузка программы и настройка адресов

«+» - простота реализации

«-» - жесткость, неэффективное использование памяти – даже маленькая программа занимает весь раздел

Разделение памяти разделами переменной величины

Память не делится на разделы. Сначала вся ОП свободна. Каждой вновь поступившей задаче выделяется необходимая ей память. Если достаточный объем памяти отсутствует, то задача не принимается и стоит в очереди.

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

Задачи ОС в данном методе:

- Ведение таблиц свободных и занятых областей

- При поступлении новой задачи – анализ запроса, просмотр таблиц свободных областей и выбор раздела, размер которого достаточен для размещения поступившей задачи

- Загрузка задачи в выделенный ей раздел и корректировка таблиц свободных и занятых областей

- После завершения задачи корректировка таблиц свободных и занятых областей

«+» - гибкость

«-» - фрагментация

Перемещаемые разделы



Поделиться:


Последнее изменение этой страницы: 2016-06-26; просмотров: 597; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.223.119.17 (0.175 с.)