Archive for Oktober, 2012


Program Double Linked List pada C++

Double Linked List adalah :

Sebuah struktur data yang memiliki 2 pointer penunjuk, sehingga bisa saling terhubung antara elemen satu dengan elemen lainnya.

dengan menggunakan struktur data seperti berikut :

  • data
  • pointer penunjuk elemen setelahnya (next)
  • pointer penunjuk elemen sebelumnya (prev)

Linked List biasa disebut simpul atau node.

dalam program ini diperlukan beberapa library yaitu :

#include<stdio.h>
#include<stdlib.h>

untuk merepresentasikannya bisa seperti ini

typedef struct simpul node;
struct simpul
{
	int data;
	node *prev;
	node *next;
};

lalu membuat variabel global untuk head, tail, dan baru

node *head = NULL, *tail = NULL, *baru;

lalu buat fungsi untuk alokasi memori, dan disini diperlukan stdlib.h

void allocate_node (int x)
{
	baru = (node *) malloc (sizeof(node));
	if(baru==NULL)
	{
		printf("Alokasi Gagal\n");
		exit(1);
	}
	else
	{
		baru->data=x;
		baru->next=NULL;
		baru->prev=NULL;
	}
}

setelah simpul baru dialokasikan, maka simpul baru bisa dibuat :

	head = tail = baru;

ada beberapa fungsi yang diperlukan untuk menambahkan (menyisipkan) simpul baru, yaitu :

  • sisip awal
  • sisip akhir
  • sisip sebelum
  • sisip sesudah

dan untuk menghapus simpul, diperlukan beberapa fungsi, yaitu :

  • hapus awal
  • hapus akhir
  • hapus simpul

Untuk menyisipkan fungsi-fungsinya adalah :

  • fungsi buat list
void buat_list()
{
	printf("Data Masih Kosong, List akan dibuat dengan data tersebut\n");
	system("PAUSE");
	head = tail = baru;
}
  • fungsi sisip awal
void sisip_awal()
{
	if(head==NULL && tail==NULL)
		buat_list();
	else
	{
		baru->next=head;
		head->prev=baru;
		head=baru;
	}
}
  • fungsi sisip akhir
void sisip_akhir()
{
	if(head==NULL && tail==NULL)
		buat_list();
	else
	{
		baru->prev=tail;
		tail->next=baru;
		tail=baru;
	}

}
  • fungsi sisip sebelum
void sisip_sebelum(int s)
{
	node *before=head;
	int cek=0;
	if(before->next==NULL)
		cek=1;
	else
	{
		while(before->next->data!=s)
		{
			before=before->next;
			if(before->next==NULL)
			{
				cek = 1;
				break;
			}
		}
	}
	if(cek==0)
	{
		baru->prev = before;
		baru->next = before->next;
		before->next->prev = baru;
		before->next = baru;
	}
	else
		gatot();
}
  • fungsi sisip sesudah
void sisip_sesudah(int s)
{
	node *after=tail;
	int cek=0;
	if(after->prev == NULL)
		cek=1;
	else
	{
		while(after->prev->data!=s)
		{
			after=after->prev;
			if(after->prev==NULL)
			{
				cek = 1;
				break;
			}
		}
	}
	if(cek==0)
	{
		baru->next = after;
		baru->prev = after->next;
		after->prev->next = baru;
		after->prev = baru;
	}
	else
		gatot();
}

Lalu untuk menghapus diperlukan beberapa fungsi, yaitu :

  • hapus simpul
void free_node(node *p)
{
	free(p);
	p=NULL;
	printf("DATA TERHAPUS\n");
}
  • hapus satu
void hapus_satu()
{
	node *hapus = head;
	head = NULL;
	tail = NULL;
	free_node(hapus);
}
  • hapus awal
void hapus_awal()
{
	node *hapus = head;
	head->next->prev = NULL;
	head =  head->next;
	free_node(hapus);
}
  • hapus akhir
void hapus_akhir()
{
	node *hapus = tail;
	tail->prev->next = NULL;
	tail =  tail->prev;
	free_node(hapus);
}
  • hapus simpul tertentu
void hapus_tengah(int s)
{
	node *hapus=head;
	int cek=0;
	while(hapus->data!=s)
	{
		if(hapus->next==NULL)
		{
			cek=1;
			break;
		}
		hapus = hapus->next;
	}
	if(cek==0)
	{
		hapus->prev->next = hapus->next;
		hapus->next->prev = hapus->prev;
		free_node(hapus);
	}
	else
		gadel();
}

untuk menampilkan pesan diperlukan fungsi tambahan :

void gatot()
{
	printf("SIMPUL BARU TIDAK DAPAT DISISIPKAN\n");
	system("PAUSE");
}

void gadel()
{
	printf("TIDAK ADA DATA YANG DIHAPUS\n");
	system("PAUSE");
}

Dan juga untuk menampilkan data yang berada pada list bisa di representasikan seperti ini :

void tampil()
{
	node *p= head;
	printf("\nData Simpul ==>  ");
	while(p!=NULL)
	{
		printf("%d ", p->data);
		p=p->next;
	}
	printf("\n\n");
}

Dan pada main bisa menggunakan code seperti ini :

void main()
{
	head=baru;
	int pilih, data, s;
	char lagi='y';
	while(lagi=='y')
	{
		system("CLS");
		awal();
		tampil();
		printf("Menu Pilihan : \n");
		printf("1. Sisip Awal\n");
		printf("2. Sisip Akhir\n");
		printf("3. Sisip Sebelum Simpul\n");
		printf("4. Sisip Sesudah Simpul\n");
		printf("5. Hapus Awal\n");
		printf("6. Hapus Akhir\n");
		printf("7. Hapus Tengah\n");
		printf("\nPilih No            : ");
		scanf("%d", &pilih);
		switch(pilih)
		{
		case 1 :
			printf("Masukkan data       : ");
			scanf("%d", &data);
			allocate_node(data);
			sisip_awal();
			break;
		case 2 :
			printf("Masukkan data       : ");
			scanf("%d", &data);
			allocate_node(data);
			sisip_akhir();
			break;
		case 3 :
			printf("Masukkan data       : ");
			scanf("%d", &data);
			allocate_node(data);
			if(head==NULL && tail==NULL)
				buat_list();
			else
			{
				printf("Dimasukkan sebelum  : ");
				scanf("%d",&s);
				if(s==head->data)
					sisip_awal();
				else
					sisip_sebelum(s);
			}
			break;
		case 4 :
			printf("Masukkan data       : ");
			scanf("%d", &data);
			allocate_node(data);
			if(head==NULL && tail==NULL)
				buat_list();
			else
			{
				printf("Dimasukkan sesudah  : ");
				scanf("%d",&s);
				if(s==tail->data)
					sisip_akhir();
				else
					sisip_sesudah(s);
			}
			break;
		case 5 :
			if(head == NULL && tail == NULL)
				gadel();
			else if(head == tail)
				hapus_satu();
			else
				hapus_awal();
			break;
		case 6 :
			if(head == NULL && tail == NULL)
				gadel();
			else if(head == tail)
				hapus_satu();
			else
				hapus_akhir();
			break;
		case 7 :
			printf("Data yang dihapus   : ");
			scanf("%d", &data);
			if(head == NULL && tail == NULL)
				gadel();
			else if(data == head->data && data == tail->data && head == tail)
				hapus_satu();
			else if(data == head->data)
				hapus_awal();
			else if(data == tail->data)
				hapus_akhir();
			else
				hapus_tengah(data);
			break;
		}
		fflush(stdin);
		printf("Lagi (y/t) ? ");
		scanf("%c", &lagi);
	}
}

system(“PAUSE”) digunakan untuk menghentikan program sejenak.
system(“CLS”) digunakan untuk menghapus layar.
kedua command tersebut membutuhkan <stdlib.h> sama hal nya dengan penggunaan alokasi memori yang menggunakan malloc() , sizeof() , dan free() .

untuk download programnya bisa di download DISINI

Iklan

Jika anda menggunakan speedy dan anda menggunakan modem TD 8817, anda tidak memiliki kabel rj45, anda bisa menggunakan opsi menggunakan USB sebagai gantinya.

jadi jangan bingung, cukup install drivernya saja. anda bisa download drivernya pada link yang saya sediakan nanti.

Driver ini hanya untuk Windows XP

Silahkan Download DISINI

Pengertian shift pada kasus ini yaitu, menjadikan sebuah bilangan desimal inputan menjadi bilangan biner, lalu setelah menjadi biner, akan dilakukan dequeue lalu di enqueue sebanyak shift.

contoh :

bilangan desimal : 25

di shift : 3

maka hasilnya adalah : 7

Kenapa kok bisa 7 ??????

nah, caranya seperti ini……!!!

dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001

setelah dikonversikan, maka program di shift sebanyak 3x

11001 —> shift pertama, angka 1 yang terakhir di dequeue lalu di enqueue sehingga menjadi 11100

11100 —> shift kedua, angka 0 yang terakhir di dequeue lalu di enqueue sehingga menjadi 01110

01110 —> shift ketiga, angka 0 yang terakhir di dequeue lalu di enqueue sehingga menjadi 00111

setelah selesai menjadi bilangan biner 00111 akan dikonversikan menjadi desimal

1   —>  20 x 1    = 1

1   —>  21 x 1    = 2

1   —>  22 x 1    = 4

0   —>  23 x 0  = 0

0   —>  24 x 0  = 0

———————–  +

                         7

Untuk Skrip Dan Juga Contoh Programnya bisa di download DISINI

Membuat Program POLINOMIAL…

dengan memanfaatkan penggunaan array, polinomial bisa dibuat dengan code seperti dibawah ini :

 

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void awal()
{
puts(“======================================”);
puts(” PROGRAM POLINOMIAL “);
puts(“======================================\n”);
puts(“NRP : 7411030828”);
puts(“Nama : M.Faishal Imam Choiri\n”);
puts(“Diketahui : 1. P1 = 6x^8 + 8x^7 + 5x^5 + x^3 + 15″);
puts(” 2. P2 = 3x^9 + 4x^7 + 3x^4 + 2x^3 + 2x^2 + 10″);
puts(” 3. P3 = x^2 + 5\n”);
puts(“Operasi : 1. Penjumlahan”);
puts(” 2. Pengurangan”);
puts(” 3. Perkalian”);
puts(” 4. Turunan\n”);
}

float tambah (int P1[], int P2[], int x)
{
float hasil=0;
for(int i=0; i<10; i++)
hasil += (P1[i]+P2[i]) * (float) pow(x,i);
return hasil;
}

float kurang (int P1[], int P2[], int x)
{
float hasil=0;
for(int i=0; i<10; i++)
hasil += (P1[i]-P2[i]) * (float) pow(x,i);
return hasil;
}

float kali(int P1[], int P2[], int x)
{
float hasil=0;
for(int i=0; i<10; i++)
{
for(int j=0; j<10; j++)
hasil += P1[i] * P2[j] * (float) pow(x,(i+j));
}
return hasil;
}

float turun(int P1[], int x)
{
float hasil=0;
for(int i=0; i<10; i++)
hasil = hasil + P1[i] * i * (float) pow(x,i-1);
return hasil;
}
void pilihan()
{
int operasi, pil1, pil2, x;
float hasil, hasil2;
int P1[10] = {15,0,0,1,0,5,0,8,6,0};
int P2[10] = {10,0,2,2,3,0,0,4,0,3};
int P3[10] = {5,0,1,0,0,0,0,0,0,0};

do{
printf(“Masukkan Jenis Operasi : “);
scanf(“%d”, &operasi);
} while(operasi>4 || operasi<1);

do{
printf(“Pilih Polinomial Pertama : “);
scanf(“%d”, &pil1);
} while(pil1>3 || pil1<1);

do{
printf(“Pilih Polinomial Kedua : “);
scanf(“%d”, &pil2);
} while(pil2>3 || pil2<1);

printf(“Masukkan Nilai x : “);
scanf(“%d”, &x);

if(operasi==1) /* OPERASI PENJUMLAHAN */
{
switch(pil1)
{
case 1 :
switch(pil2)
{
case 1 :
hasil = tambah(P1,P1,x);
break;
case 2 :
hasil = tambah(P1,P2,x);
break;
case 3 :
hasil = tambah(P1,P3,x);
break;
}
break;
case 2 :
switch(pil2)
{
case 1 :
hasil = tambah(P2,P1,x);
break;
case 2 :
hasil = tambah(P2,P2,x);
break;
case 3 :
hasil = tambah(P2,P3,x);
break;
}
break;
case 3 :
switch(pil2)
{
case 1 :
hasil = tambah(P3,P1,x);
break;
case 2 :
hasil = tambah(P3,P2,x);
break;
case 3 :
hasil = tambah(P3,P3,x);
break;
}
break;
}
}
else if(operasi==2) /* OPERASI PENGURANGAN */
{
switch(pil1)
{
case 1 :
switch(pil2)
{
case 1 :
hasil = kurang(P1,P1,x);
break;
case 2 :
hasil = kurang(P1,P2,x);
break;
case 3 :
hasil = kurang(P1,P3,x);
break;
}
break;
case 2 :
switch(pil2)
{
case 1 :
hasil = kurang(P2,P1,x);
break;
case 2 :
hasil = kurang(P2,P2,x);
break;
case 3 :
hasil = kurang(P2,P3,x);
break;
}
break;
case 3 :
switch(pil2)
{
case 1 :
hasil = kurang(P3,P1,x);
break;
case 2 :
hasil = kurang(P3,P2,x);
break;
case 3 :
hasil = kurang(P3,P3,x);
break;
}
break;
}
}
else if(operasi==3) /* OPERASI PERKALIAN */
{
switch(pil1)
{
case 1 :
switch(pil2)
{
case 1 :
hasil = kali(P1,P1,x);
break;
case 2 :
hasil = kali(P1,P2,x);
break;
case 3 :
hasil = kali(P1,P3,x);
break;
}
break;
case 2 :
switch(pil2)
{
case 1 :
hasil = kali(P2,P1,x);
break;
case 2 :
hasil = kali(P2,P2,x);
break;
case 3 :
hasil = kali(P2,P3,x);
break;
}
break;
case 3 :
switch(pil2)
{
case 1 :
hasil = kali(P3,P1,x);
break;
case 2 :
hasil = kali(P3,P2,x);
break;
case 3 :
hasil = kali(P3,P3,x);
break;
}
break;
}
}

else /* OPERASI PENURUNAN */
{
switch(pil1)
{
case 1 :
hasil = turun(P1,x);
break;
case 2 :
hasil = turun(P2,x);
break;
case 3 :
hasil = turun(P3,x);
break;
}
switch(pil2)
{
case 1 :
hasil2 = turun(P1,x);
break;
case 2 :
hasil2 = turun(P2,x);
break;
case 3 :
hasil2 = turun(P3,x);
break;
}
}

if(operasi<4)
printf(“Hasil = %8.2f\n\n”, hasil);
else
{
printf(“Hasil Pertama = %8.2f\n”, hasil);
printf(“Hasil Kedua = %8.2f\n\n”, hasil2);
}
}

void main()
{
char lagi=’y’;

do{
system(“CLS”);
awal();
pilihan();
printf(“Apakah Mengulang (y/n) ? “);
fflush(stdin);
scanf(“%c”, &lagi);
}
while(lagi==’y’ || lagi==’Y’);
}

untuk link download Programnya Disini