Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
IMPLEMENTASI MERGING DENGAN OPERATOR AND 1. Buka TextPad/NotePad, bwt file baru simpan dengan nama : FNilaiSem01.txt. Isi file tsb dengan data berikut ini: 001
B01
A
001
B03
B
001
B05
E
002
B06
B
003
A01
A
003
A02
D
<note antar kolom dipisahkan dengan tab> 2. bwt file baru simpan dengan nama : FNilaiSem02.txt. Isi file tsb dengan data berikut ini: 001
B02
A
001
B04
B
002
B03
D
003
A03
A
003
A04
E
<note antar kolom dipisahkan dengan tab> 3. Buka TextPad, Save-As dengan nama file: Merging.cpp. Ketik program berikut ini: //Program merging data mata kuliah mahasiswa berdasarkan NPM #include<stdio.h> #include<string.h> #include<stdlib.h>
int main(){ FILE *FNilaiA,*FNilaiB,*FNilaiBaru;//deklarasi file nilai struct{ char NIM[4];//kolom 1 char Kode_MK[4];//kolom 2 char Grade;//kolom 3 }RekNilaiA,RekNilaiB,RekNilaiBaru;//isi satu baris data dalam file nilai yg terdiri dari 3 kolom
IF-UTAMA
1
Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
//open File nilai FNilaiA=fopen("FNilaiSem01.txt","rt"); fscanf(FNilaiA,"%s\t%s\t%c",RekNilaiA.NIM,RekNilaiA.Kode_MK,&RekNilaiA.Grade); FNilaiB=fopen("FNNilaiSem02.txt","rt"); fscanf(FNilaiB,"%s\t%s\t%c",RekNilaiB.NIM,RekNilaiB.Kode_MK,&RekNilaiB.Grade); FNilaiBaru=fopen("FNilaiGabung.txt","wt");
if (feof(FNilaiA) || feof(FNilaiB)){//jika file kosong printf("Merging dibatalkan : Salah satuatau kedua file kosong, tolong isi dulu filenya...!!!\n"); }else{ //proses merging secara terurut dengan menggunakan AND while(! feof(FNilaiA) && ! feof(FNilaiB)){//baca isi file mulai dari data pertama sampai terakhir if(strcmp(RekNilaiA.NIM,RekNilaiB.NIM)<=0){//proses jika NIM di File A kurang dari NIM di File B tulis rekA di File baru
fprintf(FNilaiBaru,"%s\t%s\t%c",RekNilaiBaru.NIM,RekNilaiBaru.Kode_MK,&RekNilaiBaru.Grade) ;
fscanf(FNilaiA,"%s\t%s\t%c",RekNilaiA.NIM,RekNilaiA.Kode_MK,&RekNilaiA.Grade); }else{
fprintf(FNilaiBaru,"%s\t%s\t%c",RekNilaiBaru.NIM,RekNilaiBaru.Kode_MK,&RekNilaiBaru.Grade) ;
fscanf(FNilaiA,"%s\t%s\t%c",RekNilaiB.NIM,RekNilaiB.Kode_MK,&RekNilaiB.Grade); } } printf("\nProses merging selesai\n"); fclose(FNilaiBaru); //tampil isi file hasil penggabungan IF-UTAMA
2
Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
FNilaiBaru=fopen("FNilaiGabung.txt","rt"); printf("\nFile hasil penggabungan\n"); while(! feof(FNilaiBaru)) {
fscanf(FNilaiBaru,"%s\t%s\t%c",RekNilaiBaru.NIM,RekNilaiBaru.Kode_MK,&RekNilaiBaru.Grade) ;
printf("%s\t%s\t%c\n",RekNilaiBaru.NIM,RekNilaiBaru.Kode_MK,&RekNilaiBaru.Grade); } } fclose(FNilaiBaru);//tutup file fclose(FNilaiB);//tutup file fclose(FNilaiA);//tutup file system("pause"); return 0; }
IF-UTAMA
3
Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
IMPLEMENTASI SPLITTING 1. Buka TextPad/NotePad, bwt file baru simpan dengan nama : FNilai.txt. Isi file tsb dengan data berikut ini: 001
B01
A
001
B03
B
001
B04
B
001
B05
E
002
B03
D
002
B06
B
003
A01
A
003
A03
A
003
A02
D
003
A04
E
<note antar kolom dipisahkan dengan tab> 2. Buka TextPad, Save-As dengan nama file: Splitting.cpp. Ketik program berikut ini: //Program splitting data mahasiswa berdasarkan keluusan mata kuliah #include<stdio.h> #include<string.h> #include<stdlib.h>
int main(){ FILE *FNilaiA,*FNilaiB,*FNilai;//deklarasi file nilai struct{ char NIM[4];//kolom 1 char Kode_MK[4];//kolom 2 char Grade;//kolom 3 }RekNilaiA,RekNilaiB,RekNilai;//isi satu baris data dalam file nilai yg terdiri dari 3 kolom
//open File nilai FNilaiA=fopen("FMhsLulus.txt","wt"); FNilaiB=fopen("FMhsTidakLulus.txt","wt"); FNilai=fopen("FNilai.txt","rt"); IF-UTAMA
4
Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); if (feof(FNilai)){//jika file kosong printf("Splitting dibatalkan : File kosong, tolong isi dulu filenya...!!!\n"); }else{ //proses splitting berdasarkan kelulusan (nilai >=C) while(! feof(FNilai)){//baca isi file mulai dari data pertama sampai terakhir if(RekNilai.Grade=='A' || RekNilai.Grade=='B' ||RekNilai.Grade=='C'){//tulis ke file lulus jika grade >=C
fprintf(FNilaiA,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); }else{
fprintf(FNilaiB,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); } fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); } printf("\nProses splitting selesai\n"); fclose(FNilaiA); fclose(FNilaiB); //tampil isi file hasil splitting FNilaiA=fopen("FMhsLulus.txt","rt"); printf("\nFile hasil splitting:Mahasiswa Lulus\n"); while(! feof(FNilaiA)) {
fscanf(FNilaiA,"%s\t%s\t%c",RekNilaiA.NIM,RekNilaiA.Kode_MK,&RekNilaiA.Grade); printf("%s\t%s\t%c\n",RekNilaiA.NIM,RekNilaiA.Kode_MK,&RekNilaiA.Grade); } FNilaiA=fopen("FMhsTidakLulus.txt","rt"); printf("\nFile hasil splitting:Mahasiswa Tidak Lulus\n"); while(! feof(FNilaiB)) {
fscanf(FNilaiB,"%s\t%s\t%c",RekNilaiB.NIM,RekNilaiB.Kode_MK,&RekNilaiB.Grade); IF-UTAMA
5
Algoritma & Pemrograman II : Merging & Splitting
Danang Junaedi
printf("%s\t%s\t%c\n",RekNilaiB.NIM,RekNilaiB.Kode_MK,&RekNilaiB.Grade); } } fclose(FNilai);//tutup file fclose(FNilaiB);//tutup file fclose(FNilaiA);//tutup file system("pause"); return 0; }
IF-UTAMA
6