Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2005-03-05

Coco/R, NQC

Привет All,

Если кто знает расширения файлов для форматов Coco/R и NQC?
Типа Pascal - pas, C - c или cpp.
Надо для своего текстового редактора.

Афоризм напоследок: Сто грамм, конечно, могут быть лишними, но они никогда не
помешают.
Winamp глаголит: Scorpions - Living For Tomorrow
5 марта 2005 г. 14:20:21

Просто студент
Eugene mailto:rav***@o*****.ru

Номер выпуска : 4123
Возраст листа : 531 (дней)
Количество подписчиков : 522
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/328008
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-05 20:01:45 (#328008)

Re[2]: Global hook

Доброго времени суток, Hagen.
Вы писали 4 марта 2005 г., 11:07:02
на тему "Global hook"

>> Т.е. происходит что-то в системе -
>> я об этом узнаю первым. Интересуют прежде всего
>> системные ошибки.

H> Хуки здесь вряд ли помогут. Тебе интересуют, скорее всего,
H> необработанные исключения.

Так вот на эти исключения и надо поставить хук. Только как?

   NEON 2005-03-05 19:11:14 (#327982)

Re[8]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Здравствуйте, Вадим.

Очень жаль, что Вы уезжаете в длительную командировку так как из Ваших
писем я смог извлечь много полезного. Гражданин Grishka прислал мне
исходники для работы с очень большими числами, а точнее функции и
процедуры для арифметичиских операций и некоторые функции вроде mod,
trunc etc.
Ниже ловите сорцы:
{==========================================================================}
unit LongMath;
{Автор Vit}

interface

Type TProgress = procedure(Done:real);

{Собственно экспортные функции}
Function ulFact(First:String):string;
Function ulSum(First, Second :string):string;
Function ulSub(First, Second :string):string;
Function ulMPL(First, Second :string):string;
Function ulPower(First, Second :string):string;
function UlDiv(First, Second:String; Precision:integer):String; {Precision
- не истинная точность а количество знаков учитываемых после запятой сверх тех
которые значимы. Все знаки уже существующие в делимом и делителе в любом случае
учитываются}

{Call back function for long operations}
var OnProgress: TProgress;

implementation

Uses SysUtils;

type TMathArray=array of integer;

Type TNumber=record
int, frac:TMathArray;
sign:boolean;
end;

var n1, n2:TNumber;

Procedure Str2Number(s:string; var n:TNumber);
var i, j, l:integer;
begin
if s='' then
begin
setlength(n.int , 0);
setlength(n.frac , 0);
exit;
end;
l:=length(s);
if s[1]='-' then
begin
s:=copy(s,2,l);
l:=l-1;
n.sign:=false;
end
else
n.sign:=true;
j:=pos('.', s);
if j>0 then
begin
setlength(n.int , j-1);
for i:=1 to j-1 do n.int[i-1]:=strtoint(s[j-i]);
setlength(n.frac , l-j);
for i:=1 to l-j do n.frac[i-1]:=strtoint(s[l-i+1]);
end
else
begin
setlength(n.int,l);
for i:=1 to l do n.int[i-1]:=strtoint(s[l-i+1]);
setlength(n.frac,0);
end;
end;

Function Num2Array(Var n:TNumber; var a:TMathArray):integer;
var i:integer;
begin
result:=length(n.frac);
setlength(a,length(n.int)+result);
for i:=0 to length(a)-1 do if i<result then a[i]:=n.frac[i] else a[i]:=n.int[i-result];

end;

Procedure MultiplyArray(var a1, a2, a:TMathArray);
var i, j:integer;
b:boolean;
begin
{checking for zero, 1}
for i:=length(a2)-1 downto 0 do
begin
for j:=length(a1)-1 downto 0 do
begin
a[j+i]:=a[j+i]+(a2[i]*a1[j]);
end;
end;
repeat
b:=true;
for i:=0 to length(a)-1 do
if a[i]>9 then
begin
b:=false;
try
a[i+1]:=a[i+1]+1;
except
setlength(a, length(a)+1);
a[i+1]:=a[i+1]+1;
end;
a[i]:=a[i]-10;
end;
until b;
end;

Procedure Array2Num(Var n:TNumber; var a:TMathArray; frac:integer; sign:boolean);

var i:integer;
begin
setlength(n.frac,frac);
setlength(n.int,length(a)-frac);
for i:=0 to length(a)-1 do
begin
if i<frac then n.frac[i]:=a[i] else n.int[i-frac]:=a[i];
end;
n.sign:=sign;
end;

Function Number2Str(var n:TNumber):string;
var i:integer;
s:string;
begin
result:='';
for i:=0 to high(n.int) do result:=inttostr(n.int[i])+result;
if length(n.frac)<>0 then
begin
for i:=0 to high(n.frac) do s:=inttostr(n.frac[i])+s;
result:=result+'.'+s;
end;
while (length(result)>1) and (result[1]='0') do delete(result,1,1);
if pos('.', result)>0 then while (length(result)>1) and (result[length(result)]='0')
do delete(result,length(result),1);
if not n.sign then result:='-'+result;
setlength(n.int,0);
setlength(n.frac,0);
end;

Procedure DisposeNumber(var n:TNumber);
begin
setlength(n.int,0);
setlength(n.frac,0);
end;

Function ulFact(First:String):string;
var n1, n2:TNumber;
i:integer;
a, a1, a2:TMathArray;
max:integer;
begin
Str2Number('1', n1);
Str2Number('1', n2);
Num2Array(n1, a1);
Num2Array(n2, a2);
max:=strtoint(First);
for i:=1 to strtoint(First) do
begin
if Assigned(OnProgress) then OnProgress((i/max)*100);
setlength(a,length(a1)+length(a2)+1);
MultiplyArray(a1, a2, a);
setlength(a1,0);
setlength(a2,0);
a1:=a;
Str2Number(inttostr(i), n2);
Num2Array(n2, a2);
end;
Array2Num(n1, a1, 0, true);
result:=Number2Str(n1);
DisposeNumber(n1);
end;

Function ulPower(First, Second :string):string;
var i, j, c:integer;
a, a1, a2:TMathArray;
var n1:TNumber;
max:integer;
begin
j:=strtoint(Second);
if j=0 then
begin
result:='1';
exit;
end
else
if j=1 then
begin
result:=First;
exit;
end;

max:=j-1;
Str2Number(First, n1);
c:=Num2Array(n1, a1);
setlength(a,0);
setlength(a2,0);
a2:=a1;
for i:=1 to j-1 do
begin
if Assigned(OnProgress) then OnProgress((i/max)*100);
setlength(a,0);
setlength(a,length(a1)+length(a2)+1);
MultiplyArray(a1, a2, a);
setlength(a2,0);
a2:=a;
end;
setlength(a1,0);
setlength(a2,0);
c:=c*j;
if n1.sign then
Array2Num(n1, a, c, true)
else
if odd(j) then Array2Num(n1, a, c, false) else Array2Num(n1, a, c, true);

setlength(a,0);
result:=Number2Str(n1);
DisposeNumber(n1);
end;

Procedure MultiplyNumbers(var n1, n2 :TNumber);
var i:integer;
a, a1, a2:TMathArray;
begin
i:=Num2Array(n1, a1)+Num2Array(n2, a2);
setlength(a,length(a1)+length(a2)+1);
MultiplyArray(a1, a2, a);
setlength(a1,0);
setlength(a2,0);
Array2Num(n1, a, i, n1.sign=n2.sign);
DisposeNumber(n2);
setlength(a,0);
end;

Function ulMPL(First, Second :string):string;
var n1, n2:TNumber;
begin
Str2Number(First, n1);
Str2Number(Second, n2);
MultiplyNumbers(n1, n2);
result:=Number2Str(n1);
DisposeNumber(n1);
end;

Procedure AlignNumbers(var n1, n2:TNumber);
var i1, i2, i:integer;
begin
i1:=length(n1.int);
i2:=length(n2.int);
if i1>i2 then setlength(n2.int, i1);
if i2>i1 then setlength(n1.int, i2);

i1:=length(n1.frac);
i2:=length(n2.frac);

if i1>i2 then
begin
setlength(n2.frac, i1);
for i:=i1-1 downto 0 do
begin
if i-(i1-i2)>0 then n2.frac[i]:=n2.frac[i-(i1-i2)] else n2.frac[i]:=0;

end;
end;
if i2>i1 then
begin
setlength(n1.frac, i2);
for i:=i2-1 downto 0 do
begin
if i-(i2-i1)>0 then n1.frac[i]:=n1.frac[i-(i2-i1)] else n1.frac[i]:=0;

end;
end;
end;

Function SubInteger(a1,a2:TMathArray):integer;
var i:integer;
b:boolean;
begin
result:=0;
if length(a1)=0 then exit;
for i:=0 to length(a1)-1 do a1[i]:=a1[i]-a2[i];
repeat
b:=true;
for i:=0 to length(a1)-1 do
if a1[i]<0 then
begin
b:=false;
if i=length(a1)-1 then
begin
result:=-1;
a1[i]:=a1[i]+10;
b:=true;
end
else
begin
a1[i+1]:=a1[i+1]-1;
a1[i]:=a1[i]+10;
end;
end;
until b;
end;

Procedure AssignNumber(out n1:TNumber; const n2:TNumber);
var i:integer;
begin
Setlength(n1.int, length(n2.int));
for i:=0 to length(n2.int)-1 do n1.int[i]:=n2.int[i];
Setlength(n1.frac, length(n2.frac));
for i:=0 to length(n2.frac)-1 do n1.frac[i]:=n2.frac[i];
n1.sign:=n2.sign;
end;

Procedure SubNumber(var n1, n2 : TNumber);
var i:integer;
n:TNumber;
begin
AlignNumbers(n1, n2);
i:=subInteger(n1.frac, n2.frac);
n1.int[0]:=n1.int[0]+i;
DisposeNumber(n);
AssignNumber(n, n1);
i:=subInteger(n1.int, n2.int);
if i<0 then
begin
subInteger(n2.int, n.int);
AssignNumber(n1, n2);
end
else
begin
DisposeNumber(n2);
end;
end;

Function SumInteger(a1,a2:TMathArray):integer;
var i:integer;
b:boolean;
begin
result:=0;
if length(a1)=0 then exit;
for i:=0 to length(a1)-1 do a1[i]:=a1[i]+a2[i];
repeat
b:=true;
for i:=0 to length(a1)-1 do
if a1[i]>9 then
begin
b:=false;
if i=length(a1)-1 then
begin
result:=1;
a1[i]:=a1[i]-10;
b:=true;
end
else
begin
a1[i+1]:=a1[i+1]+1;
a1[i]:=a1[i]-10;
end;
end;
until b;
end;

Procedure SumNumber(var n1, n2:TNumber);
var i:integer;
begin
AlignNumbers(n1, n2);
i:=sumInteger(n1.frac, n2.frac);
n1.int[0]:=n1.int[0]+i;
i:=sumInteger(n1.int, n2.int);
if i>0 then
begin
setlength(n1.int, length(n1.int)+1);
n1.int[length(n1.int)-1]:=i;
end;
DisposeNumber(n2);
end;

Procedure SumNumbers(var n1, n2:TNumber);
begin
if n1.sign and n2.sign then
begin
SumNumber(n1, n2);
n1.sign:=true;
end
else
if (not n1.sign) and (not n2.sign) then
begin
SumNumber(n1, n2);
n1.sign:=False;
end
else
if (not n1.sign) and n2.sign then
begin
SubNumber(n2, n1);
AssignNumber(n1, n2);
end
else
begin
SubNumber(n1, n2);
end;
end;

Function ulSum(First, Second :string):string;
begin
Str2Number(First, n1);
Str2Number(Second, n2);
SumNumbers(n1, n2);
result:=Number2Str(n1);
DisposeNumber(n1);
end;

Function ulSub(First, Second :string):string;
begin
Str2Number(First, n1);
Str2Number(Second, n2);
n2.sign:=not n2.sign;
SumNumbers(n1, n2);
result:=Number2Str(n1);
DisposeNumber(n1);
end;

function DupChr(const X:Char;Count:Integer):AnsiString;
begin
if Count>0 then begin
SetLength(Result,Count);
if Length(Result)=Count then FillChar(Result[1],Count,X);
end;
end;

function StrCmp(X,Y:AnsiString):Integer;
var
I,J:Integer;
begin
I:=Length(X);
J:=Length(Y);
if I=0 then begin
Result:=J;
Exit;
end;
if J=0 then begin
Result:=I;
Exit;
end;
if X[1]=#45 then begin
if Y[1]=#45 then begin
X:=Copy(X,2,I);
Y:=Copy(Y,2,J);
end else begin
Result:=-1;
Exit;
end;
end else if Y[1]=#45 then begin
Result:=1;
Exit;
end;
Result:=I-J;
if Result=0 then Result:=CompareStr(X,Y);
end;

function StrDiv(X,Y:AnsiString):AnsiString;
var
I,J:Integer;
S,V:Boolean;
T1,T2:AnsiString;
R:string;
max:integer;

begin
Result:=#48;
R:=#48;
I:=Length(X);
J:=Length(Y);
S:=False;
V:=False;
if I=0 then Exit;
if (J=0) OR (Y[1]=#48) then begin
Result:='';
R:='';
Exit;
end;
if X[1]=#45 then begin
Dec(I);
V:=True;
X:=Copy(X,2,I);
if Y[1]=#45 then begin
Dec(J);
Y:=Copy(Y,2,J)
end else S:=True;
end else if Y[1]=#45 then begin
Dec(J);
Y:=Copy(Y,2,J);
S:=True;
end;
Dec(I,J);
if I<0 then begin
R:=X;
Exit;
end;
T2:=DupChr(#48,I);
T1:=Y+T2;
T2:=#49+T2;
max:= Length(T1);
while Length(T1)>=J do begin
while StrCmp(X,T1)>=0 do begin
X:=UlSub(X,T1);
Result:=UlSum(Result,T2);
end;
SetLength(T1,Length(T1)-1);
SetLength(T2,Length(T2)-1);
if Assigned(OnProgress) then OnProgress(100-(Length(T1)/max)*100);
end;
R:=X;
if S then if Result[1]<>#48 then Result:=#45+Result;
if V then if R[1]<>#48 then R:=#45+R;
end;

Function Mul10(First:string; Second:integer):string;
var s:string;
i, j:integer;
begin
if pos('.',First)=0 then
begin
s:='';
For i:=0 to Second-1 do s:=s+'0';
Result:=First+s;
end
else
begin
s:='';
j:=length(First)-pos('.',First);
if (second-j)>0 then For i:=0 to Second-j-1 do s:=s+'0';
First:=First+s;
j:=pos('.',First);
First:=StringReplace(First,'.','',[]);
insert('.',First,j+second);
while (length(First)>0) and (First[length(First)]='0') do delete(First,length(First),1);

while (length(First)>0) and (First[length(First)]='.') do delete(First,length(First),1);

Result:=First;
end;
end;

Function Div10(First:string; Second:integer):string;
var s:string;
i:integer;
begin
s:='';
For i:=0 to Second do s:=s+'0';
s:=s+First;
Insert('.', s, length(s)-Second+1);
while (length(s)>0) and (s[1]='0') do delete(s,1,1);
if pos('.',s)>0 then
while (length(s)>0) and (s[length(s)]='0') do delete(s,length(s),1);
if (length(s)>0) and (s[length(s)]='.') then delete(s,length(s),1);
Result:=s;
end;

function UlDiv(First, Second:String; Precision:integer):String;
begin
First:=Mul10(First, Precision);
result:=Div10(StrDiv(First, Second), Precision);
end;

end.

{==========================================================================}

Желаю удачно съездить.

   Максим 2005-03-05 19:10:56 (#327981)

Перемещение чисел массива в файле

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

Пример на C++:

inline bool sorter(int x, int y)
{
return x%2 < y%2; // operator% означает остаток от деления
}
/* skipнуто */
std::stable_sort(array.begin(), array.end(), sorter);

Вообще, для C++ в стандартной библиотеке (STL) есть столько всего, что я с
Delphi практически завязал. Что, впрочем, не удивительно: Delphi не является
языком, для которого издают международные станданты (ISO), к сожалению. Для
Delphi могу предложить только "ручное" решение. Например, метод "пузырька",
где в качестве критерия сравнения выступает выражение
x MOD 2 < y MOD 2
Метод пузырька является "стабильным", то есть сохраняет относительный
порядок сортируемых элементов. Надеюсь, прочитать файл в массив и сбросить
результаты в файл, не проблема? Иначе можно воспользоваться методом
"вставки" - заводишь два списка и, последовательно читая файл, помещаешь
очередное прочитанное число в зависимости от его чётности в один из двух
списков. А затем оба списка последовательно выводятся в файл. Пример
опять-таки на C++:

std::list<int> odd, even;

inline void adder(int x)
{
(x%2==0 ? even : odd).push_back(x);
}
/* skipнуто */
std::for_each(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>(), adder);
std::copy(even.begin(), even.end(), std::ostream_iterator<int>(std::cout, "
"));
std::copy(odd.begin(), odd.end(), std::ostream_iterator<int>(std::cout, "
"));

Примеры вполне работоспособны. Разве что заменить std::cin и std::cout на
что-нибудь другое.

--
С уважением, boroda
mailto:boroden***@s*****.ru

Номер выпуска : 4120
Возраст листа : 531 (дней)
Количество подписчиков : 522
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/327980
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   Шматко А.А. 2005-03-05 19:10:37 (#327980)

Re[3]: Перемещение чисел массива в файле

Здравствуйте !

> G>> следования чисел с одинаковой четностью.
> G>> есть

Люди, plz, уберите избыточное цитирование
(удаляйте все ненужное, не нужное для понимания темы)
из писеем при ответе.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4119
Возраст листа : 531 (дней)
Количество подписчиков : 522
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/327979
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-05 19:08:59 (#327979)

Re: VC: как спрятать заголовок окна из панели задач?

Hello, baton_usenet!

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

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

hWndParent = CreateWindow(szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW, // Обязательно WS_OVERLAPPED или WS_POPUP,
// иначе атрибут владения перейдёт к окну более
// высокого уровня, например, Desktop'у
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

hWnd = CreateWindow(szWindowClass, szTitle,
WS_OVERLAPPEDWINDOW, // Здесь стиль может быть любым
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, hWndParent, NULL, hInstance, NULL);

Что я здесь сделал?. Да, собственно, ничего особенного: просто создал
"окно-посредник" и передал его дескриптор основному. Как видишь, я даже
не удосужился зарегистрировать отдельный оконный класс для этого окна
и сменить его заголовок. Ну и, естественно, не надо отображать это
вспомогательное окно на экране, т.е. не надо вызывать ShowWindow() и
UpdateWindow() для него - ни к чему это :-)

> чего посоветуете? надо написать на WinAPI или MFC.

Какая разница? Как тебе удобнее (привычнее), так и делай.

Другой вариант (и самый мощный способ)- управление taskbar'ом через
оболочку Windows, т.е через её COM-интерфейсы.

   Hagen 2005-03-05 19:08:46 (#327978)

Re: FoxPro: запрос с несколькими переменными в WHERE

Здравствуйте, Бурляев.

Вы писали 3 марта 2005 г., 12:54:11:

БВ> Добрый день!

БВ> Ситуация такова:
БВ> Допусти есть массив значений VALUES(N) (N в разных случаях может быть различным)
БВ> Необходимо выбрать информацию из таблицы TABLE для всех этих значений, хранящихся
БВ> в поле FIELED.
БВ> То есть мне нужно сформировать строку запроса типа:
БВ> SELECT * FROM table WHERE FIELD=value(1) OR FIELD=value(2) OR ..... OR FIELD=value(N)

БВ> Думал использовать сформиовать строку запроса:
БВ> textquery="SELECT * FROM table WHERE "
БВ> for i=1 to n
БВ> if i>1
БВ> existor="OR "
БВ> endif
БВ> textquery=textquery+existor+"FIELD=value(i) "
БВ> endfor

БВ> а затем эту строку выполнить с помощью функции SQLEXEC(), но для SQLEXEC()
требуется
БВ> знать идентификатор соединения, а что писать в параметрах функции SQLCOMMIT()
БВ> для получения соединения - не знаю. В одной книге в описании этой функции
нашёл,
БВ> что может быть один или три параметра, а каких не написано.

БВ> В общем, я в тупике. Прошу помочь.

БВ> С уважением, Бурляев Вячеслав

***Перемещение данных с помошью ODBC-драйвера(InterSolv 3.11) ---***
***out format .db in format .dbf ---***
SET DEFAULT TO g:\finrsk
SET SAFETY OFF
SET CENTURY ON
Local Handle
*m.depno=10
*sqlexec(con,'select * from scott.dept where depno=? m.depno')>0

m.dt='YEAR(ddoc)=2004 AND BETWEEN(MONTH(ddoc),4,11)'

***Создание базы данных ---***
CREATE DATABASE finrsk
***Создание соединения с удаленным источником данных ---***
CREATE CONNECTION For_mde DATASOURCE "finrsk" USERID "rsk1" PASSWORD ""
***Дескриптор удаленного соединения ---***
Handle=SQLConnect("For_mde") && Так называется именованное соединение.
*Создается в BDE, в Администраторе ODBC(пропишешь в пользовательском и
системном DSN все условия, откуда, кто и пароль)
***Если соединение успешно ---***
IF Handle > -1
***Перемещаем данные(из файла) в курсор VisualFoxPro ---***
=SQLExec(Handle,'SELECT * FROM bRASXOD','avans')
=SQLExec(Handle,'SELECT * FROM bDOCr','z_avans')
=SQLExec(Handle,'SELECT * FROM bPLbank','bankopl')
=SQLExec(Handle,'SELECT * FROM bPLkas','kasaopl')
ELSE
WAIT WIND ' Соединение с удаленным источником данных не произошло '
ENDIF

SQLDisconnect(Handle) && Разрываем соединение
DELETE CONNECTION For_mde && Удаляем его

Если я тебя правильно понял.

   2005-03-05 19:08:29 (#327977)

Re[2]: Перемещение чисел массива в файле

Hello Вадим,

Saturday, March 5, 2005, 1:20:07 AM, you wrote:

ВШ> Hello Gift,

ВШ> Friday, March 4, 2005, 4:59:01 PM, you wrote:

G>> Как переместить четные числа в начало, а нечетные в конец не изменяя порядка

G>> следования чисел с одинаковой четностью.
G>> есть
G>> 12 7 9 6 -5 -6
G>> 4 6 -7 23 -24 9

G>> надо
G>> 12 6 -6 7 9 -5
G>> 4 6 -24 -7 23 9

G>> uses crt;
G>> const n=9;
G>> type mas=array[1..6] of integer;
G>> var
G>> f:file of mas;
G>> i,x,min,max,num_of_max:integer;
G>> a:mas;
G>> begin
G>> clrscr;
G>> randomize;
G>> assign(f,'000.000');
G>> rewrite(f);
G>> for i:=1 to n do
G>> begin
G>> for x:=1 to n do
G>> begin
G>> a[x]:=random(99);
G>> write(a[x]:3);
G>> end;
G>> writeln;
G>> write(f,a);
G>> writeln;
G>> end;
G>> close(f);

Упс..... Поправлю сам себя:
1. Просмотреть массив слева направо и найти первый нечетный элемент -
запомнить его индекс -- переменная р.
ВШ> 1а. Короче говоря, массив нужно просматривать с конца (справо налево). Если
текущий
ВШ> элемент четен, то,
ВШ> 2. Запомнить его значение.
ВШ> 3. Все элементы слева от него до индекса р сдвинуть вправо на один элемент.
ВШ> 3. Запомненное значение записать в р-й элемент.
4. Увеличить р на 1.
5. Повторять с п.1а до тех пор, пока р меньше количества элементов
массива.

   Вадим Шешунов 2005-03-05 14:49:07 (#327789)

Re: Перемещение чисел массива в файле

Hello Gift,

Friday, March 4, 2005, 4:59:01 PM, you wrote:

G> Как переместить четные числа в начало, а нечетные в конец не изменяя порядка

G> следования чисел с одинаковой четностью.
G> есть
G> 12 7 9 6 -5 -6
G> 4 6 -7 23 -24 9

G> надо
G> 12 6 -6 7 9 -5
G> 4 6 -24 -7 23 9

G> uses crt;
G> const n=9;
G> type mas=array[1..6] of integer;
G> var
G> f:file of mas;
G> i,x,min,max,num_of_max:integer;
G> a:mas;
G> begin
G> clrscr;
G> randomize;
G> assign(f,'000.000');
G> rewrite(f);
G> for i:=1 to n do
G> begin
G> for x:=1 to n do
G> begin
G> a[x]:=random(99);
G> write(a[x]:3);
G> end;
G> writeln;
G> write(f,a);
G> writeln;
G> end;
G> close(f);

Короче говоря, массив нужно просматривать с конца (справо налево). Если текущий
элемент четен, то,
1. Запомнить его значение.
2. Все элементы слева от него сдвинуть вправо на один элемент.
3. Запомненное значение записать в первый элемент.

   Вадим Шешунов 2005-03-05 02:22:22 (#327522)

Re[7]: Программирование на Pascal. Функция MOD и TRUNC для типа данных extended

Hello Максим,

Friday, March 4, 2005, 1:40:37 PM, you wrote:

М> Криптография штука очень тяжелая, так что я тоже мало что понимаю в
М> ней. Да мне много и не надо, я стараюсь как можно тщательнее изучить
М> алгоритм шифрования RSA, который считается одним из самых надежных, во
М> всяком случае пока. И его основной "конек" работа с большими числами,
М> а точнее однонаправленные функции (one-way functions), обрабатывающие
М> эти числа. Обратные этим функциям очень сложны в выполнении. Например
М> оновной проблемой по взлому RSA является факторизация (разложение на
М> простые множители) модуля, длина которого при нормальной реализации
М> тысячи бит. Конечно же во время выполнения алгоритма для
М> криптостойкости необходимо оперировать с очень большими числами. Самый
М> простой пример-это вычисление модуля, который является произведением
М> двух простых чисел длиной не менее 512 бит. Впрочем, вопрос не в
М> криптографии. Если у вас будет возиожность и желание, то советую
М> почитать книгу Б. Шнайера "Основы криптографии", очень интересная
М> штука. Мне товарищ Grishka передал исходники для работы с длинными
М> числами, за что ему честь и хвала. Помогите пожалуйста с размещением
М> чисел в массивах и с операциями над ними.

Ну, во-первых, лично я ровным счетом ничего не знаю о том, что
находится в исходниках товарища Grishka. Во-вторых, мне бы конкретный
пример, поскольку все вышесказанное мне ни о чем не говорит.
В-третьих, для обсуждения этого вопроса с моим участием у нас осталось
времени до 16.00 5-го марта - уезжаю в длительную командировку.

Мне одно все-таки непонятно. Каким образом хранятся стартовые для
расчета данные? В качестве моей догадки:
Имеется числа, которые все-таки "впихиваются" в тип extended (иначе,
как бы это все работало - то, что у Вас уже работает?!). Потом над этими
операндами проводятся какие-то действия, результат которых, в
общем-то, уже не вмещается в этот тип. И Вам нужно продолжать
вычисления уже над такими "большими" числами? И еще одна мысль - если
мы имеем тип extended (то есть, например 1.23*10Е+12, если не ошибаюсь
в самом типе extended), то почему бы
такие числа не "разложить" по двум переменным - 1.23 и 12. Во-первых,
это на порядки облегчило бы арифметику задачи. Во-вторых, такое
представление облегчит вам жизнь, если доведется таки "разбрасывать"
число по массиву. Причем показатель степени при Е можно будет
вычислить еще ДО самого вычисления результата, а само вычисление будет
производиться над ЦЕЛЫМИ числами. Например, для деления 1.23Е+1251 на
3.758Е+364 результат будет выглядеть
(1.23/3.758)Е+(1251-364) = 1.23Е+887 / 3.758 = 123000(0000)Е+880 / 3758
- уже можно говорить о целочисленной арифметике.

   Вадим Шешунов 2005-03-05 02:22:00 (#327521)

Re: как спрятать заголовок окна из панели задач?

Здравствуйте !

> у меня есть приложение, надо спрятать заголовок из панели задач, но
> чтобы само окно не скрывалось.
> чего посоветуете? надо написать на WinAPI или MFC.

Есть простой способ - установить главному окну расширенный стиль
WS_EX_TOOLWINDOW. Правда, заголовок станет тоньше.

--
С уважением, Вахтуров Виктор.

Номер выпуска : 4113
Возраст листа : 531 (дней)
Количество подписчиков : 523
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/327478
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2005-03-05 01:09:30 (#327478)