Kalau ini adalah mencari Faktor Persekutuan Terbesar atau biasa disebut FPB.
Begini algoritmanya dgn actionscript 2.0 :
function CariFPB(a, b) {
var no = 0;
var FPB = 1;
var a1, b1;
var a2, b2;
var temp = 0;
a1 = a;
b1 = b;
do {
a2 = Math.max(a1, b1)-Math.min(a1, b1);
b2 = Math.min(a1, b1);
a1 = a2;
b1 = b2;
var f = a2 == b2;
if (f) {
FPB = a1;
}
} while (!f);
//trace("FPB: "+FPB)
return FPB;
}
Misal mencari FPB dari bilangan 4 dan 6.
maka:
var hasil = CariFPB(4, 6);
trace(hasil)
--> 2
Algoritma Kelipatan dari 2 buah bilangan
Ketemu tugas kantor yang berhubungan dengan mencari Kelipatan dari 2 bilangan.
Dengan ketentuan, Kelipatannya harus kurang dari 30.
Ini dia algoritmanya dengan actionscript 2.0
function CariKelipatan(a, b) {
var no = 0;
var ArrKelipatan = new Array();
var temp = 0;
var batas = 30;
do {
no++;
temp = no*a*b;
f = temp>batas;
if (!f) {
ArrKelipatan[no-1] = temp;
}
} while (!f);
return (ArrKelipatan);
}
Misalkan 2 buah bilangan yang di cari kelipatannya adalah: 2 dan 3
maka:
var hasil = CariKelipatan(2, 3)
trace (hasil)
--> 6,12,18,24
Dengan ketentuan, Kelipatannya harus kurang dari 30.
Ini dia algoritmanya dengan actionscript 2.0
function CariKelipatan(a, b) {
var no = 0;
var ArrKelipatan = new Array();
var temp = 0;
var batas = 30;
do {
no++;
temp = no*a*b;
f = temp>batas;
if (!f) {
ArrKelipatan[no-1] = temp;
}
} while (!f);
return (ArrKelipatan);
}
Misalkan 2 buah bilangan yang di cari kelipatannya adalah: 2 dan 3
maka:
var hasil = CariKelipatan(2, 3)
trace (hasil)
--> 6,12,18,24
Gerak Pertikel Bertabrakan - sumbu x - ActionScript 2.0 Flash
Saya ingin mencoba membuat program partikel bertabrakan
kira-kira seperti ini:
Huruf-huruf dianggap objek (movieclip)
Seperti ini programnya:
// fungsi gerak partikel
function gerak() {
this._x += this.dx;
this.xA = this._x-this.arah*this._width/2;
this.xB = this._x+this.arah*this._width/2;
}
// definisi awal dan mencari banyaknya partikel yang ada di layar (banyaknya movieclip "par")
nmax = 0;
do {
nmax++;
mc = this["par"+nmax];
} while (mc<>undefined);
// besar perpindahan dan menentukan arah
for (var i = 1; i<=nmax; i++) {
this["par"+i].besardx = Math.ceil(Math.random()*3)
this["par"+i].arah = -1+2*Math.floor(Math.random()*2)
}
// mengaktifkan gerak tiap partikel
for (var i = 1; i<=nmax; i++) {
this["par"+i].dx = this["par"+i].arah*this["par"+i].besardx;
this["par"+i].onEnterFrame = gerak;
}
// gerakan tiap partikel diaktifkan dengan onEnterFrame
this.onEnterFrame = function() {
for (var i = 1; i<=nmax; i++) {
for (var j = 1; j<=nmax; j++) {
mmc1 = this["par"+i];
mmc2 = this["par"+j];
if (i<>j) {
if (mmc1.xB>mmc2.xB && mmc1.xA<mmc2.xA && mmc1.arah<>mmc2.arah) {
SwapPropertiesA(mmc1,mmc2);
}
if (mmc1.xB>mmc2.xA && mmc1.xA<mmc2.xA && mmc1.arah == mmc2.arah && mmc1.besardx>mmc2.besardx) {
SwapPropertiesB(mmc1,mmc2);
}
if (mmc1.xB<mmc2.xA && mmc1.xA>mmc2.xA && mmc1.arah == mmc2.arah && mmc1.besardx>mmc2.besardx) {
SwapPropertiesB(mmc1,mmc2);
}
}
}
}
CekDinding()
};
function CekDinding() {
for (var i = 1; i<=nmax; i++) {
mcc1 = this["par"+i];
if(mcc1.xB>640){
DindingBx(mcc1)
}else if(mcc1.xB<0){
DindingAx(mcc1)
}
}
}
// dinding kiri
function DindingAx(mc1) {
nx = 0-mc1.xB;
mc1.arah = -mc1.arah;
mc1._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
}
// dinding kanan
function DindingBx(mc1) {
nx = mc1.xB-Stage.width; // 640
mc1.arah = -mc1.arah;
mc1._x -= nx;
mc1.dx = mc1.arah*mc1.besardx;
}
// tumbukan tiap objek tipe 1
function SwapPropertiesA(mc1, mc2) {
// berlawanan arah
nx = mc1.xB-mc2.xB;
swapdx = mc1.besardx;
mc1.besardx = mc2.besardx;
mc2.besardx = swapdx;
swaparah = mc1.arah;
mc1.arah = mc2.arah;
mc2.arah = swaparah;
mc1._x -= nx;
mc2._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
mc2.dx = mc2.arah*mc2.besardx;
}
// tumbukan tiap objek tipe 2
function SwapPropertiesB(mc1, mc2) {
// satu arah yang sama
nx = mc1.xB-mc2.xA;
swapdx = mc1.besardx;
mc1.besardx = mc2.besardx;
mc2.besardx = swapdx;
mc1._x -= nx;
mc2._x += nx;
mc1.dx = mc1.arah*mc1.besardx;
mc2.dx = mc2.arah*mc2.besardx;
}
Langganan:
Komentar (Atom)