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;
}
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:
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
#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.
• 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.
• 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.
• 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.
• 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:
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]
Langganan:
Postingan (Atom)







