Jumat, 01 Juli 2011

Algoritma dan program menampilkan 2 himpunan dan mengalikannya

Algoritma

Algoritma menampilkan dua buah himpunan dan mengalikannya
Algoritma menampilkan dua buah himpunan dan mengalikannya
Implementasi ke dalam bentuk program
[sourcecodelanguage="cpp"]
#include
#include
#define maks 100
#define min 100
using namespace std;
class himpunan{
public :
himpunan();
void bacaHimpunan();
void cetakHimpunan();
void cetakKeduanya();
private:
char himp1[maks][min];
char himp2[maks][min];
int banyakHimp1, banyakHimp2;
};
himpunan::himpunan(){
cout< return EXIT_SUCCESS;
#include
#include
#define maks 100
#define min 100
using namespace std;
class himpunan{
public :
himpunan();
void bacaHimpunan();
void cetakHimpunan();
void cetakKeduanya();
private:
char himp1[maks][min];
char himp2[maks][min];
int banyakHimp1, banyakHimp2;
};
himpunan::himpunan(){
coutbanyakHimp1;
coutbanyakHimp2;
cout<<endl;
}
void himpunan::bacaHimpunan(){
cout<himp1[i];
}
cout<himp2[j];
}
}
void himpunan::cetakHimpunan(){
cout<<"Himpunan Pertama = {";
for(int i=0;i<banyakHimp1;i++){
cout<<himp1[i]<<",";
if(i==(banyakHimp1-1)){cout<<"\b";}
}
cout<<"}";
cout<<"\nHimpunan Kedua = {";
for(int j=0;j<banyakHimp2;j++){
cout<<himp2[j]<<",";
if(j==(banyakHimp2-1)){cout<<"\b";}
}
cout<<"}";
}
void himpunan::cetakKeduanya(){
cout<<"Himp. Pertama x Himp. Kedua = {";
for(int i=0;i<banyakHimp1;i++){
for(int j=0;j<banyakHimp2;j++){
cout<<"("<<himp1[i]<<","<<himp2[j]<<")";
}
}
cout<<"}";
}
int main(int argc, char *argv[])
{
system("color f0");
himpunan Himpunan;
Himpunan.bacaHimpunan();
cout<<endl;
Himpunan.cetakHimpunan();
cout<<endl;
Himpunan.cetakKeduanya();
cout<<endl<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}

Program Kombinasi dengan C++

Kombinasi adalah menggabungkan beberapa objek dari suatu grup tanpa memperhatikan urutan. Di dalam kombinasi, urutan tidak diperhatikan.
{1,2,3} adalah sama dengan {2,3,1} dan {3,1,2}.
Contoh: Seorang anak hanya diperbolehkan mengambil dua buah amplop dari tiga buah amplop yang disediakan yaitu amplop A, amplop B dan amplop C. Tentukan ada berapa banyak kombinasi untuk mengambil dua buah amplop dari tiga buah amplop yang disediakan?
Solusi: Ada 3 kombinasi yaitu; A-B, A-C dan B-C.



Algoritma :
1. Mulai
2. Masukkan n
3. Masukkan r
4. Jika n < r, maka tampilkan “r tidak boleh lebih besar dari n”
5. Jika tidak, nfak=1, nrfak=1, rfak=1
6. Untuk i=n sampai i lebih besar dari 0, nfak=nfak*i, i-1
7. Untuk i=n-r sampai i lebih besar dari 0, nrfak=nrfak*i, i-1
8. Untuk i=r sampai i lebih besar dari 0, rfak=rfak*i, i-1
9. k=nfak/rfak*nrfak
10. Tampilkan k
11. Selesai

berikut adalah program dari combinmasi silahkan dipahami semoga dapat membantu masalah anda :

#include<iostream.h>
#include<conio.h>
int faktorial (int x);
void main()
{
    int n,r, kombinasi;
    cout<<" Program Menghitung Kombinasi(nCr)"<<endl;
    cout<<" Masukkan Nilai n : "; cin>>n;
    cout<<" Masukkan Nilai r : "; cin>>r;
    kombinasi=faktorial(n)/(faktorial(r)*faktorial(n-r));
    cout<<" Kombinasinya adalah: "<<kombinasi;
    getch();
}
    int faktorial (int n)
{
    int fak;
    if (n<=1)
    {
    fak=1;
    }
    else
    {
    fak=n*faktorial(n-1);
    }
    return (fak);
}
 


Program Permutasi dengan C++

Permutasi adalah menggabungkan beberapa objek dari suatu grup dengan memperhatikan urutan. Di dalam permutasi, urutan diperhatikan. 
{1,2,3} tidak sama dengan {2,3,1} dan {3,1,2}
Contoh: Ada sebuah kotak berisi 3 bola masing-masing berwarna merah, hijau dan biru. Jika seorang anak ditugaskan untuk mengambil 2 bola secara acak dan urutan pengambilan diperhatikan, ada berapa permutasi yang terjadi?
Solusi: Ada 6 permutasi yaitu; M-H, M-B, H-M, H-B, B-M, B-H.


Algoritma :
1. Mulai
2. Masukkan n
3. Masukkan r
4. Jika n < r, maka tampilkan “r tidak boleh lebih besar dari n”
5. Jika tidak, nfak=1, nrfak=1
6. Untuk i=n sampai i lebih besar dari 0, nfak=nfak*i, i-1
7. Untuk i=n-r sampai i lebih besar dari 0, nrfak=nrfak*i, i-1
8. p=nfak/nrfak
9. Tampilkan p
10. Selesai
Berikut adalah salah satu contoh program nya :


#include<iostream.h>
#include<conio.h>
int faktorial (int x);
void main()

{
    int n,r, Permutasi;
    cout<<" Program Menghitung Permutasi(nPr)";
    cout<<" Masukkan Nilai n : "; cin>>n;
    cout<<" Masukkan Nilai r : "; cin>>r;
    Permutasi = faktorial (n)/faktorial(n-r);
    cout<<" Permutasinya adalah: "<<Permutasi;
    getch();
}
    int faktorial (int n)
{
    int fak;
    if (n<=1)
    {
    fak=1;
    }
    else
    {
    fak=n*faktorial(n-1);
    }
    return (fak);
}




POINTER

1 PENGERTIAN POINTER

Pointer (variabel penunjuk) adalah suatu variabel yang berisi alamat memori dari suatu
variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam
memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama
dikatakan menunjuk ke variabel kedua
Operator Pointer ada dua, yaitu :
Ø  Operator &
Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.
Ø  Operator *
Operator * bersifat unary (hanya memerlukan satu operand saja).
Operator * menghasilkan nilai yang berada pada sebuah alamat.

2 DEKLARASI POINTER

Seperti halnya variabel yang lain, variabel pointer juga harus dideklarasikan terlebih dahulu sebelum digunakan.

Bentuk Umum :
Tipe_data *nama_pointer;

//Contoh9_1
int *px;
char *sh;
Contoh Program :
#include “IOSTREAM.h”
#include “conio.h”
void main()
{ int x, y; /* x dan y bertipe int */
int *px; /* px pointer yang menunjuk objek */
clrscr();
x = 87;
px = &x; /* px berisi alamat dari x */
y = *px; /* y berisi nilai yang ditunjuk px */
cout<<“Alamat x =”<<&x <<\n”;
cout<<“Isi px = \n”, px);
cout<<“Isi x = \n”, x);
cout<<“Nilai yang ditunjuk oleh px = \n”, *px);
cout<<“Nilai y = \n”, y);
getch();
}

3 OPERASI POINTER
Ø  Operasi Penugasan
Suatu variable pointer seperti halnya variable yang lain, juga bisa mengalami operasi
penugasan. Nilai dari suatu variable pointer dapat disalin ke variable pointer yang lain.


//Contoh9_2
#include "iostream.h"
#include "conio.h"
void main()
{ float *x1,y, *x2;
clrscr();
y = 13.45;
x1 = &y;            /* Alamat dari y disalin ke variabel x1 */
x2 = x1;            /* Isi variabel x1 disalin ke variabel x2 */
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x1<<"\n";
cout<<"Nilai variabel y =  "<<y<< " ada di alamat "<< x2<<"\n";
 getch();
}
Ø  Operasi Aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai integer
saja. Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan.
Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya (index
selanjutnya) dalam memori. Begitu juga operasi pengurangan.
//Contoh9_3
#include <iostream.h>
#include <conio.h>
void main()
{ int nilai[3], *penunjuk;
clrscr();
nilai[0] = 125;
nilai[1] = 345;
nilai[2] = 750;
penunjuk = &nilai[0];
cout<<"Nilai "<<*penunjuk <<" ada di alamat memori " <<penunjuk<<"\n";
cout<<"Nilai "<<*(penunjuk+1) <<" ada di alamat memori " <<penunjuk+1<<"\n";
cout<<"Nilai "<<*(penunjuk+2) <<" ada di alamat memori " <<penunjuk+2<<"\n";
getch();
}

Ø  Operasi Logika
Suatu pointer juga dapat dikenai operasi logika.
//Contoh9_4
#include<iostream.h>
#include "conio.h"
void main()
{ int a = 100, b = 200, *pa, *pb;
clrscr();
pa = &a;
pb = &b;
cout<<"nilai pa= "<<pa<< " nilai pb= "<<pb<<"\n";
if(pa < pb)
cout<<"pa menunjuk ke memori lebih rendah dari pb\n";
if(pa == pb)
cout<<"pa menunjuk ke memori yang sama dengan pb\n";
if(pa > pb)
cout<<"pa menunjuk ke memori lebih tinggi dari pb\n";
getch();}

Minggu, 05 Juni 2011

Big Integer

Big integer : menjumlahkan banyak digit dengan tipe data integer
Kalian semua tahu bahwa bilangan yang tipe datanya integer pasti hanya dibatasi 10 digit saja. Terus bagaimana jika kita ingin menjumlahkan banyak sekali digit. Misal kita mempunyai bilangan 30 digit. Pasti jika kita membuat program dengan hanya menggunakan tipe data integer aka eror hasilnya. Oleh karena itu kita bisa menggunakan array. Setiap digit bilangan aka disimpan dalam satu elemen array. Contoh :
Kita ambil bilangan pertama  57575757, bilangan kedua 12345678
Dalam program bilangan itu akan disimpan di dalam setiap elemen array

Bilangan pertama
5
7
5
7
5
7
5
7


Bilangan kedua
1
2
3
4
5
6
7
8

 

Setelah didapatkan seperti itu maka setiap digitnya tinggal dilakukan penjumlahan. Tetapi disini yang terjadi hail dari penjumlahannya juga disimpan dalan setiap elemen array. Seperti contoh diatas akan terjadi 7 + 8 = 15. Angka 15 aka tersimpan di elemen terakhir array tersebut. Maka kita harus pintar – pintar bermain dengan komputer. Kita gunakan modulo untuk mendapatkan angka 5. Sehingga dalam memori array tidak tersimpan 15. Selanjutnya digit yang lebih kecil kita tambah 1. Karena 10 dari 15 tadi ditambahkan didepannya. Seperti penjumlahan biasa di sekolah dasar.

Berdasarkan  logika tersebut dapat dibuat suatu program yang dapat menjumlahkan bilangan big integer. Yaitu bilangan yang bertipe integer tetapi memiliki digit yang banyak sesuai yang kita inginkan.

Penulisannya bisa dibuat seperti ini :
void aritmatika::penjumlahan(){
     for(int i=(digit-1);i>=0;i--){
             jumlah[i]=jumlah[i]+input1[i]+input2[i];
             if (jumlah[i] >9 && i !=0){
                               jumlah[i]=jumlah[i]%10;
                               jumlah[i-1]=jumlah[i-1]+1;
                               }
             }
     }

Penjumlahan dan Perkalian Vektor

SKALAR DAN VEKTOR

Skalar adalah besaran yang cukup dinyatakan besarnya saja (tidak ter-gantung pada arah). Misalnya : massa, waktu, energi dsb.
Vektor adalah besaran yang tergantung pada arah. Misalnya : kecepatan, gaya, momentum dsb

Dalam koordinat kartesian :
       Vektor arah /vektor satuan  adalah vektor yang besarnya 1 dan arahnya sesuai dengan yang didefinisikan. Misalnya dalam koordinat kartesian : i, j, k, yang masing – masing menyatakan vektor dengan arah sejajar sumbu x, sumbu y dan sumbu z.
        Sehingga vektor a dapat ditulis :

                                a = ax  i + ay  j

          dan besar vektor a adalah :
         
                                a = Ö ax 2  +  ay 2

Operasi penjumlahan :
A + B = ?
Tanda + dalam penjumlahan vektor mempunyai arti dilanjutkan.
Jadi A + B mempunyai arti vektor A dilanjutkan oleh vektor B.

Perkalian vektor dengan skalar :
Contoh perkalian besaran vektor dengan skalar dalam fisika : F = ma, p = mv, dsb dimana m : skalar dan a,v : vektor.
Bila misal A dan B adalah vektor dan k adalah skalar maka,

                    B = k A

Besar vektor B adalah k kali besar vektor A sedangkan arah vektor B sama dengan arah vektor A bila k positip dan berla-wanan bila k negatip. Contoh : F = qE, q adalah muatan listrik dapat bermuatan positip atau negatip sehingga arah F tergantung tanda muatan tersebut.

Berdasarkan kasus tersebut, disini kan dibuat program untuk menghitung penjumlahan vektor dan perkalian vektor dengan skalar. Untuk penjumlahannya sebagai berikut :

void vektor::penjumlahan_vektor(const vektor& a, const vektor& b){
     if (a.banyak > b.banyak) banyak = a.banyak;
     else banyak = b.banyak;
     for(int i=0;i<banyak;i++){
             elemen[i] = a.elemen[i] + b.elemen[i];
             }
     }
    
Untuk perkalian vektor dengan sekalar bisa dibuat seperti ini :

void vektor::perkalian_vektor(float k, const vektor& d){
     banyak = d.banyak;
     for(int i=0;i<banyak;i++){
             elemen[i]=k * d.elemen[i];
             }
     }

Mencari Nilai Maksimum/Minimum dengan Bahasa C

Program untuk mencari nilai maksimu/minimum ini merupakan kombinasi dari penggunaan array dan fungsi.
Bagan alur program yang akan dibuat ditampilkan pada gambar 1 dan gambar 2.

Pencarian nilai maksimum
Pada prinsipnya alur dari pencarian nilai maksimum adalah sebagai berikut:
  1. Dideklarasikan sebuah variabel bernama maks.
  2. Variabel maks tersebut diisi dengan data pertama dari kumpulan data.
  3. Program melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan seterusnya hingga data terakhir.
  4. Setiap kali iterasi, data dibandingkan dengan nilai data variabel maks. Jika data pada langkah iterasi tersebut nilainya lebih besar daripada data variabel maks, maka data tersebut dimasukkan ke variabel maks menggantikan data sebelumnya.
Program mencari nilai maksimum diberikan pada listing 1.
Listing 1. Mencari nilai maksimum
#include <stdio.h>
#define N 20
float maks();
int i;
main()
{
float nmaks, bil[N];
int jml;
clrscr();
printf(“Program mencari nilai maksimum \n\n”);
// input jumlah bilangan
printf(“Jumlah bilangan (maks 20) : “);
scanf(“%d”,&jml);
printf(“\n”);
// input data
for (i=0;i<jml;i++)
{
printf(“Bilangan ke %d : “,i+1);
scanf(“%f”,&bil[i]);
}
// mencari nilai maksimum
nmaks = maks(bil,jml);
// mencetak nilai maksimum
printf(“Nilai maksimum adalah : %f”,nmaks);
}
// fungsi menentukan nilai maksimum
float maks(X,k);
float X[];
int k;
{
float maksimum = X[0];
for (i=0;i<k;i++)
{
if (X[i] > maksimum)
{
maksimum = X[i];
}
}
return maksimum;
}
Jika program tersebut dijalankan, salah satu kemungkinan hasilnya adalah sebagai berikut:
Program mencari nilai maksimum
Jumlah bilangan (maks 20) : 5
Bilangan ke 1 : 12
Bilangan ke 2 : 65
Bilangan ke 3 : 32
Bilangan ke 4 : 73
Bilangan ke 5 : 49
Nilai maksimum adalah : 73.000000
Bandingkan dengan gambar 3.

Pencarian nilai minimum
Pada prinsipnya alur dari pencarian nilai minimum sama dengan pencarian nilai maksimum, hanya ada sedikit perbedaan pada pembandingan nilai variabel. Alurnya adalah sebagai berikut:
  1. Dideklarasikan sebuah variabel bernama min.
  2. Variabel min tersebut diisi dengan data pertama dari kumpulan data.
  3. Program melakukan iterasi dengan looping for menuju ke data kedua, ketiga, dan seterusnya hingga data terakhir.
  4. Setiap kali iterasi, data dibandingkan dengan nilai data variabel min. Jika data pada langkah iterasi tersebut nilainya lebih kecil daripada data variabel min, maka data tersebut dimasukkan ke variabel min menggantikan data sebelumnya.
Program mencari nilai minimum diberikan pada listing 2.
Listing 2. Mencari nilai minimum
#include <stdio.h>
#define N 20
float min();
int i;
main()
{
float nmin, bil[N];
int jml;
clrscr();
printf(“Program mencari nilai minimum \n\n”);
// input jumlah bilangan
printf(“Jumlah bilangan (maks 20) : “);
scanf(“%d”,&jml);
printf(“\n”);
// input data
for (i=0;i<jml;i++)
{
printf(“Bilangan ke %d : “,i+1);
scanf(“%f”,&bil[i]);
}
// mencari nilai minimum
nmin = min(bil,jml);
// mencetak nilai minimum
printf(“Nilai minimum adalah : %f”,nmin);
}
// fungsi menentukan nilai minimum
float min(X,k)
float X[];
int k;
{
float minimum = X[0];
for (i=0;i<k;i++)
{
if (X[i] < minimum)
{
minimum = X[i];
}
}
return minimum;
}
Salah satu kemungkinan hasil apabila program tersebut dijalankan adalah sebagai berikut:
Program mencari nilai minimum
Jumlah bilangan (maks 20) : 5
Bilangan ke 1 : 12
Bilangan ke 2 : 65
Bilangan ke 3 : 32
Bilangan ke 4 : 73
Bilangan ke 5 : 49
Nilai minimum adalah : 12.000000