Selasa, 17 April 2012

menampilkan angka genap dari 25 sampai dengan 70 secara rekursif

#include <iostream>
#include <string>

using namespace std;
class genap{
      friend istream& operator>>(istream&, genap&);
      friend ostream& operator<<(ostream&, genap&);
      public:
             genap();
             int proses(int i);
             private:
                     int i;
                     };
      genap::genap(){
      cout<<" menampilkan angka genap dari 25 sampai dengan 70"<<endl;
      }
     
     
      int genap::proses(int i){
          if(i>70){     
          } else
          { if(i%2==0)
          {        
          cout<<i<<endl;}
          else
          {} proses(i+1);
          }
          }
         
                            

int main()
{
    genap x;
    x.proses(25);
   
    system("PAUSE");
    return EXIT_SUCCESS;
}

outputnya:

Senin, 16 April 2012

integer multiplication of two functions using the sum operator(fungsi perkalian 2 bilangan bulat dengan menggunakan operator penjumlahan)

untuk menghitung perkalian bilangan bulat dengan menggunakan operator penjumlahan:
analisis:
axb=a+a+a+...+a(sebnyak b kali)
fungsi kali(input a,b:integer):integer
Deklarasi
hasil, i:integer
Deskripsi
hasil<- 0
for i<- 1 to b do
hasil<- hasil+a
kali<- hasil

main
 kali()
programnya:

#include <cstdlib>
#include <iostream>

using namespace std;
class kali{
      friend istream& operator>>(istream&, kali&);
      friend ostream& operator<<(ostream&, kali&);
      public:
             kali();
             int proses(int a, int b);
             int output();
             private:
                     int a,b,i;
                     int hasil;
                     };
                     kali::kali(){
                     cout<<"menghitung hasil perkalian a dan b menggunakan operator penjumlahan"<<endl;
                                  }
            istream& operator>>(istream& in, kali& masukan){
                     cout<<"masukan bilangan a:";
                     in>>masukan.a;
                     cout<<"akan dikali dengan b:";
                     in>>masukan.b;
                     }
                     int kali::proses(int a, int b){
                         int i,hasil=0;
                         for (i=1;i<=b;i++)
                         hasil=hasil+a;
                         return(hasil);
                         }
                         int kali::output(){
                             hasil=proses(a,b);
                             cout<<"Nilai"<<a<<"x"<<b<<"="<<hasil;
                             return hasil;
                             }
                             int main()
                             {
                            kali x;
                            cin>>x;
                            x.output();
                            cout<<endl<<endl;
                                                      
            
    system("PAUSE");
    return EXIT_SUCCESS;
}

outputnya:

overload program to convert decimal numbers into binary numbers

mau buat program konversi bilangan desimal ke biner? untuk konsep perhitungannya misal dimasukkan bilangan desimal(n)=12:
1). 12 dibagi 2 =6 sisa 0
2). 6 dibagi 2=3 sisa 0
3). 3 dibagi 2=1 sisa 1
4). 1 dibagi 2=0 sisa 1
maka 12 desimal=1100 biner

programnya:
#include <cstdlib>
#include <iostream>

using namespace std;
class biner{
      friend istream& operator>>(istream&, biner&);
      friend ostream& operator<<(ostream&, biner&);
     
      public:
      biner();      
      void masukan();
      void proses();
      void keluar();
      private:
      int data[100],c,n;       
      };
      biner::biner(){
       cout<<"program mengkonversi bilangan desimal ke biner"<<endl;
       }
       istream& operator>>(istream& in, biner& masukan){             
           cout<<"masukan desimal:";
           in>>masukan.n;
           }
      void biner::proses(){
           int i;
           i=0;c=0;
           while(n!=1){
                       data[i]=n%2;
                       n=n/2;i=i+1;c=c+1;
                       }
                       }
     void biner::keluar(){
          cout<<"hasil biner adalah :"<<1;
          for(int i=c-1;i>=0;i--){
                  cout<<data[i];}
                  }
                 
     int main(){
         biner a;
         cin>>a;
         a.proses();
         a.keluar();
         cout<<endl;
        
         system("PAUSE");
         return EXIT_SUCCESS;
         }                                   
            
   hasil outputnya:
           

Sabtu, 14 April 2012

fungsi fibonacci

deret fibonacci: 1,1,2,3,5,8,...
suku ke n dari deret fibonacci diperoleh dengan rumus:
fibonacci(n)=fibonacci(n-1) + fibonacci(n-2)
dengan nilai awal untk n=1 dan n=2 berharga 1

fungsi fibonacci (input n;integer) :integer
deskripsi
if(n=1) or (n=2) then fibonacci =1
else fibonacci =fibonacci(n-1)+fibonacci(n-2)
endif


#include <iostream.h>
#include <conio.h>

class Operator {
      friend ostream& operator<<(ostream&, Operator&);
      friend istream& operator>>(istream&, Operator&);
      public:
             long fibonacci(int);
             private:
                     int n;
                     };
                    
                     int fibonacci(int n)
                     { if((n==1)||(n==2)) return(1);
                     else return(fibonacci(n-1)+fibonacci(n-2));
                     }
                     ostream& operator<<(ostream& out, Operator& a){
                              for (int i=1;i<=a.n;i++)
                              out<<fibonacci(i)<<" ";
                              return out;
                              }
                             
                              istream& operator>>(istream& in, Operator& a){
                                       cout<<"Sampai suku ke:";
                                       in>>a.n;
                                       return in;
                                       }
                                      
                                       main(){
                                              Operator run;
                                              cin>>run;
                                              cout<<run;
                                              getch();
                                              }

calculate combinations and permutations

#include <iostream.h>
    #include <stdio.h>
    #include <conio.h>
long int fak (long int x);
    int main()
   
    {
    int n,r, Prts,pilihan,p;
    char ulang;
        do
    {
   
    cout<<"PERHITUNGAN KOMBINASI DAN PERMUTASI"<<endl;
    cout<<"1. KOMBINASI"<<endl;
    cout<<"2. PERMUTASI"<<endl;
   
    cout<<endl<<endl;
    cout<<"Pilihan Anda : ";cin>>pilihan;
    switch (pilihan)
    {
    case 1 :
    cout<<" Program Menghitung Kombinasi(nCr)";
    cout<<endl;
    cout<<" Masukkan Nilai n : "; cin>>n;
    cout<<endl;
    cout<<" Masukkan Nilai r : "; cin>>r;
    cout<<endl;
    if (n>r){
    Prts = fak(n)/(fak(n-r)*fak (r));
    cout<<endl;
    printf(" Kombinasinya adalah: %d",Prts);
    cout<<endl; }
    else if (n<r){
    cout<<"data tak valid";}
    cout<<endl ;
    break;
    case 2 :
    cout<<" Program Menghitung Permutasi(nPr)";
    cout<<endl;
    cout<<" Masukkan Nilai n : "; cin>>n;
    cout<<endl;
    cout<<" Masukkan Nilai r : "; cin>>r;
    cout<<endl;
    if (n>r){
    Prts = fak (n)/fak(n-r);
    cout<<endl;   
    cout<<" Permutasinya adalah: "<<Prts;
    cout<<endl; }
    else if (n<r){
    cout<<"data tak valid";}
    cout<<endl ;
    break;
    case 3 :
    cout<<"Exit"<<endl;
    break;
    default:
    cout<<"Menu tidak tersedia"<<endl;
    break;
    }
    cout<<"Kembali ke Menu Utama (y/n)?";cin>>ulang;
    }while(ulang == 'y');
    }
   
    long int fak (long int n)
    {
    int f;
    if (n<=1)
    {
    f=1;
    }
    else
    {
    f=n*fak(n-1);
    }
    return (f);
    }

algoritma menghitung konversi suhu

untuk mengkonversi suhu dari Celcius menjadi Reamur, Fahrenheit dan Kelvin dicari dengan rumus:
R=4/5*C
F=9/5*C+32
K=C+273

ini gambar flowchartnya:

konversi nilai menjadi huruf

algoritma Konversi_nilai
mengkonversikan nilai angka menjadi nilai huruf
deklarasi
nilai :integer
nilai_huruf: char
deskripsi:
read nilai
if (nlai >0) and (nilai <=20) then nilai E
if (nlai >20) and (nilai <=40) then nilai D
if (nlai >40) and (nilai <=60) then nilai C
if (nlai >60) and (nilai <=80) then nilaiB
else nilai_huruf A
endif
write (nilai_huruf)

#include <cstdlib>
#include <iostream>

using namespace std;
class Nilai{
      friend ostream& operator<<(ostream&, Nilai&);
      friend istream& operator>>(istream&, Nilai&);
      public:
      Nilai(){
              if ((nilai>0) &&(nilai <=20))
              nilai_huruf ='E';
              else if((nilai>20) &&(nilai <=40))
              nilai_huruf='D';
              else if((nilai>40) &&(nilai <=60))
              nilai_huruf='C';
              else if((nilai>60) &&(nilai <=80))
              nilai_huruf='B';
              else nilai_huruf ='A';
              }
              private:
             int nilai;
             char nilai_huruf;
             };
             istream& operator>>(istream& in, Nilai& masukan){
                      cout<<"masukkan nilai angka=";
                      in>>masukan.nilai;
                      return in;
                      };
                      ostream& operator<<(ostream& out, Nilai& keluaran){
                               out<<"Nilai angka:"<<keluaran.nilai<<endl;
                               out<<"Nilai huruf:"<<keluaran.nilai_huruf;
                               return out;
                               }
                             
                               int main(){
                                    Nilai angka;
                                    cin>>angka;
                                    angka.konversikan();
                                    cout<<angka;
                                    }
                                                


    system("PAUSE");
    return EXIT_SUCCESS;
}

membalik kata secara iteratif dan rekursif

 
#include <iostream.h>
#include <conio.h>


class Balik{
       friend istream& operator>>(istream&, Balik&);
       friend ostream& operator<<(ostream&, Balik&);
       public:
             void balik_kata();
             void balik(int s);
       private:
               char kata[50];
               int n;
};

void Balik::balik_kata(){//iteratif
     cout<<"Masukkan Kata Yang Akan Dibalik : ";
     cin>>kata;n=strlen(kata);
     //strrev(kata);
     cout<<"Kata Setelah Dibalik : ";
     balik(n);
}

void Balik::balik(int s){//rekursif
     if (s != -1){
            cout<<kata[s];
            balik(s-1);
            }
            }

int main()
{
 Balik X;
 X.balik_kata();
// X.balik(char *s);
 
  system ("Pause");
  return EXIT_SUCCESS;
}

Kamis, 12 April 2012

program displays the names of the months

program menampilkan nama-nama bulan ,bulan 1 : januari; bulan 2:februari;dst.

berikut programnya:

#include <iostream>
#include <string>

using namespace std;
class bulan{
      friend ostream& operator <<(ostream&,const bulan&);
      friend istream& operator >>(istream&,bulan&);
      public:
           
             bulan(unsigned int b=0){nama=b;}
            // void nama_bulan1();
             //void nama_bulan2();
             //void nama_bulan3();
             void bulannnya();
      private:
              unsigned int nama;
              };
   
      istream& operator>>(istream& masuk,bulan& x){
               cout<<"masukan angka 1 - 12 : ";
               masuk>>x.nama;
               return masuk;
               }
             
      void bulan::bulannnya(){
           switch(nama){
                         case 1 : cout<<"januari";break;
                         case 2 : cout<<"februari";break;
                         case 3 : cout<<"maret";break;
                         case 4 : cout<<"april";break;
                         case 5 : cout<<"mei";break;
                         case 6 : cout<<"juni";break;
                         case 7 : cout<<"juli";break;
                         case 8 : cout<<"agustus";break;
                         case 9 : cout<<"september";break;
                         case 10 : cout<<"oktober";break;
                         case 11 : cout<<"november";break;
                         case 12 : cout<<"desember";break;
                         default :cout<<"maaf angka yang anda masukan melebihi angka yang saya tentukan \n";
                         }
                         }
      int main(){
           bulan a;
           cin>>a;
           a.bulannnya();
           system("PAUSE");
           return 0;
           }

Calculate the distance between two points A (X1, Y1) and B (X2, Y2)

jika rumus jarak :
d=((x2-x1)*(x2-x1))+((y2-y1)*(y2-y1))
jarak AB= sqrt(d)

program:
#include<iostream.h>
#include<conio.h>

    class hitung{
       friend ostream& operator<<(ostream&,hitung&);
      friend istream& operator>>(istream&,hitung&);
   public:
       hitung();
      void hitung_jarak(){jarak=((Y2-Y1)*(Y2-Y1)-(X2-X1)*(X2-X1));}

   private:
       float X1,X2,Y1,Y2,jarak;
      };
   hitung::hitung(){
      cout<<"Progaram untuk menghitung Jarak dari 2 titik"<<endl;
      }
   istream& operator>>(istream& in,hitung& masukan){
       cout<<"masukan titik X1 =";
      in>>masukan.X1;
      cout<<"masukan titik X2 =";
      in>>masukan.X2;
      cout<<"masukan titik Y1 =";
      in>>masukan.Y1;
      cout<<"masukan titik Y2 =";
      in>>masukan.Y2;
      return in;
      }
   ostream& operator<<(ostream& out,hitung& output){
       cout<<"tampilkan Jumlah jarak = "<<output.jarak<<endl;
      return out;
      }
   main(){
       hitung x;
      cin>>x;
      x.hitung_jarak();
      cout<<x;
      getch();
      return 0;
      }



flowchart:

print the number is divisible by 5 and 7 between 1 to 100 are then converted into a recursive iterative

#include <iostream>
#include <string>

using namespace std;

class Bagi{
      friend istream& operator>>(istream&, Bagi &);
      friend ostream& operator<<(ostream&, Bagi&);
      public:
       Bagi();
       void proses();
       int bagi(int a);
       private:
       int a;
       };

Bagi::Bagi(){
cout<<"Menampilkan bilangan yang habis dibagi 5 dan 7 antara 1 sampai 100"<<endl;
             }

void Bagi::proses(){//iteratif
a =1;
while (!(a>100)){
if (a % 5==0 && a % 7==0){
cout << a << endl;
}else{}
a =a+1;
}
}
int Bagi::bagi (int a){//rekursif
if (a>100){
}else
{
if (a % 5==0 && a % 7==0)
{
cout << a << endl;      }
else
{}bagi(a+1);
}}

int main(){

    Bagi X;
    X.proses();
    X.bagi(1);

system("pause");
return 0;
}

 gambar flowchartnya:
iteratif
rekursif

perbedaan fungsi iteratif dan rekursif

Algoritma iteratif
- Teknik Iteratif merupakan suatu teknik pembuatan algoritma dengan pemanggilan procedure    beberapa kali atau hingga suatu kondisi tertentu terpenuhi.
- Tidak ada variabel lokal baru
- Program tidak sederhana
- Menggunakan perulangan for dan while
Kelebihan perulangan iteratif:
• Mudah dipahami dan mudah melakukan debugging ketika ada perulangan yang salah.
• Dapat melakukan nested loop atau yang disebut dengan looping bersarang.
• Proses lebih singkat karena perulangan terjadi pada kondisi yang telah disesuaikan.
• Jarang terjadi overflow karena batasan dan syarat perulangan yang jelas.

Kelemahan perulangan iteratif:
• Tidak dapat menggunakan batasan berupa fungsi.
• Perulangan dengan batasan yang luas akan menyulitkan dalam pembuatan program perulangan itu sendiri.

program 1
Bentuk fungsi iteratif :
#include <cstdlib>
#include <iostream>
using namespace std;
int jumlah(int n) {
int hasil = 0;
for (int i=0; i<n; i=i+2)
hasil = hasil + i;
return hasil;
}
void cetak(int n) {
for (int i=0; i<n; i=i+2)
cout << i << ” “;
}
int main(int argc, char *argv[])
{
int n = 10;
cout << jumlah(n);
cetak(n);
system(“PAUSE”);
return EXIT_SUCCESS;
}

Algoritma rekursif
- Teknik Rekursif merupakan salah satu cara pembuatan algoritma dengan pemanggilan procedure atau function yang sama
- Ada variabel lokal baru
- Program menjadi lebih sederhana
- Menggunakan perulangan if else
Kelebihan perulangan rekursif:
• Sangat mudah untuk melakukan perulangan dengan batasan yang luas dalam artian melakukan perulangan dalam skala yang besar.
• Dapat melakukan perulangan dengan batasan fungsi.

Kekurangan perulangan rekursif:
• Tidak bisa melakukan nested loop atau looping bersarang.
• Biasanya membuat fungsi sulit untuk dipahami, hanya cocok untuk persoalan tertentu saja.
• Trace error sulit.
• Memerlukan stack yang lebih besar, sebab setiap kali fungsi dipanggil, variabel lokal dan parameter formal akan ditempatkan ke stack dan ada kalanya akan menyebabkan stack tak cukup lagi (Stack Overrun).
• Proses agak berbelit-belit karena terdapat pemangilan fungsi yang berulang-ulang dan pemanggilan data yang ditumpuk.

jika pada program 1, diubah kedalam bentuk rekursif :
Dalam bentuk rekursif :
#include <cstdlib>
#include <iostream>
using namespace std;
int jumlah(int n) {
if(n==0) return (0);
else return (n-2 + jumlah(n-2));
}
void cetak(int n) {
if(n!=0){
cetak(n-2);
cout << n-2 << ” “;
}
}
int main(int argc, char *argv[])
{
int n = 10;
cout << jumlah(n);
cetak(n);
system(“PAUSE”);
return EXIT_SUCCESS;
}

menentukan nilai maksimum dan minimum dari n bilangan [array]

procedure maks_min(input data :larik; n:integer; output m1,m2:integer)
deklarasi
i:integer
deskripsi
m1 <-data[1]
m2 <-data[1]
for i <- 2 to n do
if (data[i]>m1) then m1 <- data[i];
if (data[i]<m2) then m2 <- data[i];
endfor

flowchartnya:

menentukan nilai maksimum dari n bilangan dgn [array]

function maksimum(input data :array [1..10] of integer, n:integer): integer
deklarasi
i,temp: integer
deskrips
temp <- data[1]
for i<- 2 to n do
temp <- maksimum2(temp, data[i])
maksimum <- temp

flowchartnya:
bersambung

mencari nilai deviasi standar dari n buah kata [array]

Fungsi std(input x:array[1--10] of integer, n:integer, rata:real):real
{diberikan n data kemudian dicari rata-ratanya}
deklarasi
i,jumlah:integer
deskripsi
jumlah <- 0
for i <- 1 to n do
jumlah <- jumlah + sqrt(x[i]-rata)
endfor
std<- sqrt(jumlah/(n-1))

flowchartnya:

mencari rata-rata dari n bilangan bulat [array]

rata-rata dari n bilangan bulat dengan menggunakan array
Fungsi rata(input x:array [1..10] of integer, n:integer):real
{diberikan n databkemudian dicari rata-ratanya}

deklarasi
 i, jumlah: integer
deskripsi
jumlah <-0
for i <- 1 to n do
jumlah<-jumlah +x[i]
endfor
rata<-jumlah/n

flowchartnya:

Senin, 09 April 2012

refleksi minggu ke-7 "Alpro"

dosen menjelaskan tentang kisi-kisi Uts. dijelaskan pula tentang fungsi iteratif dan rekursif pada pembagian a/b.
a        b       count
12      4          0
8        4          1
4        4          2
0        4          3
kalau seperti itu sudah jelas sih, tp kalau diterapkan dalam program belum tau deh.. ihihii, ya bsk tak coba.
materi minggu ini adalah Array. di kelas dibagi kelompok TP seperti biasa untuk mendiskusikan tentang kasus array. untuk tiap kasus ditentukan inputnya,proses,dan outputnya. hasil diskusi direplay di forum tif.Ini hasil diskusi kelompok saya:
Contoh Array menentukan nama hari.
         input : seseorang melihat kalender untuk mencari tahu, pada tanggal x jatuh pada hari apa.
         proses : (misalnya) mencari tanggal 9 april itu hari apa. Kemudian melihat kalender bulan april   kolom 1 baris ke-3
         output : pada tanggal 9 April adalah hari Senin

fungsi menentukan nilai terbesar dari 2 bilangan bulat

main

jalankan
maksimum2()

prosedur untuk menukar nilai dari dua variabel

menukar isi dua nilai a menjadi b, demikian pula sebaliknya. maka perlu tempat sementara (temp) sebelum nilai a ditukar dengan nilai b, karena tidak bisa begitu saja menukar nilai b, yang akan berakibat nilai b akan hilang.

prosedur tukar(input/output a: integer; b  integer)

main




tukar

Minggu, 08 April 2012

menghitung nilai x pangkat y secara rekursif

dalam fungsi pangkat xy,kita tahu bahwa semua bilangan selain 0, jika dipangkatkan dgn 0 nilainya sama dengan 1. jika x dipangkatkan dgn y, dgn y>0 maka hasilnya sama dgn x dikalikan dgn x dipangkatkan (y-1). gambar flowchartnya kurang lebihnya seperti berikut:
programnya:

#include<cstdlib>
#include<iostream>
using namespace std;
class Pangkat{
friend istream& operator>>(istream&, Pangkat&);
friend ostream& operator<<(ostream&, Pangkat&);
public:
Pangkat();
int proses(int x,int y);
int output();
private:
int x,y,i;
int hasil;
};
Pangkat::Pangkat() {
cout<<"mencari X pangkat Y"<<endl;
}
istream& operator>>(istream& in, Pangkat& masukan){
cout<<"masukan x:";
in>>masukan.x;
cout<<"masukan y:";
in>>masukan.y;
}
int Pangkat::proses(int x, int y){
if(y==1)
return x;
else if (y==0)
return 1;
else
return x*proses(x,y-1);
}
int Pangkat::output(){
hasil=proses(x,y);
cout<<"Maka hasilnya adalah:"<<hasil;
return hasil;
}
int main()
{
Pangkat X;
cin>>X;
X.output();
cout<<endl<<endl;
system ("Pause");
return EXIT_SUCCESS;
}

Sabtu, 07 April 2012

menentukan bangun persegi atau persegi panjang


Masalahmenentukan apakah bangun itu persegi atau persegi panjang
            a.         Analisis MasalahTabel Input-Proses-Output
Contoh Kasus
Input
Process
Output
Persegi mempunyai panjang sisi-sisi yg sama,sedangkan persegi panjang memiliki panjang dan lebar yg berbeda.
Sebagai contoh apabila diinputkan bil1=4 dan bil2=4 maka outputnya persegi karena mempunyai sisi yg sama, sedangkan bila diintpukan bil1=6 dan bil2=2 maka outputnya persegi panjang karena panjang dan lebarnya berbeda.



bil1, bil2



If(a==b) then write (‘Persegi’)
Else write (‘Persegi Panjang’)
Persegi atau Persegi panjang
           




b.         Algorithm DesignFlowchart



          
programnya:

#include<iostream.h>
#include<conio.h>

class beda{
friend istream& operator>>(istream&, beda&);
public:
beda(){};
void bedakan (){
if(a==b)
cout<<"persegi";
else
cout<<"persegi panjang";
}
private:
int a,b;
};
istream& operator>>(istream& in, beda& masukan){
cout<<"masukan bil1=";
in>>masukan.a;
cout<<"masukan bil2=";
in>>masukan.b;  
return in;
}
main(){
beda masukan;
cin>>masukan;
masukan.bedakan();
getch();