Category Archives: Open Source ( C Program )

Berisi kode-kode untuk aplikasi berbasis C

C Program – Perkalian matriks orde 3×3

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int matriksA[3][3];
    int matriksB[3][3];
    int matriksC[3][3]= {(0,0,0),(0,0,0),(0,0,0)};
    int i,j,k;
    printf("n Perkalian 2 matriksn");
    printf("n Masukan nilai untuk matriksA :");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("index[%d][%d]=",i,j);
            scanf("%d",&matriksA[i][j]);
        }
    }
    printf("n Masukan nilai untuk matriksB :");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("index[%d][%d]=",i,j);
            scanf("%d",&matriksB[i][j]);
        }
    }
    //perkalian

    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            for(k=0;k<3;k++){
                matriksC[i][j]+=matriksA[i][k]*matriksB[k][j];
            }
        }
    }
    printf("n a:n");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%d ",matriksA[i][j]);
        }
        printf("n");
    }
    printf("n b:n");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%d ",matriksB[i][j]);
        }
        printf("n");
    }
    //hasil
    printf("n Hasiln ");
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%d ",matriksC[i][j]);
        }
        printf("n");
    }
    getchar();
    getchar();
}

C Program – Mencari nilai eksponensial dengan deret MacLaurin


Ilustrasi deret maclaurin

#include <stdio.h>
#include <stdlib.h>
float pangkat(int x, int y);
int faktorial(int x);
float eksponen(int x);
int main()
{
    int nilaiX;
    float nilaiEksponen;
    printf("n Eksponensial dengan deret McLaurin"
                 "n =============================================n"
           "n Masukan nilai x : ");
           scanf("%d",&nilaiX);
           nilaiEksponen=eksponen(nilaiX);
           printf("n Hasil e^x jika x = %d adalah %.3f",nilaiX,nilaiEksponen);
    return 0;
}
float eksponen(int x){
    int i,jumlahDeret = 11;
    float hasil;
    hasil=1+x;
    for(i=1;i<=jumlahDeret;i++){
        hasil += (float)(pangkat(x,i+1)/faktorial(i+1));
    }
    return hasil;
}
float pangkat(int x,int y){
    int a;float hasil=1;
    if(y==0)
        hasil=1;
    if(y>0)
    for(a=1;a<=y;a++){
        hasil*=x;
    }
    if(y<0){
        int yy=-(y);
        for(a=1;a<=yy;a++){
        hasil*=x;
        }
        hasil = (float)1/hasil;
    }
    return hasil;
}

int faktorial(int x){
if (x == 1 || x == 0) return 1;
return x * faktorial(x-1);
}

C Program : Fungsi untuk X pangkat Y

#Nb : Tugas Kuliah saya 🙂
#Keterangan : di sini ada yang spesial, pangkat y nya dapat berupa bilangan negatif 😀 (biasa aja padahal)

#include <stdio.h>
#include <stdlib.h>
float pangkat(int x,int y);
int main()
{
    int x,y; float hasil;
    printf("n Pangkat (power)n =================n");
    printf("n Untuk fungsi x^y masukan nilai x dan y, pisahkan dengan spasi :n ");
    scanf("%d%d",&x,&y);
    hasil=pangkat(x,y);
    printf("n Hasil dari %d^%d : ",x,y);
    printf("%.4f",hasil);
    getchar();
    getchar();
    return 0;
}
float pangkat(int x,int y){
    int a;float hasil=1;
    if(y==0)
        hasil=1;
    if(y>0)
    for(a=1;a<=y;a++){
        hasil*=x;
    }
    if(y<0){
        int yy=-(y);
        for(a=1;a<=yy;a++){
        hasil*=x;
        }
        hasil = (float)1/hasil;
    }
    return hasil;
}

C Program – Mencari akar2 kuadrat dengan rumus abc

#Note : tugas kuliah. milik saya.

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void akarKuadrat(int a, int b, int c);
int main()
{
int a,b,c;
printf("n Mencari akar2 persamaan kuadarat ||"
"n ==================================");
printf("n Untuk persamaan ax^2+bx+c=0, masukan nilai a,b,c pisahkan dengan spasinn ");
scanf("%d%d%d",&a,&b,&c);
akarKuadrat(a,b,c);
return 0;
}

void akarKuadrat(int a,int b, int c){
int D, nilaiX,nilaiX1,nilaiX2;
D=(b*b)-(4*a*c);
if(D==0){
nilaiX = -(b/(2*a));
printf("n Akar-akar x dari persamaan %dx^2+%dx+%d=0 adalah x = %d",a,b,c,nilaiX);
}
if(D>0){
int nilaiakarD= sqrt(D);
nilaiX1 = -((b+nilaiakarD)/(2*a));
nilaiX2 = -((b-nilaiakarD)/(2*a));
printf("n Akar-akar x1,x2 dari persamaan %dx^2+%dx+%d=0 adalah x1 = %d, x2 = %d",a,b,c,nilaiX1,nilaiX2);
}
if(D<0){
printf("n Nilai D tidak memenuhi sarat > atau = 0");
}
}

C Program – Fungsi faktorial secara manual(looping) dan rekursif

File 1 adalah contoh fungsi untuk mencari nilai faktorial yang di buat dengan cara looping, di dalam proses looping terjadi proses pengurangan pada bilangan yang di faktorialkan sehingga, n*n-1*n-2*n-3*…*1, looping akan berhenti saat kondisi while pada angka 1.

#include <stdio.h>
#include <stdlib.h>
int faktorial(int x);
int main()
{
    int x,hasil;
    printf("n Fungsi Faktorial n ===================n");
    printf("n Untuk fungsi x! masukan nilai x : ");
    scanf("%d",&x);
    hasil=faktorial(x);
    printf("n Hasil dari %d! : %d",x,hasil);
    return 0;
}
int faktorial(int x){
    int xtmp=x,hasil=x;
    while(xtmp!=1){
        if(x==0)
        {
            hasil=1;
            break;
        }
        hasil*=xtmp-1;
        xtmp--;
    }
    return hasil;
}

File 2. Konsep fungsi rekursif adalah fungsi yang memanggil dirinya sendiri di dalam fungsi tersebut hingga suatu keadaan terpenuhi. Contoh kedua ini mekanismenya hampir sama yaitu dengan mengurangi bilangan yang difaktorialkan, bedanya cara kedua menggunakan metode rekursif.

#include <stdio.h>
#include <stdlib.h>
int faktorial(int x);
int main()
{
    int x,hasil;
    printf("n Fungsi Faktorial n ===================n");
    printf("n Untuk fungsi x! masukan nilai x : ");
    scanf("%d",&x);
    hasil=faktorial(x);
    printf("n Hasil dari %d! : %d",x,hasil);
    return 0;
}
int faktorial(int x){
if (x == 1 || x == 0) return 1;
return x * faktorial(x-1);
}

*) keterangan : Aplikasi yang saya gunakan Codeblock versi 10.05

C Program – Analisa pendapatan penduduk

Keterangan : program ini menggunakan struktur binary tree. Tree hampir sama dengan link list namun tree itu strukturnya berhierarki layaknya pohon. Yakni memiliki root(akar), batang, dan daun.

Source code :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>

/* deklarasi tree dan dllc */
struct penduduk{
int gaji;
char pekerjaaan[30];
struct penduduk *kanan;
struct penduduk *kiri;
};

struct penduduk *pohon=NULL;
/* direktori vsriabel global */
char daerah[30];
int banyakSample;
int Min,Max,jmla=0,jmlb=0,allgaji;
char MinJob[30],MaxJob[30];
/* deklarasi prototype fungsi */
void addToTree(struct penduduk **root,int b, char c[30]);
void kepala();
void BEGIN();
void getMin(struct penduduk *root);
void getMax(struct penduduk *root);
void exitGate();
void resetAndRepeat();
void rupiah(int bil);
void kurang(struct penduduk *root, int a);
void lebih(struct penduduk *root, int a);
void preOrder(struct penduduk *root);
void inOrder(struct penduduk *root);
void postOrder(struct penduduk *root);
void cetak();
void addData(int jml);
void inputSample();
int isEmptyPohon();
void keMenu();
void menumenu();
void back();
void exitAndCetak();
int isEmptyGaji();
FILE *pdata;
int main()
{
system("cls");
pdata=fopen("hasil.txt","w");
kepala();
BEGIN();
return 0;
}
void kepala(){
printf("n ==============================================================================");
printf("ntt PROGRAM ANALISA PENDAPATAN PERKAPITA");
printf("n ==============================================================================n");
}
void BEGIN(){
printf("n Note : Program ini akan menganalisa sejumlah inputan data gaji dari beberapa"
"n orang yang berbeda sesuai dengan jumlah data yang diinginkan. Inputan"
"n yang sama akan otomatis ditolak oleh sistem. Hasil analisa berupa data"
"n gaji terkecil, gaji terbesar, nilai rata-rata, prosentase sample"
"n dengan gaji di bawah rata-rata dan di atas rata-rata. Dan hasil akan"
"n dicetak dalam dokument .txtn"
"n User dapat mengulang inputan jika terjadi kesalahan dalam menginput"
"n datannn");
fflush(stdin);
printf("n TEKAN Y UNTUK MELANJUTKAN PROSES ... ");
char key=getch();
if(key=='y'|| key=='Y')
inputSample();
else exitGate();
}
void exitGate(){
system("cls");
printf("n ... Program diakhiri, Terimakasih ... n");
printf("nt Author : Iin Aryani");
printf("nt NIM : 218nnn");
getchar();getchar();
exit(1);
}
void inputSample(){
system("cls");
kepala();
printf("n Banyak sampel yang akan dianalisa : ");
scanf("%d",&banyakSample);
system("cls");
kepala();
addData(banyakSample);
printf("n Data sample berhasil diinputkan.");
tanya:
printf("n Masuk ke menu kelola? Y/T ");
char key=getch();
if(key=='y'||key=='Y')
menumenu();
else {fflush(stdin);
printf("n Keluar dan cetak hasil? Y/T ");
key=getch();
if(key=='y'||key=='Y')
exitAndCetak();
else goto tanya;}
}
int isEmptyPohon(){
if(pohon==NULL) return 1;
else return 0;
}
void addData(int jml){
int tmp_gaji;
char tmp_job[30];
printf("n Masukkan data sample"
"n --------------------nn");
while(jml!=0){
printf(" Gaji : ");
scanf("%d",&tmp_gaji);
fflush(stdin);
printf(" Pekerjaan : ");
gets(tmp_job);
/* add ke tree penduduk */
addToTree(&pohon,tmp_gaji,tmp_job);
jml--;
}
}
void addToTree(struct penduduk **root,int b, char c[30]){
struct penduduk *baru;
if((*root) == NULL){
baru = malloc(sizeof(struct penduduk));
baru->gaji=b;
strcpy(baru->pekerjaaan,c);
baru->kiri = NULL;
baru->kanan = NULL;

(*root) = baru;
(*root)->kiri = NULL;
(*root)->kanan = NULL;
printf("n --------------------------n");
}
else if(b < (*root)->gaji){
addToTree(&(*root)->kiri,b,c);
}
else if(b > (*root)->gaji){
addToTree(&(*root)->kanan,b,c);
}
else if(b == (*root)->gaji)
printf("Data sudah ada!");
}
void menumenu(){
system("cls");
kepala();
printf("n Menu kelola : n"
"n 1. Reset dan dan ulangi input"
"n 2. Lihat entri pre-order"
"n 3. Lihat entri in-order"
"n 4. Lihat entri post-order"
"n 5. Keluar dan cetak hasiln"
"n .... ");
char key=getch();
system("cls");
switch(key){
case '1':resetAndRepeat();break;
case '2':printf("n ========================"
"n PreOrder Moden "
"n ========================nn");
preOrder(pohon);break;
case '3':printf("n ========================"
"n InOrder Moden "
"n ========================nn");
inOrder(pohon);break;
case '4':printf("n ========================"
"n PostOrder Moden "
"n ========================nn");
postOrder(pohon);break;
case '5':exitAndCetak();break;
default: printf("n Please choose a valid option ... ");break;
}
back();
}
void exitAndCetak(){
cetak();
exitGate();
}
void resetAndRepeat(){
pohon=NULL;
inputSample();
}
void preOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
preOrder(root->kiri);
preOrder(root->kanan);
}
}

void inOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
inOrder(root->kiri);
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
inOrder(root->kanan);
}
}
void postOrder(struct penduduk *root){
if(isEmptyPohon()==1){
printf("n Data kosong ... ");
back();
}
if(root != NULL){
postOrder(root->kiri);
postOrder(root->kanan);
printf("n Gaji : %d"
"n Pekerjaan : %s"
"n--------------------------------",
root->gaji,
root->pekerjaaan);
}
}
void back(){
getchar();
getchar();
menumenu();
}
void getallgaji(struct penduduk *root){
if(root!=NULL){
getallgaji(root->kiri);
getallgaji(root->kanan);
allgaji+=root->gaji;
}
}
void cetak(){
getallgaji(pohon);
int allGaji=allgaji;
getMin(pohon);
getMax(pohon);
int minGaji,maxGaji,rataRata;
char minGajiJob[30],maxGajiJob[30];
minGaji=Min;
strcpy(minGajiJob,MinJob);
maxGaji=Max;
strcpy(maxGajiJob,MaxJob);
rataRata=allGaji/banyakSample;
kurang(pohon,rataRata);
lebih(pohon,rataRata);
int kurangdari=jmla,lebihdari=jmlb;
float persenkurang=(float)(kurangdari*100/banyakSample);
float persenlebih=(float)(lebihdari*100/banyakSample);
fprintf(pdata,
"n ==========================================="
"n HASIL ANALISA"
"n ===========================================n"
"n Jumlah input sample : %d orang",banyakSample);
fprintf(pdata,"n Jumlah seluruh gaji : Rp ");rupiah(allGaji);
fprintf(pdata,",00n");
fprintf(pdata,"n Gaji terkecil : Rp ");rupiah(minGaji);
fprintf(pdata,",00");
fprintf(pdata,"n Dengan pekerjaan : %sn",minGajiJob);
fprintf(pdata,"n Gaji terbesar : Rp ");rupiah(maxGaji);
fprintf(pdata,",00");
fprintf(pdata,"n Dengan pekerjaan : %sn",maxGajiJob);
fprintf(pdata,"n Rata-rata penghasilan : Rp ");rupiah(rataRata);
fprintf(pdata,",00n");
fprintf(pdata,"n Presentase penghasilan < rata-rata :");
fprintf(pdata,"n Jumlah : %d orang yaitu %1.2f persenn",jmla,persenkurang);
fprintf(pdata,"n Presentase penghasilan > rata-rata :");
fprintf(pdata,"n Jumlah : %d orang yaitu %1.2f persen",jmlb,persenlebih);
fprintf(pdata,"nn ===========================================n");
fclose(pdata);
printf("n ... Opening hasil.txt .... ");
system("hasil.txt");
}
void getMin(struct penduduk *root){
if(root != NULL){
getMin(root->kanan);
Min=root->gaji;
strcpy(MinJob,root->pekerjaaan);
getMin(root->kiri);
}
}
void getMax(struct penduduk *root){
if(root != NULL){
getMax(root->kiri);
Max=root->gaji;
strcpy(MaxJob,root->pekerjaaan);
getMax(root->kanan);
}
}
void rupiah(int num){
char bil[20];
itoa(num,bil,10);
int a=0,i;
for(i=0;i<bil[i];i++){
a++;
}
int jml=a;
for (i=0;i<a;i++){
if(jml%3==1&&jml!=1)fprintf(pdata,"%c.",bil[i]);
else fprintf(pdata,"%c",bil[i]);
jml--;
}
}
void kurang(struct penduduk *root,int a){
if(root != NULL){
kurang(root->kiri,a);
kurang(root->kanan,a);
if(root->gaji<a)jmla+=1;
}
}
void lebih(struct penduduk *root,int a){
if(root != NULL){
lebih(root->kiri,a);
lebih(root->kanan,a);
if(root->gaji>a)
jmlb+=1;
}
}

C program – Manajemen data KTP untuk sensus

Keterangan : program ini saya buat di semester 2, tugas kuliah yaitu membuat program dengan basis array, dan menggunakan typedef dan struct.

Source code :

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
/* kumpulan deklarasi var-var tambahan */
int ID_KTP=1,cariID=0,ketemu,id,jml_data=0;
char pilihSatu;
char YT, cariNama[50];
int i, pilihGender,pilihBulan,pilihCari,pilihKelola;
int namaBln[13]={0,"Januari","Februari","Maret","April","Mei"
,"Juni","Juli","Agustus","September","Oktober"
,"November","Desember"};

/* kumpulan deklarasi typedef, struct */
typedef struct
{
char tempat[30];
int dd;
int mm;
int yyyy;
} tanggalLahir;
typedef struct
{
char desa[20];
int RT;
int RW;
char kecamatan[20];
char kabupaten[20];
} ket_alamat;
typedef struct
{
int ID;
char nama[50];
tanggalLahir TTL;
int gender;
ket_alamat alamat;
int agama;
char pekerjaan[30];
int status_perkawinan;
} data_sensus;
data_sensus KTP[100]={0};
/* kumpulan deklarasi fungsi-fungsi */
void label_herder()
{
printf("****************************************"
"***************************************n"
"n"
"ttt MANAJEMEN DATA SENSUS 2012n"
"n"
"******************************************"
"*************************************nn");
}
void menuSatu()
{
printf("ttt1. Input Datan"
"ttt2. Kelola Datan"
"ttt3. Tampilkan data ringkasn"
"ttt4. Exit Programn");
}
void perintah()
{
printf("ntttPerintah : ");
}
int fc_namaBulan(int bln)
{
switch(bln)
{
case 1:return namaBln[1];break;
case 2:return namaBln[2];break;
case 3:return namaBln[3];break;
case 4:return namaBln[4];break;
case 5:return namaBln[5];break;
case 6:return namaBln[6];break;
case 7:return namaBln[7];break;
case 8:return namaBln[8];break;
case 9:return namaBln[9];break;
case 10:return namaBln[10];break;
case 11:return namaBln[11];break;
case 12:return namaBln[12];break;
default : return "-";break;
}
}
int fc_gender(int ang)
{
switch(ang)
{
case 1 : return "Laki-laki";break;
case 2 : return "Perempuan";break;
default : return "-";break;
}
}
int fc_agama(int ang)
{
switch(ang)
{
case 1 : return "Islam";break;
case 2 : return "Katolik";break;
case 3 : return "Kristen";break;
case 4 : return "Hindu";break;
case 5 : return "Budah";break;
case 6 : return "Lainnya";break;
default : return "-";break;
}
}
int fc_status_perkawinan(int ang)
{
switch(ang)
{
case 1 : return "Kawin";break;
case 2 : return "Belum kawin";break;
default : return "-";break;
}
}

int main()
{

utama:
system("cls");
label_herder();
menuSatu();
ErrorSatu:
perintah();
scanf("%c",&pilihSatu);
switch(pilihSatu)
{
case '1':
/*Input data-menu level1*/
input:
system("cls");
fflush(stdin);
printf("tt =====================n"
"tt Input data pendudukn"
"tt =====================nn"
"tttNama Lengkapt: ");
gets(KTP[ID_KTP].nama);fflush(stdin);
printf("tttTempat lahirt: ");
gets(KTP[ID_KTP].TTL.tempat);fflush(stdin);
printf("tttTanggal lahirt: ");
scanf("%d",&KTP[ID_KTP].TTL.dd);fflush(stdin);
printf("tttBulan (angka)t: ");
scanf("%d",&KTP[ID_KTP].TTL.mm);fflush(stdin);
printf("tttTahun (angka)t: ");
scanf("%d",&KTP[ID_KTP].TTL.yyyy);fflush(stdin);
printf("tttJenis kelaminn"
"ttt 1. Laki-lakin"
"ttt 2. PerempuanntttKodet: ");
scanf("%d",&KTP[ID_KTP].gender);fflush(stdin);
printf("tttAlamat n"
"ttt Desat: ");
gets(KTP[ID_KTP].alamat.desa);fflush(stdin);
printf("ttt RTt: ");
scanf("%d",&KTP[ID_KTP].alamat.RT);fflush(stdin);
printf("ttt RWt: ");
scanf("%d",&KTP[ID_KTP].alamat.RW);fflush(stdin);
printf("ttt Kecamatant: ");
gets(KTP[ID_KTP].alamat.kecamatan);fflush(stdin);
printf("ttt Kabupatent: ");
gets(KTP[ID_KTP].alamat.kabupaten);fflush(stdin);
printf("tttAgama n"
"ttt 1. Islamn"
"ttt 2. Katolikn"
"ttt 3. Kristenn"
"ttt 4. Hindun"
"ttt 5. Budhan"
"ttt 6. Lainnyan"
"tttkode t: ");
scanf("%d",&KTP[ID_KTP].agama);fflush(stdin);
printf("tttPekerjaan t: ");
gets(KTP[ID_KTP].pekerjaan);fflush(stdin);
printf("tttStatus perkawinan t:n"
"ttt 1. Kawinn"
"ttt 2. Belum kawinn"
"tttkode t: ");
scanf("%d",&KTP[ID_KTP].status_perkawinan);fflush(stdin);
KTP[ID_KTP].ID=ID_KTP;

ID_KTP +=1;
fflush(stdin);
printf("nttInput data lagi? "
"Y/T/lainnya untuk keluar. ");
scanf("%c",&YT);
switch(YT)
{
case 'y':case 'Y': goto input;break;
blmjawab:
case 't':case 'T':
fflush(stdin);
printf("tKembali ke Menu Utama? Y untuk Ya,"
" atau lainnya untuk keluar. ");
scanf("%c",&YT);
switch(YT)
{
case ' ':case 'n':
case 'y':case 'Y': goto utama;break;
default: exit(1);
}
break;
}
break;
case '2':
caridata :
system("cls");
fflush(stdin);
printf("tt ======================n"
"tt Cari data pendudukn"
"tt ======================nn");
printf("ttCari berdasarkan :n"
"ttt 1. ID pendudukn"
"ttt 2. Kembalin"
"ttKode: "); scanf("%d", &pilihCari);
switch(pilihCari)
{
case 1:
fflush(stdin);
printf("tttID : ");scanf("%d",&cariID);
if(cariID==0){
printf("ttt========================n"
"ttt Tidak ada ID : 0n"
"ttt========================nn");
goto blmjawab;}
if(KTP[cariID].ID==cariID)
{
system("cls");
printf("ttt===================n"
"ttt Data ditemukan!n"
"ttt===================n");
datacari:
printf("ttPenduduk dengan IDt: %dn"
,KTP[cariID].ID);
printf("ttNama ttt: %sn"
,KTP[cariID].nama);
printf("ttTempat, Tanggal Lahir "
"t: %s, %d %s %dn"
,KTP[cariID].TTL.tempat
,KTP[cariID].TTL.dd
,fc_namaBulan(KTP[cariID].TTL.mm)
,KTP[cariID].TTL.yyyy);
printf("ttJenis kelamintt: %sn"
,fc_gender(KTP[cariID].gender));
printf("ttAlamatn"
"tt Desattt: %sn"
,KTP[cariID].alamat.desa);
printf("tt RTttt: %dn"
,KTP[cariID].alamat.RT);
printf("tt RWttt: %dn"
,KTP[cariID].alamat.RW);
printf("tt Kecamatantt: %sn"
,KTP[cariID].alamat.kecamatan);
printf("tt Kabupatentt: %sn"
,KTP[cariID].alamat.kabupaten);
printf("ttAgama ttt: %sn"
,fc_agama(KTP[cariID].agama));
printf("ttPekerjaantt: %sn"
,KTP[cariID].pekerjaan);
printf("ttStatus perkawinant: %snn"
,fc_status_perkawinan(KTP[cariID].status_perkawinan));
/* menu untuk kelola hapus dan edit data */
printf("ttt===================n"
"ttt Kelola datan"
"ttt===================nn"
"ttt 1. Edit datan"
"ttt 2. Hapus datan"
"ttt 3. Cari lagin"
"ttt 4. Kembali ke menu utaman"
"ttt 5. Keluarnn"
"tttPerintah : "
);scanf("%d",&pilihKelola);
switch(pilihKelola)
{
case 1 :
/*Edit data*/
system("cls");
fflush(stdin);
printf("tt ======================n"
"tt Edit data pendudukn"
"tt ======================nn");
printf("tttNama sebelumnya : %sn"
,KTP[cariID].nama);
printf("tttNama Barut: ");
gets(KTP[cariID].nama);fflush(stdin);
printf("tttTempat lahir sebelumnyat: %sn"
,KTP[cariID].TTL.tempat);
printf("tttTempat lahirt: ");
gets(KTP[cariID].TTL.tempat);fflush(stdin);
printf("tttTanggal lahir sebelumnyat: %dn"
,KTP[cariID].TTL.dd);
printf("tttTanggal lahirt: ");
scanf("%d",&KTP[cariID].TTL.dd);fflush(stdin);
printf("tttBulan lahir sebelumnyat: %dn"
,KTP[cariID].TTL.mm);
printf("tttBulan (angka)t: ");
scanf("%d",&KTP[cariID].TTL.mm);fflush(stdin);
printf("tttTahun lahir sebelumnyat: %dn"
,KTP[cariID].TTL.yyyy);
printf("tttTahun (angka)t: ");
scanf("%d",&KTP[cariID].TTL.yyyy);fflush(stdin);
printf("tttJenis kelamin sebelumnya t: %sn"
,fc_gender(KTP[cariID].gender));
printf("tttJenis kelaminn"
"ttt 1. Laki-lakin"
"ttt 2. PerempuanntttKodet: ");
scanf("%d",&KTP[cariID].gender);fflush(stdin);
printf("ttAlamat sebelumnyan"
"tt Desattt: %sn"
,KTP[cariID].alamat.desa);
printf("tt RTttt: %dn"
,KTP[cariID].alamat.RT);
printf("tt RWttt: %dn"
,KTP[cariID].alamat.RW);
printf("tt Kecamatantt: %sn"
,KTP[cariID].alamat.kecamatan);
printf("tt Kabupatentt: %sn"
,KTP[cariID].alamat.kabupaten);
printf("tttAlamat barun"
"ttt Desat: ");
gets(KTP[cariID].alamat.desa);fflush(stdin);
printf("ttt RTt: ");
scanf("%d",&KTP[cariID].alamat.RT);fflush(stdin);
printf("ttt RWt: ");
scanf("%d",&KTP[cariID].alamat.RW);fflush(stdin);
printf("ttt Kecamatant: ");
gets(KTP[cariID].alamat.kecamatan);fflush(stdin);
printf("ttt Kabupatent: ");
gets(KTP[cariID].alamat.kabupaten);fflush(stdin);
printf("ttAgama sebelumnyat: %sn"
,fc_agama(KTP[cariID].agama));
printf("tttAgama n"
"ttt 1. Islamn"
"ttt 2. Katolikn"
"ttt 3. Kristenn"
"ttt 4. Hindun"
"ttt 5. Budhan"
"ttt 6. Lainnyan"
"tttkode t: ");
scanf("%d",&KTP[cariID].agama);fflush(stdin);
printf("ttPekerjaan sebelumnyatt: %sn"
,KTP[cariID].pekerjaan);
printf("tttPekerjaan t: ");
gets(KTP[cariID].pekerjaan);fflush(stdin);
printf("ttStatus sebelumnyatt: %sn"
,fc_status_perkawinan(KTP[cariID].agama));
printf("tttStatus perkawinan t:n"
"ttt 1. Kawinn"
"ttt 2. Belum kawinn"
"tttkode t: ");
scanf("%d",&KTP[cariID].status_perkawinan);
fflush(stdin);
system("cls");
printf("ttt========================n"
"ttt Data berhasil diubahn"
"ttt========================nn"
);goto datacari;

case 2 :
/*Hapus data*/
system("cls");
KTP[cariID].ID=NULL;
printf("ttt=====================================n"
"ttt Data dengan ID : %d telah dihapusn"
"ttt=====================================n"
"n"
,cariID);
goto blmjawab;
break;
default :
case 3 : goto caridata; break;
case 4 : goto utama;break;
case 5 : exit(1);
}
}
else{
printf("tt======================================n"
"tt Tidak ditemukan data untuk ID : %dn"
"tt======================================n"
"nn",cariID);
goto blmjawab;
}
break;
case 2:
goto utama;
break;
default: goto caridata;
}

break;
case 'n':case' ': goto utama;
default:
printf("tttInput salah. Ulangin");
fflush(stdin);
goto ErrorSatu;
break;
case '3': /*data ringkas, if ID!=0*/
system("cls");
for(i=1;i<ID_KTP;i++){
if(KTP[i].ID!=0)
jml_data+=1;
else{jml_data=0;}
}
if(jml_data==0){
printf("ttt===============n"
"ttt Data kosongn"
"ttt===============nn");
goto blmjawab;
}
printf("ttt==================n"
"ttt Ringkasan datan"
"ttt==================nn"
"tt=========================================n"
"tt| ID | NAMA |n"
"tt=========================================n");
for(i=1;i<ID_KTP;i++){
if(KTP[i].ID!=0)
printf("tt|%5d | %27s |n"
"tt|=======================================|n"
,KTP[i].ID,KTP[i].nama);
}printf("n");
goto blmjawab;
break;
case '4': exit(1);
}

}

Minta pendapatnya untuk kesalahan dan kekurangannya. Terimakasih.

SLLNC – lanjutan (penambahan data ditengah list)

Diilhami dari tugas kuliah. Terimakasih untuk dosen saya, Pak Iksan yang sudah memberi tugas ini. Jadinya saya jadi punya ‘bahan’ untuk diposting dan dibuat. Saya lihat di google sepertinya belum ada yang membahas link-list lanjutan, atau cuma saya yang kurang beruntung bisa menemukannya ==” . Langsung saja.

Di tulisan sebelumnya yang telah saya post di blog ini membahas tentang fungsi-fungsi umum pada program SLLNC (Single Linked-List Non Circular) seperti penambahan data dari depan, belakang, menampilkan data, menghapus dari depan, belakang, dan menghapus keseluruhan. Sekarang saya tambahi dengan penambahan data dari tengan link-list.

Logikanya sederhana, pertama kita harus mengetahui dulu jumlah data yang ada dalam link-list. Kemudian untuk mengetahui posisi tengah data, maka jumlah total data dibagi dua (jumlah/2). Kemudian dilakukan penyisipan data didalam link-list

dari program yang ada pada post https://ilmucerdas.wordpress.com/2012/05/22/program-sllnc-dengan-head-dan-tail-dengan-bahasa-c/, tambahkan fungsi berikut untuk melakukan penambahan data dari tengah.

 int jmlData(){
    struct node *tmp=first;
    int jml=0;
    if(first==NULL)return 0;
    else{ while(tmp!=NULL){
        tmp= tmp->link;
        jml++;}}
    return jml;
}
void addMiddle(){
    system("cls");
    struct node *tmp=first,*tmp2,*newData = malloc(sizeof(struct node));
    int jml = jmlData(),jml2=0,middle;
    if(jml<2)middle=0;
    else middle= (jml/2)-1;
    printf("\n _____Add from middle side_____");
    printf("\n\n Enter the item tobe created: ");
    scanf("%d", &newData->info);
    newData->link=NULL;
    if(first==NULL){
        first=last=newData;
        last->link=NULL;
    }
    else{
        while(jml2!=middle){
            tmp=tmp->link;
            jml2++;
        }
        tmp2= tmp->link;
        newData->link=tmp2;
        tmp->link=newData;
    }
    display();
}

Download program lengkapnya di link berikut :

http://adf.ly/Xsg6H

C – Stack of array

Pada dasarnya STACK atau tumpukan itu hampir sama dengan array, hanya saja dalam stack, prinsip ketersediaan ruang didefinisikan dalam konstanta. Dan pengambilan data tidak dapat langsung diambil di index yang dituju seperti pada array, tetapi diambil dari data teratas terlebih dahulu. Sistemnya adalah data yang terakhir masuk adalah yang pertama keluar. Seperti pada contoh program sederhana berikut.

#include <stdio.h>
#include <stdlib.h>#define MAX 6
void push();
void pop();
int isFull();
int isEmpty();
void display();
int stack[6], TOP= -1;
int main() {
int stack[6], TOP= -1, choice;
printf("\nENter the choice\n");
printf("1. PUSH\n");
printf("2. POP\n");
printf("3. DISPLAY\n");
scanf("%d",&choice);
switch(choice){
case 1: push(); break;
case 2: pop(); break;
case 3: display();default : printf("invalid choice");
}
main();
return 0;
}
int isFull(){
if(TOP==MAX-1) return 1;
else return 0;
}
int isEmpty(){
if(TOP==-1) return 1;
else return 0;
}
void push(){
if(isFull()==1) printf("Overflow");
else {
int item;
printf("Enter the item :");
scanf("%d", &item);
TOP=TOP+1;
stack[TOP]=item;
}
}
void pop(){
int temp;
if(isEmpty()==1) printf("under flow");
else{
temp=stack[TOP];
TOP=TOP-1;
}
}
void display(){
int i, temp=TOP;
if(isEmpty()==1)printf("\nNo data");
else{
printf("\nStack contens are\n");
printf("\n\tLocation data\n");
printf("\n-------------\nTOP->");
for(i=TOP;i>=0;i--){
printf("\t%d\t->%d",temp--,stack[i]);
printf("\n\t------------\n");
}
}
}
 

Program SLLNC dengan Head dan Tail dengan bahasa C

Berikut adalah contoh sederhana program SLLNC (Single Link List Non Circular) dengan pointer head dan tail yang dilengkapi fungsi inisialisasi, pengecekan list, penambahan dari depan, penambahan dari belakang, penghapusan dari depan, penghapusan dari belakang, serta fungsi untuk menghapus semua list.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>

struct node{
    int info;
    struct node *link;
};

struct node *first=NULL, *last=NULL;
void addFront();
void addBack();
void clearFront();
void clearBack();
void clearAll();
void cekElement();
void display();
void back();
void exitGate();
int isEmpty();

int main()
{
    system("cls");
    char choice;
    printf("\n _____Single Link-list Non Circular_____");
    printf("\n\n Enter the choice:\n");
    printf("\n 1. Add from front side "
           "\n 2. Add from back side "
           "\n 3. Delete from front side "
           "\n 4. Delete from back side "
           "\n 5. Delete all data record "
           "\n 6. Display record "
           "\n 7. Exit "
           "\n\n ...");
    scanf("%c",&choice);
        switch(choice){
            case '1': addFront(); break;
            case '2': addBack();break;
            case '3': clearFront();break;
            case '4': clearBack();break;
            case '5': clearAll();break;
            case '6': display(); break;
            case '7': exitGate();break;
            default: system("cls"); printf("\n Please chose valid option...\n");
            back(); break;
            }
    return 0;
}
int isEmpty(){
    if(first == NULL) return 1;
    else return 0;
}

void addFront(){
 struct node *newData=malloc(sizeof(struct node));
 system("cls");
 printf("\n _____Add from front side_____");
 printf("\n\n Enter the item tobe created: ");
 scanf("%d", &newData->info);
 newData->link=NULL;
 if(isEmpty()==1){
 first=last=newData;
 last->link = NULL;
 }
 else {
 newData->link = first;
 first = newData;
 }
 printf(" Data has been created.");
 display();
}

void addBack(){
    struct node *newData=malloc(sizeof(struct node));
    system("cls");
    printf("\n _____Add from back side_____");
    printf("\n\n Enter the item tobe created: ");
    scanf("%d", &newData->info);
    newData->link=NULL;
    if(isEmpty()==1){
        first=last=newData;
        last->link=NULL;
    }
    else{
        last->link=newData;
        last=newData;
    }
      printf(" Data has been created.");
      display();
}
void clearFront(){
    char titik[]="...";
    int i,deleted;
    printf("\n Processing");
    for(i=0;titik[i]>0;i++){Sleep(200);printf("%c",titik[i]);}
    cekElement();
    struct node *hapus;
        if(first!=last){
            hapus=first;
            deleted=hapus->info;
            first=first->link;
        }
        else{
            deleted=first->info;
            first=last=NULL;
        }
    printf(" %d is deleted from link-list.",deleted);
    display();
}
void clearBack(){
    char titik[]="...";
    int i,deleted;
    printf("\n Processing");
    for(i=0;titik[i]>0;i++){Sleep(200);printf("%c",titik[i]);}
    cekElement();
    struct node *tmp,*hapus;
        tmp=first;
        if(first!=last){
            while(tmp->link!=last){
                tmp=tmp->link;
            }
            hapus=last;
            last=tmp;
            deleted=hapus->info;
            last->link=NULL;
        }
        else{
        deleted=last->info;
        first=last=NULL;
        }
    printf(" %d is deleted from link-list.",deleted);
    display();
}
void clearAll(){
    char titik[]="...";
    int i,deleted;
    printf("\n Processing");
    for(i=0;titik[i]>0;i++){Sleep(200);printf("%c",titik[i]);}
    cekElement();
    struct node *tmp,*hapus;
    tmp=first;
    while(tmp!=NULL){
        hapus = tmp;
        tmp = tmp->link;
    }
    first=last=NULL;
    printf("\n All record has been erased.");
    display();
}
void display(){
        cekElement();
        struct node *temp=first;
        printf("\n\n The elements are ... \n\n");
        while(temp!=NULL){
            printf("\t%d -> ",temp->info);
            temp=temp->link;
        }
       printf("NULL");
    back();
}
void back(){
    getchar();
    getchar();
    main();
}
void cekElement(){
    if(first==NULL)
        {printf("\n Status : No Data.");
        back();}
}
void exitGate(){
    system("cls");
    printf("\n Author : Iin aryani :)");
    getch();exit(1);
}

Saya akan tulis ini berulang-ulang. Saya juga pemula, jadi tolong berikan tanggapan atau kritik dan saran agar blog ini bisa lebih baik. Terimakasih.