Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Pascal. Выбор в массиве определенных членов.

Автор: InviZible 9.10.2006 1:07

Даны натуральные n, целые числа a1......an. Внутри данной последовательности могут быть повторяюшиеся члены. Получить числа. взятые по одному из каждой группы равных членов.

я делал так :

Код


Program laba3;
Uses Crt;
Var
a:array[1..10000] of integer;
k,i,n:integer;
Begin
ClrScr;

WriteLn('***************************');
WriteLn('Vvedi n. 0 < n <=10000 ');
ReadLn(n);
WriteLn('***************************');

for i:=1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;

WriteLn('***************************');

Write('Massiv zapolnen. Sosoit iz : ');

for i:=1 to n do
  Write(a[i],' ');

  WriteLn;

for i:=1 to n do
  begin
   for k:=1 to n do
    if a[i]=a[i+k] then
     begin
      WriteLn('============================');
      WriteLn('Vot chislo iz pari : ',a[i]);
      WriteLn('============================');
     end;
  end;

  WriteLn('That''s all.');
  ReadLn;
End.



Но мою лабуду заброкавали. Прога работает, но если вводить: n=4, а потом 3 3 3 3, то фигня получается. Так же проблема с нулями.
Сказали, что нужно переделать.

заранее спасибо.
p.s. извините, что создал 2 темы сразу

Автор: volvo 9.10.2006 1:16

И эту задачу тебе уже решили... Тебе же все не так и не этак. Вот и приведи 10 тестов, чтоб было ясно, КАК программа должна работать mad.gif

Автор: InviZible 9.10.2006 1:20

volvo, смотри
n=6 1 46 74 32 1 1 вывести 1
n=8 2 3 0 0 0 2 3 2 вывести 2 3 0
n=5 0 0 0 1 1 вывести 0 1
n=5 1 2 3 0 5 вывести ничего

понятно теперь?

Автор: volvo 9.10.2006 1:30

Так?

...
for i := 1 to n - 1 do begin

before := 0; after := 0;
for j := 1 to i - 1 do
if arr[j] = arr[i] then inc(before);

for j := i + 1 to n do
if arr[j] = arr[i] then inc(after);

if (after > 0) and (before = 0) then write(arr[i], ' ');

end;
writeln;
...

Автор: InviZible 9.11.2006 23:11

Всем спасибо, вот мой вариант

Код

Program laba3;
Uses Crt;
Var
a:array[1..10000] of integer;
d,p,j,i,n:integer;
Begin
ClrScr;
WriteLn('Hi, it''s laba3_7 by Serega M. Vesion 0.3 . yes or die');
WriteLn('***************************');
WriteLn('Vvedi n. 0 < n <=10000 ');
ReadLn(n);
WriteLn('***************************');

for i:=1 to n do
  begin
   WriteLn('Enter a[',i,']');
   ReadLn(a[i]);
  end;

WriteLn('***************************');

Write('Massiv zapolnen. Sosoit iz : ');

for i:=1 to n do
  Write(a[i],' ');

  WriteLn;

for i:=1 to n-1 do
  begin
   d:=0;
   p:=0;

   for j:=1 to i-1 do
    if a[j]=a[i] then inc(d);

   for j:=i+1 to n do
    if a[j]=a[i] then inc(p);

   if (p>0) and (d=0) then
    writeln('Chislo iz pari : ',a[i],' ');
  end;

WriteLn('That''s all!');
readln;
end.

Автор: volvo 9.11.2006 23:13

Ну, и чем он отличается от вышеприведенного мной? Тем, что ты поменял названия переменных? dry.gif