Sabtu, 14 April 2012

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