Новые книги

Рассмотрены вопросы, необходимые разработчику для создания клиент-серверных приложений с использованием СУБД Firebird, явившейся развитием СУБД Borland Interbase 6. Содержится обзор концепций и моделей архитектуры клиент/сервер, а также практические рекомендации по работе с клиентскими библиотеками Firebird. Детально описаны особенности типов данных SQL, язык манипулирования данными (Data Manipulation Language, DML), а также синтаксис и операторы языка определения данных ( Data Definition Language, DDL). Большое внимание уделено описанию транзакций и приведены советы по их использованию при разработке приложений. Описано программирование на стороне клиента и сервера написание триггеров и хранимых процедур, создание и использование событий базы данных, обработка ошибок в коде на сервере и многое другое. Материал сопровождается многочисленными примерами, советами и практическими рекомендациями.

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

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

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

38. Стеки

38. Стеки

   Стеком называется динамическая структура данных, добавление компо-

ненты в которую и исключение компоненты из  которой  производится  из

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

 

      LIFO (Last-In, First-Out) -

 

поступивший последним, обслуживается первым.

   Обычно над стеками выполняется три операции:

    -начальное формирование стека (запись первой компоненты);

    -добавление компоненты в стек;

    -выборка компоненты (удаление).

   Для формирования стека и работы с ним необходимо иметь  две  пере-

менные типа указатель,  первая из которых определяет вершину стека, а

вторая - вспомогательная. Пусть описание этих переменных имеет вид:

 

    var pTop, pAux: Pointer;

 

где pTop - указатель вершины стека;

    pAux - вспомогательный указатель.

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

 

                     ЙННННН»       ЙННННН»

  New(pTop);         є  *ДДєДДДї   є     є

                     ИНННННј   і   єНННННє

                      pTop     АДД>є     є

                                   ИНННННј

 

                     ЙННННН»       ЙННННН»

  pTop^.pNext:=NIL;  є  *ДДєДДДї   є     є

                     ИНННННј   і   єНННННє

                      pTop     АДД>є NIL є

                                   ИНННННј

 

                     ЙННННН»       ЙННННН»

  pTop^.D:=D1;       є  *ДДєДДДї   є D1  є

                     ИНННННј   і   єНННННє

                      pTop     АДД>є NIL є

                                   ИНННННј

 

    Последний оператор или группа операторов записывает  содержимое

поля данных первой компоненты.

    Добавление компоненты в стек призводится с использованием вспо-

могательного указателя:

   

                     ЙННННН»       ЙННННН»       ЙННННН»

  New(pAux);         є  *ДДєДДДї   є     є   ЪДДДєДД*  є

                     ИНННННј   і   єНННННє   і   ИНННННј

                      pTop     і   є     є<ДДЩ    pAux

                               і   ИНННННј

                               і

                               і   ЙННННН»

                               і   є D1  є

                               і   єНННННє

                               АДД>є NIL є

                                   ИНННННј

 

 

                     ЙННННН»       ЙННННН»       ЙННННН»

  pAux^.pNext:=pTop; є  *ДДєДДДї   є     є   ЪДДДєДД*  є

                     ИНННННј   і   єНННННє<ДДЩ   ИНННННј

                      pTop     і   є  *ДДєДї      pAux

                               і   ИНННННј і

                               і           і

                               і   ЙННННН» і

                               і   є D1  є і

                               і   єНННННє і

                               АДД>є NIL є<Щ

                                   ИНННННј

 

 

                     ЙННННН»       ЙННННН»       ЙННННН»

  pTop:=pAux;        є  *ДДєДДДї   є     є   ЪДДДєДД*  є

                     ИНННННј   і   єНННННє<ДДЩ   ИНННННј

                      pTop     АДД>є  *ДДєДї      pAux

                                   ИНННННј і

                                           і

                                   ЙННННН» і

                                   є D1  є і

                                   єНННННє і

                                   є NIL є<Щ

                                   ИНННННј

 

                     ЙННННН»       ЙННННН»

  pTop^.D:=D2;       є  *ДДєДДДї   є D2  є

                     ИНННННј   і   єНННННє

                      pTop     АДД>є  *ДДєДї

                                   ИНННННј і

                                           і

                                   ЙННННН» і

                                   є D1  є і

                                   єНННННє і

                                   є NIL є<Щ

                                   ИНННННј

 

   Добавление последующих компонент производится аналогично.

   Рассмотрим процесс выборки компонент из стека. Пусть к моменту на-

чала выборки стек содержит три компоненты:

                     ЙННННН»       ЙННННН»

                     є  *ДДєДДДї   є D3  є

                     ИНННННј   і   єНННННє

                      pTop     АДД>є  *--єДї

                                   ИНННННј і

                                           і

                                   ЙННННН» і

                                   є D2  є і

                                   єНННННє і

                                 ЪДєДД*  є<Щ

                                 і ИНННННј

                                 і

                                 і ЙННННН»

                                 і є D1  є

                                 і єНННННє

                                 А>є NIL є

                                   ИНННННј

 

   Первый оператор или группа операторов осуществляет  чтение  данных

из компоненты - вершины стека. Второй оператор изменяет значение ука-

зателя вершины стека:

 

                         ЙННННН»       ЙННННН»

  D3:=pTop^.D;           є  *ДДєДДДї   є D3  є

  pTop:=pTop^.pNext;     ИНННННј   і   єНННННє

                          pTop     і   є     є

                                   і   ИНННННј

                                   і

                                   і   ЙННННН»

                                   і   є D2  є

                                   і   єНННННє

                                   АДД>є  *ДДєДї

                                       ИНННННј і

                                               і

                                       ЙННННН» і

                                       є D1  є і

                                       єНННННє і

                                       є NIL є<Щ

                                       ИНННННј

 

   Как видно из рисунка, при чтении компонента удаляется из стека.

 

   Пример. Составить программу,  которая формирует стек,  добавляет в

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

и выводит их на экран дисплея,  В качестве данных взять строку симво-

лов. Ввод данных - с клавиатуры дисплея, признак конца ввода - строка

символов END.

   

 Program STACK;

  uses Crt;

  type

   Alfa= String[10];

   PComp= ^Comp;

   Comp= Record

           sD: Alfa;

           pNext: PComp

          end;

  var

   pTop: PComp;

   sC: Alfa;

  Procedure CreateStack(var pTop: PComp; var sC: Alfa);

   begin

    New(pTop);

    pTop^.pNext:=NIL;

    pTop^.sD:=sC

   end;

  Procedure AddComp(var pTop: PComp; var sC: Alfa);

   var pAux: PComp;

   begin

    NEW(pAux);

    pAux^.pNext:=pTop;

    pTop:=pAux;

    pTop^.sD:=sC

   end;

  Procedure DelComp(var pTop: PComp; var sC:ALFA);

   begin

    sC:=pTop^.sD;

    pTop:=pTop^.pNext

   end;

  begin

   Clrscr;

   writeln('  ВВЕДИ СТРОКУ ');

   readln(sC);

   CreateStack(pTop,sC);

   repeat

    writeln('  ВВЕДИ СТРОКУ ');

    readln(sC);

    AddComp(pTop,sC)

   until sC='END';

   writeln('****** ВЫВОД  РЕЗУЛЬТАТОВ ******');

   repeat

    DelComp(pTop,sC);

    writeln(sC);

   until pTop = NIL

  end.