Diktat : Bab 3

Workshop algoritma dan class
1. Buatlah analisis dan algoritma untuk mencari titik tengah sebuah garis yang ujung
    titiknya adalah A(x1,y1) dan B(x2,y2).
    #include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
    int A,B,x1,x2,y1,y2;
    cout<<"Masukan nilai x1,x2,y1, dan y2 :"<<endl;
    cin>>x1>>x2>>y1>>y2;
    A=((x1+y1)/2);
    B=((x2+y2)/2);
    cout<<"Titik tengah garisnya " << x1 << " Dan " << y1 <<endl;
    cout<<" adalah = " << A <<endl<<endl;
    cout<<"Titik tengah garisnya " << x2 << " Dan " << y2 <<endl;
    cout<<" adalah = " << B <<endl;
    system("pause");
    return 0;
}

2. Buatlah algoritma untuk mencari isi bola bila diketahui jari-jari bola.
    Input :
    {membaca data real berupajari-jari bola (r), danmenghitungisiatauvolumenyadenganjari-jaritertentu. Volume bola dihiutngdenganrumus V=4Ï€r3. Nilai V dicetaksebagai output keperantikeluaran.}
Deklarasi:
                Phi          : float                    {nilai 3,14, satuancm}
                R             : float                    {jari-jari bola, satuan cm}
                V             : float                    {volume bola, satuan cm3}
Deskripsi:
                Baca (phi)
                Baca (r)
                Vß4*phi*r*r*r
                Write(V)
using namespace std;
int main(int argc, char** argv) {
                float L,r,phi=3.14,V;
                cout<<"Masukkan jari-jari: "; cin>>r;
                V=4/3*phi*r*r*r;
                cout<<"Volume Bola= "<<V;
               
                return 0;

3. Buatlah analisis dan algoritma untuk mencari hipotenusa dari segitiga Pythagoras bila
    diketahui sisi siku-sikunya. (Petunjuk : gunakan fungsi sqrt yang menyatakan akar
    dari).
    Analisis:
                Kasushipotenusa: H=sqrt(A*A+B*B)
Algoritma:
{membacapanjangsisidepan (A) dan alas segitiga (B), danmenghitunghipotenusadenganpanjangsisidepandansisi alas tertentu. Hipotenusadihitungdenganrumus H=sqrt(A*A+B*B). nilai H dicetaksebagai output}
Deklarasi:
A = integer          (input)
B = integer          (input)
H= float                                (output)
Deskripsi:
Read (A)
Read (B)
Hßsqrt(A*A+B*B)
Write (H)
using namespace std;
int main(int argc, char** argv) {
                int A,B; float C;
                cout<<"Program mencari hipotenusa"<<endl;
                cout<<endl;
                cout<<"Masukkan panjang A= "; cin>>A;
                cout<<"Masukkan panjang B= "; cin>>B;
                C=sqrt(A*A+B*B);
                cout<<"Hipotenusanya= "<<C;
                return 0;
    }

4. Buatlah analisis dan algoritma untuk menghitung konversi detik menjadi format
    Jam:menit:detik
    Buat contoh kasus, misalnya konversikan 1230 detik menjadi … jam … menit … detik.
    Analisis:
Kasusjam :detik/3600
Kasus modulus: -sisa = jam%3600
                                              Sisa 2 =menit%60
          Kasusmenit :sisa/60
          Kasusdetik: detik=sisa 2
Algoritma:
{membacajumlahdetik (detik), danmenghitung jam=detik/3600, menit/60.Nilai jam, menitdandetiksebagaiberikut}
Deklarasi:
              Detik     :               integer
              Jam        :               integer
              Menit    :               integer
              Sisa        :               integer
              Sisa 2     :               integer
Deskripsi:
              Baca (detik)
              Jamßjam/3600
              Menitßmenit/60
              Write (jam,menit,sisa).
using namespace std;
int main(int argc, char** argv) {
                int detik,jam,menit,sisa,sisa2;
                cout<<"Masukkan jumlah detik: "; cin>>detik;
                jam=detik/3600;
                sisa=jam&3600;
                menit=sisa/60;
                sisa2=menit%60;
                detik=sisa2;
                cout<<"Jam   : "<<jam<<endl;
                cout<<"menit : "<<menit<<endl;
                cout<<"detik : "<<detik;
                return 0;
}

5. Buatlah analisis dan algoritma untuk menghitung konversi dari jam:menit:detik ke detik
    Buat contoh kasus, misalnya konversikan 2 jam 13 menit 43 detik menjadi … detik.
    Analisis:
Kasus: j =jam*3600
m=menit*60
Algoritma:
{membacajumlah jam(jam), menit (menit), detik (detik) danmenghitungdenganrumus  h=j+m+detik}
Deklarasi:
                Jam                        (integer)
                Menit                    (integer)
                Detik                     (integer)
Deskripsi:
                Baca (jam)
             Baca (menit)
                Detik (detik)
                Hasilßj+m+detik
                Write (hasil)
using namespace std;
int main(int argc, char** argv) {
                int j,m,detik,jam,menit,hasil;
                cout<<"Masukkan jumlah jam: "; cin>>jam;
                cout<<"Masukkan jumlah menit: "; cin>>menit;
                cout<<"Masukkan jumlah detik: "; cin>>detik;
                j=jam*3600;
                m=menit*60;
                hasil=j+m+detik;
                cout<<"Jumlah detik : "<<hasil;
                return 0;
}

6. Buatlah analisis dan algoritma untuk menghitung selisih 2 waktu. Output ditampilkan
   dalam bentuk jam:menit:detik. Asumsikan menggunakan sistem jam 24-an.
    Buat contoh kasus, misalnya berapa selisih waktu antara jam 3.45 sore dengan jam 10.23
    malam. Selesaikan secara manual lebih dulu.
   Analisis:
·   Kasusselisihdetik:
If((detik.detik-detik.detik)<0){
det.detik = (60+detik.detik)-detik.detik;
men.menit*60-60;} else{det.detik=detik.detik-deti.detik;}
·   kasusselisihmenit:
if((menit.menit-meni.menit)<0){
men.menit=(60+meni.menit)-menit.menit;
j.jam*60-60;} else { men.menit=menit.menit-meni.menit;}
·   kasusselisih jam:
j.jam=jam.jam-ja.jam;
Algoritma:
{membacanilaiwaktupertama [jam(jam.jam), menit(menit),detik(detik)], nilaiwaktukedua [jam(ja.jam),menit(meni,menit), detik(deti.detik)]. Menghitungselisihdenganmengurangkanwaktuperjamdenganwaktukedua}
Deklarasi:
//function
   Structsatu ();
   Structdua ();
   Structselisih ();
//didalamstructberisi:
               jam        (integer)
               jenit       (integer)
               detik      (integer)

//main()
    Jam, menit, detik (satu)
    Ja, meni, deti (dua)
    J, men, det (selisih)
Deskripsi:
//waktupertama
   Baca jam.jam (integer)
   Baca menit.menit (integer)
   Baca detik.detik (integer)
//waktukedua
   Baca ja.jam (integer)
   Baca meni.menit (integer)
   Baca detik.detik (integer)
   Write (j.jam, men.menit, det.detik)
using namespace std;

struct satu{
                int jam;
                int menit;
                int detik;
};

struct dua{
                int jam;
                int menit;
                int detik;
};

struct selisih{
                int jam;
                int menit;
                int detik;
};
int main(int argc, char** argv) {
                satu jam, menit, detik;
                dua ja, meni, deti;
                selisih j, men, det;
               
                cout<<"        PROGRAM MENCARI SELISIH WAKTU"<<endl;
                cout<<"         Ubah ke detikterlebih dahulu"<<endl<<endl;
               
                cout<<"PERTAMA"<<endl;
                cout<<"jam   : "; cin>>jam.jam;
                cout<<"menit : "; cin>>menit.menit;
                cout<<"detik : "; cin>>detik.detik;
               
                cout<<endl<<endl;
                cout<<"KEDUA"<<endl;
                cout<<"jam   : "; cin>>ja.jam;
                cout<<"menit : "; cin>>meni.menit;
                cout<<"detik : "; cin>>deti.detik;
               
                if((detik.detik-deti.detik)<0){
                                det.detik=(60+deti.detik)-detik.detik;
                                men.menit*60-60;
                }else{
                                det.detik=detik.detik-deti.detik;
                }
               
                if((menit.menit-meni.menit)<0){
                                men.menit=(60+meni.menit)-menit.menit;
                                j.jam*60-60;
                }else{
                                men.menit=menit.menit-meni.menit;
                }
               
                j.jam=jam.jam-ja.jam;
               
                cout<<endl<<endl;
                cout<<"SELISIH";
                cout<<"jam     : "<<j.jam<<endl;
                cout<<"menit   : "<<men.menit<<endl;
                cout<<"detik   : "<<det.detik<<endl;
                return 0;
}

7. Buatlah analisis dan algoritma untuk menghitung jumlah komponen sejumlah uang
    menjadi pecahan-pecahannya. Misalkan Rp 188.875,- menjadi : 1 seratus ribuan, 1 lima
    puluh ribuan, 1 dua puluh ribuan, 1 puluhan ribu, 1 lima ribuan, 3 ribuan, 1 lima ratusan,
   1 dua ratusan, 1 ratusan, 1 lima puluhan, 1 dua puluh limaan

8. [Pengamatan] Buatlah analisis dan algoritma untuk menghitung luas sebuah plat CD.
    Diameter lingkaran luar = …. cm.
    Diameter lingkaran dalam = …. cm.
    Rumus luas plat CD :
    Analisis:
KasusrumusD:
Phi*dalam*dalam.
KasusrumusL:
Phi*luar*luar.
KasusluasCD:
          rumusL-rumusD.

Algoritma:
{membacajari-jaridalam(dalam) danjari-jari(luar). MenghitungluasCDdenganrumusrumusL-rumusD)
Deklarasi:
Dalam             (integer).
Luar                 (integer).
rumusD          (integer).
rumusL           (integer).
luasCD            (integer).
Phi                   (float, nilai 3.14).
Deskripsi:
Baca (dalam).
Baca (luar).
luasCDßrumusL-rumusD.
Write (luasCD).
using namespace std;
int main(int argc, char** argv) {
                int dalam,luar,rumusD, rumusL,luasCD;
                float phi=3.14;
                cout<<"Masukkan jari-jari bagian dalam CD= "; cin>>dalam;
                cout<<"Masukkan jari-jari bagian luar CD = "; cin>>luar;
                rumusD=phi*dalam*dalam;
                rumusL=phi*luar*luar;
                luasCD=rumusL-rumusD;
                cout<<"Luas plat CD= "<<luasCD<<" cm";
                return 0;
}

9. Buatlah analisis dan algoritma untuk menghitung operasi bilangan rasional :
    penjumlahan, pengurangan, perkalian, pembagian dan kebalikan.
    Buat contoh kasus, misalnya dua bilangan rasional 2/3 dan 4/7.
    Hasil penjumlahan manual =
    using namespace std;
int main(int argc, char** argv) {
            float a,b,hasil,p,q,bagi1,bagi2,hasil1,hasil2,hasil3,hasil4;
            cout<<"            Menghitung 2 Bilangan Rasional"<<endl<<endl;
           
            cout<<"=> Bilangan pertama"<<endl;
            cout<<"Masukkan pembilang = "; cin>>a;
            cout<<"Masukkan penyebut  = "; cin>>b;
            cout<<"                     "<<a<<"/"<<b<<endl;
            bagi1=a/b;
            cout<<"diubah ke bilangan desimal: "<<bagi1;
           
            cout<<endl<<endl<<endl;
            cout<<"=> Bilangan kedua"<<endl;
            cout<<"Masukkan pembilang = "; cin>>p;
            cout<<"Masukkan penyebut  = "; cin>>q;
            cout<<"                     "<<p<<"/"<<q<<endl;
            bagi2=p/q;
            cout<<"diubah ke bilangan desimal: "<<bagi2;
           
            hasil1=bagi1+bagi2;
            hasil1=bagi1-bagi2;
            hasil1=bagi1*bagi2;
            hasil1=bagi1/bagi2;
           
            cout<<endl<<endl;
            cout<<"#Hasil operasi Kedua bilangan"<<endl;
            cout<<"Penjumlahan = "<<hasil1<<endl;
            cout<<"Pengurangan = "<<hasil2<<endl;
            cout<<"Perkalian   = "<<hasil3<<endl;
            cout<<"Pembagian   = "<<hasil4<<endl;
            return 0;
}

10. Buatlah analisis dan algoritma untuk mengkonversi bilangan biner 4 digit menjadi
      bilangan selain 0 dan 1. Deklarasi variabel input dan output adalah bertipe integer.
      bilangan desimal. Operator overloading input mencegah user untuk memasukkan
      Konversikan 1011 ke desimal :
      Analisis:
Kasusbiner 4 digit:
Switch(biner){
Case 1000
Case 1001
Case 1010
Case 1011
Case 1100
Case 1101
Case 1110
Case 1111
Algoritma:
{membacanilaibiner (biner), mencarinilaidesimaldenganmenggunakan switch)
Deklarasi:
Biner (integer).
Deskripsi:
Baca (biner).
Switch (biner).
Write (case 1000, case 1001, case 1010, case 1011, case 1100, case 1101, case 1110, case 1111).

using namespace std;
int main(int argc, char** argv) {
               
                int biner;
                cout<<"       Konversi Bilangan Biner 4 Digit ke Desimal"<<endl<<endl;
                cout<<"Masukkan bilangan biner= "; cin>>biner;
                switch(biner){
                                case 1000:
                                                cout<<"desimal = 8";
                                                break;
                                case 1001:
                                                cout<<"desimal= 9";
                                                break;
                                case 1010:
                                                cout<<"desimal = 10";
                                                break;
                                case 1011:
                                                cout<<"desimal = 11";
                                                break;
                                case 1100:
                                                cout<<"desimal = 12";
                                                break;
                                case 1101:
                                                cout<<"desimal = 13";
                                                break;
                                case 1110:
                                                cout<<"desimal = 14";
                                case 1111:
                                                cout<<"desimal = 15";
                                default:
                                                cout<<"selain bilangan biner tidak bisa";
                                                break;
                                               
                }
                return 0;
}

   11. Buatlah analisis dan algoritma untuk menjumlah dua bilangan scientific berbentuk aEb
         dengan 0 < a < 10 dan 0 <= b <= 4.
         Hitung 2.1E2 + 3.31E1 = secara manual lebih dulu.


   12. Buatlah analisis dan algoritma untuk menghitung jumlah dari dari dua tanggal yang
        dimasukkan user. Misalnya, berapa hari dari 6/1/90 sampai 8/3/92 ? Anggap satu tahun
         365 hari dan anggap semua komponen tanggal pertama SELALU LEBIH KECIL dari
         komponen tanggal kedua.
        Hitung secara manual kasus dalam soal.
        using namespace std;
int proses(){

    int a;
    int b;
    int c;
}

int selisih(){
    int T1;
    int T2;
    int i;
    int j;
}

char tugas;
int main(int argc, char** argv) {
    int d1,m1,y1;
    int d2,m2,y2;
   
   
    return 0;
}
Previous
Next Post »