Blog Archives

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 : 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 – 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

Aplikasi untuk mencatat informasi kontak personal

Berikut adalah source code sederhana untuk mencatat informasi kontak. Program ini menggunakan database berupa file txt yang diakses untuk menyimpan data.

/*------------------------------------*
 | Copyright:Ilmucerdas.wordpress.com |
 | Author:iin.aryani@yahoo.co.id      |
 |                                    |
 | Aplikasi pencatat informasi kontak |
 | Versi 01                           |
 | oleh : Iin Aryani                  |
 | 2012                               |
 *------------------------------------*/
/* kumpulan file library */
#include <stdio.h>
#include <stdlib.h>
#include <direct.h>
#include <string.h>
/* kumpulan deklarasi-deklarasi prototype fungsi dan variabel */
void tambahKontak();
void lihatKontak();
void cariKontakFromNama(char nama[]);
void cariKontakFromNo(char no[]);
void cekFile();
void keluar();
void back();
void errMsg();
struct kontak
{
    char nama[20];
    char nomor[20];
    char alamat[30];
}
kontak;
int jumlahKontak=0;
char keyword,cariNama[20],cariNomor[20];
FILE *Fileku,*Fileku2;

void main()
{
    mkdir("db");
    system("cls");
    printf("\n ________APLIKASI PENCATAT KONTAK________\n"
           "\n 1. Tambahkan data kontak"
           "\n 2. Lihat semua kontak"
           "\n 3. Cari kontak"
           "\n 4. Keluar"
           "\n\n Perintah : ");
    scanf("%c",&keyword);
    system("cls");
    if(keyword=='1'){
        tambahKontak();
    }
    else if(keyword=='2'){
        lihatKontak();
    }
    else if(keyword=='3'){
        printf("\n 1. Cari berdasarkan nama"
               "\n 2. Cari berdasarkan nomor"
               "\n\n Perintah : ");
        fflush(stdin);
        scanf("%c",&keyword);
        system("cls");
        printf("\n _________CARI KONTAK________\n");
        if(keyword=='1'){
            printf("\n Nama : ");
            fflush(stdin);
            gets(cariNama);
            cariKontakFromNama(cariNama);
        }
        if(keyword=='2'){
            printf("\n No : ");
            fflush(stdin);
            gets(cariNomor);
            cariKontakFromNo(cariNomor);
        }
        else errMsg();
    }
    else if(keyword=='4'){
        keluar();
    }
    else errMsg();
}
void tambahKontak(){
    Fileku=fopen("db/kontakList.txt","a+");
    printf("\n ________TAMBAH KONTAK________\n"
           "\n Nama : ");
    fflush(stdin);
    gets(kontak.nama);

    printf(" Alamat : ");
    fflush(stdin);
    gets(kontak.alamat);
    printf(" No.Telp/Hp. : ");
    fflush(stdin);
    gets(kontak.nomor);
    fwrite(&kontak, sizeof(kontak),1,Fileku);
    printf("\n Data berhasil ditambahkan...\n");
    fclose(Fileku);
    back();
}
void lihatKontak(){
    cekFile();
    Fileku = fopen("db/kontakList.txt","a+");
    printf("\n _____________________________DAFTAR SEMUA KONTAK______________________________\n");
    printf("\n %20s | %30s | %20s |\n","Nama","Alamat","Nomor");
    while(fread(&kontak, sizeof(kontak),1,Fileku)!=0){
    printf("\n %20s | %30s | %20s |",
           kontak.nama,kontak.alamat,kontak.nomor);
    }
    fclose(Fileku);
    printf("\n");
    back();
}
void cekFile(){
    Fileku=fopen("db/kontakList.txt","a+");
    if(fread(&kontak, sizeof(kontak),1,Fileku)==0){
    printf("\n Database kosong!\n");
    fclose(Fileku);
    back();
    }
    fclose(Fileku);
}
void cekJumlah(){
    Fileku = fopen("db/kontakList.txt","a+");
    while(fread(&kontak,sizeof(kontak),1,Fileku)==1)
            {
                jumlahKontak++;
            }
    fclose(Fileku);
}
void cariKontakFromNama(char nama[]){
    int ketemu=0;
    Fileku = fopen("db/kontakList.txt","a+");
    int no_rekaman=0;
            while(fread(&kontak,sizeof(kontak),1,Fileku)==1)
            {
                no_rekaman++;
                if(strcmp(kontak.nama,nama)==0)
                    {ketemu=1;break;}
            }
    fclose(Fileku);
    if(ketemu==1)
        {
            printf("\n _______DATA DITEMUKAN_______\n"
                   "\n Nama \t\t: %10s%20s"
                   "\n Alamat\t\t: %30s"
                   "\n No.Telp/Hp\t: %10s%20s"," ",
                   kontak.nama,kontak.alamat," ",kontak.nomor);
            printf("\n 1. Hapus"
                   "\n 2. Kembali"
                   "\n\n Perintah : ");
            fflush(stdin);
            scanf("%c",&keyword);
            if(keyword=='1'){
                Fileku = fopen("db/kontakList.txt","a+");
                Fileku2=fopen("db/kontakList2.txt","w+");
                no_rekaman--;
                int hit=0;

                while(fread(&kontak,sizeof(kontak),1,Fileku)==1)
                {
                 if(hit!=no_rekaman){
                 fwrite(&kontak, sizeof(kontak),1,Fileku2);
                 }
                 hit++;
                }
                fclose(Fileku);
                printf("\n Data berhasil dihapus ");
            fclose(Fileku2);
            unlink("db/kontakList.txt");
            rename("db/kontakList2.txt","db/kontakList.txt");
            }
    }
    else printf("\n TIDAK DITEMUKAN\n");
    fclose(Fileku);
    back();
}
void cariKontakFromNo(char no[]){
    int ketemu=0;
    Fileku = fopen("db/kontakList.txt","a+");
    int no_rekaman=0;
            while(fread(&kontak,sizeof(kontak),1,Fileku)==1)
            {
                no_rekaman++;
                if(strcmp(kontak.nomor,no)==0)
                    {ketemu=1;break;}
            }
    fclose(Fileku);
    if(ketemu==1)
        {
            printf("\n _______DATA DITEMUKAN_______\n"
                   "\n Nama \t\t: %10s%20s"
                   "\n Alamat\t\t: %30s"
                   "\n No.Telp/Hp\t: %10s%20s"," ",
                   kontak.nama,kontak.alamat," ",kontak.nomor);
            printf("\n 1. Hapus"
                   "\n 2. Kembali"
                   "\n\n Perintah : ");
            fflush(stdin);
            scanf("%c",&keyword);
            if(keyword=='1'){
                Fileku = fopen("db/kontakList.txt","a+");
                Fileku2=fopen("db/kontakList2.txt","w+");
                no_rekaman--;
                int hit=0;

                while(fread(&kontak,sizeof(kontak),1,Fileku)==1)
                {
                 if(hit!=no_rekaman){
                 fwrite(&kontak, sizeof(kontak),1,Fileku2);
                 }
                 hit++;
                }
                fclose(Fileku);
                printf("\n Data berhasil dihapus ");
            fclose(Fileku2);
            unlink("db/kontakList.txt");
            rename("db/kontakList2.txt","db/kontakList.txt");
            }
    }
    else printf("\n TIDAK DITEMUKAN\n");
    fclose(Fileku);
    back();
}
void back(){
    getchar();
    getchar();
    main();
}
void keluar(){
    system("cls");
    printf("\n Terimakasih...\n by:https://ilmucerdas.wordpress.com\n\n");
    getchar();
    getchar();
    exit(1);
}
void errMsg(){
    system("cls");
    printf("\n Perintah salah!\n");
    getchar();
    getchar();
    main();
}

Beritahu saya jika ada yang salah.

Program Kumpulan 4 macam sorting array (bubble, exchange, selection, insertion)

Sebenarnya ini adalah source kode untuk tugas kuliah saya. Mungkin masih banyak sekali kekurangannya, maka saya tidak akan bosan untuk meminta kritik dan saran teman-teman reader semua.

#include <stdio.h>
#include <stdlib.h>
void addArray();
void cekArray();
void tampil();
void bubbleSort();
void exchangeSort();
void selectionSort();
void insertionSort();
void resetArray();
int A[100]={'nol'},jml,i,j,k,no,tampung,pos;
int sekunder[100];
void main()
{
    system("cls");
    resetArray();
    char key;
    printf("\n _______PROGRAM PENGURUTAN KODE POS_______\n"
           "\n 1. Masukan data"
           "\n 2. Bubble Sort"
           "\n 3. Exchange Sort"
           "\n 4. Selection Sort"
           "\n 5. Insertion Sort"
           "\n 6. Keluar"
           "\n Perintah : ");
    scanf("%c",&key); system("cls");
    if(key=='1'){addArray();}if(key=='2'){bubbleSort();}
    if(key=='3'){exchangeSort();}if(key=='4'){selectionSort();}
    if(key=='5'){insertionSort();}if(key=='6'){exit(1);}
    else {printf("\n Perintah salah.");getchar();getchar();main();}
}
void tampil(){
    for(k=0;k<jml;k++){printf("[%d] ",A[k]);}
}
void cekArray(){
    if(A[0]=='nol'){printf("\n Array kosong!");
    getchar();getchar();main();}
}
void addArray(){
    printf("\n ______MENAMBAHKAN DATA______\n"
           "\n Berapa data yang ingin diinput? ");
    scanf("%d",&jml);
    for(i=0;i<jml;i++){
        printf(" data ke-%d : ",i+1);
        scanf("%d",&A[i]);
        sekunder[i]=A[i];
    }
    printf("\n Data berhasil diinput : ");
    tampil();getchar();getchar();main();
}
void bubbleSort(){
    cekArray();
    printf("\n ______BUBBLE SORT METODE______\n"
           "\n Data sebelum disorting : "); tampil();
    for(i=1;i<jml;i++){
        printf("\n Proses ke-%d",i);
        for(j=1;j<jml;j++){
            if(A[j-1]>A[j]){
                printf("\n tukar %d <-> %d --->",A[j-1],A[j]);
                tampung=A[j-1];
                A[j-1]=A[j];
                A[j]=tampung;
                tampil();
            } } }
    printf("\n\n Data setelah disorting : ");
    tampil();getchar();getchar();main();
}
void exchangeSort(){
    cekArray();
    printf("\n ______EXCHANGE SORT METODE______\n"
           "\n Data sebelum disorting : ");
           tampil();no=0;
    for(i=jml-1;i>0;i--){
        no++;
        printf("\n\n Proses ke-%d",no);
        for(j=i-1;j>-1;j--){
            if(A[i]<A[j]){
                printf("\n tukar %d <-> %d --->",A[i],A[j]);
                tampung=A[i];
                A[i]=A[j];
                A[j]=tampung; tampil();
            } } }
    printf("\n\n Data setelah disorting : ");
    tampil();getchar();getchar();main();
}
void selectionSort(){
    cekArray();
    printf("\n ______SELECTION SORT METODE______\n"
           "\n Data sebelum disorting : ");
    tampil();no=0;
    for(i=0;i<jml-1;i++){
        pos=i;no++;
        printf("\n_______________________________________"
               "\n______________Proses %2d________________\n",no);
        for(j=0;j<jml;j++){printf("%5d ",j);}
        printf("\n");
        for(j=0;j<jml;j++){printf("%5d ",A[j]);}
        printf("\n\n Pembanding        Pos");
        for(j=i+1;j<jml;j++){
            if(A[pos]<A[j])
            printf("\n %d < %d            [%d]",A[pos],A[j],pos);
            if(A[pos]>A[j]){
            printf("\n %d > %d    <->     [%d]",A[pos],A[j],j);
            pos=j;}
        }
        if(pos!=i){
            printf("\n tukar data ke-%d [%d] dengan data ke-%d [%d]",i,A[i],pos,A[pos]);
            tampung=A[pos];
            A[pos]=A[i];
            A[i]=tampung;
        } }
    printf("\n\n Data setelah disorting : ");
    tampil();getchar();getchar();main();
}
void insertionSort(){
    cekArray();
    printf("\n ______INSERTION SORT METODE______\n"
           "\n Data sebelum disorting : ");
    tampil();
    for(i=1;i<jml;i++){
        tampung=A[i];
        printf("\n____________________________________"
               "\n_____________Proses %2d______________\n",i);
        for(j=0;j<jml;j++){printf("%5d ",j);}
        printf("\n");
        for(j=0;j<jml;j++){printf("%5d ",A[j]);}
        printf("\n yang ditampung : %d\n\n",tampung);
        j=i-1;
        for(k=1;k<=i;k++){
            if(A[k-1]>tampung){
            printf(" %d < %d     Geser data[%d]->data[%d]\n",tampung,A[k-1],j,j+1);
            j--;}
        }
        j=i-1;
        while(A[j]>tampung && j>=0){
            A[j+1]=A[j];
            j--;
        }
        A[j+1]=tampung;
        printf("\n Tempatkan %d pada index[%d]",tampung,j+1);
    }
    printf("\n\n Data setelah disorting : ");
    tampil();getchar();getchar();main();
}
void resetArray(){
    for(i=0;i<jml;i++){
        A[i]=sekunder[i];
    }
}

Kalo ada yang salah beritahu saya ya 🙂

Program T9 – pengubah karakter ke angka dalam keypad HP T9

Pada keypad Telephone selular yang bukan type QWERTY, penempatan karakter huruf ,angka, serta spasi dibagi menjadi 10 bagian, yaitu dari angka 0 s.d 9. Angka-angka tersebut mewakili beberapa karakter. Misal angka 2, mewakili karakter a,b,c, dan angka 2 itu sendiri. Dan program ini dibua untuk mengetahui berapa susunan angka T9 pada telephone seluler jika inputnya sebuah kalimat majemuk yang dapat tersusun dari huruf, angka, dan tanda baca.

#include <stdio.h>
#include <ctype.h>

typedef struct{
    char elemen[100];
    int jml_kata;
}Kata;
Kata kata;
Kata *p_kata=&kata;
void ToAngka(char k);
void T9(char kalimat[]);
void main()
{
    char kalimat[100];
    p_kata->jml_kata=0;
    char *p=p_kata->elemen;
    int i;
    printf("\n Masukan sebuah kalimat : ");
    gets(kalimat);
    fflush(stdin);
    for(i=0;i<kalimat[i];i++){
        *p=kalimat[i];
        p_kata->jml_kata++;
        }
    printf("\n Tatanan angka T9 dari %s adalah :\n\n ",kalimat);
    T9(kalimat);
    getchar();
    getchar();

}
void T9(char kalimat[]){
    int i;
    for(i=0;i<kalimat[i];i++){
        ToAngka(toupper(kalimat[i]));
    }
}
void ToAngka(char k){
    switch(k){
        case '0':
        printf("0");break;
        case '1': default :
        printf("1");break;
        case '2':
        case 'A':
        case 'B':
        case 'C':
        printf("2");break;
        case '3':
        case 'D':
        case 'E':
        case 'F':
        printf("3");break;
        case '4':
        case 'G':
        case 'H':
        case 'I':
        printf("4");break;
        case '5':
        case 'J':
        case 'K':
        case 'L':
        printf("5");break;
        case '6':
        case 'M':
        case 'N':
        case 'O':
        printf("6");break;
        case '7':
        case 'P':
        case 'Q':
        case 'R':
        case 'S':
        printf("7");break;
        case '8':
        case 'T':
        case 'U':
        case 'V':
        printf("8");break;
        case '9':
        case 'W':
        case 'X':
        case 'Y':
        case 'Z':
        printf("9");break;
        case ' ':
        printf("#");break;
    }
}

Program ini masih memiliki kemungkinan salah atau error, tolong beritahu saya jika ada kekurangan dan kesalahan pada program ini. Saya juga mengharapkan saran, agar bisa lebih baik 🙂

Program pendeteksi jenis karakter

Berikut adalah program sederhana yang dapat digunakan untuk mengidentifikasi banyaknya huruf, membedakan mana yang  vokal dan yang konsonan serta numerik.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
void trim(char *kata);
void head();
int main()
{
    char kata[100],v[100],k[100],n[100],cari;
    int nov=0,nok=0,non=0,flag=0,jml=0;
    head();
    printf("\n\tInput kata atau kalimat : ");
    gets(kata);
    trim(kata);
    int i,lenght=strlen(kata),vokal=0,konsonan=0,numerik=0;
    for(i=0;i<lenght;i++)
        {
            if(toupper(kata[i])=='A'||
               toupper(kata[i])=='I'||
               toupper(kata[i])=='U'||
               toupper(kata[i])=='E'||
               toupper(kata[i])=='O')
               {
                   v[nov]=kata[i];
                   vokal++;
                   nov++;
               }
            else if(isdigit(kata[i]))
               {
                   n[non]=kata[i];
                   numerik++;
                   non++;
               }
            else
               {
                 k[nok]=kata[i];
                 konsonan++;
                 nok++;
               }

        }
    printf("\n\t--- Keterangan ---\n"
           "\tJumlah karakter : %d\n"
           "\tHuruf vokal : %d\n",lenght,vokal);
           for(i=0;i<vokal;i++)
            {
                printf("\t%c\n",v[i]);
            }
    printf("\tHuruf konsonan : %d\n",konsonan);
           for(i=0;i<konsonan;i++)
            {
                printf("\t%c\n",k[i]);
            }
    printf("\tNumerik : %d\n",numerik);
           for(i=0;i<numerik;i++)
                printf("\t%c\n",n[i]);

    printf("\n\tMasukan data yang anda cari : ");
    scanf("%c",&cari);
    for(i=0;i<lenght;i++)
        if(kata[i]==cari)
            {
                flag=1;jml++;
            }
    if(flag==1)printf("\tData ditemukan. Sebanyak %d karakter\n",jml);
    else printf("\nData tidak ditemukan.");
    getchar();
    getchar();
    return 0;
}

void head()
    {
        printf(" _____Program detektor karakter____\n");
    }
void trim(char *kata){
    int a,b;
    for(a=0;kata[a];a++){
        if(isspace(kata[a])){
            for(b=a;kata[b];b++){
                kata[b]=kata[b+1];}
                    a--;}
        }

}

Jika ada kesalahan dan kekurangan pada source ini tolong dikomen ya. Maklum saya juga pemula dalam bahasa C.