Program Mengurutkan Kartu dengan Bahasa C
Pada kesempatan kali ini kita akan berbagi program mengurutkan kartu dengan C, spesifikasi programnya adalah sebagai berikut:
- Program / Aplikasi dapat mengurutkan kartu sesuai jumlah kartu yang di input.
- Program dapat mengurutkan kartu berdasarkan jenis kartu maupun nilai / angka dari sebuah kartu.
- Seandainya kartu diurutkan berdasarkan jenis, maka kartu akan di urutkan secara Ascending dari jenis kriting, gentong, wajik, hati (case sensitive).
- Seandainya pengurutan kartu berdasarkan jenis, dan jenis kartu sama maka setelah diurutkan berdasarkan jenis akan diurutkan berdasarkan angka.
- Seandainya kartu diurutkan berdasarkan angka, maka kartu di urutkan secara Ascending dari as, 2, 3, 4, 5, 6, 7, 8, 9, 10, j, q, k.
- Seandainya pengurutan kartu berdasarkan angka, dan angka kartu sama maka setelah diurutkan berdasarkan angka akan diurutkan berdasarkan jenis.
- Program dapat mengurutkan dengan 4 metode (Selection Sort, Insert Sort, Merge Sort dan Quick Sort)
- Program dapat mencari kartu dengan nilai tertinggi maupun terrendah dan mengetahui posisi kartu yang dicari.
- Program dapat melakukan Searcing terhadapat sebuah kartu dan menghasilkan letak dari kartu yang dicari.
Berikut coding dari programnya:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 52
typedef struct
{
char jenis[max][10];
char angka[max][5];
}kartu;
int konvert_jns(kartu remi,int cari);
int konvert_angka(kartu remi,int cari);
void cetak_data(kartu remi,int batas);
void isi_data(kartu *remi,int batas);
void selectionJ (kartu *remi,int array[max],int array2[max],int batas);
void selectionN (kartu *remi,int array[max],int array2[max],int batas);
void insertJ (kartu *remi,int array[max],int array2[max],int batas);
void insertN (kartu *remi,int array[max],int array2[max],int batas);
void quickJ(kartu *remi,int array[max],int array2[max],int fist,int last);
void quickN(kartu *remi,int array[max],int array2[max],int fist,int last);
void searcing(kartu remi,int n,char carij[10],char caria[10]);
void maxx(kartu remi,int array[max],int array2[max],int n);
void minn(kartu remi,int array[max],int array2[max],int n);
void mergeJ(kartu *remi,int array[max],int array2[max],int low,int mid,int high);
void mergeN(kartu *remi,int array[max],int array2[max],int low,int mid,int high);
void partitionJ(kartu *remi,int array[max],int array2[max],int low,int high);
void partitionN(kartu *remi,int array[max],int array2[max],int low,int high);
main()
{
int jml,pilih,pilih2,i;
char carij[10],caria[10];
kartu remi;
int tampung_jns[max],tampung_angka[max];
printf(":::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\n");
printf("= = = = = Program Mengurutkan Kartu = = = = =\n");
printf("::::::::::kriting::::::::gentong::::::::wajik::::::::hati::::::::::\n\n");
printf("Ingin mengurutkan berapa kartu : ");scanf("%d",&jml);
isi_data(&remi,jml);
cetak_data(remi,jml);
printf("\n\nIngin Mengurutkan Kartu Berdasarkan\n");
printf("1. Jenis \n2. Angka");
printf("\nPilihan : ");scanf("%d",&pilih);
printf("\ningin anda urutkan berdasarkan metode apa");
printf("\n1.selection 2.insertsort 3.mergesort 4.quicksort 5.maxmin 6.searc");
printf("\nPilihan : ");scanf("%d",&pilih2);
for(i=0;i<jml;i++)
{
tampung_jns[i]=konvert_jns(remi,i);
tampung_angka[i]=konvert_angka(remi,i);
}
if(pilih==1&&pilih2==1)
{
selectionJ (&remi,tampung_jns,tampung_angka,jml);
cetak_data(remi,jml);
}
if(pilih==2&&pilih2==1)
{
selectionN (&remi,tampung_jns,tampung_angka,jml);
cetak_data(remi,jml);
}
if(pilih==1&&pilih2==2)
{
insertJ (&remi,tampung_jns,tampung_angka,jml);
cetak_data(remi,jml);
}
if(pilih==2&&pilih2==2)
{
insertN (&remi,tampung_jns,tampung_angka,jml);
cetak_data(remi,jml);
}
if(pilih==1&&pilih2==3)
{
partitionJ(&remi,tampung_jns,tampung_angka,0,jml-1);
cetak_data(remi,jml);
}
if(pilih==2&&pilih2==3)
{
partitionN(&remi,tampung_jns,tampung_angka,0,jml-1);
cetak_data(remi,jml);
}
if(pilih==1&&pilih2==4)
{
quickJ(&remi,tampung_jns,tampung_angka,0,jml-1);
cetak_data(remi,jml);
}
if(pilih==2&&pilih2==4)
{
quickN(&remi,tampung_jns,tampung_angka,0,jml-1);
cetak_data(remi,jml);
}
if(pilih==1&&pilih2==5)
{
maxx(remi,tampung_jns,tampung_angka,jml);
minn(remi,tampung_jns,tampung_angka,jml);
}
if(pilih==2&&pilih2==5)
{
maxx(remi,tampung_jns,tampung_angka,jml);
minn(remi,tampung_jns,tampung_angka,jml);
}
if(pilih==1&&pilih2==6)
{
printf("\nmasukkan katru yang inngin anda cari\njenisnya : ");scanf("%s",carij);
printf("angkanya : ");scanf("%s",caria);
searcing(remi,jml,carij,caria);
}
if(pilih==2&&pilih2==6)
{
printf("\nmasukkan katru yang inngin anda cari\njenisnya : ");scanf("%s",carij);
printf("angkanya : ");scanf("%s",caria);
searcing(remi,jml,carij,caria);
}
return 0;
}
int konvert_angka(kartu remi,int cari)
{
if(strcmp(remi.angka[cari],"as")==0)
return 1;
else if(strcmp(remi.angka[cari],"2")==0)
return 2;
else if(strcmp(remi.angka[cari],"3")==0)
return 3;
else if(strcmp(remi.angka[cari],"4")==0)
return 4;
else if(strcmp(remi.angka[cari],"5")==0)
return 5;
else if(strcmp(remi.angka[cari],"6")==0)
return 6;
else if(strcmp(remi.angka[cari],"7")==0)
return 7;
else if(strcmp(remi.angka[cari],"8")==0)
return 8;
else if(strcmp(remi.angka[cari],"9")==0)
return 9;
else if(strcmp(remi.angka[cari],"10")==0)
return 10;
else if(strcmp(remi.angka[cari],"j")==0)
return 11;
else if(strcmp(remi.angka[cari],"q")==0)
return 12;
else if(strcmp(remi.angka[cari],"k")==0)
return 13;
}
int konvert_jns(kartu remi,int cari)
{
if(strcmp(remi.jenis[cari],"kriting")==0)
return 1;
else if(strcmp(remi.jenis[cari],"gentong")==0)
return 2;
else if(strcmp(remi.jenis[cari],"wajik")==0)
return 3;
else if(strcmp(remi.jenis[cari],"hati")==0)
return 4;
}
void isi_data(kartu *remi,int batas)
{
int i,a,b;
for(i=0;i<batas;i++)
{
printf("\nkartu %d \n",i+1);
printf("jenis : ");scanf("%s",&(*remi).jenis[i]);
printf("angka : ");scanf("%s",&(*remi).angka[i]);
for(a=0;a<=i+1;)
{
if(((strcmp((*remi).jenis[i],"kriting")==0)||(strcmp((*remi).jenis[i],"gentong")==0)||(strcmp((*remi).jenis[i],"wajik")==0)||(strcmp((*remi).jenis[i],"hati")==0))
&&((strcmp((*remi).angka[i],"as")==0)||(strcmp((*remi).angka[i],"2")==0)||(strcmp((*remi).angka[i],"3")==0)||(strcmp((*remi).angka[i],"4")==0)
||(strcmp((*remi).angka[i],"5")==0)||(strcmp((*remi).angka[i],"6")==0)||(strcmp((*remi).angka[i],"7")==0)||(strcmp((*remi).angka[i],"8")==0)
||(strcmp((*remi).angka[i],"9")==0)||(strcmp((*remi).angka[i],"10")==0)||(strcmp((*remi).angka[i],"j")==0)||(strcmp((*remi).angka[i],"q")==0)
||(strcmp((*remi).angka[i],"k")==0)))
{
a=a+i+1;
}
else
{
printf("\nmasukkan kembali kartu ke %d \n",i+1);
printf("jenis : ");scanf("%s",&(*remi).jenis[i]);
printf("angka : ");scanf("%s",&(*remi).angka[i]);
a=0;
}
}
for(b=0;b<i;)
{
if(strcmp((*remi).angka[i],(*remi).angka[b])==0&&strcmp((*remi).jenis[i],(*remi).jenis[b])==0)
{
printf("\nmasukkan kembali kartu ke %d \n",i+1);
printf("jenis : ");scanf("%s",&(*remi).jenis[i]);
printf("angka : ");scanf("%s",&(*remi).angka[i]);
b=0;
}
else{b++;}
}
}
}
void cetak_data(kartu remi,int batas)
{
int i;
for(i=0;i<batas;i++)
{
printf("\nkartu %d\n",i+1);
printf("(%s , %s)",remi.jenis[i],remi.angka[i]);
}
}
void quickJ(kartu *remi,int array[max],int array2[max],int first,int last)
{
int pivot,j,i;
char tempj[10];
char tempa[10];
int temp0;
int temp00;
if(first<last)
{
pivot=first;//pivot = 0
i=first;//i = 0,1 //first = 0
j=last;//j = 3
while(i<j)
{
while(array[i]<=array[pivot]&&i<last)
i++;
while(array[j]>array[pivot])
j--;
if(i<=j)
{
strcpy(tempj,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],tempj);
//=======================================
strcpy(tempa,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],tempa);
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
//=======================================
temp00=array2[i];
array2[i]=array2[j];
array2[j]=temp00;
}
}
//---------------------------------------------------
strcpy(tempj,(*remi).jenis[pivot]);
strcpy((*remi).jenis[pivot],(*remi).jenis[j]);
strcpy((*remi).jenis[j],tempj);
//=======================================
strcpy(tempa,(*remi).angka[pivot]);
strcpy((*remi).angka[pivot],(*remi).angka[j]);
strcpy((*remi).angka[j],tempa);
//=======================================
temp0=array[pivot];
array[pivot]=array[j];
array[j]=temp0;
//=======================================
temp00=array2[pivot];
array2[pivot]=array2[j];
array2[j]=temp00;
//---------------------------------------------------
quickJ(remi,array,array2,first,j-1);
quickJ(remi,array,array2,j+1,last);
}
}
void quickN(kartu *remi,int array[max],int array2[max],int first,int last)
{
int pivot,j,i,u;
char temp[10];
int temp0;
if(first<last)
{
pivot=first;//pivot = 0
i=first;//i = 0,1 //first = 0
j=last;//j = 3
int temp0;
while(i<j)
{
while(array2[i]<=array2[pivot]&&i<last)
i++;
while(array2[j]>array2[pivot])
j--;
if(i<j)
{
strcpy(temp,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array2[i];
array2[i]=array2[j];
array2[j]=temp0;
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
}
}
//---------------------------------------------------
strcpy(temp,(*remi).jenis[pivot]);
strcpy((*remi).jenis[pivot],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[pivot]);
strcpy((*remi).angka[pivot],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array2[pivot];
array2[pivot]=array2[j];
array2[j]=temp0;
//=======================================
temp0=array[pivot];
array[pivot]=array[j];
array[j]=temp0;
//---------------------------------------------------
quickN(remi,array,array2,first,j-1);
quickN(remi,array,array2,j+1,last);
}
}
void selectionJ (kartu *remi,int array[max],int array2[max],int batas)
{
int i,j;
char temp[10];
int temp0;
for(i=0;i<batas-1;i++)
{
for(j=i+1;j<batas;j++)
{
if(array[i]==array[j] && array2[i] > array2[j]) //jika jenis sama, maka diurutkan berdasarkan angkanya
{
strcpy(temp,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
//=======================================
temp0=array2[i];
array2[i]=array2[j];
array2[j]=temp0;
}
else if(array[i]==array[j] && array2[i] < array2[j])
{
//do nothing
}
else if(array[i]>array[j]) //jika jenisnya beda,maka diurutkan tanpa melihat angka
{
strcpy(temp,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
//=======================================
temp0=array2[i];
array2[i]=array2[j];
array2[j]=temp0;
}
else if(array[i]<array[j])
{
//do nothing
}
}
}
}
void selectionN (kartu *remi,int array[max],int array2[max],int batas)
{
int i,j;
char temp[10];
int temp0;
for(i=0;i<batas-1;i++)
{
for(j=i+1;j<batas;j++)
{
if(array2[i]==array2[j] && array[i] > array[j])
{
strcpy(temp,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array2[i];
array2[i]=array2[j];
array2[j]=temp0;
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
}
else if(array2[i]==array2[j] && array[i] < array[j])
{
//do nothing
}
else if(array2[i]>array2[j])
{
strcpy(temp,(*remi).jenis[i]);
strcpy((*remi).jenis[i],(*remi).jenis[j]);
strcpy((*remi).jenis[j],temp);
//=======================================
strcpy(temp,(*remi).angka[i]);
strcpy((*remi).angka[i],(*remi).angka[j]);
strcpy((*remi).angka[j],temp);
//=======================================
temp0=array2[i];
array2[i]=array2[j];
array2[j]=temp0;
//=======================================
temp0=array[i];
array[i]=array[j];
array[j]=temp0;
}
else if(array2[i]<array2[j])
{
//do nothing
}
}
}
}
void insertJ (kartu *remi,int array[max],int array2[max],int batas)
{
int i,j;
char temp[10];
char temp2[10];
int temp0;
int temp00;
for(i=1;i<batas;i++)
{
strcpy(temp,(*remi).jenis[i]);
temp0=array[i];
strcpy(temp2,(*remi).angka[i]);
temp00=array2[i];
j=i-1;
while((temp0<array[j])&&(j>=0))
{
strcpy((*remi).jenis[j+1],(*remi).jenis[j]);
strcpy((*remi).angka[j+1],(*remi).angka[j]);
array[j+1]=array[j];
array2[j+1]=array2[j];
j=j-1;
}
strcpy((*remi).jenis[j+1],temp);
strcpy((*remi).angka[j+1],temp2);
array[j+1]=temp0;
array2[j+1]=temp00;
}
}
void insertN (kartu *remi,int array[max],int array2[max],int batas)
{
int i,j;
char temp[10];
char temp2[10];
int temp0;
int temp00;
for(i=1;i<batas;i++)
{
strcpy(temp,(*remi).jenis[i]);
temp0=array[i];
strcpy(temp2,(*remi).angka[i]);
temp00=array2[i];
j=i-1;
while((temp00<array2[j])&&(j>=0))
{
strcpy((*remi).jenis[j+1],(*remi).jenis[j]);
strcpy((*remi).angka[j+1],(*remi).angka[j]);
array[j+1]=array[j];
array2[j+1]=array2[j];
j=j-1;
}
strcpy((*remi).jenis[j+1],temp);
strcpy((*remi).angka[j+1],temp2);
array[j+1]=temp0;
array2[j+1]=temp00;
}
}
void searcing(kartu remi,int n,char carij[10],char caria[10])
{
int i;
int umpan=0;
for (i=0;i<n;i++)
{
if((strcmp(remi.jenis[i],carij)==0)&&(strcmp(remi.angka[i],caria)==0))
{
if (umpan==0)
{
printf("\n\nkartu yang anda cari ada");
printf("\njenis kartu : %s",remi.jenis[i]);
printf("\nangka kartu : %s",remi.angka[i]);
printf("\nletak kartu di urutan ke : %d",i+1);
umpan=umpan+1;
}
else
{
//tidak mengerjakan apa-apa
}
}
else if (umpan==0 && i==n-1)
{
printf("\n\nmaaf kartu yang anda cari tidak ada");
printf("\njenis kartu yang di cari : %s",carij);
printf("\nangka kartu yang di cari : %s",caria);
}
}
}
void maxx(kartu remi,int array[max],int array2[max],int n)
{
int i,j;
char tempJA[10];//nampung jenis kartu yang max
char tempAA[10];//nampung angka kartu yang max
int nilaiJA;//nampung nilai jenis kartu yang max
int nilaiAA;//nampung nilai angka kartu yang max
int urutan;
nilaiJA=1;
nilaiAA=0;
for(j=0;j<n;j++)
{
if(nilaiJA<array[j])
{
strcpy(tempJA,remi.jenis[j]);
strcpy(tempAA,remi.angka[j]);
nilaiJA=array[j];
nilaiAA=array2[j];
urutan=j;
}
else if(nilaiJA==array[j]&&nilaiAA<array2[j])
{
strcpy(tempJA,remi.jenis[j]);
strcpy(tempAA,remi.angka[j]);
nilaiJA=array[j];
nilaiAA=array2[j];
urutan=j;
}
else if(nilaiJA>array[j])
{
}
}
printf("\nKARTU MAX nya adalah : ");
printf("(%s , %s ==> kartu berada di urutan ke %d)",tempJA,tempAA,urutan+1);
}
void minn(kartu remi,int array[max],int array2[max],int n)
{
int i,j;
char tempJI[10];//nampung jenis kartu yang min
char tempAI[10];//nampung angka kartu yang min
int nilaiJI;//nampung nilai jenis kartu yang min
int nilaiAI;//nampung nilai angka kartu yang min
int urutan;
nilaiJI=4;
nilaiAI=13;
for(j=0;j<n;j++)
{
if(nilaiJI>array[j])
{
strcpy(tempJI,remi.jenis[j]);
strcpy(tempAI,remi.angka[j]);
nilaiJI=array[j];
nilaiAI=array2[j];
urutan=j;
}
else if(nilaiJI==array[j]&&nilaiAI>array2[j])
{
strcpy(tempJI,remi.jenis[j]);
strcpy(tempAI,remi.angka[j]);
nilaiJI=array[j];
nilaiAI=array2[j];
urutan=j;
}
else if(nilaiJI<array[j])
{
}
}
printf("\nKARTU MIN nya adalah : ");
printf("(%s , %s ==> kartu berada di urutan ke %d)",tempJI,tempAI,urutan+1);
}
void mergeJ(kartu *remi,int array[max],int array2[max],int low,int mid,int high)
{
int i,m,k,l;
char temp[max];
l=low;
i=low;
m=mid+1;
while((l<=mid)&&(m<=high))
{
if(array[l]<=array[m])
{
temp[i]=array[l];
strcpy((*remi).jenis[l],(*remi).jenis[i]);
strcpy((*remi).angka[l],(*remi).angka[i]);
array[l]=array[i];
array2[l]=array2[i];
l++;
}
else
{
temp[i]=array[m];
strcpy((*remi).jenis[i],(*remi).jenis[m]);
strcpy((*remi).angka[i],(*remi).angka[m]);
array[i]=array[m];
array2[i]=array2[m];
m++;
}
i++;
}
if(l>mid)
{
for(k=m;k<=high;k++)
{
temp[i]=array[k];
strcpy((*remi).jenis[i],(*remi).jenis[k]);
strcpy((*remi).angka[i],(*remi).angka[k]);
array[i]=array[k];
array2[i]=array2[k];
i++;
}
}
else
{
for(k=l;k<=mid;k++)
{
temp[i]=array[k];
strcpy((*remi).jenis[i],(*remi).jenis[k]);
strcpy((*remi).angka[i],(*remi).angka[k]);
array[i]=array[k];
array2[i]=array2[k];
i++;
}
}
for(k=low;k<=high;k++)
{
array[k]=temp[k];
}
}
void mergeN(kartu *remi,int array[max],int array2[max],int low,int mid,int high)
{
int i,m,k,l;
char temp[max];
l=low;
i=low;
m=mid+1;
while((l<=mid)&&(m<=high))
{
if(array2[l]<=array2[m])
{
temp[i]=array2[l];
strcpy((*remi).angka[l],(*remi).angka[i]);
strcpy((*remi).jenis[l],(*remi).jenis[i]);
array2[l]=array2[i];
array[l]=array[i];
l++;
}
else
{
temp[i]=array2[m];
strcpy((*remi).angka[i],(*remi).angka[m]);
strcpy((*remi).jenis[i],(*remi).jenis[m]);
array2[i]=array2[m];
array[i]=array[m];
m++;
}
i++;
}
if(l>mid)
{
for(k=m;k<=high;k++)
{
temp[i]=array2[k];
strcpy((*remi).angka[i],(*remi).angka[k]);
strcpy((*remi).jenis[i],(*remi).jenis[k]);
array2[i]=array2[k];
array[i]=array[k];
i++;
}
}
else
{
for(k=l;k<=mid;k++)
{
temp[i]=array2[k];
strcpy((*remi).angka[i],(*remi).angka[k]);
strcpy((*remi).jenis[i],(*remi).jenis[k]);
array2[i]=array2[k];
array[i]=array[k];
i++;
}
}
for(k=low;k<=high;k++)
{
array2[k]=temp[k];
}
}
void partitionJ(kartu *remi,int array[max],int array2[max],int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
partitionJ(remi,array,array2,low,mid);
partitionJ(remi,array,array2,mid+1,high);
mergeJ(remi,array,array2,low,mid,high);
}
}
void partitionN(kartu *remi,int array[max],int array2[max],int low,int high)
{
int mid;
if(low<high)
{
mid=(low+high)/2;
partitionJ(remi,array,array2,low,mid);
partitionJ(remi,array,array2,mid+1,high);
mergeJ(remi,array,array2,low,mid,high);
}
}
apabila anda ingin mempelajari pemrograman berbasis C, silakan klik: Kumpulan Program Bahasa C
Program Mengurutkan Kartu dengan C
MARKIJAR : MARi KIta belaJAR
Posting Komentar untuk "Program Mengurutkan Kartu dengan Bahasa C"