Másolásra épülő algortmusok Tartalomjegyzék Másolás...2 Másolás és módosítás...3 Másolás és módosítás plusz...4 Tömbelemek módosítása...5 Kválogatás...6 Szétválogat...7 Unó...8 Metszet...9 Összefuttatás...10 Összefuttatás smétlődés nélkül...11 Készítette: Gál Tamás Creatve Commons -Nevezd meg!-ne add el!-így add tovább! 2.5 Magyarország lcenc alatt asználató GT Másolásra épülő algortmusok 1
Mondatszerű leírás: Másolás cklus.. n - 1 b[] = a[] nt[] a = 101, 7, 8, 11, 255, 321; nt n = a.lengt; //a tömb mérete nt[] b = new nt[n]; for(nt =0; <n; ++) b[] = a[]; //A c tömbbe töltött elemek száma: j for (nt =0;<n;++) Console.Wrte(b[]+", "); b[] = a[] Pascal esetén: - A tömbndex rendszernt 1-től ndul - Klépés a FOR cklusból, a a cklusváltozó > mnt a végérték program Masol; const n=20; a tömb elemenek a száma var a, b: array[1..n] of nteger; : nteger; begn randomze; for :=1 to n do a[]:=random(200); for :=1 to n do begn b[]:=a[]; for :=1 to n do wrte(a[], ', ');wrteln(); for :=1 to n do wrte(b[], ', '); end. = 1 n < b[]:=a[] GT Másolásra épülő algortmusok 2
Mondatszerű leírás: cklus.. n - 1 b[] = a[] + 1 Másolás és módosítás nt[] a = 101, 7, 8, 11, 255, 321; nt n = a.lengt; //a tömb mérete nt[] b = new nt[n]; for(nt =0; <n; ++) b[] = a[] + 1; //A c tömbbe töltött elemek száma: j for (nt =0;<n;++) Console.Wrte(b[]+", "); b[] = a[] + 1 Pascal esetén: - A tömbndex rendszernt 1-től ndul - Klépés a FOR cklusból, a a cklusváltozó > mnt a végérték program MasolModost; const n=20; a tömb elemenek a száma var a, b: array[1..n] of nteger; : nteger; begn randomze; for :=1 to n do a[]:=random(200); = 1 for :=1 to n do begn b[]:=a[]+1; for :=1 to n do wrte(a[], ', ');wrteln(); for :=1 to n do wrte(b[], ', '); end. n < b[] := a[] + 1 GT Másolásra épülő algortmusok 3
Mondatszerű leírás: Másolás és módosítás plusz cklus.. n - 1 b[] = a[] + 1 nt[] a = 101, 7, 8, 11, 255, 321; nt n = a.lengt; //a tömb mérete nt[] b = new nt[n]; for(nt =0; <n; ++) b[] = modost(a[]); //A c tömbbe töltött elemek száma: j for (nt =0;<n;++) Console.Wrte(b[]+", "); b[] = modost(a[]) Pascal esetén: - A tömbndex rendszernt 1-től ndul - Klépés a FOR cklusból, a a cklusváltozó > mnt a végérték program MasolModostPlusz; const n=20; a tömb elemenek a száma var a, b: array[1..n] of nteger; : nteger; = 1 functon modost(:nteger): nteger; begn modost := +1; begn randomze; for :=1 to n do a[]:=random(200); for :=1 to n do begn b[]:=a[]+1; for :=1 to n do wrte(a[], ', ');wrteln(); for :=1 to n do wrte(b[], ', '); end. n < b[] = modost(a[]) GT Másolásra épülő algortmusok 4
Mondatszerű leírás: Tömbelemek módosítása cklus.. n - 1 a[] = a[] + 1 nt[] a = 101, 7, 8, 11, 255, 321; nt n = a.lengt; //a tömb mérete for(nt =0; <n; ++) a[] = a[] + 1; //A c tömbbe töltött elemek száma: j for (nt =0;<n;++) Console.Wrte(a[]+", "); a[] = a[] + 1 Pascal esetén: - A tömbndex rendszernt 1-től ndul - Klépés a FOR cklusból, a a cklusváltozó > mnt a végérték program TombModost; const n=20; a tömb elemenek a száma var a: array[1..n] of nteger; : nteger; begn randomze; for :=1 to n do a[]:=random(200); for :=1 to n do wrte(a[], ', ');wrteln(); = 1 for :=1 to n do begn a[]:=a[]+1; for :=1 to n do wrte(a[], ', '); end. n < a[] := a[] + 1 GT Másolásra épülő algortmusok 5
Kválogatás Mondatszerű leírás: j = 0 cklus.. n - 1 //Az 100-nál nagyobb számokat válogatjuk a a[] > 100 b[j] = a[] a vége C alapú és Java nyelv esetén a tömbelemek ndexelése 0-val kezdődk. j = 0 Az n elemű a tömb eleme közül azokat, amelyek megfelelnek a feltételnek b tömbbe másoljuk. nt[] a = 101, 7, 8, 11, 255, 321; nt n = a.lengt; //a tömb mérete nt[] b = new nt[n]; nt j = 0; for(nt =0; <n; ++) f(a[] > 100) b[j] = a[]; j++; //A b tömbbe töltött elemek száma: j for (nt =0;<j;++) Console.Wrte(b[]+", "); Feltétel Pl. 100 < a[] Cklusmag b[j] = a[] Pascal esetén: - A tömbndex rendszernt 1-től ndul - Klépés a FOR cklusból, a a cklusváltozó > mnt a végérték program Kvalogat; const n=20; a tömb elemenek a száma var a, b: array[1..n] of nteger;, j: nteger; begn randomze; for :=1 to n do a[]:=random(200); j:=1; for :=1 to n do begn f a[]>100 ten begn b[j]:=a[]; j:=j+1; for :=1 to n do wrte(a[], ', '); wrteln(); for :=1 to j-1 do wrte(b[], ', '); end. j = 1 = 1 > n Feltétel Pl. 100 < a[] Az n elemű a tömb eleme közül azokat, amelyek megfelelnek a feltételnek b tömbbe másoljuk. Cklusmag b[j] = a[] GT Másolásra épülő algortmusok 6
Szétválogat Mondatszerű leírás: j = 0 k = 0 cklus.. n-1 a a[] > 100 akkor b[j] = a[] különben c[k] = a[] a vége C alapú és Java nyelv esetén a tömbelemek ndexelése 0-val kezdődk. j = 0; k = 0 Az n elemű a tömb eleme közül azokat, amelyek megfelelnek a feltételnek b a többt c tömbbe másoljuk. nt[] a = 109, 7, 3, 5, 344, 2, 6, 101; nt n = a.lengt; nt[] b = new nt[n]; nt[] c = new nt[n]; nt j = 0; nt k = 0; for(nt =0; <n; ++) f(a[] > 100) b[j] = a[]; j++; else c[k] = a[]; k++; b[j] = a[] Feltétel Pl. 100 < a[] Cklusmag c[k] = a[] for (nt =0;<j;++) Console.Wrte(b[]+", "); Console.WrteLne(); for (nt =0;<k;++) Console.Wrte(c[]+", "); program Szetvalogat; const n=20; a tömb elemenek a száma var a, b, c: array[1..n] of nteger;, j, k: nteger; begn randomze; for :=1 to n do a[]:=random(200); j:=1; k:=1; for :=1 to n do begn f a[]>100 ten begn b[j]:=a[]; j:=j+1; end else begn c[k]:=a[]; k:=k+1; for :=1 to n do wrte(a[], ', '); wrteln(); for :=1 to j-1 do wrte(b[], ', '); wrteln(); for :=1 to k-1 do wrte(c[], ', '); end. Pascal nyelv esetén a tömbelemek ndexelése rendszernt 1-el kezdődk. b[j] = a[] j = 1; k = 1 = 1 > n Feltétel Pl. 100 < a[] Az n elemű a tömb eleme közül azokat, amelyek megfelelnek a feltételnek b a többt c tömbbe másoljuk. Cklusmag c[k] = a[] GT Másolásra épülő algortmusok 7
Unó Mondatszerű leírás: n = a tömb mérete m = b tömb mérete // a tömb elemet átmásoljuk c-be cklus.. n-1 c[] = a[] k = n C alapú és Java nyelv esetén a tömbelemek ndexelése 0-val kezdődk. Az n elemű a tömb elemet c tömbbe másoljuk. // végg lépkedünk a b tömbön cklus j = 0.. m-1 // ellenőrzzük, ogy b[j] értéke megtalálató-e már c-ben cklus amíg <n és b[j]<>a[] c[] = a[] // a b[j] értéke még nncs c-ben, akkor betesszük (Ekkor =n) a =n akkor c[k] = b[j] a vége nt[] a = 3, 5, 8, 4; nt[] b = 2, 3, 7, 9; nt n=a.lengt, m=b.lengt; nt o = n + m; nt[] c = new nt[o]; Az m elemű b tömb elemet c tömbbe másoljuk, a értéküket nem tartalmazza az a tömb. Cklusmag Wle cklus k = n j = 0 j < m ; nt, j, k; //Unó tétel for(=0; <n; ++) c[] = a[]; és b[j] <> a[] k=n; for(j=0; j<m; j++) ; wle(<n && b[j]!= a[]) ++; f( == n) c[k] = b[j]; k++; o = k; //A c tömbbe töltött elemek száma for(=0; <o; ++) Console.Wrte(c[]+", "); elágazás c[k] = b[j] = n for (=0;<o;++) System.out.prnt(c[]+", "); GT Másolásra épülő algortmusok 8
Mondatszerű leírás: Metszet n = a tömb mérete m = b tömb mérete k = 0 // végg lépkedünk az a tömbön cklus.. n-1 j = 0 // ellenőrzzük, ogy a[] értéke megtalálató-e b-ben cklus amíg j<m és b[j]<>a[] // a a[] értéke megtalálató b-ben, akkor betesszük a c tömbbe a j<m akkor c[k] = a[] a vége nt[] a = 5, 9, 3, 4, 7 ; nt[] b = 6, 5, 7, 8, 15, 20 ; nt n = a.lengt; //a tömb mérete nt m = b.lengt; //b tömb mérete nt o = n + m; nt[] c = new nt[o]; nt j; nt k = 0; for (nt =0; <n; ++) j = 0; wle(j<m && b[j]!= a[]) j++; f (j<m) c[k] = a[]; k++; o = k; //A c tömbbe töltött elemek száma Az n elemű a tömb elemet c tömbbe másoljuk, a értéküket tartalmazza a b tömb. Cklusmag Wle cklus elágazás c[k] = a[] k = 0 j = 0; j < m és b[j] <> a[] j = m for(nt =0; <o; ++) Console.Wrte(c[]+", "); for (nt =0;<o;++) System.out.prnt(c[]+", "); GT Másolásra épülő algortmusok 9
Mondatszerű leírás: // Az n elemű a és a m elemű b rendezett tömbök elemet a c tömbbe másoljuk a sorrend megtartásával adb=0; bdb=0; cdb=0; // az a és a b tömb eleme közül mndg a következő legksebb értékűt llesztjük a c tömb végére cklus amíg adb<n és bdb<m Ha (a[adb]<b[bdb]) akkor c[cdb] = a[adb]; adb++; egyébként c[cdb] = b[bdb]; bdb++; a vége cdb++; // Ha már csak az a tömbben maradtak értékek, akkor azokat másoljuk a c -be cklus amíg adb<n c[cdb] = a[adb]; adb++; cdb++; // Ha már csak a b tömbben maradtak értékek, akkor azokat másoljuk a c -be cklus amíg bdb<m c[cdb] = b[bdb]; bdb++; cdb++; Összefuttatás Wle cklus elágazás c[cdb] = a[adb] adb = adb + 1 adb = 0 bdb = 0 cdb = 0 adb < n és bdb < m a[adb] < b[bdb] cdb = cdb + 1 Összefuttatás c[cdb] = b[bdb] bdb = bdb + 1 nt[] a = 1, 7, 8, 11; nt[] b = 2, 5, 8, 9; nt n = a.lengt; //a tömb mérete nt m = b.lengt; //b tömb mérete nt o = n + m; nt[] c = new nt[o]; nt adb=0; nt bdb=0; nt cdb=0; wle (adb<n && bdb<m) f (a[adb]<b[bdb]) c[cdb] = a[adb]; adb++; else c[cdb] = b[bdb]; bdb++; cdb++; wle (adb<n) c[cdb] = a[adb]; adb++; cdb++; wle (bdb<m) c[cdb] = b[bdb]; bdb++; cdb++; // Az eredmény megjelenítése: for (nt =0;<o;++) Console.Wrte(c[]+", "); Wle cklus adb < n c[cdb] = a[adb] adb = adb + 1 cdb = cdb + 1 Wle cklus bdb < m c[cdb] = b[bdb] bdb = bdb + 1 cdb = cdb + 1 GT Másolásra épülő algortmusok 10
Összefuttatás smétlődés nélkül Az előző összefuttatásnál, a egy érték mndkét tömbben szerepel akkor kétszer lesz bellesztve a c tömbbe. Ennek elkerülésére a következő elemek értékének egyenlőségét s vzsgáln kell. Ha azonosak, akkor mndkét tömbmutatót növeljük 1-el. wle (adb<a.lengt && bdb<b.lengt) f (a[adb]==b[bdb]) c[cdb] = a[adb]; adb++; bdb++; else f (a[adb]<b[bdb]) c[cdb] = a[adb]; adb++; else c[cdb] = b[bdb]; bdb++; cdb++; GT Másolásra épülő algortmusok 11
GT Másolásra épülő algortmusok 12