Latihan C++ BAGIAN III



Latihan 21 : Statemen Peloncatan : Goto


/*

Statemen Peloncatan : Goto

*/


#include<iostream>

using namespace std;

int main(){
int x=1,z=1;
y:
if(x<10){
cout<<"Nilai x = "<<x<<endl;
x++;
goto y;
}
system("pause");
}

/*Penjelasan :

'goto' untuk meloncat ke tempat yang telah ditentukan.

'y:' disini disebut dengan label, dan jika dijalankan
program tersebut mirip dengan pengulangan.

Latihan 22 : Pointer

/*

Pointer

*/


#include<iostream>

using namespace std;

int main(){
int *x;
int y,z=0;
y=125;

// menggunakan alamat y
x=&y;

//proses output
cout<<"Nilai dari x (*x) = "<<*x;
cout<<"\nAlamat dari x (x) = "<<x;
cout<<"\n\nNilai dari y (y) = "<<y;
cout<<"\nAlamat dari y (&y) = "<<&y;
cout<<"\n\nAlamat dari z (&z) = "<<&z;
cout<<endl;

//modifikasi nilai
*x=500;
cout<<"\nNilai dari y = "<<y;
cout<<endl;
system("pause");
}

/*Penjelasan :

Pembahasan tentang pointer mungkin sudah disinggung
sebelumnya, tapi nggak apa-apa sekalian ini sebagai refreshing atau
penyegaran kembali tentang pointer.

Tujuan dari pointer adalah untuk memanipulasi
memori, namun hati-hati dalam menggunakan
pointer karena pointer sangat berbahaya.

Setiap variabel yang dideklarasikan pasti
memiliki alamat di memory. Alamat ini ditentukan
oleh Sistem (Sistem Operasi) secara acak, sehingga
alamat setiap variabel berbeda-beda.

Tapi dengan pointer memungkinkan 2 atau lebih variabel
menempati alamat yang sama dalam memori, sehingga
jika alamat tersebut berisi nilai atau data maka
2 atau lebih variabel tersebut memiliki nilai atau data
yang sama pula.

untuk membuat sebuah pointer pada variabel cukup
menambahkan tanda asterisk (*) setelah tipe data

pada baris keluaran terakhir yaitu "Nilai dari y =" akan keluar
nilai sebesar 500, ini terjadi karena x (*x) telah memasukkan
nilai ke alamat yang sama yang ditempati juga oleh y.

Latihan 23 : NULL dan Const Pointer

/*

NULL Pointer dan Const Pointer

*/


#include<iostream>

using namespace std;

int x,y;

int main(){
int* const constP1=&x;
const int * constP2=&y;
int* nullP;
nullP=NULL;
y=200;

//output
cout<<"NULL Pointer : "<<nullP<<endl;

//inisialisasi yang dilarang
//*constP2=300;
cout<<"Nilai Pointer constP2 bernilai Konstan : "<<*constP2<<endl;

//constP1=&y;
cout<<"Alamat Pointer constP1 bernilai Konstan : "<<constP1<<endl;
cout<<endl;
system("pause");
}

/*Penjelasan :

'NULL Pointer' tidak akan menunjukan ke alamat manapun,
dan NULL ini sangat berguna jika kita membuat sebuah
pointer dan belum menentukan ke alamat mana pointer
itu akan menunjuk.

'int * const Var' berarti alamat dari pointer tersebut
tidak dapat di ubah atau Read-Only, tetapi tetap dapat
melakukan inisialisasi nilai, contoh :
------------
*var=300;
------------

'const int * Var' berarti pointer tersebut memiliki nilai
yang konstan, maksudnya adalah pointer tersebut tidak
dapat melakukan inisialisasi nilai, contoh :

------------
int y;
const int *var=&y;
*var=500; 
------------

tetapi alamat variabel yang dituju tetap dapat mengubah
nilai-nya, contoh :

------------
int x,y;
const int *var=&y;
y=150;
y=250;
var=&x;
var=&y;
------------

Latihan 24 : Pointer Aritmetika

/*

Pointer Aritmetika

*/
#include<iostream>

using namespace std;

int main(){
int x[2]={100,500};
int *p;
char A[6]={'A','P','K','B','R','.'};
char *P;

//untuk tipe data char
P=&A[0];
cout<<"Untuk Tipe Data Char\n"<<*P; P=P+1;
cout<<*P; P=P-1;
cout<<*P<<" "; P=P+2;
cout<<*P; P=P-2;
cout<<*P; P=P+3;
cout<<*P; P=P-3;
cout<<*P; P=P+4;
cout<<*P<<endl<<endl;

//untuk tipe data int
cout<<"Untuk Tipe Data Int\n"; p=&x[0];
cout<<"Rp. "<<*p;
P=&A[5];
cout<<*P; p=p+1;
cout<<*p<<*P;
cout<<*p<<endl<<endl;
system("pause");
}

/*Penjelasan :

Pointer Aritmetika adalah pointer
yang dapat menempati alamat array dalam
sebuah variabel.

Pointer Aritmetika hanya dapat melakukan
penjumlahan dan pengurangan dalam alamat Array
dan tidak mendukung operator selain penjumlahan
dan pengurangan.

P=&A[5]; : Selalu ingat bahwa indek Array selalu
diawali oleh 0. sehingga untuk memanggil karakter
yang ke 6 alamatnya adalah [5].

Latihan 25 : New dan Delete Pointer

/*

New dan Delete Pointer

*/
#include<iostream>

using namespace std;

int main()
{
//menyiapkan variabel yang akan dibutuhkan
int *x;
int *y;
int n=5,a;

//menampilkan alamat sebelum dimanipulasi
cout<<"Alamat pertama x : ";
cout<<x<<"\n\n";

//membuat alamat baru senjumlah nilai n
x=new int[n];
cout<<x<<" \n\n";
for(a=0;a<n;a++)
{
x+=1;

//menampilkan alamat-alamat pointer x
cout<<"Alamat baru ke-"<<a+1<<" : ";
cout<<x<<endl;
}
x-=3;
cout<<"\nMemilih alamat baru ke-2\n";
cout<<x<<" \n\n\n";
delete[] x;

//memasukkan nilai ke setiap alamat
for(a=0;a<n;a++)
{
*x=(a+2)*5;
cout<<"Nilai dari alamat baru ke-"<<a+1<<" : ";
cout<<*x<<endl;

//statemen berikut berfungsi agar pointer x
//berpindah ke alamat selanjutnya
x+=1;
}
delete[] x;
system("pause");
}

/*Penjelasan :

Jika jumlah n sama dengan 5 berarti pointer
akan membuat ruang sebanyak 5 buah, sesuai dengan :
-------------
x=new int[n];
-------------

Melakukan pengulangan untuk mencetak nilai alamat-alamat
baru dari pointer x. Setelah itu :
-------------
x-=3;
-------------

Menggeser alamat baru x yang berada di dalam memori sejumlah
3, setelah pointer x berada di alamat ke-5 di dalam
memori. Jika kita menggeser 6 setelah digeser 3,
kemungkinan program akan error saat dijalankan.

delete disini berfungsi untuk mendealokasikan memori
pointer agar tidak terjadi memory leak.

Latihan 26 : Memory Leak

/*

Memory Leak

*/
#include<iostream>

using namespace std;

int main()
{
//menyiapkan variabel yang akan dibutuhkan
int *x;
cout<<"Alamat Pertama : "<<x<<endl;
x=new int;
*x=225;
cout<<"Alamat baru : "<<x;
cout<<"\nNilai x : "<<*x<<endl;

//menampilkan variabel yang telah didealokasikan
delete x;
cout<<"Nilai setelah didealokasikan : "<<*x<<"\n\n";
system("pause");
}

/*Penjelasan :

Memory Leak adalah kejadian jika alamat baru yang
digunakan berisi nilai yang sudah tidak lagi dibutuhkan
tetapi sudah tidak dapat dimanipulasi lagi.

Kalau pada bahasa C menggunakan free(), contoh:
------------
free(x)
------------

Latihan 27 : Membuat Ascending Angka

/*

Membuat Ascending Angka

*/
#include<iostream>
#define max 10

using namespace std;

int main()
{
int data[max],i=0,x=0,y=0,n=0,pindah=0;
cout<<"Masukkan jumlah data yang akan diurutkan\n\t(tidak boleh lebih dari 9)\n";
cout<<"Silahkan masukkan : ";
cin>>n;
if(n<=max)
{
for(x=0;x<n;x++)
{
cout<<"Bilangan ke-"<<x+1<<" = ";
cin>>data[x];
}
cout<<"\nSebelum diurutkan :\n";
for(x=0;x<n;x++)
{
if(x<n-1)
{
cout<<data[x];
cout<<", ";
}else{
cout<<"dan "<<data[x]<<".";
}
}
cout<<"\n\nAscending nya (dari kecil ke besar)\n";

//Melakukan metode Bubble Sort
//atau metode Gelembung
for(x=1;x<n;x++)
{

//jika n=5 (misal) maka y=4
//karena dalam array indek pertamanya adalah 0
for(y=n-1;y>=x;y--)
{
if(data[y-1]>data[y])
{

//melakukan perpindahan nilai
pindah=data[y-1];
data[y-1]=data[y];
data[y]=pindah;
}
} 
}
for(i=0;i<n;i++)
{
if(i<n-1)
{
cout<<data[i]<<", ";
}else{
cout<<"dan "<<data[i]<<'.';
}
}
cout<<"\n\n";
}else{

//jika user memasukkan lebih dari max
cout<<"Maaf terlalu besar\n\n";
}
system("pause");
}

/*Penjelasan :

Sebelumnya kita meminta user untuk memasukkan dahulu
nilai-nilai yang akan diurutkan. Pada bagian ini
hanya untuk membuat program kita tidak monoton (dapat
juga tidak dibuat).

Saat melakukan metode gelembung (bubble sort), kita
perlu 3 variabel, pertama variabel yang nilainya akan
dibandingkan dengan variabel kedua dan ketiga adalah tempat
untuk menampung nilai variabel tersebut agar tidak terganti
atau terbuang.

Untuk melakukan metode gelembung diperlukan for bersarang.

Latihan 28 : Ascending Angka dengan cara lain


/*

Ascending Angka dengan cara lain

*/
#include<iostream>
#define max 9

using namespace std;

int main()
{
//menyiapkan variabel yang akan dibutuhkan
int data1[max]={79,71,67,58,49,40,38,27,22};
int data2[max]={68,47,89,36,82,47,36,96,26};
int pindah1=0,pindah2,x=0,y=0,i=0;

x=max;
cout<<"Data sebelum diurutkan\n";
cout<<"data1["<<max<<"] = {";
for(y=0;y<x;y++)
{
if(y<x-1)
{
cout<<data1[y]<<", ";
}else{
cout<<data1[y]<<'}';
}
}
cout<<"\ndata2["<<max<<"] = {";
for(y=0;y<x;y++)
{
if(y<x-1)
{
cout<<data2[y]<<", ";
}else{
cout<<data2[y]<<'}';
}
}
cout<<"\n\nProgram tidak memiliki banyak kesempatan untuk mengurutkan\n\n";

//program hanya melakukan pengecekan sebanyak x
for(y=0;y<x;y++)
{
if(data1[y-1]>data1[y])
{
pindah1=data1[y-1];
data1[y-1]=data1[y];
data1[y]=pindah1;
}
if(data2[y-1]>data2[y])
{
//urutan data ke 2
pindah2=data2[y-1];
data2[y-1]=data2[y];
data2[y]=pindah2;
}
}

//proses untuk menampilkan data
for(i=0;i<x;i++)
{
if(i<x-1)
{
cout<<data1[i]<<", ";
}else{
cout<<"dan "<<data1[i]<<'.';
}
}
cout<<endl;
for(i=0;i<x;i++)
{
if(i<x-1)
{
cout<<data2[i]<<", ";
}else{
cout<<"dan "<<data2[i]<<'.';
}
}
cout<<"\n\n";

x=25;
cout<<"Program memiliki banyak kesempatan untuk mengurutkan\n\n";
for(y=0;y<x;y++)
{
if(data1[y-1]>data1[y])
{
pindah1=data1[y-1];
data1[y-1]=data1[y];
data1[y]=pindah1;
}
if(data2[y-1]>data2[y])
{
//urutan data ke 2
pindah2=data2[y-1];
data2[y-1]=data2[y];
data2[y]=pindah2;
}
//agar dapat terus berulang
if(y==9)
{
x=x-1;
y=0;
}
}

//proses untuk menampilkan data
for(i=0;i<x;i++)
{
if(i<x-1)
{
cout<<data1[i]<<", ";
}else{
cout<<"dan "<<data1[i]<<'.';
}
}
cout<<endl;
for(i=0;i<x;i++)
{
if(i<x-1)
{
cout<<data2[i]<<", ";
}else{
cout<<"dan "<<data2[i]<<'.';
}
}
cout<<endl;
system("pause");
}

/*Penjelasan :

Kalau sebelumnya menggunakan for bersarang sekarang hanya
menggunakan for saja. Cara ini hanya sebagai referensi
bagaimana program melakukan pengecekan terus menerus
agar kondisi yang dihasilkan dapat sesuai harapan.

Walaupun kodenya sedikit panjang dan belum dibuat
sederhana, semoga banyak membantu.
Kode diatas terlihat bertumpuk di fungsi main(), Anda dapat membagi - bagi kode tersebut ke dalam fungsi-fungsi sederhana.

Latihan 29 : Membuat Descending Angka


/*

Membuat Descending Angka

*/

#include<iostream>
#define max 9

using namespace std;

int main()
{
int data[max],i=0,x=0,y=0,n=0,pindah=0;
cout<<"Masukkan jumlah data yang akan diurutkan\n\t(tidak boleh lebih dari 9)\n";
cout<<"Silahkan masukkan : ";
cin>>n;
if(n<=max)
{
for(x=0;x<n;x++)
{
cout<<"Bilangan ke-"<<x+1<<" = ";
cin>>data[x];
}
cout<<"\nSebelum diurutkan :\n";
for(x=0;x<n;x++)
{
if(x<n-1)
{
cout<<data[x];
cout<<", ";
}else{
cout<<"dan "<<data[x]<<".";
}
}
cout<<"\n\nDescending-nya (dari besar ke kecil)\n";
for(x=1;x<n;x++)
{
for(y=n-1;y>=x;y--)
{
if(data[y-1]<data[y])
{
pindah=data[y-1];
data[y-1]=data[y];
data[y]=pindah;
}
}
}
for(i=0;i<n;i++)
{
if(i<n-1)
{
cout<<data[i]<<", ";
}else{
cout<<"dan "<<data[i]<<'.';
}
}
cout<<"\n\n";
}else{
cout<<"Maaf terlalu besar\n\n";
}
system("pause");
}

/*Penjelasan :

Sama seperti Ascending Angka sebelum yang berbeda
disini hanya tinggal diganti operator pada baris berikut :
-----------
if(data[y-1]>data[y])
{....}
-----------

Menjadi :
-----------
if(data[y-1]<data[y])
{....}
-----------

Latihan 30 : "Say Hello" dengan C

IDE / Compiler C++ modern tidak hanya dapat menerjemahkan bahasa C++ tapi juga bahasa pendahulunya yaitu bahasa C, berikut ini contoh dari bahasa C :


#include<stdio.h>
#include<conio.h>


char *a="======================";

main()
{
printf(a);
printf("\n\tHello\n");
printf(a);
printf("\n\nPress any key to continue . . .");
getch();
}

/*

Welcomme to blog okri ade (www.okri-ade.blogspot.com)

*/

Source Code C++ dapat berisi sintak-sintak dari bahasa C dan C++ tetapi tidak sebaliknya Sorce Code C hanya dapat berisi sintak-sintak dari bahasa C saja. Dan jangan lupa untuk menyimpannya dengan ektensi .c (C Source File).







sumber: http://www.videogamesindonesia.com/

Tidak ada komentar:

Posting Komentar

Komentar Anda Menjadi Masukan Buat Saya, untuk Menjadi Lebih Baik...