Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Algoritma Pemrograman Record

Modul 12 Record Tujuan 1. Praktikan dapat mengerti dan memahami konsep dan struktur record 2. Praktikan dapat menggunakan record di dalam suatu kasus Teori Record adalah tipe data majemuk. Tipe data majemuk adalah suatu tipe data yang mengandung tipe data yang lain. Suatu Record bisa terdiri dari satu atau lebih tipe data didalamnya. Record ini memiliki kedudukan yang sama dengan tipe data yang lainnya dan dapat dipergunakan seperti tipe data yang lainnya. Record dalam bahasa C ini diimplementasikan dengan struct. Record disusun oleh satu atau lebih field/elemen data (tiap field bertipe data sama). Tiap field menyimpan data dengan tipe dasar tertentu atau tipe bentukan lain yang sudah didefinisikan sebelumnya. Karena strukturnya disusun oleh field-field maka record dinamakan juga tipe terstruktur Field 1 Field 2 ... Field N Contoh pembuatan Record: Pertama – tama kita perlu untuk membuat tipe data terlebih dahulu dengan syntax struct. Berikut ini adalah contohnya : typedef struct { char Nama[50]; int NIM; Field – field record }Mahasiswa; Nama tipe data baru yang dibuat Contoh kode diatas ini akan membuat sebuah tipe data baru yang bernama Mahasiswa yang memiliki 2 buah field didalamnya yakni Nama dan NIM. Setelah membuat tipe data baru tersebut maka kita dapat menggunakannya didalam bagian program untuk digunakan dalam suatu variabel. Berikut ini adalah contohnya : Mahasiswa mhs1,mhs2; 1 Kode diatas ini akan membuat 2 buah variabel yang mempunyai tipe data Mahasiswa. Demo : //File demo1.c typedef struct{int NIM;float UTS;char nilaiAkhir;}ID; void main() { ID myID; myID.NIM=4566; myID.UTS=78; myID.nilaiAkhir=’B’; } printf(“Aku : %d, myID.nilaiAkhir)’ %0.2f, %c”, myID.NIM, myID.UTS, Run program tersebut lalu tambahan kodenya sehingga menjadi seperti dibawah ini typedef struct{int NIM;float UTS;char nilaiAkhir;}ID; void main() { ID myID, yourID; myID.NIM=4566; myID.UTS=78; myID.nilaiAkhir=’B’; yourID.NIM=7902; yourID.UTS=100; yourID.nilaiAkhir=’A’; printf(“Aku : %d, myID.nilaiAkhir); printf(“\nKamu : %d, yourID.nilaiAkhir); %0.2f, %c”, %0.2f, %c”, myID.NIM, yourID.NIM, myID.UTS, yourID.UTS, } Run program tersebut lalu tambahan kodenya sehingga menjadi seperti dibawah ini typedef struct{int NIM;float UTS;char nilaiAkhir;}ID; 2 void main() { ID myID, yourID,BagongID; myID.NIM=4566; myID.UTS=78; myID.nilaiAkhir=’B’; yourID.NIM=7902; yourID.UTS=100; yourID.nilaiAkhir=’A’; printf(“Nim Bagong : ”);scanf(“%d,&BagongID.NIM”); printf(“UTS Bagong : ”);scanf(“%f,&BagongID.UTS”); printf(“Nilai Akhir Bagong : ”);scanf(“%c, &BagongID.nilaiAkhir”); printf(“Aku : %d, %0.2f, %c”, myID.NIM, myID.UTS, myID.nilaiAkhir); printf(“\nKamu : %d, %0.2f, %c”, yourID.NIM, yourID.UTS, yourID.nilaiAkhir); printf(“\nBagong : %d, %0.2f, %c”, BagongID.NIM, BagongID.UTS, BagongID.nilaiAkhir); } Dari contoh kode diatas dapat kita ambil kesimpulan bahwa ketika kita ingin mengakses field/data didalam suatu record caranya adalah dengan memanggil nama variabel record tersebut lalu diikuti dengan tanda “.“ (titik) . Penggunaan typedef pada Record Karena struct adalah sebuah tipe maka dengan typedef kita dapat memberi nama baru untuknya. Hak ini dapat membantu mengingat tipe struct cukup panjang untuk ditulis berkali – kali. Oleh karena itu, direkomendasikan untuk selalu membuat aliasnya untuk pendefinisian tipe struct. Selain lebih pendek hal ini juga mewakili secara semantik (makna) dengan lebih baik. Contoh Record dengan typedef: typedef struct { char Nama[50]; int NIM; }Mahasiswa; Ketika menggunakan typedef maka untuk mengakses tiap data/field didalam record ini kita juga menggunakan tanda “.“ (titik). 3 Demo (implementasi record dengan typedef): //File demo2.c #include<stdio.h> #include<conio.h> #include<stdlib.h> //deklarasi struct typedef struct{ int jam; int menit; int detik; }Jam; //fungsi yang mengubah satuan waktu ke detik int ConvertToSecond(Jam J) { return((J.jam*3600)+(J.menit*60)+J.detik); } //badan program void main() { Jam J; int pilihan; do { system("CLS"); printf("Menu"); printf("\n1. Input data"); printf("\n2. Tampil"); printf("\n0. Keluar"); printf("\nMasukan pilihan =");scanf("%d",&pilihan); switch(pilihan) { case 1: printf("\n\nInput data"); printf("\nJam = ");scanf("%d",&J.jam); printf("Menit = ");scanf("%d",&J.menit); printf("Detik = ");scanf("%d",&J.detik); break; case 2: printf("\nTampil data"); printf("\nJam = %d",J.jam); printf("\nMenit = %d",J.menit); printf("\nDetik = %d",J.detik); printf("\nTotal detik = %d detik",ConvertToSecond(J)); 4 break; } getch(); }while(pilihan!=0); } Karena Record ini merupakan sebuah tipe data maka kita dapat menggunakan record sebagai parameter suatu prosedur/fungsi. Record ini juga dapat digunakan bersamaan dengan Array. Sebuah record yang mengandung array ini biasa disebut dengan nama Array of Record. Guided #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h> #define MAX 5 //deklarasi struct typedef struct{ int stock; char nama[50]; int harga; }Barang; void init(Barang B[]); int isFull(Barang B[]); int isEmpty(Barang B[]); //badan program void main() { Barang B[MAX]; int pilihan,i; init(B); do { system("CLS"); printf("Menu"); printf("\n1. Input data"); printf("\n2. Tampil data"); printf("\n0. Keluar"); printf("\nMasukan pilihan = ");scanf("%d",&pilihan); switch(pilihan) { case 1: printf("\n\nInput data"); 5 if(isFull(B)==0) { for(i=0;i<MAX;i++) { printf("\nData ke %d\n",i+1); printf("Nama = ");fflush(stdin);gets(B[i].nama); printf("Stock = ");scanf("%d",&B[i].stock); printf("Harga = ");scanf("%d",&B[i].harga); } } else { printf("\nGudang penuh ._."); } break; case 2: printf("\nTampil data"); if(isEmpty(B)==0) { for(i=0;i<MAX;i++) { printf("Data ke %d\n",i+1); printf("\nNama = %s",B[i].nama); printf("\nStock = %d",B[i].stock); printf("\nHarga = %d",B[i].harga); } } else { printf("\nGudang kosong ._."); } break; } getch(); }while(pilihan!=0); } void init(Barang B[]) { int i; for(i=0;i<MAX;i++) { strcpy(B[i].nama,"-"); B[i].harga=0; B[i].stock=0; } 6 } int isFull(Barang B[]) { int i; for(i=0;i<MAX;i++) { if(strcmpi(B[i].nama,"-")==0) { return 0; } } return 1; } int isEmpty(Barang B[]) { int i; for(i=0;i<MAX;i++) { if(strcmpi(B[i].nama,"-")!=0) { return 0; } } return 1; } Catatan Tambahan Record ini dapat bersifat nested. Dalam membuat record ini kita dapat membuat record yang mengandung record yang lainnya. Pengunaan record dalam record ini contohnya dalam kehidupan sehari – hari adalah data mahasiswa dengan nilainya. Didalam nilai terdapat data - data seperti UTS, UAS, kuis, dll sedangkan didalam mahasiswa terdapat data – data seperti nama, npm, tempat tanggal lahir, nilai, dll. Berikut ini adalah contoh pembuatan record didalamr record. typedef struct{ int UTS,UAS,Kuis; }Nilai; typedef struct{ char Nama[50]; int NPM; 7 Nilai nilai; }Mahasiswa; Untuk mengakses data nilai didalam mahasiswa ini kita juga harus menggunakan tanda “.” (titik). Contohnya adalah //deklarasi variabel Mahasiswa M[20]; //mengakses nilai kuis suatu mahasiswa M[0].nilai.Kuis=20; Nb : Karena program membaca kode dari atas hingga kebawah maka perlu diingat saat membuat nested record ini kita perlu untuk terlebih dahulu mendefinisikan record yang akan digunakan oleh record yang lainnya. Dalam kasus diatas kita perlu mendifenisikan record nilai terlebih dahulu karena record nilai akan digunakan oleh record mahasiswa. 8