![]() |
|
|
#1
|
|||
|
|||
|
Только начал изучать Delphi
Возникла проблема с кодом(( Помогите пожалуйста. Условие задачи: Дан целочисленный массив размера N. Удалить из массива все элементы, встречающиеся более двух раз, и вывести размер полученного массива и его содержимого. Вот мой код Код:
procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..99] of integer;
i,j,m,n,z,k,p,l:integer;
begin
p:=0;
N:=strtoint(Edit1.Text);
for i:=1 to n do
begin
a[i]:=random(100)-50;
k:=0;
for j:=1 to n do
begin
if a[i]=a[j] then k:=k+1;
if i=j then k:=k-1;
if k=2 then
begin
for z:=1 to n do
begin
a[i]:=a[n];
n:=n-1;
end;
end;
end;
label1.caption:=label1.caption+IntToStr(a[i])+' ';
end;
for i:=1 to n do
begin
p:=p+1;
end;
Edit2.text:=inttostr(p);
end; |
|
#2
|
||||
|
||||
|
В чем проблема?
Сделаю несколько предположений: 1) Массив еще не заполнен, а уже начинается поиск. Как следствие - на выходе бред. 2) В конце последнего цикла всегда будет p=n. Зачем тогда этот цикл? |
|
#3
|
|||
|
|||
|
Т.е нужно сделать отдельным цикл присваивания элементам массива рандомного числа?
А лишь потом искать элементы подходящие под условие задачи? И почему p=n? Я просто самоучка) |
|
#4
|
||||
|
||||
|
1) Разумеется отдельным. Сначала массив надо заполнить, а потом с ним работать.
2) Почему P=N - проанализируй. Код:
p:=0; ... for i:=1 to n do begin p:=p+1; end; Следовательно, цикл бесполезен. |
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
Sersgant (07.06.2012)
| ||