Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Welcome to Forum Sains Indonesia. Please login or sign up.

April 24, 2024, 03:33:17 AM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 105
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 87
Total: 87

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

Program 'tukar dengan 2 variabel'

Dimulai oleh Alan adhityo, September 30, 2010, 07:30:20 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Alan adhityo

gw pingin sharing aja ni .  ;D
biasanya program tukar pakai 3 variabel kan, nah yang ini pakai 2 variabel.

this is it, with pascal,, and cekidot..  ;D  ;D  ;D

program tukar

uses crt;

var
  x,y: integer;

begin
clrscr;
write('masukkan x : '); readln(x);
write('masukkan y : '); readln(y);
writeln('x = ',x);
writeln('y = ',y);

writeln('hasil:');

    x:=x+y;
    y:=x-y;
    x:=x-y;

writeln('x = ',x);
writeln('y = ',y);
readln;
end.




adisae

Lumayan kreatip.. ;)

tapi..gimana y dibanding 3 variabel..?
mungkin dari segi kecepatan?

n ini tambahan aja s..
untuk operasi penjumlahan dan pengurangan (bilangan bulat/integer) lebih cepat gunakan prosedure Inc dan Dec..

Alan adhityo

bisa lebih efisien sih . ^^

program di atas khusus untuk tipe data integer dan real . :)

ok, terima kasih, ;D

oktario

maaf kk saya mau tanya
tukar dengan 2 variabel gunanya buat apa?
tolong jelaskan scra org awam soalnya saya tidak tau apa?
dan saya ingin tau hal ini krena rasanya menarik....
;D ;D ;D ;D ;D ;D ;D ;D ;D

Henz_Azthral

Kutip dari: Alan adhityo pada September 30, 2010, 07:30:20 PM
    x:=x+y;
    y:=x-y;
    x:=x-y;
menurut saya tidak semua bilangan dalam tipe integer bisa tukar 2 variabel... Misalnya X=20000, Y=25000... Ntar Kalo X=X+Y error dong... Kan batas max integer cuma 32767 (kalo gak salah)...
Maaf kalo salah...hehe ;D

Farabi

Untuk mesin 16-bit bilangan unsigned integer bisa sampai 65536, sedangkan untuk signed integer memang cuma 32767.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

adisae

Kutip dari: Henz_Azthral pada Oktober 05, 2010, 06:47:34 PM
Misalnya X=20000, Y=25000... Ntar Kalo X=X+Y error dong... Kan batas max integer cuma 32767 (kalo gak salah)...
Kutip dari: Farabi pada Oktober 07, 2010, 07:51:11 AM
Untuk mesin 16-bit bilangan unsigned integer bisa sampai 65536, sedangkan untuk signed integer memang cuma 32767.

tergantung compiler directive..aku lupa perintah-nya, tapi yang jelas secara default compiler pascal (delphi juga) tidak akan mempermasalahkan operasi tersebut..
dan ketika input lebih dari rangenya pun tidak apa2, cuma nanti nilai variabelnya tercatat beda..
yang dipermasalahkan yaitu ketika kita mencoba memasukkan nilai diluar range variabel dari kode, misal menulis kode X:=50000, hasilnya error ketika dicompile..

kemudian apa yang terjadi pada operasi diatas?
X integer (sign) atau pada delphi smallint

X=20000 dan Y=25000
X=X+Y
X=20000+25000
harusnya X=45000 kan
tapi karena bit paling tinggi dianggap sebagai sign/tanda - (negatif), dalam kasus ini integer pada pascal  16 bit maka bit terendah adalah bit ke 0 sedang tertinggi bit ke 15..
jadinya X yang tersimpan??
X=45000-216
X=45000-65536
X=-20536

terus pertanyaannya apakah kode diatas masih valid?
jawabannya masih, untuk kasus integer dan nilai input X dan Y valid

Y=X-Y;
Y=-20536-25000
Y=-45536
melampaui batas -2^16 = -32768
jadi yang tercatat
Y=2^16-45536
Y=65536-45536
Y=20000

X=X-Y
X=-20536-20000
X=-40536
melampaui batas -2^16 = -32768
jadi yang tercatat
X=2^16-40536
X=65536-40536
X=25000

lha itu untuk operasi integer yang melampaui range

untuk kasus tipe data real/float maka ada masalah yang akan timbul, yaitu presisi tipe data real/float yang terbatas
coba aja deh tipe data diganti real terus masukkan X=1.11e10 dan Y=2.22e-10 pasti pertukaran nilai X Y tidak valid.. ;)

Henz_Azthral

Wow...Rupanya bisa kayak gitu...

Eh, Numpang tanya...
(Nih di VB6, tapi kayaknya mirip2 pascal)

Dim X,Y as integer

     dengan

Dim X as integer
Dim Y as integer

     Sama???

Soalnya pas gw coba bwt code

X=20000
Y=25000            {Gak Error Kalo pake Dim X,Y as integer, tapi kalo penulisannya
X=X+Y...              dipisah jadi Error}

adisae

kayaknya pascal ma VB jauh banget deh.. ;D
meski sama2 bahasa tingkat tinggi, VB tu terlalu mempermudah penulisan kode..
sehingga kurang cocok untuk pembelajaran

aku g punya VB6 s, cuma kayaknya sama ama VBA nya MS Access..


Dim X,Y as integer


beda dengan


Dim X as integer
Dim Y as integer


Dim X, Y as integer bisa dinyatakan seperti ini

Dim X
Dim Y as integer


jadi X tidak bertipe integer
tipenya variant (mengikuti data yang dimasukkan kedalamnya)

maka pada kode X=X+Y
nilai X akan 45000 tidak terpotong (x jadi dianggap bertipe long yg range nya -231 s/d 231-1)

O iya di VB operasi melebihi range, secara default itu dianggap tidak valid dan muncul pesan error..
tapi tidak tau juga apakah bisa dibuat agar tidak error..tak cari2 ga ketemu..

Farabi

Kalo pake kompiler 16-bit untuk angka melebihi 65535 harus pakai long, atau long int.
Tapi sebentar lagi mode 16-bit di komputer sudah jadi bangkai, jadi kompiler semacam pascal dan lain2x tidak akan terpakai lagi.
Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

adisae

Y memang begitu..
sekarang pun dan banyak CPU 64 bit kan..cuma memang belum menggeser aplikasi 32 bit..

yang aku belum tau nih pada pemrograman 64 bit istilah untuk integer 64 bit apa yah..
di delphi 7 s yang berbasis 32 bit dah ada n disebut int64
cuma secara default integer di sana dianggap 32 bit beda dengan di pascal yang dianggap 16 bit
n pada delphi yg 64 bit mungkin integer akan dianggap 64 bit, sementara untuk menyebut integer 32 bit ada reserved word lain..(masih butuh klarifikasi)

Farabi

Raffaaaaael, raffaaaaael, fiiii dunya la tadzikro. Rafaael. Fi dunya latadzikro bil hikmah, wa bil qiyad

Maa lahi bi robbi. Taaqi ilaa robbi. La taaqwa, in anfusakum minallaaahi.

adisae

secara istilah OK s itu mang berarti 64 bit..

oh ak dah dapet ni..

copas aja..


Byte (1 Byte, Unsigned)
UInt8 (alias for Byte)
ShortInt (1 Byte, Signed)
Int8 (alias for ShortInt)
Word (2 Bytes, Unsigned)
UInt16 (alias for Word)
SmallInt (2 Bytes, Signed)
Int16 (alias for SmallInt)
LongWord (4 Bytes, Unsigned)
UInt32 (alias for LongWord)
LongInt (4 Bytes, Signed)
Int32 (alias for LongInt)
UInt64 (8 Bytes, Unsigned)
Int64 (8 Bytes, Signed)
NativeUInt (Unsigned, depends on CPU register size)
NativeInt (Signed, depends on CPU register size)
Cardinal (Unsigned, depends on OS definition of Integer)
Integer (Signed, depends on OS definition of Integer)

hha ribet banget y..padahal komputer (PC) ga akan berhenti di 64 bit..mungkin beberapa tahun lagi muncul 128 bit, disusul 256 bit dst..

utusan langit

ah iya, di C kalau kepanjangan angkanya bisa kacau, kalau nggak pake temporary

adisae

mmm maksudna gimana y ??? bisa diperjelas?