- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
Disini, saya akan memberi 2 source code program queue. Program yang pertama ini. Pada program ini, kita bisa menginputkan bilangan desimal yang nantinya akan menjadi biner. Kemudian, bilangan biner itu akan melakukan proses dequeue lalu enqueue sebanyak shift. Berikut ini source code nya:
#include <stdio.h>
#include <math.h>
#define MAX 10
typedef int Itemtype;
typedef struct
{
Itemtype item[MAX];
int front;
int rear;
int count;
} Queue;
void Init(Queue* q)
{
q->count = 0;
q->front = 0;
q->rear = 0;
}
int isFull(Queue* q)
{
return q->count == MAX;
}
int isEmpty(Queue* q)
{
return q->count == 0;
}
void Enqueue(Queue* q, Itemtype x)
{
if (isFull(q))printf("Queue penuh\n");
else
{
q->item[q->rear] = x;
q->rear = ++q->rear % MAX;
q->count++;
}
}
Itemtype Dequeue(Queue* q)
{
Itemtype tmp = -1;
if (isEmpty(q))printf("Queue is full\n");
else
{
tmp = q->item[q->front];
q->front = ++q->front % MAX;
q->count--;
}
return tmp;
}
Itemtype OpShift(Queue* q, int n, int s)
{
Itemtype tmp = 0;
while (n > 0)
{
Enqueue(q, n % 2);
n /= 2;
}
for (int i = 0; i < s; i++)
Enqueue(q, Dequeue(q));
int e = 0;
while (!isEmpty(q))
{
tmp += Dequeue(q) * pow(2.0, e);
e++;
}
return tmp;
}
void header()
{
printf("\n\n");
printf("\t\t+------------------------------------------------+\n");
printf("\t\t| |\n");
printf("\t\t| -Program Operasi Shit Dengan Queue- |\n");
printf("\t\t| |\n");
printf("\t\t+------------------------------------------------+\n\n\n");
}
int main()
{
header();
Queue queue;
Init(&queue);
int bil, shift;
printf("\t\tMasukkan bilangan desimal : ");
scanf("%d", &bil);
printf("\t\tMasukkan jumlah shift : ");
scanf("%d", &shift);
printf("\t\tBilangan desimal setelah shift adalah : %d\n\n", OpShift(&queue, bil, shift));
return 0;
}
OUTPUT :
#include <stdio.h>
#include <math.h>
#define MAX 10
typedef int Itemtype;
typedef struct
{
Itemtype item[MAX];
int front;
int rear;
int count;
} Queue;
void Init(Queue* q)
{
q->count = 0;
q->front = 0;
q->rear = 0;
}
int isFull(Queue* q)
{
return q->count == MAX;
}
int isEmpty(Queue* q)
{
return q->count == 0;
}
void Enqueue(Queue* q, Itemtype x)
{
if (isFull(q))printf("Queue penuh\n");
else
{
q->item[q->rear] = x;
q->rear = ++q->rear % MAX;
q->count++;
}
}
Itemtype Dequeue(Queue* q)
{
Itemtype tmp = -1;
if (isEmpty(q))printf("Queue is full\n");
else
{
tmp = q->item[q->front];
q->front = ++q->front % MAX;
q->count--;
}
return tmp;
}
Itemtype OpShift(Queue* q, int n, int s)
{
Itemtype tmp = 0;
while (n > 0)
{
Enqueue(q, n % 2);
n /= 2;
}
for (int i = 0; i < s; i++)
Enqueue(q, Dequeue(q));
int e = 0;
while (!isEmpty(q))
{
tmp += Dequeue(q) * pow(2.0, e);
e++;
}
return tmp;
}
void header()
{
printf("\n\n");
printf("\t\t+------------------------------------------------+\n");
printf("\t\t| |\n");
printf("\t\t| -Program Operasi Shit Dengan Queue- |\n");
printf("\t\t| |\n");
printf("\t\t+------------------------------------------------+\n\n\n");
}
int main()
{
header();
Queue queue;
Init(&queue);
int bil, shift;
printf("\t\tMasukkan bilangan desimal : ");
scanf("%d", &bil);
printf("\t\tMasukkan jumlah shift : ");
scanf("%d", &shift);
printf("\t\tBilangan desimal setelah shift adalah : %d\n\n", OpShift(&queue, bil, shift));
return 0;
}
OUTPUT :
PEMBAHASAN:
Dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001
setelah dikonversikan, maka program di shift sebanyak 2x
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
setelah selesai menjadi bilangan biner 01110 akan dikonversikan menjadi desimal yaitu 14.
Untuk program kedua, saya akan memberikan source code queue menggunakan shift, namun ada sedikit perbedaan. Berikut ini source codenya:
#include <stdio.h>
#include <iostream>
#include <conio.h>
#define MAX
using namespace std;
typedef struct{
int data[MAX];
int front;
int rear;
}Queue;
Queue antrian;
void Create(){
antrian.front=antrian.rear=-1;
}
int IsEmpty(){
if(antrian.rear==-1)
return 1;
else
return 0;
}
int IsFull(){
if(antrian.rear==MAX-1)
return 1;
else
return 0;
}
Enqueue(int data)//memasukkan data
{
if(IsEmpty()==1)
{
antrian.front=antrian.rear=0;
antrian.data[antrian.rear]=data;
} else
if(IsFull()==0)
{
antrian.rear++;
antrian.data[antrian.rear]=data;
}
}
int Dequeue()//mengeluarkan data
{
int i;
int e = antrian.data[antrian.front];
for(i=antrian.front; i<=antrian.rear-1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.rear--;
return e;
}
void Clear()//menghapus data
{
antrian.front=antrian.rear=-1;
printf("CLEAR");
}
void Tampil()//menampilkan data
{
if(IsEmpty()==0)
{
for(int i=antrian.front;i<=antrian.rear;i++)
{
printf(" %d",antrian.data[i]);
}
}else printf("data kosong!\n");
}
main()
{
int desimal, shift, hasil;
cout<<"Masukkan bilangan desimal = ";
cin>>desimal;
Enqueue (desimal);
cout<<"Masukkan jumlah shift = ";
cin>>shift;
hasil=desimal>>shift;
cout<<"Bilangan desimal setelah shift = "<<hasil;
}
OUTPUT :
PEMBAHASAN :
Dari bilangan desimal 25 dikonversikan menjadi biner menjadi 11001
Setelah dikonversikan, maka program di shift sebanyak 2x
11001 —> shift pertama, angka 1 yang terakhir di dequeue menjadi 1100
1100 —> shift kedua, angka 0 yang terakhir di dequeue menjadi 110
Biner 110 dikonversi ke desimal menjadi desimal 6.
Comments
Post a Comment