rachmanez

Selasa, 14 Desember 2010

BP 1 ARRAY LANJUTAN & STRUCT

Bab ini membahas berbagi topik : struktur, union, bit-field, enum, dan typedef. Dengan berakhirnya bab ini diharapkan anda menjadi akrab dengan hal-hal tersebut sehingga tidak mengalami kesulitan jika menjumpai kode yang melibatkan masalah tersebut. C++ mendukung suatu bentuk yang memungkinkan untuk meletakkan sejumlah data yang berbeda tipe dalam satu wadah yang dinamakan struktur (struct). Sebagai gambaran, sebuah struktur dapat mencakup data nomor induk pegawai (bertipe string), dan jenis kelamin (boolean).

Contoh berikut merupakan contoh untuk mendefinisikan struktur yang disinggung di depan :
struct pegawai
{
int nip;
char nama [35];
bool pria;
}
Setelah struktutur seperti di atas didefinisikan, variabel struktur bisa diciptakan dengan cara seperti berikut :
Pegawai datapeg;
Setelah pernyataan :
Pegawai datapeg;
Dieksekusi, datapeg mengandung tiga buah data yang masing-masing dinamakan anggota struktur (atau juga disebut field).
Struct (structure) adalah sebuah tipe data bentukan yang terdiri dari beberapa data / variabel yang mempunyai tipe berbeda-beda. Jadi di dalam sebuah struct dimungkinkan ada elemen data yang bertipe integer (int) sekaligus ada elemen data yang bertipe char.

Contoh:
struct {
char id [10];
char nama [20];
int umur;
} mahasiswa, dosen;

Contoh di atas akan membuat dua buah variabel bertipe structure, yaitu variabel mahasiswa dan dosen. Tiap variabel akan memiliki field id, nama dan umur. Contoh pengaksesan struct:
printf (”%s”, mahasiswa.nama);
scanf (”%i”, &dosen.umur);
Dalam implementasinya, seringkali digunakan struktur data gabungan antara array dengan struct. Dengan demikian berarti bahwa setiap elemen sebuah array akan bertipe struct. Konsep ini sering dimanfaatkan untuk memanipulasi data / informasi. Misal data mahsiswa, karyawan, dosen, dsb. Contoh :

typedef struck {
char id[10];
char nama[20];
int umur;
}data;
Struck data mhs[100], dosen[20];

Deklarasi di atas akan mengalokasikan di memori untuk variabel mhs sebanyak 100 data dan untuk varibel dosen sebanyak 20 data.

Contoh dalam C++

#include <stdio.h>
#include <string.h>
#include <ctype.h>
void input(int matriks [] [20])
{
for (int i=0; i<3; i++) 
for (int j=0; j<3; j++) 
printf("isi data di brs %d,klm %d:",i+1, j+1); 
scanf ("%d", &matriks [i][j]); } printf("\n"); 
void total(int mat1[][20],int mat2[][20],int mat3[][20]) 
for(int i=0; i<3; i++) 
for(int j=0; j<3; j++) 
mat3[i][j] = mat1[i][j]+ mat2[i][j]; 
void tampil(int matriks [][20]) 
for(int i=0; i<3; i++) 
for(int j=0; j<3; j++) 
printf("%6d", matriks[i][j]); 
printf("\n"); 
void transpose(int matriks[][20]) 
{
for (int i=0; i<3; i++) 
{
for (int j=0; j<3; j++)
printf("%6d", matriks[j][i]); printf("\n"); 
struct mahasiswa 
char NPM [25]; char Nama [50]; char TTL [50]; char Alamat [100]; char Jenis_Kelamin [10]; char Jurusan [20]; 
}; 
void input(mahasiswa *data, int &n) 
fflush(stdin);
printf("NPM : ");gets(data[n].NPM); 
printf("Nama : ");gets(data[n].Nama); 
printf("TTL : ");gets(data[n].TTL); 
printf("Alamat : ");gets(data[n].Alamat); 
printf("Jenis Kelamin : ");gets(data[n].Jenis_Kelamin); 
printf("Jurusan : ");gets(data[n].Jurusan); 
printf("\nData ke %d sudah disimpan\n\n", n+1); n++; 
void hapus (mahasiswa *data, int &n) 
printf("\n==================\n"); 
printf(" menghapusan data \n"); 
printf("=================="); 
char NPM [10]; fflush(stdin); 
printf("\nSEARCH\n"); 
printf("masukkan NPM : ");gets(NPM);
int sama=0;
for (int i=0;i>>>Data telah ditemukan<<<<\n");
printf("NPM : %s\n",data[i].NPM);
printf("Nama : %s\n",data[i].Nama);
printf("TTL : %s\n",data[i].TTL);
printf("Alamat : %s\n",data[i].Alamat);
printf("Jenis Kelamin : %s\n",data[i].Jenis_Kelamin);
printf("Jurusan : %s\n",data[i].Jurusan);
char hapus;
printf("data ini akan dihapus : ");scanf("%s",&hapus);
if(toupper (hapus)=='Y')
sama=1;
}
if((i!=n-1)&&(sama==1))
{
strcpy(data[i].NPM, data[i+1].NPM);
strcpy(data[i].Nama, data[i+1].Nama);
strcpy(data[i].TTL, data[i+1].TTL);
strcpy(data[i].Alamat, data[i+1].Alamat);
strcpy(data[i].Jenis_Kelamin, data[i+1].Jenis_Kelamin);
strcpy(data[i].Jurusan, data[i+1].Jurusan);
}
}
if (sama==1)
{
printf("\nData telah dihapus\n");
n--;
}
else
printf("\nData tidak jadi dihapus\n");
}
void update (mahasiswa *data, int &n)
{
printf("\n===============\n");
printf(" Mengubah isi data \n");
printf("===============");
char NPM [10];
fflush(stdin);
printf("\nSEARCH\n");
printf("masukkan NPM : ");gets(NPM);
int ubah =0;
for(int i=0;i
{
if (strcmp(data[i].NPM,NPM)==0)
{
ubah=1;
printf("\n====Data ditemukan====\n");
printf("NPM : %s\n",data[i].NPM);
printf("Nama : %s\n",data[i].Nama);
printf("TTL : %s\n",data[i].TTL);
printf("Alamat : %s\n",data[i].Alamat);
printf("Jenis Kelamin : %s\n",data[i].Jenis_Kelamin);
printf("Jurusan : %s\n",data[i].Jurusan);
input (data, i);
i--;
}
}
if (ubah==1)
printf("\nData sudah diupdate\n");
else
printf("\nData not found\n");
}
void tampilan (mahasiswa *data,int &n)
{
printf("\n================\n");
printf(" DATA MAHASISWA \n");
printf("================\n");
for (int i=0;i
{
printf("Data ke %d\n", i+1);
printf("NPM : %s\n",data[i].NPM);
printf("Nama : %s\n",data[i].Nama);
printf("TTL : %s\n",data[i].TTL);
printf("Alamat : %s\n",data[i].Alamat);
printf("Jenis Kelamin : %s\n",data[i].Jenis_Kelamin);
printf("Jurusan : %s\n",data[i].Jurusan);
}
}
void main ()
{
char r;
int pilihan;
do
{
printf("Tampilan Menu :\n");
printf(" 1. Modul 8 (Structure)\n");
printf(" 2. Modul 7 (Array Lanjut)\n");
printf("menu yang inginkan : ");
scanf("%i", &pilihan);
switch(pilihan)
{
case 1:
{
int pilih;
mahasiswa data[100];
int n=0;
do{
printf("\t\t PENDAFTARAN MAHASISWA BARU \n");
printf("1.Penambahan record\n");
printf("2.Penghapusan record\n");
printf("3.Update record\n");
printf("4.Menampilkan semua record\n");
printf("5.Program Selesai\n");
printf("\nMasukkan pilihan anda : ");scanf("%d",&pilih);
switch(pilih)
{
case 1: input(data, n);break;
case 2: hapus(data, n);break;
case 3: update(data, n);break;
case 4: tampilan(data, n);break;
case 5:
printf("TERIMA KASIH\n\n");break;
}
}while (pilih !=5);
}break;
case 2:
{
int pil;
char z;
do
{
printf("menu matriks\n");
printf("=============================\n");
printf(" 1. memasukan data sebuah matriks ordo 3X3\n");
printf(" 2. mengalikan 2 buah matrik ordo 3X3\n");
printf(" 3. mentranspose sebuah matrik ordo 3X3\n");
printf("=============================\n");
printf ("masukan pilihlah anda:");
scanf("%i", &pil);
switch(pil)
{
case 1:
{
int m1[15][20];
printf("\npengisian data untuk matriks pertama\n");
input(m1);
printf("isi matriks pertama adalah:\n");
tampil(m1);
}break;
case 2:
{
int m1[15][20],m2[15][20],m3[15][20];
printf("\npengisian data untuk matriks pertama\n");
input(m1);
printf("\npengisian datauntuk matriks kedua \n");
input(m2);
total(m1,m2,m3);
printf("isi matriks pertama adalah:\n");
tampil(m1);
printf("\nisi matriks kedua adalah:\n");
tampil(m2);
printf("\nhasil jumlah matriks 1 dan 2 adalah:\n");
tampil(m3);
}break;
case 3:
{
printf("prg. pemutar matriks nx90 derajat ke kiri\n");
printf("-----------------------------------------\n");
int matriks[15][20];
printf("\nProses pengisian matriks\n");
input(matriks);
printf("\nProses pencetakan\n");
printf("\n Isi matriks mula-mula adalah:\n");
tampil(matriks);
printf("\nHasil transpose;\n");
transpose(matriks);
}break;
}
printf("\n\nApakah anda ingin mengulanginya lagi(Y/T)? : ");
scanf("%s", &z);
}
while(z=='y' || z=='Y');
}
break;
}
printf("\n\nApakah anda ingin kembali ke menu(Y/T) : ");
scanf("%s", &r);
}
while(r=='y' || r=='Y');
}

Tidak ada komentar:

Posting Komentar