Rôzne čísla v pascale

Programovacie jazyky, rady, poradňa...
xand
Novice
Novice
Príspevky: 6
Registrovaný: 22 jan 2011, 16:32

Rôzne čísla v pascale

Príspevok od používateľa xand »

Ahoj, snažil som sa spraviť program, ktorý zistí, či všetky zadané čísla sú navzájom rôzne.
Skúsil som napísať toto:

Kód: Vybrať všetko

Program rozne_cisla;
uses crt;
var a:array[1..100] of integer;
    n,i,x:integer;
    bolo:boolean;
begin
clrscr;
writeln('Napis pocet cisel: ');
readln(n);
writeln('Teraz zadavaj cisla');
for i:=1 to n do readln(a[i]);

for i:=1 to n do begin
 if x=a[i] then bolo:=true;
 x:=a[i];
end;
if bolo then writeln('Cisla nie su rozne.')
        else writeln('Cisla su rozne');
readln;
end.
Lenže program funguje iba tak, že kontroluje či pri sebe nie sú rovnaké čísla... Teda pre čísla 1,2,1 napíše že sú navzájom rôzne. Ako sa to dá upraviť? Potrebujem ďalšie pole?
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Rôzne čísla v pascale

Príspevok od používateľa BX »

Dá sa to jednoducho, keď budeš čisla kontrolovať nie n-krát, ale n-nadruhú krát.
Takže tento for

Kód: Vybrať všetko

for i:=1 to n do begin
if x=a[i] then bolo:=true;
x:=a[i];
end;
prepíš na

Kód: Vybrať všetko

for j:=1 to n do
 for i:=1 to n do
 if (j<>i) and (a[j]=a[i]) then bolo:=true;
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Rôzne čísla v pascale

Príspevok od používateľa audiotrack »

keď ich budeš porovnávať už pri vkladaní, tak nemusíš robiť ani n^2 - n porovnaní ako robíš teraz. Ďalej pridaním continue po prvom nájdení odignoruješ zvyšné prvky poľa a ešte viac to zoptimalizuješ. Takéto riešenie ako si napísal je veľmi nepekné, i keď žiaľ, funkčné :)
BX
Addict
Addict
Používateľov profilový obrázok
Príspevky: 4572
Registrovaný: 10 jan 2008, 15:30

Re: Rôzne čísla v pascale

Príspevok od používateľa BX »

Jáj vôbec ma nenapadlo, že v pascale je continue sakra :D Pascal som už dosť dlho nevidel a keď v niečo robím v ňom, tak robím to najhoršie možné :oops: (I keď to nie len v pascale :/)
xand
Novice
Novice
Príspevky: 6
Registrovaný: 22 jan 2011, 16:32

Re: Rôzne čísla v pascale

Príspevok od používateľa xand »

tak ďakujem obom :) keby niekto raz chcel vidieť:

Kód: Vybrať všetko

writeln('Teraz zadavaj cisla');
for i:=1 to n do begin
    readln(a[i]);
    for j:=1 to n do if (j<>i) and (a[i]=a[j]) then begin
                                                 bolo:=true;
                                                 continue;
                                                 end;
end;
audiotrack
VIP
VIP
Používateľov profilový obrázok
Príspevky: 25958
Registrovaný: 09 sep 2005, 18:39
Kontaktovať používateľa:

Re: Rôzne čísla v pascale

Príspevok od používateľa audiotrack »

ten cyklus ti stačí robiť for j:=1 to i-1 (zbytočne tam totiž ideš po n, keď tam nemáš zatiaľ viac hodnôt ako i)
Napísať odpoveď