BAB 4 DIKTAT

Latihan
1. Buatlah flowchart dan translasi program dari algoritma 3.2.b. di atas.
1.        Algoritma menentukan_bilangan_terbesar
            {mencari bilangan terbesar dari 3 bilangan yang diinput}
Deklarasi
            Integer a,b,c,terbesar;
Deskripsi
            Write(“Masukkan Bilangan Pertama : ”);
            Read(a);
            Write(“Masukkan Bilangan Kedua : ”);
            Read(b);
            Write(“Masukkan Bilangan Ketiga : ”);
            Read(c);
            if (a>b) then
                        if (a>c)
                                    then write(“Terbesar = ”,a);
                                    else wrie(“Terbesar = ”,c);
                        endif
            else if (b>c)
                        then write(“Terbesar = ”,b);
                        else write(“Terbesar = ”,c);
            endif
            endif
using namespace std;
class Banding {
friend istream& operator>>(istream&, Banding&);
public:
Banding() {};
void bandingkan() {
int maks = x;
if (y > maks) maks = y;
if (z > maks) maks = z;
cout << "Bilangan terbesar : " << maks;
}
private:
int x, y, z; };
istream& operator>>(istream& in, Banding& bilangan){
cout << "Bilangan pertama = ";
in >> bilangan.x;
cout << "Bilangan kedua = ";
in >> bilangan.y;
cout << "Bilangan ketiga = ";
cin >> bilangan.z;
return in;
};
main() {
Banding bilangan;
cin >> bilangan;
bilangan.bandingkan();
getch();
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.

1.            Algoritma Menghitung akar-akar persamaan kuadrat

{Input: a,b,c, mencari akar-akar persamaan kuadrat dan mencari akar-akar persamaan kuadrat}

Deklarasi:
a,b,c : integer{Input}
disk : longint{output}
x1,x2 : real{output}
Deskripsi:
read(a,b,c)
disk<--b*b-4a*c
if (a=0) then write('Bukan persamaan kuadrat')
else if disk>0 then
  x1<---(-b)+sqrt(disk)/2*a
  x2<---(-b)-sqrt(disk)/2*a
else if disk=0 then
  x1<---(-b)/2*a
  x2<---x1
else write('Akar Imajiner')
end if
write(x1,x2)

using namespace std;
class persamaan{
public:
 void persamaan_kuadrat();
 float rumus();
private:
 int  x,y,z;
 float x1,x2;
 float disk;
};
void persamaan::persamaan_kuadrat(){
 cout<<"masukkan nilai A :";
 cin>>x;
 cout<<"masukkan nilai B :";
 cin>>y;
 cout<<"masukkan nilai C :";
 cin>>z;

}
float persamaan::rumus(){
 disk=y*y-4*x*z;

 if (disk>0)
  {
   cout<<"Diskriminan="<<disk<<" Maka akar-akarnya adalah:"<<endl;
   x1=(-y+(sqrt(disk)))/(2*x);
    cout<<"x1 :"<<x1;
    cout<<endl;
   x2=(-y-(sqrt(disk)))/(2*x);
    cout<<"x2 :"<<x2;
  }
 else if(disk=0)
  {
   cout<<"Diskriminan="<<disk<<" Maka akar-akarnya adalah:"<<endl;
   x1=-y/2*x;
    cout<<"x1 :"<<x1;
    cout<<endl;
   x2=x1;
    cout<<"x2 :"<<x2;
  }
 else
  cout<<"akar imajiner";
}
int main(int argc, char *argv[])
{
persamaan X;
X.persamaan_kuadrat();
X.rumus();
return 0;
}
3. Buatlah program dari algoritma 3.4. menggunakan case … of .
1.      Algoritma konversi nilai
{dibaca nilai angka kemudian di konversi ke nilai huruf}
Deklarasi :
nilai   : integer
nilai_huruf : char
Deskripsi
read(nilai)
if (nilai>0) and (nilai<=20) then nilai_huruf<- E
else if (nilai> 21) and (nilai<=40)then nilai_huruf<-  D
else if (nilai> 41) and (nilai<=60)then nilai_huruf<-  C
else if (nilai> 61) and (nilai<=80)then nilai_huruf<-  B
elsenilai_huruf<- A
end if
write(nilai_huruf)
using namespace std;
int main()
{
    int NILAI;

    system("clrscr");

    cout<<"\n============================================\n";
    cout<<"Kode         Range Nilai\n";
    cout<<"\n============================================\n";
    cout<<" 1         00-20\n";
    cout<<" 2         21-40\n";
    cout<<" 3         41-60\n";
    cout<<" 4         61-80\n";
    cout<<" 5         81-100\n";
    cout<<"\n-------------------------------------------\n";
    cout<<"Silahkan pilih kode dari nilai anda =";cin>>NILAI;

    switch(NILAI)
    {
        case 1: cout<<"E";
        break;
        case 2: cout<<"D";
        break;
        case 3: cout<<"C";
        break;
        case 4: cout<<"B";
        break;
        case 5: cout<<"A";
        break;
        default:
            cout<<"Invalid";
        break;
    }
    getch();
}
4. Buatlah algoritma, flowchart dan program untuk mengecek apakah pemakai
    memasukkan bilangan bulat atau bilangan real.
    Lebih dulu, carilah perbedaan dari 1.0 dan 1 kemudian 1 dan 1.23.
    Perbedaan :
1.          Algoritma_menentukan_bil_bulat/bil_real
{menentukan bilangan bulat atau real dari input yang di masukan}  
deklarasi
a    =float
b   = integer
bil  = char
deskripsi
b=a
read(a)
if(a=b) then bil <-- 'adalah bil bulat'
else bil<-- 'adalah bi real'
endif
write(bil)
using namespace std;

int main()

{
   int B;
   float A;
   cout <<" masukan bilangan" << endl;cin >> A;
   B =A;

   if (A==B) { cout << "BilanganBulat" << endl;   }

   else {cout << "BilanganReal" << endl;   }

   system("PAUSE");

   return 0;

}
5. Buatlah algoritma, flowchart dan program untuk menentukan banyaknya hari
    dalam suatu bulan dan tahun yang diberikan. Pertimbangkan pula adanya tahun
    kabisat di mana bulan Februari mempunyai jumlah 29 hari. Gunakan case .. of
dan if .. then .. else .. yang tepat untuk setiap kasus.

2.         Algoritma menentukan hari dalam satu bulan
{ input bulan dan tahun kemudian output jumlah hari dalam satu bulan
Deklarasi
   AngkaBulan : integer;           { 1 . . 12 }
   Tahun      : integer;          { > 0 }
   JumlahHari : integer;
Deskripsi
begin
     write('Bulan (1-12) = ');
     write('Tahun = ');
     case AngkaBulan of
          1, 3, 5, 7, 8, 10, 12   : JumlahHari:=31;
           4, 6, 9, 11            : JumlahHari:=30;
           2                      : if Tahun mod 4 = 0 then
                                        JumlahHari:=29
                                    else
                                        JumlahHari:=28;
                                   {endif}
    end;
              writeln('Jumlah hari dalam bulan ',AngkaBulan,' adalah ',JumlahHari);
end.
using namespace std;
int main()
{
 int bulan, tahun, hari;
 int jum_hari[12]=
 {31,28,31,30,31,30,31,31,30,31,30,31};
 char b1[10],b2[10],b3[10],b4[10],b5[10],b6[10],b7[10],
 b8[10],b9[10],b10[10],b11[10],b12[10];
 cout<<"\t\t--------------------------------------------\n";
 cout<<"\t\t>>MENENTUKAN JUMLAH HARI DALAM SUATU BULAN<<\n";
 cout<<"\t\t--------------------------------------------\n";
 cout<<"\n";
 cout<<"\t\tKeterangan\n";
 cout<<"\t\t-------------------------------------------\n";
 cout<<"\t\tBulan 1: Januari   | Bulan 7 :Juli\n";
 cout<<"\t\tBulan 2: Februari  | Bulan 8 :Agustus\n";
 cout<<"\t\tBulan 3: Maret     | Bulan 9 :September\n";
 cout<<"\t\tBulan 4: April     | Bulan 10:Oktober\n";
 cout<<"\t\tBulan 5: Mei       | Bulan 11:November\n";
 cout<<"\t\tBulan 6: Juni      | Bulan 12:Desember\n";
 cout<<"\t\t-------------------------------------------\n";
 cout<<"\t\tMasukkan Bulan (1--12) :";
 cin>>bulan;
 cout<<"\t\tMasukkan Tahun         :";
 cin>>tahun;
 if(bulan==2)
  {if(tahun &4==0)
   hari=29;
  else
   hari=28;
}
 else
  hari=jum_hari[bulan-1];
 cout<<"\t\t-------------------------------------------\n";
 cout<<"\t\tJumlah hari dalam bulan   :";
 cout<<bulan<<endl;
 cout<<"\t\tPada tahun                :";
 cout<<tahun<<endl;
 cout<<"\t\tDalam Satu Bulan Terdapat :",
 cout<<hari;
 cout<<"hari\n";
 cout<<endl;
 system("pause");
 return 0;
}
6. Buatlah algoritma, flowchart dan program untuk mengecek apakah karakter yang
   dimasukkan itu merupakan huruf besar, huruf kecil atau digit (bilangan).
   Gunakan fungsi ORD(char) untuk menyatakan nomor urut dalam tabel ASCII.
   Algoritma :
  
1.      Algoritma mengecek karakter yang dimasukkan termasuk huruf kapital, huruf kecil atau digit
{input karakter kemudian di cek apakah huruf besar, kecil atau digit}
Deklarasi
            karakter : string {input, output}
Deskripsi
            Read(karakter)
            if(karakter>=’A’ && karakter<=’Z’) ß Huruf kapital
            else if(karakter>=’a’ && karakter<=’z’) ß huruf kecil
            else(karakter>=’0’ && karakter<=’9’) ß digit
            endif
using namespace std;
 class Karakter
 {
 private:
     char karakter;
 public:
  void Proses ();
  void Output ();
 };

 void Karakter::Proses()
 {
 cout<<"Masukkan Karakter = ";cin>>karakter;
 };

 void Karakter::Output(){
 if (karakter >='A' && karakter <='Z')
 cout<<"Huruf Besar"<<endl;
 else if (karakter >= 'a' && karakter <='z')
 cout<<"Huruf Kecil"<<endl;
 else if (karakter >= '0' && karakter <= '9')
 cout<<"Digit (Bilangan)"<<endl;
 else
 cout<<"Simbol"<<endl;
 };
 main ()
 {
 Karakter bilhur;
 bilhur.Proses();
 bilhur.Output();
 getch ();
 return 0;
 }write(karakter )
7. Seorang dosen ingin mengkonversikan nilai angka hasil ujian mahasiswa
    menjadi nilai huruf dengan ketentuan :
    Nilai antara  Nilai Huruf
    0-60                      F
    61-70                    D
    71-80                    C
    81-90                    B
    91-100                  A
1.          Algoritma konversi nilai
{dibaca nilai angka kemudian di konversi ke nilai huruf}
Deklarasi :
nilai   : integer
nilai_huruf : char
Deskripsi
read(nilai)
if (nilai>0) and (nilai<=60) then nilai_huruf<- E
else if (nilai> 61) and (nilai<=70)then nilai_huruf<-  D
else if (nilai> 71) and (nilai<=80)then nilai_huruf<-  C
else if (nilai> 81) and (nilai<=90)then nilai_huruf<-  B
elsenilai_huruf<- A
end if
write(nilai_huruf)
using namespace std;
class Nilai {
                                                                                        friend ostream& operator<<(ostream&, Nilai&);
                                                                                        friend istream& operator>>(istream&, Nilai&);
                                                                                        public:
                                                                                                Nilai() {};
                                                                                                void konversikan() {
                                                                                                if ((nilai > 0) && (nilai <= 60))
                                                                                                nilai_huruf = 'F';
                                                                                                else if ((nilai > 60) && (nilai <= 70))
                                                                                                nilai_huruf = 'D';
                                                                                                else if ((nilai > 70) && (nilai <= 80))
                                                                                                nilai_huruf = 'C';
                                                                                                else if ((nilai > 80) && (nilai <= 90))
                                                                                                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;
}
8. Diberikan ketentuan pecahan uang di Indonesia. User memasukkan sebuah
    bilangan, program harus dapat memecahnya menjadi pecahan sesuai dengan
    mata uang di Indonesia.
    Misalkan dimasukkan nilai uang 127.675 rupiah. Cobalah memecah secara
    manual nilai uang di atas.
1.          Algoritma membaca nilai bilangan dengan Pangkat
{Diberikan masukan x dan y, dihitung nilai dari x pangkat y}
Deklarasi
x, y, i : integer { input }
pangkat : integer { output }
Deskripsi
read (x,y)
pangkat ß 1
for i ß 1 to y do
pangkat ß pangkat * x
enfor
write (pangkat)
using namespace std;
void first (int n) {
      switch (n) {
      case 1: cout << "satu "; break;
      case 2: cout << "dua "; break;
      case 3: cout << "tiga "; break;
      case 4: cout << "empat "; break;
      case 5: cout << "lima "; break;
      case 6: cout << "enam "; break;
      case 7: cout << "tujuh "; break;
      case 8: cout << "delapan "; break;
      case 9: cout << "sembilan "; break;
      case 10: cout << "sepuluh "; break;
      case 11: cout << "sebelas "; break;
      default: break;
      }}
void second (int n) {
      int bul, sisa;
      bul = n / 10;
      sisa = n % 10;
      if (bul == 0)
            first (sisa);
      else if (bul == 1) {
            if (sisa <= 1)
                  first (n);
            else {
                  first (sisa);
                  cout << "belas ";
            }}
      else {
            first (bul);
            cout << "puluh ";
            first (sisa);
      }}
void third (int n) {
      int bul, sisa;
      bul = n / 100;
      sisa = n % 100;
      if (bul == 0)
            second (sisa);
      else if (bul == 1) {
            if (sisa == 0)
                  cout << "seratus ";
            else {
                  cout << "seratus ";
                  second (sisa);
            }}
      else {
            first (bul);
            cout << "ratus ";
            second (sisa);
      }
}
void fourth (int n) {
      int bul, sisa;
      bul = n / 1000;
      sisa = n % 1000;
      if (bul == 0)
            third (sisa);
      else if (bul == 1) {
            if (sisa == 0)
                  cout << "seribu ";
            else {
                  cout << "seribu ";
                  third (sisa);
            }}
      else {
            third (bul);
            cout << "ribu ";
            third (sisa);
      }}
void fifth (int n) {
      int bul, sisa;
      bul = n / 1000000;
      sisa = n % 1000000;
      if (bul == 0)
            fourth (sisa);
      else if (bul == 1) {
            if (sisa == 0)
                  cout << "satu juta ";
            else {
                  cout << "satu juta ";
                  fourth (sisa);
            }}
      else {
            third (bul);
            cout << "juta ";
            fourth (sisa);
      }}
int main () {
      int n = 1;
      while (n == 1) {
            int num1;
    do {
                  cout << "";
                  cin >> num1;
            } while (num1 < 1);
            fifth (num1);
            cout << "\n";
      }}
9. Seorang pegawai bekerja selama 5 hari kerja, yaitu Senin sampai Jum’at. Setiap
    hari dia masuk jam 08.00 dan pulang jam 16.00. Kecuali Jum’at dia pulang jam
    11.00. Apabila dia bekerja lebih dari 30 jam per bulan maka setiap 5 jam akan
    memperoleh uang lembur sebesar Rp 30.000,- bila kurang dari 5 jam maka akan
    dihitung Rp 4.000,-/jam. Buat program dengan masukan bulan yang diinginkan,
    dan outputnya berupa besarnya uang lembur pegawai tersebut.
    Perhitungan secara manual :
1.         Algoritma menghitung Gaji Pegawai
Deklarasi
NIK, Nama : String
Jhk, tunj.jabatan, tunj.makan, tunj.transport, gaji_kotor, pajak, gaji_bersih : Real
Deskripsi
READ (NIK, Nama, gaji_pokok, tunj.jabatan, Jhk)
tunj.makan = 10000 * Jhk
tunj.transport = 5000 * Jhk
gaji_kotor = (gaji_pokok + tunj.jabatan + tunj.makan + tunj.transport)
pajak = 0.1 * gaji_kotor
gaji_bersih = (gaji_kotor – pajak)

write (tunj.makan, tunj.transport, gaji_kotor, pajak, gaji_bersih)
end
using namespace std;
 main()
 {
 //input

 char nama_kar [20], pendidikan[5];
 float tunjangan, total;
 double gaji, jam_kerja, tot_kerja, uang_lembur, jam_lembur, kode;
 system("clrscr");
 cout<<"Program untuk menghitung gaji karyawan kontrak"<<endl;
 cout<<"PT. Master SSD"<<endl;
 cout<<"======================================="<<endl<<endl;
 cout<<"Masukan nama karyawan: ";
 gets(nama_kar);
 cout<<"Masukan kode pendidikan karyawan [1/2/3]: ";
 cin>>kode;
 cout<<"Masukan jumlah jam kerja: ";
 cin>>tot_kerja;

 //proses

 if (kode==1)
 {strcpy (pendidikan,"SMU adalah sebesar: Rp. ");
 tunjangan=800000*2.5/100;}
 else if (kode==2)
 {strcpy(pendidikan,"D3 adalah sebesar: Rp. ");
 tunjangan=800000*5/100;}
 else
 {strcpy(pendidikan,"S1 adalah sebesar: Rp. ");
 tunjangan=800000*7.5/100;}
 gaji=800000;

 //Total jam kerja per bulan adalah 192 jam.
 /*Minimal memasukan jam kerja 192 jam, karena dibawah itu
 akan menyebabkan nilai lembur menjadi minus
 dan akan mempengaruhi nilai total honor yang diterima.*/

 jam_kerja=8*6*4;
 jam_lembur=tot_kerja-jam_kerja;
 uang_lembur=jam_lembur*2500;
 total=uang_lembur+gaji+tunjangan;

 //output

 cout<<""<<endl<<endl;
 cout<<"Karyawan yang bernama: "<<nama_kar<<endl;
 cout<<"Honor yang diterima sebagai berikut:"<<endl<<endl;
 cout<<"Honor tetap Rp. "<<gaji<<endl;
 cout<<"Tunjangan pendidikan "<<pendidikan<<tunjangan<<endl;
 cout<<"Jumlah lembur: "<<jam_lembur;
 cout<<" jam x 2500 adalah sebesar Rp. "<<uang_lembur<<endl<<endl;
 cout<<"Total honor yang diterima Rp."<<total<<endl;
 getch();

 }


EmoticonEmoticon