// PascalABC.NET 3.0, сборка 1073 const sb='bcdfgjklmnpqrstvwxz'; s='Computer programming is a process of computer programs creation'; var i,n:integer; s1,sn,t:string; begin i:=1; while s[i]<>' ' do Inc(i); s1:=Copy(s,1,i-1); n:=Length(s); i:=n; while s[i]<>' ' do Dec(i); sn:=Copy(s,i+1,n-i); t:=''; for i:=1 to Length(s1) do if Pos(s1[i],sb)>0 then t:=t+s1[i]; s1:=t; t:=''; for i:=1 to Length(sn) do if Pos(sn[i],sb)>0 then t:=t+sn[i]; sn:=t; t:=''; for i:=1 to Length(s1) do if Pos(s1[i],sn)>0 then if Pos(s1[i],t)=0 then t:=t+s1[i]; for i:=1 to Length(t) do Write(t[i],' '); Writeln end.
Тестовый прогон: t r
2. "Нормальное" решение
// PascalABC.NET 3.0, сборка 1073 const sb='bcdfgjklmnpqrstvwxz'; s='Computer programming is a process of computer programs creation'; begin var a:=s.ToWords(' '); a[0].Intersect(a[a.Length-1]).Where(x->Pos(x,sb)>0).Println(',') end.
Форма (Form) или Несколько элементов (Multiple Items). Форма, построенная на многотабличном запросе, может быть названа одиночной.
Многотабличная форма может быть составной: состоять из главной формы и одной или нескольких подчиненных включаемых форм. Подчиненная форма, как правило, строится на основе таблицы, подчиненной таблице-источнику записей главной формы, т. е. находится с ней в отношении 1 : М. Подчиненная форма отображает данные из всех записей подчиненной таблицы, которые связаны с записью, отображаемой в главной форме. Для разработки такой формы можно проделать следующее:
1.На основе главной таблицы создать командой Форма (Form) простую форму с макетом в столбик.
2.На основе подчиненной таблицы командой Несколько элементов (Multiple Items) создать ленточную форму, это многозаписевая форма.
Рис. 5.18. Составная форма в режиме макета
226
Глава 5
3.Закрыть вторую форму, оставив первую открытой в режиме макета.
4.Перетащить вторую форму из области навигации в первую форму, она отобразится в элементе управления Подчиненная форма/отчет (Subform/Subreport).
5.Если не установилась связь между формами, следует в главной форме открыть свойства элемента управления Подчиненная форма/отчет (Subform/Subreport) и на вкладке Данные (Data) заполнить строки Основные поля (Link Master Fields) и Подчиненные поля (Link Child Fields). Это можно сделать с -
щью построителя, вызываемого в строке первого свойства.
Воспользовавшись приведенным алгоритмом, несложно создать составную форму на основе таблиц НАКЛАДНАЯ и ОТГРУЗКА (рис. 5.18). Связь этих форм осуществляется по составному ключу связи НОМ_НАКЛ и КОД_СК. В строке свойств они записываются через точку с запятой.
Очевидно, для разработки полноценной формы для работы с накладными необходимо дополнить главную форму данными из таблиц ДОГОВОР и ПОКУПАТЕЛЬ, а подчиненную форму данными из таблицы ТОВАР.
Решить эту задачу можно, выполнив следующие действия:
1.Создать запросы на выборку для источника записей главной формы на основе таблиц НАКЛАДНАЯ, ДОГОВОР и ПОКУПАТЕЛЬ, подчиненной формы — ОТГРУЗКА и ТОВАР, выбирая необходимые поля.
2.На основе первого запроса создать простую форму командой Форма (Form), на основе второго ленточную командой Несколько элементов (Multiple Items).
3.Закрыть вторую форму и затем перетащить ее из области навигации в первую.
Рис. 5.19. Составная форма для работы с накладными
Формы
227
4.Для установки связи главной и подчиненной форм откройте свойства элемента управления Подчиненная форма/отчет (Subform/Subreport) и на вкладке Дан-
ные (Data) заполните строки Основные поля (Link Master Fields) и Подчиненные поля (Link Child Fields).
На рис. 5.19 приведена составная форма, в которой источником записей простой главной формы является первый запрос, а источником записей ленточной подчиненной формы второй.
// PascalABC.NET 3.0, сборка 1073
const
sb='bcdfgjklmnpqrstvwxz';
s='Computer programming is a process of computer programs creation';
var
i,n:integer;
s1,sn,t:string;
begin
i:=1;
while s[i]<>' ' do Inc(i);
s1:=Copy(s,1,i-1);
n:=Length(s); i:=n;
while s[i]<>' ' do Dec(i);
sn:=Copy(s,i+1,n-i);
t:='';
for i:=1 to Length(s1) do
if Pos(s1[i],sb)>0 then t:=t+s1[i];
s1:=t;
t:='';
for i:=1 to Length(sn) do
if Pos(sn[i],sb)>0 then t:=t+sn[i];
sn:=t;
t:='';
for i:=1 to Length(s1) do
if Pos(s1[i],sn)>0 then
if Pos(s1[i],t)=0 then t:=t+s1[i];
for i:=1 to Length(t) do Write(t[i],' ');
Writeln
end.
Тестовый прогон:
t r
2. "Нормальное" решение
// PascalABC.NET 3.0, сборка 1073
const
sb='bcdfgjklmnpqrstvwxz';
s='Computer programming is a process of computer programs creation';
begin
var a:=s.ToWords(' ');
a[0].Intersect(a[a.Length-1]).Where(x->Pos(x,sb)>0).Println(',')
end.
Тестовый прогон:
t,r
Объяснение:
Форма (Form) или Несколько элементов (Multiple Items). Форма, построенная на многотабличном запросе, может быть названа одиночной.
Многотабличная форма может быть составной: состоять из главной формы и одной или нескольких подчиненных включаемых форм. Подчиненная форма, как правило, строится на основе таблицы, подчиненной таблице-источнику записей главной формы, т. е. находится с ней в отношении 1 : М. Подчиненная форма отображает данные из всех записей подчиненной таблицы, которые связаны с записью, отображаемой в главной форме. Для разработки такой формы можно проделать следующее:
1.На основе главной таблицы создать командой Форма (Form) простую форму с макетом в столбик.
2.На основе подчиненной таблицы командой Несколько элементов (Multiple Items) создать ленточную форму, это многозаписевая форма.
Рис. 5.18. Составная форма в режиме макета
226
Глава 5
3.Закрыть вторую форму, оставив первую открытой в режиме макета.
4.Перетащить вторую форму из области навигации в первую форму, она отобразится в элементе управления Подчиненная форма/отчет (Subform/Subreport).
5.Если не установилась связь между формами, следует в главной форме открыть свойства элемента управления Подчиненная форма/отчет (Subform/Subreport) и на вкладке Данные (Data) заполнить строки Основные поля (Link Master Fields) и Подчиненные поля (Link Child Fields). Это можно сделать с -
щью построителя, вызываемого в строке первого свойства.
Воспользовавшись приведенным алгоритмом, несложно создать составную форму на основе таблиц НАКЛАДНАЯ и ОТГРУЗКА (рис. 5.18). Связь этих форм осуществляется по составному ключу связи НОМ_НАКЛ и КОД_СК. В строке свойств они записываются через точку с запятой.
Очевидно, для разработки полноценной формы для работы с накладными необходимо дополнить главную форму данными из таблиц ДОГОВОР и ПОКУПАТЕЛЬ, а подчиненную форму данными из таблицы ТОВАР.
Решить эту задачу можно, выполнив следующие действия:
1.Создать запросы на выборку для источника записей главной формы на основе таблиц НАКЛАДНАЯ, ДОГОВОР и ПОКУПАТЕЛЬ, подчиненной формы — ОТГРУЗКА и ТОВАР, выбирая необходимые поля.
2.На основе первого запроса создать простую форму командой Форма (Form), на основе второго ленточную командой Несколько элементов (Multiple Items).
3.Закрыть вторую форму и затем перетащить ее из области навигации в первую.
Рис. 5.19. Составная форма для работы с накладными
Формы
227
4.Для установки связи главной и подчиненной форм откройте свойства элемента управления Подчиненная форма/отчет (Subform/Subreport) и на вкладке Дан-
ные (Data) заполните строки Основные поля (Link Master Fields) и Подчиненные поля (Link Child Fields).
На рис. 5.19 приведена составная форма, в которой источником записей простой главной формы является первый запрос, а источником записей ленточной подчиненной формы второй.