Rabu, 23 Maret 2011

Pengecekan Palindrom Menggunakan Queue




#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define MAX 100
using namespace std;

void DisplayQueue(int queue[], int front, int counter)
{
for (int i = 0; i < counter; i++)
    {
printf("%c", queue[(front + i) % MAX]);
}
}

void Enqueue(int queue[], int *rear, int *counter, char value)
{
if(*counter < MAX)
       {
*rear = (*rear + 1) % MAX;
queue[*rear] = value;
*counter = *counter + 1;
}
else
       {
// printf("Error: the queue is full.\n");
}
}

void Dequeue(int queue[], int *front, int *counter, int *value)
{
if (*counter == 0)
       {
// printf("Error: the queue is empty.\n");
}
else
        {
*value = queue[*front];
*front = (*front + 1) % MAX;
*counter = *counter-1;
}
}


int main()
{
    char f;
    printf("\t\t=====Cek Palindrom ASD 5110100124====\n\n");
while(1)
    {
        int antri[MAX],antri2[MAX],antri3[MAX],antri4[MAX];
     int front = 0, front2=0,front3=0,front4=0;
     int rear = -1,rear2=-1,rear3=-1,rear4=-1;;
     int counter = 0,counter2=0,counter3=0,counter4=0;
     int value,value2,value3,value4,h; char c,kat[19],s=0,d=1;
     int n=1; char a,b;
     printf("Masukkan kata/kalimat (akhiri dengan *) : ");
     while (d==1)
       {  
            scanf("%c",&c); if(c=='*') d=0;
            if(c>=65&&c<92||c>=97&&c<124)
            {
                if(c>96) c=c-32; s++;
             Enqueue(antri, &rear, &counter, c);
             Enqueue(antri2, &rear2, &counter2, c);
            }      
           }
        for (int x = 1; x <=s; x++)
            {
                    for (int j=s;j>=1;j--)
                     {
                         if(x%2==1)
                         {
                                Dequeue(antri2, &front2, &counter2, &value2);
                                Enqueue(antri3, &rear3, &counter3, value2);
                                if(x==j) Enqueue(antri4, &rear4, &counter4, value2);
                         }
                         if(x%2==0)
                         {
                                Dequeue(antri3, &front3, &counter3, &value3);
                                Enqueue(antri2, &rear2, &counter2, value3);
                                if(x==j) Enqueue(antri4, &rear4, &counter4, value3);
                        }  
                    }
            }
        printf("\n");
     printf("Kata/kalimat sebelum dibalik : ");
        DisplayQueue(antri, front, counter); printf("\n\n");
        printf("Kata/kalimat sesudah dibalik : ");
        DisplayQueue(antri4, front4, counter4); printf("\n\n");
        for (int x=1;x<=s;x++)
        {
            Dequeue(antri, &front, &counter, &value);
            Dequeue(antri4, &front4, &counter4, &value4);
            a=value; b=value4;
            if(a!=b)
                {
                    n=0; break;
                }
        }
     if(n==1) printf("Selamat, kata yang anda masukkan ternyata : Palindrom\n\n\n\n\n");
        else
        printf("Maaf anda belum beruntung, kata yang anda masukkan ternyata : Bukan Palindrom\n\n\n\n\n");
    }
}
/*Agus Nugroho 5110100124*/

0 komentar:

Posting Komentar

Bisnis Online