Feltöltök 10 100 elemet tartalmazó tömböt véletlen számokkal és azt az elemet szeretném megtalálni, ami legalább két tömbben előfordul azonos pozíción, például t4[7]=5 és t8[7]=5. kód lent, de az elemeket megtaláló ciklus megírásában segítene valaki?
Tehát először feltöltöm random számokkal, aztán gondoltam, hogy segítheti a dolgot, ha egyenként kiteszem az elemeket egy összesítő tömbbe, de így se volt ötletem a mindent mindennel összehasonlító ciklusra, amely ráadásul úgy kellene hogy működjön, hogy azonos elemet önmagával ne hasonlítson össze...
Program tomb;
uses crt,dos;
var
t1,t2,t3,t4,t5,t6,t7,t8,t9,t10:array[1..100] of word;
i,j:word;
elem:word;
bigarray:array[1..1000] of word;
begin
randomize;
for i:=1 to 100 do
begin
elem:=random(65000);
t1[i]:=elem;
elem:=random(65000);
t2[i]:=elem;
elem:=random(65000);
t3[i]:=elem;
elem:=random(65000);
t4[i]:=elem;
elem:=random(65000);
t5[i]:=elem;
elem:=random(65000);
t6[i]:=elem;
elem:=random(65000);
t7[i]:=elem;
elem:=random(65000);
t8[i]:=elem;
elem:=random(65000);
t9[i]:=elem;
elem:=random(65000);
t10[i]:=elem;
end;
i:=0;
j:=0;
repeat
inc(i);
inc(j);
bigarray[j]:=t1[i];
inc(j);
bigarray[j]:=t2[i];
inc(j);
bigarray[j]:=t3[i];
inc(j);
bigarray[j]:=t4[i];
inc(j);
bigarray[j]:=t5[i];
inc(j);
bigarray[j]:=t6[i];
inc(j);
bigarray[j]:=t7[i];
inc(j);
bigarray[j]:=t8[i];
inc(j);
bigarray[j]:=t9[i];
inc(j);
bigarray[j]:=t10[i];
until(j=1000);
end.
nem értek pascalhoz, de jézusom ez a kód :O
miért nem kétdimenziós tömb?
t[1 - 10][1 - 100] = randomszám
a másik fele is elég fura...
"miért nem kétdimenziós tömb?"
...És miért nem két egymásba ágyazott ciklussal töltöd fel, és vizsgálod? Miért kéne mindent mindennel összehasonlítanod, amikor csak az azonos indexű tömbelemek érdekesek? Mi a búbánatos lótúrót remélsz a bigarraytől? Miért repeat..untilt használsz az amúgy tökéletesen értelmetlen második ciklusban, amikor minden ciklushatárt előre ismersz?
Az egész program az átgondolatlanság és a tanácstalanság násztánca. Találd már ki előre, hogy mit akarsz, és csak akkor kezdd el kódolni, ha már van mit.
Nem túl szép megoldás, de majd tovább gondolod (ha meg nem, akkor megírtam a leckédet, vagy valami...):
(Free Pascalban lett elkövetve és 64 bites Ubuntun lett tesztelve)
Program tomb;
{$mode objfpc}{$H+}
type
tTomb=array[1..100] of word;
var
bigArray: array[1..10,1..100] of word;
procedure feltolt(var aTomb: tTomb);
var
i: integer;
begin
for i:=1 to 100 do
aTomb[i]:=random(65000);
end;
procedure bemasol(aTomb: tTomb; oszlop: word);
var
i: integer;
begin
for i:=1 to 100 do
bigArray[oszlop,i]:=aTomb[i];
end;
var
t0,t1,t2,t3,t4,t5,t6,t7,t8,t9: tTomb;
i, j, k: word;
begin
randomize;
feltolt(t0);
feltolt(t1);
feltolt(t2);
feltolt(t3);
feltolt(t4);
feltolt(t5);
feltolt(t6);
feltolt(t7);
feltolt(t8);
feltolt(t9);
bemasol(t0,1);
bemasol(t1,2);
bemasol(t2,3);
bemasol(t3,4);
bemasol(t4,5);
bemasol(t5,6);
bemasol(t6,7);
bemasol(t7,8);
bemasol(t8,9);
bemasol(t9,10);
{teszteléshez berakunk három azonos értéket ugyan abba a pozícióba}
{
bigArray[3,45]:=125;
bigArray[5,45]:=125;
bigArray[7,45]:=125;
}
for i:=1 to 9 do
begin
for j:=i+1 to 10 do
begin
for k:=1 to 100 do
begin
if bigArray[i,k]=bigArray[j,k] then
begin
writeln('t',i-1,' tomb ',k,'. eleme (',bigArray[i,k],') megegyezik a t',j-1,' tomb ',k,'. elemevel (',bigArray[j,k],')');
end;
end;
end;
end;
writeln('A kilepeshez nyomj ENTER-t!');
readln;
end.
Én ilyesmit képzeltem el (kétdimenziós tömb, Free Pascal, 64 bites Linux Minten kipróbálva):
program tombok_tabaki;
uses crt;
var
tombok: array[1..10,1..100] of word; ertekelo: array[1..100] of boolean;
i,j: integer;
ujabb: char;
procedure feltoltes;
begin
for i:=1 to 100 do ertekelo[i]:=false;
for j:=1 to 10 do for i:=1 to 100 do tombok[j,i]:=random(1000);
end;
procedure ertekeles;
var k: integer; egyezes: byte;
begin;
for i:=1 to 100 do
for j:=1 to 10 do begin
egyezes:=0;
for k:=1 to 10 do if tombok[j,i]=tombok[k,i] then inc(egyezes);
if egyezes>1 then ertekelo[i]:=true;
end;
clrscr; writeln('Egyezések a következő indexeken:');
for i:=1 to 100 do begin
if ertekelo[i] then begin
if i<100 then write(' '); if i<10 then write(' '); write(i,':'#9);
for j:=1 to 10 do begin
write(tombok[j,i]); if j<10 then write(', ') else writeln;
end;
end;
end;
writeln;
end;
BEGIN
randomize;
repeat;
feltoltes; ertekeles;
write('Újabb menet? (i/n)'); ujabb:=upcase(readkey);
until ujabb='N';
END.
Nagyon szépen köszönöm a kreatív válaszokat, Ejbenjaro-nak és Tabaki-nak pedig a programot.
Gondoltam hogy a feltöltéshez nem túl elegáns a repeat-until ciklus meg hogy lehetne egyszerűbben...
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!