[Pascal]-program stwierdzający powtórzenia w ciągu

wozszym
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 25 kwie 2009, o 16:09
Płeć: Mężczyzna
Podziękował: 2 razy

[Pascal]-program stwierdzający powtórzenia w ciągu

Post autor: wozszym »

Mam napisać program, który stwierdza, czy w ciągu liczb, któreś się powtarzają. Nie wiem dlaczego, mój zawsze odpowiada tak, jeśli tylko ciąg ma przynajmniej trzy wyrazy.

Kod: Zaznacz cały

program trzy_elementy;

var tab: array[1..1000] of Longint;
i, n,j,a: Longint;
rowna: Longint;
czy: Boolean;

begin
 Read(n);
 czy := false;

 for i:=1 to n do
  Read(tab[i]);
   rowna:=0;
 for i:=1 to n do
  begin
  for j:=1 to n do
   if  tab[i] = tab[j] then
   rowna := rowna+1;
  if rowna > 2 then czy := true;
  end;
 if czy then Write('TAK')
 else Write('Nie');

 read(a);
end.
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[Pascal]-program stwierdzający powtórzenia w ciągu

Post autor: Afish »

Pierwszą pętlą (tą ze zmienną \(\displaystyle{ i}\)) jedziesz od \(\displaystyle{ 1}\) do \(\displaystyle{ n}\), drugą pętlą (tą ze zmienną \(\displaystyle{ j}\)) jedziesz w tym samym zakresie, więc gdy \(\displaystyle{ j=i}\), to zwiększasz zmienną \(\displaystyle{ rowna}\). Rozwiązanie: drugą pętlą iteruj od \(\displaystyle{ i+1}\) do \(\displaystyle{ n}\) i jeżeli napotkasz jakiekolwiek powtórzenie, to możesz zakończyć pętle.
Ponadto: Twój program działa dość wolno (w czasie kwadratowym). Szybciej będzie, jeżeli posortujesz liczby i będziesz sprawdzał wszystkich sąsiadów.
wozszym
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 25 kwie 2009, o 16:09
Płeć: Mężczyzna
Podziękował: 2 razy

[Pascal]-program stwierdzający powtórzenia w ciągu

Post autor: wozszym »

Dziękuję
ODPOWIEDZ