Kamis, 15 Juni 2017

DIKTAT BAB 8

Latihan

1. Perhatikan bahwa Anda dapat melewatkan banyak nomor dalam daftar dan masih berada dalam urutan menaik yaitu sebagai berikut :
3 4 6 17 21 24 32 43
Angka-angka ini meningkat saat Anda bergerak melalui daftar dari kiri ke kanan. Bangunlah sebuah array yang berisi angka-angka tersebut ? Kemudian lakukan pencarian biner (Binary Search) untuk memeriksa apakah angka yang kita cari ada dalam daftar array tersebut ?

Source Code:
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
 const int Ar[8] = {3,4,6,17,21,24,32,43};
 int tar;

cout<<"masukan data yang dicari : ";
 cin>>tar;
int awal=0, akhir=10, tengah;


 while (awal <= akhir)
  { tengah = (awal + akhir)/2;
  if (tar > Ar[tengah] )      // descending ubah tanda > menjadi <
      { awal = tengah + 1; }
  else if (tar < Ar[tengah])  // descending ubah tanda < menjadi >
  {akhir= tengah - 1;}
  else {awal = akhir +1;
  }
   }
   if (tar == Ar[tengah])
   {cout<<" Data ditemukan, Ke- "<<tengah+1<<endl;
   }
   else {
    cout<<"target tidak ditemukan "<<endl;
   }
getch();

}


5. Urutkan deret angka berikut dengan selection sort dan tuliskan hasil tiap langkah (step) :
21 16 25 8 19 4 1 

Analisis:
[21, 16, 25, 8, 19, 4, 1]
Data pertama : 21
Mencari data terkecil dari data kedua sampai terakhir.
(i=1)
Data terkecil ditemukan pada posisi ke-7 (t=7), maka data pertama ditukar pada posisi ke-7, menjadi:
[1, 16, 25, 8, 19, 4,21]
Langkah ini diulang untuk data kedua (i=4). Ditemukan pada posisi ke-6 (t=6).
Data kedua ditukar dengan data ke-6, menjadi :
[1, 4, 25, 8, 19,16,  21]

Fase selengkapnya :
Data awal :          [21, 16, 25, 8, 19, 4, 1]            1 terkecil, 21               1
Fase 1              [1, 16, 25, 8, 19, 4, 21]            4 terkecil, 16               4
Fase 2              [1, 4, 25, 8, 19, 16, 21]            8 terkecil, 25               8
Fase 3              [1, 4, 8, 25, 19, 16, 21]            16 terkecil, 25             16
Fase 4              [1, 4, 8, 16, 19, 25, 21]            19 terkecil, 19             19
Fase 5              [1, 4, 8, 16, 19, 25, 21]            21 terkecil, 25             21
Fase 6              [1, 4, 8, 16, 19, 21, 25]            25 terkecil tetap.
Fase 7              [1, 4, 8, 16, 19, 21, 25]           
Fase 8              [1, 4, 8, 16, 19, 21, 25]           



Source Code:

#include <iostream>
#include <conio.h>
using namespace std;
int data[10],data2[10];
int n;

void tukar(int a, int b)
{
 int t;
 t = data[b];
 data[b] = data[a];
 data[a] = t;
}
void selection_sort()
{
 int pos,i,j;
 for(i=1;i<=n-1;i++)
 {
  pos = i;
  for(j = i+1;j<=n;j++)
  {
   if(data[j] < data[pos]) pos = j;
  }
  if(pos != i) tukar(pos,i);
 }
}

int main()
{
 cout<<"URUT DERET ANGKA DENGAN SELECTION SORT"<<endl<<endl;

 cout<<"Masukkan Jumlah Data : ";
 cin>>n;
 for(int i=1;i<=n;i++)
 {
  cout<<"Masukkan data ke "<<i<<" : ";
  cin>>data[i];
  data2[i]=data[i];
 }

 selection_sort();
 cout<<"Data Setelah di Sort : ";
 for(int i=1; i<=n; i++)
 {
  cout<<" "<<data[i];
 }

 getch();
}

DIKTAT BAB 6

Kasus 5.2. Buatlah fungsi yang menentukan nilai terbesar dari 2 bilangan bulat.

Source Code:
#include <iostream>
using namespace std;

int maksimum2(int a, int b)
{
    if (a>b) return(a);
    else return(b);
}
main() 
{
    int x, y;
    cout<< "Masukkan dua integer. \n";
    cout<< "Bilangan pertama : "; cin>>x;
    cout<< "Bilangan kedua : "; cin>>y;
    cout<< "Nilai terbesar : "<<maksimum2(x,y);
return 0;
}




8.Menghitung tinggi segitiga

Source Code: 
 #include <iostream>
using namespace std;
class segitiga {
    public :
        segitiga ();
        void input();
        void proses();
    
    private :
        int l;
        int a;
        int tinggi;
};
segitiga::segitiga(){
    cout<<"=================================\n";
    cout<<"Menghitung Tinggi Segitiga\n";
    cout<<"=================================\n";
}

void segitiga::input (){
        cout<<"masukkan luas segitiga : ";
        cin>>l;
        cout<<"masukkan nilai alas segitiga : ";
        cin>>a;
    
}

void segitiga::proses(){
    tinggi = 2*l/a;
    cout<<"Tinggi : "<<tinggi;
}

int main(int argc, char** argv) {
    
    segitiga sgtga;
    sgtga.input();
    sgtga.proses();
    return 0;
}

DIKTAT BAB 5

1. cetaklah bilangan 1 sampai dengan 4 menggunakan downto.

Source Code:
#include <iostream>

using namespace std;

int main(){
    cout <<"\n \t\t\tPROGRAM MENCETAK BILANGAN 1-4  \n";//Algoritma menceteak bilanagn 1 sampai 4
    cout <<" \n\t\t\t     DENGAN PERULANGAN \n";        //{langsung mencetak bilanagn 1 sampai 4}

int b; //Deklarasi b=integer
    for (b=1;b<=4;b++){    //read 
    cout<<b<<endl;
    }
    
    return 0;
}




3. Buatlah algoritma dan program untuk mencetak bilangan yang habis dibagi 3 dan 5
antara 1 sampai dengan 100.

Source Code:
#include <iostream>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char** argv) {
    int a;
    
    for(a=1;a<=100;a++){
    if(a%3==0 && a%5==0){
        cout<<"Bilangan habis dibagi 3 dan 5= "<<a;
        cout<<endl;
    }else{
    }
    }
    return 0;
}


DIKTAT BAB 4

1.

Buatlah flowchart dan translasi program dari algoritma 4.2.b. di atas.

 Source Code:
#include <iostream>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

int main(int argc, char* argv[]) {
   
    int a, b, c;
    cout<<"Masukkan nilai A = ";
    cin>>a;
    cout<<"Masukkan nilai b = ";
    cin>>b;
    cout<<"Masukkan nilai c = ";
    cin>>c;
   
    if(a>b) {
    if(a>c) {
        cout<<"Nilai terbesar adalah nilai A = "<<a;
            }
            }
    if(b>a) {
    if(b>c) {
        cout<<"Nilai terbesar adalah nilai B = "<<b;
            }
            }
    else if(c>a)
    if(c>b) {
        cout<<"Nilai terbesar adalah nilai C = "<<c;
         }
      
   
    return 0;
}





2. Sempurnakan algoritma 3.3. dengan akar imajiner berbentuk :
a + bi
dengan a dan b bilangan real dan bila harga b2 - 4ac < 0 .
Perhatikan bahwa nilai a dan b dihitung terpisah.

Source Code:
#include <iostream>
#include <math.h>
#include <conio.h>

using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */

class Akar {
    friend ostream& operator<<(ostream&, Akar&);
    friend istream& operator>>(istream&, Akar&);
    public:
    Akar();
    int disk() { return B*B-4*A*C; }
    float akar1() {return (-B+sqrt(disk()))/(2*A); }
    float akar2() {return (-B-sqrt(disk()))/(2*A); }
    void hitung_akar();
    void cetak_disk() {
         cout << "diskriminan = " << disk() << endl; }
    void cetak_akar() {
        cout << "x1 = " << akar1() << endl;
        cout << "x2 = " << akar2() << endl;
    }
private:
    int A, B, C; // input
    float x1, x2; // akar 1 dan akar 2
};
ostream& operator<<(ostream& out, Akar& keluaran) {
    keluaran.cetak_disk();
    if (keluaran.disk() >= 0) keluaran.cetak_akar();
    else out << "Akar imajiner";
    return out;
}
istream& operator>>(istream& in, Akar& masukan) {
    cout << "Koefisien pangkat 2 : "; cin >> masukan.A;
    cout << "Koefisien pangkat 1 : "; cin >> masukan.B;
    cout << "Koefisien pangkat 0 : "; cin >> masukan.C;
return in;
}
Akar::Akar() {
    cout << "Menghitung akar persamaan kuadrat "<<endl<<endl;
} 

void Akar::hitung_akar() {
    if (A == 0) {
    cout << "bukan pers. kuadrat.\n";
    cout << "Harga akar = " << -C/B; } else {
    if (disk() > 0) {
        x1 = akar1();
        x2 = akar2();
        }     
    else if (disk() == 0) {
        x1 = akar1();
        x2 = x1;
        }
    }   
}

int main(int argc, char** argv) {
    Akar kasus;
    cin >> kasus;
    kasus.hitung_akar();
    cout << kasus;
    return 0;
}