๐ Daftar Isi
Contoh 1
Buatlah program yang bisa mengkonversi bilangan bulat negatif.
Source code
#include<stdio.h>
#include<stdlib.h>
typedef struct
{
int item[50];
int count;
} stack;
//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
s->count = 0;
}
//jika tumpukan kosong maka nilai fungsinya 1 (true),
//jika tidak 0(false)
int empty(stack *s)
{
return (s->count == 0);
}
//jika tumpukan sudah full(dlm deklarasi stack, field item //adalah array dg jumlah elemen sebanyak 50)maka nilai
//nilai fungsinya 1, jika tidak 0
int full(stack *s)
{
return (s->count == 49);
}
void push(int x, stack *s)
{
if(full(s))
printf("Bilangan terlalu besar !\n");
else {
s->item[s->count]=x; ++(s->count);
}
}
int pop(stack *s)
{
if(empty(s)) return (0);
else {
--(s->count);
return (s->item[s->count]);
}
}
void tambahan(stack *s)
{
int i,k;
k=16-(s->count);
for (i=0;i<k;i++)
{
printf("1");
}
}
void main(){
int i, n, l;
int input;
stack tumpukan;
printf("Program konversi Desimal ke Biner\n\n");
initializestack(&tumpukan);
printf("Masukkan bilangan desimal = ");
scanf("%d", &input);
if (input>=0)
{
for(n=input;n>0;n=n/2){
l=n%2;
push(l,&tumpukan);
}
}
else
{
for(n=input;n<0;n=n/2)
{
l=n%2;
if(l<0)
{
push(0,&tumpukan);
}
else
{
push(1,&tumpukan);
}
}
for(n=0;n<tumpukan.count;n++)
{
if(tumpukan.item[n]>0)
{
tumpukan.item[n]=0;
}
else
{
tumpukan.item[n]=1;
n=tumpukan.count;
}
}
if(tumpukan.item[tumpukan.count-1]<1)
{
push(1,&tumpukan);
}
}
printf("\nHasil konversi ke biner = ");
tambahan(&tumpukan);
if (input==0) printf("0");
else
for(i=tumpukan.count;i>0;i--){
printf("%d", pop(&tumpukan));
}
}
Output
Contoh 2
Buatlah sebuah fungsi konversi, agar fungsi utama/ main dalam program di Contoh 1 menjadi lebih sederhana.
Source code
#include <stdio.h>
#include <string.h>
typedef struct
{
int item[50];
int jml_item;
}stack;
//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
s->jml_item = 0;
}
//jika tumpukan kosong maka nilai fungsinya 1 (TRUE)
//jika tidak 0 (FALSE)
//memeriksa kosong atau tidak
int isEmpty(stack *s)
{
return (s->jml_item == 0);
}
//jika tumpukan sudah full (dalam deklarasi stack, field item
//adalah array dengan jumlah elemen sebanyak 50) maka nilai
//fungsinya 1, jika tidak 0
int isFull(stack *s)
{
return (s->jml_item == 50);
}
void push(int x, stack *s)
{
if(isFull(s))
printf("Bilangan terlalu besar !\n");
else
{
s->item[s->jml_item]=x; ++(s->jml_item);
}
}
int pop(stack *s)
{
if(isEmpty(s)) return (0);
else
{
--(s->jml_item);
return (s->item[s->jml_item]);
}
}
int destobin(int *nilai)
{
stack tumpukan;
int digit,sisa_bagi;
initializestack(&tumpukan);
//printf("top saat diinitialize %d \d", tumpukan.jml_item);
if (nilai == 0) printf("Hasil konversi ke biner = 0");
else
{
int n;
for (n=nilai;n>0;n=n/2)
{
sisa_bagi=n%2;
push(sisa_bagi,&tumpukan);
}
digit=tumpukan.jml_item-1;
int i;
printf("Hasil konversi ke biner = ");
tambahan(&tumpukan);
for(i=tumpukan.jml_item; i>0; i--)
{
printf("%d", pop(&tumpukan));
if((i%4)==(digit%4)) printf(" ");
}
}
}
void tambahan(stack *s)
{
int i,k;
k=16-(s->jml_item);
for (i=0;i<k;i++)
{
printf("1");
}
}
int main()
{
stack *tumpukan;
int bil_desimal, sisa_bagi;
printf("Program koversi Desimal ke Biner\n\n");
printf("Masukkan bilangan desimal = "); scanf("%d", &bil_desimal);
destobin(bil_desimal);
}
Output
Contoh 3
Buat program yang dapat mengkonversi bilangan desimal menjadi bilangan oktal
Source Code
#include <stdio.h>
#include <string.h>
typedef struct
{
int item[50];
int jml_item;
}stack;
//menyiapkan tumpukan kosong
void initializestack(stack *s)
{
s->jml_item = 0;
}
//jika tumpukan kosong maka nilai fungsinya 1 (TRUE)
//jika tidak 0 (FALSE)
//memeriksa kosong atau tidak
int isEmpty(stack *s)
{
return (s->jml_item == 0);
}
//jika tumpukan sudah full (dalam deklarasi stack, field item
//adalah array dengan jumlah elemen sebanyak 50) maka nilai
//fungsinya 1, jika tidak 0
int isFull(stack *s)
{
return (s->jml_item == 50);
}
void push(int x, stack *s)
{
if(isFull(s))
printf("Bilangan terlalu besar !\n");
else
{
s->item[s->jml_item]=x; ++(s->jml_item);
}
}
int pop(stack *s)
{
if(isEmpty(s)) return (0);
else
{
--(s->jml_item);
return (s->item[s->jml_item]);
}
}
void tambahan(stack *s)
{
int i,k;
k=16-(s->jml_item);
for (i=0;i<k;i++)
{
printf("1");
}
}
int destobin(int *nilai)
{
stack tumpukan;
int digit,sisa_bagi;
initializestack(&tumpukan);
//printf("top saat diinitialize %d \d", tumpukan.jml_item);
if (nilai == 0) printf("Hasil konversi ke biner = 0");
else
{
int n;
for (n=nilai;n>0;n=n/2)
{
sisa_bagi=n%2;
push(sisa_bagi,&tumpukan);
}
digit=tumpukan.jml_item-1;
int i;
printf("Hasil konversi ke biner = ");
tambahan(&tumpukan);
for(i=tumpukan.jml_item; i>0; i--)
{
printf("%d", pop(&tumpukan));
if((i%4)==(digit%4)) printf(" ");
}
}
}
int destookt(int *nilai)
{
stack tumpukan;
int sisa_bagi;
initializestack(&tumpukan);
//printf("top saat diinitialize %d \d", tumpukan.jml_item);
if (nilai == 0) printf("\nHasil konversi ke oktal = 0");
else
{
int n;
for (n=nilai;n>0;n=n/8)
{
sisa_bagi=n%8;
push(sisa_bagi,&tumpukan);
}
int i;
printf("\nHasil konversi ke oktal = ");
for(i=tumpukan.jml_item; i>0; i--)
{
printf("%d", pop(&tumpukan));
}
}
}
int main()
{
stack *tumpukan;
int bil_desimal, sisa_bagi;
printf("Program koversi Desimal ke Biner\n\n");
printf("Masukkan bilangan desimal = "); scanf("%d", &bil_desimal);
destobin(bil_desimal);
destookt(bil_desimal);
}
Output
Contoh 4
Buat program konversi desimal ke biner di atas dengan menggunakan linked list.
Source Code
#include <stdio.h>
struct binary
{
int value;
struct binary *next;
};
typedef struct binary *item;
item push(item curr, int n)
{
item temp;
temp = (item)malloc(sizeof(struct binary));
temp->value = n;
temp->next=curr;
return temp;
}
item tambahan(item head)
{
int i,k, count = 0;
item curr;
curr = head;
while (curr != NULL)
{
curr = curr->next;
count++;
}
k = 16 - (count);
for (i=0;i<k;i++)
{
printf("1");
}
}
item destobin(item head, int bil)
{
int bin_bil;
while (bil>0)
{
bin_bil=bil%2;
head = push(head, bin_bil);
bil/=2; //sama dengan bil = bil/2
}
printf("Hasil konversi ke biner adalah : ");
tambahan(head);
for(;head != NULL; head = head->next)
printf("%d", head->value);
return(head);
}
item destookt(item head, int bil)
{
int bin_bil;
while (bil>0)
{
bin_bil=bil%8;
head = push(head, bin_bil);
bil/=8; //sama dengan bil = bil/2
}
printf("\nHasil konversi ke oktal adalah : ");
for(;head != NULL; head = head->next)
printf("%d", head->value);
return(head);
}
int main()
{
int num;
item head = NULL;
printf("Masukkan bilangan desimal : ");
scanf("%d", &num);
head = destobin(head, num);
head = destookt(head, num);
}
Output
Materi Lengkap
Silakan baca juga beberapa artikel menarik kami tentang Stack, daftar lengkapnya adalah sebagai berikut.