Algoritma & Pemrograman II : Konsolidasi
Danang Junaedi
IMPLEMENTASI KONSOLIDASI TANPA SEPARATOR 1. Buka TextPad/NotePad, bwt file baru simpan dengan nama : FNilaiTanpaSeparator.txt. Isi file tsb dengan data berikut ini: 001
B01
A
001
B03
B
001
B05
C
002
B06
B
003
A01
A
003
A02
C
<note antar kolom dipisahkan dengan tab> 2. Buka TextPad, Save-As dengan nama file: KonsolidasiTanpaSeparator.cpp. Ketik program berikut ini: //Program Konsolidasi tanpa separator untuk menghitung //jumlah mata kuliah per mahasiswa dan total mata kuliah //dari semua mahasiswa #include<stdio.h> #include<string.h> #include<stdlib.h>
int main(){ FILE *FNilai;//deklarasi file nilai struct{ char NIM[4];//kolom 1 char Kode_MK[4];//kolom 2 char Grade;//kolom 3 }RekNilai;//isi satu baris data dalam file nilai yg terdiri dari 3 kolom int jmlMK;//jml mata kuliah per mahasiswa char Current_Kategori[4];//NIM mhs yg sedang diproses int totMK;//jml total mata kuliah dari seluruh mahasiswa
//open File nilai FNilai=fopen("FNilaiTanpaSeparator.txt","rt"); fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); IF-UTAMA
1
Algoritma & Pemrograman II : Konsolidasi
Danang Junaedi
if (feof(FNilai)){//jika file kosong printf("Konsolidasi dibatalkan : File kosong, tolong isi dulu filenya...!!!\n"); }else{ totMK=0;//inisialisasi seluruh kategori while(! feof(FNilai)){//baca isi file mulai dari data pertama sampai terakhir jmlMK=0;//inisialisasi kategori strcpy(Current_Kategori,RekNilai.NIM);//NIM yang sedang dibaca while(!feof(FNilai) && strcmp(Current_Kategori,RekNilai.NIM)==0){//proses jika NIM masih sama jmlMK++;//jml MK mhs tertentu bertambah 1
fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade);//baca
data
berikutnya } //terminasi kategori-->NIM berbeda dengan NIM yg sedang diproses printf("NIM %s mengambil %d mata kuliah\n",Current_Kategori,jmlMK); //proses seluruh kategori totMK=totMK+jmlMK; } //terminasi seluruh kategori-->jika sudah sampai akhir file printf("\nTotal mata kuliah yang sudah diambil seluruh mahasiswa = %d\n",totMK); } fclose(FNilai);//tutup file system("pause"); return 0; }
IF-UTAMA
2
Algoritma & Pemrograman II : Konsolidasi
Danang Junaedi
IMPLEMENTASI KONSOLIDASI DENGAN SEPARATOR 1. Buka TextPad/NotePad, bwt file baru simpan dengan nama : FNilaiDenganSeparator.txt. Isi file tsb dengan data berikut ini: 000
xxx
Z
001
B01
A
001
B03
B
001
B05
C
000
xxx
Z
000
xxx
Z
002
B06
B
000
xxx
Z
003
A01
A
003
A02
C
000
xxx
Z
<note antar kolom dipisahkan dengan tab> 2. Buka TextPad, Save-As dengan nama file: KonsolidasiTanpaSeparator.cpp. Ketik program berikut ini: //Program Konsolidasi dengan separator untuk menghitung //jumlah mata kuliah per mahasiswa dan total mata kuliah //dari semua mahasiswa #include<stdio.h> #include<string.h> #include<stdlib.h>
int main(){ FILE *FNilai;//deklarasi file nilai struct{ char NIM[4];//kolom 1 char Kode_MK[4];//kolom 2 char Grade;//kolom 3 }RekNilai;//isi satu baris data dalam file nilai yg terdiri dari 3 kolom int jmlMK;//jml mata kuliah per mahasiswa char Current_Kategori[4];//NIM mhs yg sedang diproses IF-UTAMA
3
Algoritma & Pemrograman II : Konsolidasi
Danang Junaedi
char Separator[4];//Separator strcpy(Separator,"000");//Separator<-"000" int totMK;//jml total mata kuliah dari seluruh mahasiswa
//open File nilai FNilai=fopen("FNilaiDenganSeparator.txt","rt"); fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade);
if (feof(FNilai)){//jika file kosong printf("Konsolidasi dibatalkan : File kosong, tolong isi dulu filenya...!!!\n"); }else{ totMK=0;//inisialisasi seluruh kategori while(! feof(FNilai)){//baca isi file mulai dari data pertama sampai terakhir while(!feof(FNilai)
&&
strcmp(RekNilai.NIM,Separator)==0){//baca
data
berikutnya jika separator
fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade); } jmlMK=0;//inisialisasi kategori strcpy(Current_Kategori,RekNilai.NIM);//NIM yang sedang dibaca while(!feof(FNilai) && strcmp(RekNilai.NIM,Separator)!=0){//proses jika bukan separator jmlMK++;//jml MK mhs tertentu bertambah 1
fscanf(FNilai,"%s\t%s\t%c",RekNilai.NIM,RekNilai.Kode_MK,&RekNilai.Grade);//baca
data
berikutnya } //terminasi kategori-->NIM berbeda dengan NIM yg sedang diproses printf("NIM %s mengambil %d mata kuliah\n",Current_Kategori,jmlMK); //proses seluruh kategori totMK=totMK+jmlMK; } IF-UTAMA
4
Algoritma & Pemrograman II : Konsolidasi
Danang Junaedi
//terminasi seluruh kategori-->jika sudah sampai akhir file printf("\nTotal mata kuliah yang sudah diambil seluruh mahasiswa = %d\n",totMK); } fclose(FNilai);//tutup file system("pause"); return 0; }
IF-UTAMA
5