RSS

Antrian Turbo C++

13 Nov

//program antrian untuk nilai matakuliah
#include <stdio.h>
#include <conio.h>
#include <string.h>
//maksimum data sebanyak 10
#define maks 10
typedef struct {
char nim[10];
char nama[20];
int nilai1;
int nilai2;
int ratarata;
} nilaimatkul;
//deklarasi head/first dan tail/last
typedef struct {
int first;
int last;
nilaimatkul data[maks];
} queue;
//inisialisasi antrian awal dalam kondisi kosong
void createempty(queue *q) {
(*q).first = -1;
(*q).last = -1;
}
//cek antrian dalam kondisi kosong/tidak
int isempty(queue q) {
int hasil = 0;
if (q.first == -1) { //jika antrian atas = -1 maka hasil=1
hasil=1;
}
return hasil;
}
//cek antrian dalam kondisi penuh/tidak
int isfull(queue q) {
int hasil=0;
if (q.last == maks) { //jika antrian atas = maks maka hasil=1
hasil=1;
}
return hasil;
}
void enqueue(char nim[], char nama[], int nilai1, int nilai2, int ratarata, queue *q) {
if (isempty(*q) == 1) { //jika antrian kosong
(*q).first = 0;
(*q).last = 0;
strcpy((*q).data[0].nim, nim);
strcpy((*q).data[0].nama, nama);
(*q).data[0].nilai1 = nilai1;
(*q).data[0].nilai2 = nilai2;
(*q).data[0].ratarata = ratarata;
ratarata = (nilai1+nilai2)/2;
}
else { //jika antrian tidak kosong
if (isfull(*q) != 1) {
(*q).last = (*q).last + 1;
strcpy((*q).data[(*q).last].nim, nim);
strcpy((*q).data[(*q).last].nama, nama);
(*q).data[(*q).last].nilai1 = nilai1;
(*q).data[(*q).last].nilai2 = nilai2;
(*q).data[(*q).last].ratarata = ratarata;
ratarata = (nilai1 + nilai2)/2;
}
else //jika antrian penuh
printf(“antrian penuh\n”);
}
}
void dequeue(queue *q) {
if ((*q).last == 0) {
(*q).first = -1;
(*q).last = -1;
}
else { //menggeser elemen ke depan
int i;
for(i=((*q).first+1); i<=(*q).last; i++) {
strcpy((*q).data[i-1].nim, (*q).data[i].nim);
strcpy((*q).data[i-1].nama, (*q).data[i].nama);
(*q).data[i-1].nilai1 = (*q).data[i].nilai1;
(*q).data[i-1].nilai2 = (*q).data[i].nilai2;
(*q).data[i-1].ratarata = (*q).data[i].ratarata;

}
(*q).last = (*q).last – 1;
}
}
//tampilkan elemen-elemen yang ada di antrian
void printqueue(queue q) {
if (q.first != -1) {
printf(“——-isi antrian——-\n”);
int i;
for (i=q.last;i>=q.first; i–) { //tampilkan nim, nama, nilai
printf(“===========================\n”);
printf(“elemen ke : %d\n”,i+1);
printf(“Nim : %s\n”, q.data[i].nim);
printf(“Nama : %s\n”, q.data[i].nama);
printf(“Nilai 1 : %d\n”, q.data[i].nilai1);
printf(“Nilai 2 : %d\n”, q.data[i].nilai2);
printf(“Rata-Rata : %d\n”, q.data[i].ratarata);
}
printf(“————————-\n”);
}
else //jika antrian kosong
printf(“antrian kosong”);
}
//program utama
int main() {
queue q;
int pilihan;
int Nilai1;
int nilai2;
int ratarata;
char Nama[50], Nim[10];
createempty(&q); //inisialisasi antrian
do {
clrscr();
printf(“\n”);
printf(“===========================\n”);
printf(“1.Enqueue Data\n”);
printf(“2.Dequeue Data\n”);
printf(“3.Print Data\n”);
printf(“\nPilihan = “);
scanf(“%d”,&pilihan);
printf(“===========================\n\n\n”);
switch(pilihan) {
case 1: { printf(“===========================\n”);
printf(“Nim : “);scanf(“%s”,Nim);
printf(“Nama : “);scanf(“%s”,Nama);
printf(“Nilai 1 : “);scanf(“%d”,&Nilai1);
printf(“Nilai 2 : “);scanf(“%d”,&nilai2);
ratarata = (Nilai1 + nilai2 )/2;
enqueue(Nim,Nama,Nilai1,nilai2,ratarata, &q);
printf(“===========================\n”);
getch();
break;
}
case 2: { dequeue(&q);
printf(“data sudah terhapus\n”);
getch();
break;
}
case 3: { printf(“===========================\n”);
printqueue(q);
printf(“===========================\n”);
getch();
break;
}
}
} while (pilihan >= 1 && pilihan <=3);
return 0;
}

 

dan hasilnya seperti ini

jika di masukan angka 1 yaitu entri data

 

 

 

 

 

 

 

 

 

jika di masukan angka 3 yaitu melihat data yang telah di entri

 

 

 

 

 

 

 

 

 

jika di  masukan angka 2

 
Tinggalkan komentar

Ditulis oleh pada November 13, 2011 inci Turbo C++

 

Tinggalkan komentar