Monday, October 29, 2007

Jawaban Unguided Kelas A

//file header.h
#include
#include
#include
#include
#define MaxEl 10 //maksimal isi antrian

typedef int address;
typedef struct{
char Elmt[MaxEl]; //tempat menyimpan isi antrian
address Head;
address Tail;
}Queue;

typedef struct{
Queue antrian[2];
}Queues;

void CreateEmpty(Queue *Q);
int IsEmpty(Queue Q);
int IsFull(Queue Q);
int IsOneElmt(Queue Q);
void Add(Queues *Q,char C); //memasukkan data-data ke antrian
void Del(Queue *Q); //hapus data di head
void PrintQueue(Queues Q);
int CekChar(char C); //mengecek karakter berupa angka,huruf atau lainnya
void JmlChar(Queues Q); //menghitung jumlah isi tiap antrian
int Search(Queues Q,char X);

//file function.c
#include"header.h"

void CreateEmpty(Queue *Q)
{
(*Q).Head=(*Q).Tail=-1;
}

int IsEmpty(Queue Q)
{
return(Q.Head==-1 && Q.Tail==-1);
}

int IsFull(Queue Q)
{
return((Q.HeadQ.Tail && Q.Head-Q.Tail==1));
}

int IsOneElmt(Queue Q)
{
return(Q.Head==Q.Tail && Q.Head!=-1);
}

void Add(Queues *Q,char C)
{
int j=CekChar(C);
if(j!=-1)
{
if(!IsFull((*Q).antrian[j]))
{
if(IsEmpty((*Q).antrian[j]))
{
(*Q).antrian[j].Head=(*Q).antrian[j].Tail=0;
(*Q).antrian[j].Elmt[(*Q).antrian[j].Tail]=C;
if(j==0)
printf("%c masuk antrian angka\n",C);
else
printf("%c masuk antrian huruf\n",C);
}
else
{
if((*Q).antrian[j].Tail==MaxEl-1)
(*Q).antrian[j].Tail=0;
else
(*Q).antrian[j].Tail++;
(*Q).antrian[j].Elmt[(*Q).antrian[j].Tail]=C;
if(j==0)
printf("%c masuk antrian angka\n",C);
else
printf("%c masuk antrian huruf\n",C);
}
}
else //penuh, hapus data di head
printf("Antrian sudah penuh");
}
else
printf("Karakter bukan merupakan huruf maupun angka\n");
}

void Del(Queue *Q)
{
char temp=(*Q).Elmt[(*Q).Head];
if(!IsEmpty(*Q))
{
if(IsOneElmt(*Q))
CreateEmpty(&(*Q));
else
{
if((*Q).Head==MaxEl-1)
(*Q).Head=0;
else
(*Q).Head++;
}
printf("Elemen yang dihapus:%c\n\n",temp);
}
}

void PrintQueue(Queues Q)
{
address i,j;
for(j=0;j<2;j++) j="="0)" i="Q.antrian[j].Head;i<="Q.antrian[j].Tail;i++)" i="Q.antrian[j].Head;i<="MaxEl-1;i++)" i="0;i<="Q.antrian[j].Tail;i++)">=48 && C<=57) return 0; //angka else if((C>=65 && C<=90) || (C>=97 && C<=122)) return 1; //huruf else return -1; } void JmlChar(Queues Q) { int i,j,jml; for(j=0;j<2;j++) { jml=0; if(!IsEmpty(Q.antrian[j])) { if(Q.antrian[j].Head<=Q.antrian[j].Tail) { for(i=Q.antrian[j].Head;i<=Q.antrian[j].Tail;i++) jml=jml+1; } else { for(i=Q.antrian[j].Head;i<=MaxEl-1;i++) jml=jml+1; for(i=0;i<=Q.antrian[j].Tail;i++) jml=jml+1; } } if(j==0) printf("\nLoket angka berisi: %d karakter",jml); else printf("\nLoket huruf berisi: %d karakter",jml); } }


//file main.c
#include"header.h"

void main()
{
Queues Q;
char string[30];
int pil,i,pjg;
for(i=0;i<2;i++)
CreateEmpty(&(Q.antrian[i]));
do{
system("cls");
puts("Menu:");
puts("1.Isi Queue");
puts("2.Print Queue");
puts("3.Jumlah karakter tiap antrian");
puts("0.Keluar");
printf("Pilihan: ");
scanf("%d",&pil);
switch(pil)
{
case 1:{
puts("\nMasukkan string: ");
scanf("%s",&string);
pjg=strlen(string);
for(i=0;i
Add(&Q,string[i]);
getch();
}break;
case 2:{
printf("\nIsi dari antrian:");
PrintQueue(Q);
getch();
}break;
case 3:{
printf("\nJumlah karakter tiap antrian: ");
JmlChar(Q);
getch();
}break;

}
}while(pil!=0);
}

No comments: