Нужна помощь
Добавлено: 08 апр 2008, 05:22
Помогите пожалуйста решить 2 задачи (желательно на Delphi):
1. Составить программу, которая в кольцевой список из n элементов добавляет m новых элементов так, чтобы новый элемент вставлялся через k элементов кольца.
2. Число компонент файла f, компонентами которого являются целые числа, кратно 1. Переписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке так, чтобы в начале шли отрицательные числа десятки, а за ними – неотрицательные.
Сам пытался и вот, что получилось:
1.
procedure TForm1.BitBtn1Click(Sender: TObject);
Type
sp=record
inf: integer;
link: integer;
end;
var
spisok: array[1..100] of sp;
k,i,n,m,m1,p: integer;
begin
listbox1.Clear;
listbox2.clear;
n:=strtoint(edit1.text);
m:=strtoint(edit2.Text);
k:=strtoint(edit3.Text);
for i:=0 to (n-2) do begin
spisok[i+1].inf:=Random(10);
spisok[i+1].link:=spisok[i+2].link;
spisok.link:=i+1
end;
spisok[n].link:=spisok[1].link;
i:=1;
repeat
listbox1.Items.add(inttostr(spisok.inf));
i:=i+1
until (i=n);
p:=1;
m1:=1;
repeat
spisok[p].inf:=Random(10);
spisok[p].link:=spisok[p+1].link;
spisok[p-1].link:=p;
p:=p+k;
m1:=m1+1
until (p>n) or (m1=m);
i:=1;
repeat
listbox2.Items.add(inttostr(spisok.inf));
i:=i+1
until (i=n+m);
end;
2.
procedure TForm1.BitBtn1Click(Sender: TObject);
var f,g:TFileStream;
a,i,j,l,s,min,k,n:integer;
buf:array [0..10] of integer;
begin
listbox1.clear;
listbox2.Clear;
n:=strtoint(edit1.text);
if (n mod 10)<>0 then begin
showmessage ('vvedite chislo kratnoe 10');
edit1.Clear
end
else
begin
s:=n div 10;
g:=TfileStream.Create('F:\Программирование\индивидуальное задание\Задача 3\файлы\g.dat', fmCreate);
f:=TfileStream.Create('F:\Программирование\индивидуальное задание\Задача 3\файлы\f.dat', fmCreate);
Randomize;
for i:=1 to n do begin
a:=Random(30+(-15));
f.write(a,sizeof(a));
listbox1.items.add(inttostr(a))
end;
for l:=1 to s do begin
f.read(buf,10);
for i:=1 to 10 do begin
min:=buf;
k:=i;
for j:=(i+1) to n do begin
if min>buf[j] then begin
min:=buf[j];
k:=j;
end;
end;
buf[k]:=buf;
buf:=min;
end;
g.Write(buf,sizeof(buf));
for i:=1 to 10 do
listbox2.Items.add(inttostr(buf));
end;
f.Free;
g.Free;
end;
end;
Выдает ошибки. В общем, выручайте =)
1. Составить программу, которая в кольцевой список из n элементов добавляет m новых элементов так, чтобы новый элемент вставлялся через k элементов кольца.
2. Число компонент файла f, компонентами которого являются целые числа, кратно 1. Переписать компоненты файла f в файл g, изменяя порядок чисел в каждой десятке так, чтобы в начале шли отрицательные числа десятки, а за ними – неотрицательные.
Сам пытался и вот, что получилось:
1.
procedure TForm1.BitBtn1Click(Sender: TObject);
Type
sp=record
inf: integer;
link: integer;
end;
var
spisok: array[1..100] of sp;
k,i,n,m,m1,p: integer;
begin
listbox1.Clear;
listbox2.clear;
n:=strtoint(edit1.text);
m:=strtoint(edit2.Text);
k:=strtoint(edit3.Text);
for i:=0 to (n-2) do begin
spisok[i+1].inf:=Random(10);
spisok[i+1].link:=spisok[i+2].link;
spisok.link:=i+1
end;
spisok[n].link:=spisok[1].link;
i:=1;
repeat
listbox1.Items.add(inttostr(spisok.inf));
i:=i+1
until (i=n);
p:=1;
m1:=1;
repeat
spisok[p].inf:=Random(10);
spisok[p].link:=spisok[p+1].link;
spisok[p-1].link:=p;
p:=p+k;
m1:=m1+1
until (p>n) or (m1=m);
i:=1;
repeat
listbox2.Items.add(inttostr(spisok.inf));
i:=i+1
until (i=n+m);
end;
2.
procedure TForm1.BitBtn1Click(Sender: TObject);
var f,g:TFileStream;
a,i,j,l,s,min,k,n:integer;
buf:array [0..10] of integer;
begin
listbox1.clear;
listbox2.Clear;
n:=strtoint(edit1.text);
if (n mod 10)<>0 then begin
showmessage ('vvedite chislo kratnoe 10');
edit1.Clear
end
else
begin
s:=n div 10;
g:=TfileStream.Create('F:\Программирование\индивидуальное задание\Задача 3\файлы\g.dat', fmCreate);
f:=TfileStream.Create('F:\Программирование\индивидуальное задание\Задача 3\файлы\f.dat', fmCreate);
Randomize;
for i:=1 to n do begin
a:=Random(30+(-15));
f.write(a,sizeof(a));
listbox1.items.add(inttostr(a))
end;
for l:=1 to s do begin
f.read(buf,10);
for i:=1 to 10 do begin
min:=buf;
k:=i;
for j:=(i+1) to n do begin
if min>buf[j] then begin
min:=buf[j];
k:=j;
end;
end;
buf[k]:=buf;
buf:=min;
end;
g.Write(buf,sizeof(buf));
for i:=1 to 10 do
listbox2.Items.add(inttostr(buf));
end;
f.Free;
g.Free;
end;
end;
Выдает ошибки. В общем, выручайте =)