Contoh-contoh Pemecahan Masalah 2 TEE 2103 Algoritma & Pemograman Dosen: Abdillah, MIT HP: 0853 6581 8665 Email: abdill01@gmail.com Website: http://abdill01.wordpress.com
Tujuan Mahasiswa mampu menyelesaikan masalah berdasar pada contoh-contoh algoritma penyelesaian masalah dan programnya.
Daftar Masalah Validasi Password Menentukan Selisih Hari Mencari Nilai Tertinggi Mencari Nilai Terendah Menghitung Titik Tengah
1. Validasi Password Buatlah algoritma dan program password yang membaca kata sandi kemudian memanggil prosedur validasi yang mengecek kebenaran kata sandi. Program password memberi kesempatan 3 kali untuk memasukkan sandi hingga menampilkan pesan peringatan di layar monitor.
Algoritma Prosedur procedure validasi (input password : integer) { Menampilkan pesan selamat datang jika password benar } DEKLARASI sah, pencacah : integer { variabel global } int sandi = 1234 ALGORITMA if (password = sandi) write(‘selamat datang’) sah 0 else write(‘password Anda salah') sah 1 pencacah pencacah + 1
Algoritma Program Utama PROGRAM Password {Membaca password dan keluar jika 3x salah} DEKLARASI password : integer ALGORITMA pencacah = 1 repeat read(password) validasi(password) until ((sah = 1) and (pencacah <= 3))
Program Prosedur #include<stdio.h> int sah, pencacah; void validasi(int password) { int sandi = 1234; if (password == sandi){ printf("selamat datang\n"); sah = 0; } else { printf(“password Anda salah\n"); pencacah++; sah = 1;
Program Utama main() { int password; pencacah = 1; do printf("Masukkan password:"); scanf("%d", &password); validasi(password); } while ((sah == 1) && (pencacah <= 3));
2. Menentukan Selisih hari Buatlah algoritma dan program selisih_hari yang membaca dan menghitung selisih hari antara dua tanggal, dibaca dari piranti masukan. Program selisih_hari memanggil fungsi hari_bulan yang mengembalikan jumlah hari dalam satu bulan. Contoh eksekusi program: Ketikkan tanggal pertama: 28/2/2012 Ketikkan tanggal kedua: 27/1/2015 Jumlah selisih hari adalah 1066 hari
Algoritma Fungsi function hari_bulan(no_bulan, tahun : integer) integer { Mengembalikan jumlah hari dalam no_bulan pd tahun tertentu} DEKLARASI tidak ada ALGORITMA: case (no_bulan) 1,3,5,7,8,10,12 : return 31 4,6,9,11 : return 30 2 : if ((tahun mod 4 = 0 and tahun mod 100 ≠ 0) or (tahun mod 400 = 0)) then return 29 else return 28
Algoritma Program Utama PROGRAM selisih_hari DEKLARASI type Hari : record <dd, mm, yy : integer> H1, H2 : Hari i,j, selisih : integer ALGORITMA: read (H1, H2) selisih ← 0 repeat if (H1.yy < H2.yy) for (j ← H1.mm to 12) selisih ← selisih + hari_bulan(j,H1.yy) for (i ← H1.yy+1 to H2.yy-1) for (j ← 1 to 12) selisih ← selisih + hari_bulan(j,i) for (j ← 1 to H2.mm-1) selisih ← selisih - H1.dd + H2.dd else if (H1.yy = H2.yy and H1.mm <= H2.mm) for (j ← H1.mm to H2.mm-1) else if (H1.mm = H2.mm and H1.dd < H2.dd) selisih ← selisih + H2.dd - H1.dd else write (‘H2 harus setelah H1’) Algoritma Program Utama
Program Fungsi #include <stdio.h> int hari_bulan (int no_bulan, int tahun) { switch (no_bulan) { case 1:case 3:case 5:case 7:case 8:case 10:case 12: return 31; break; case 4:case 6:case 9:case 11:return 30; break; case 2:if((tahun%4==0 && tahun%100 != 0)||tahun%400==0) return 29; else return 28; }
Program Utama main() { typedef struct {int dd, mm, yy;} Hari; Hari H1, H2; int i,j, selisih; printf("Ketikkan tanggal pertama (dd/mm/yyyy): "); scanf("%d/%d/%d",&H1.dd, &H1.mm, &H1.yy); printf("Ketikkan tanggal kedua (dd/mm/yyyy): "); scanf("%d/%d/%d",&H2.dd, &H2.mm, &H2.yy); selisih = 0; if (H1.yy < H2.yy) for (j=H1.mm; j<=12; j++) selisih = selisih + hari_bulan(j, H1.yy); for (i=H1.yy+1; i<H2.yy; i++){ for (j=1; j<=12; j++) selisih = selisih + hari_bulan(j, H1.yy);} for (j=1; j<=H2.mm-1; j++) selisih = selisih + H2.dd - H1.dd; printf ("Jumlah selisih hari adalah %d hari\n", selisih); } Program Utama
Program Utama else if (H1.yy == H2.yy && H1.mm <= H2.mm){ for (j=H1.mm; j<=H2.mm-1; j++) selisih = selisih + hari_bulan(j, H1.yy); } else if (H1.mm == H2.mm && H1.dd <= H2.dd){ selisih = selisih + H2.dd - H1.dd; printf ("Jumlah selisih hari adalah %d hari\n", selisih); else printf ("Tanggal kedua harus setelah tanggal pertama \n"); Program Utama
3. Menentukan Nilai Tertinggi Tulislah algoritma dan program maksimum yang membaca 3 buah nilai ujian dari papan ketik dan menyimpannya dalam sebuah larik. Program maksimum memanggil fungsi cari_maksimum yang mencari dan mengembalikan nilai ujian yang tertinggi. Program maksimum kemudian menampilkan nilai tertinggi tsb di layar monitor.
Algoritma Fungsi function cari_maksimum (input nilai[ ], k : integer) → integer { Mencari dan mengembalikan nilai tertinggi } DEKLARASI i, maksimum : integer ALGORITMA: maksimum ← nilai[0] for (i 1 to k-1) do if (nilai[i] > maksimum) maksimum ← nilai[i] endfor return (maksimum)
Algoritma Program Utama PROGRAM Maksimum { Membaca, menyimpan 3 buah nilai ujian dalam sebuah larik dan menampilkan nilai ujian tertinggi } DEKLARASI i, N, nilai[N], : integer ALGORITMA: N 3 for (i 0 to N-1) do read ( nilai[i] ) endfor write (‘Nilai tertinggi =‘ cari_maksimum(nilai, N))
Program Maksimum #include <stdio.h> int cari_maksimum(int nilai[],int k) { int i, maksimum = nilai[0]; for (i=0;i<k;i++) if nilai[i] > maksimum maksimum = nilai[i]; return maksimum; } main() int i, N = 3, nilai[N],; printf(“Masukkan 3 nilai ujian"); for (i=0;i<N;i++) { printf(“Nilai ke %d: ",i+1); scanf("%d",&nilai[i]); printf("Nilai tertinggi: %d", cari_maksimum(nilai,N));
4. Menentukan Nilai Terendah Tulislah algoritma dan program minimum yang membaca 3 buah nilai ujian dari papan ketik dan menyimpannya dalam sebuah larik. Program minimum memanggil fungsi cari_ minimum yang mencari dan mengembalikan nilai ujian yang terendah. Program minimum kemudian menampilkan nilai terendah tsb di layar monitor.
Algoritma Fungsi function cari_minimum (input nilai[ ], k : integer) → integer { Mencari dan mengembalikan nilai terendah } DEKLARASI i, minimum : integer ALGORITMA: minimum ← nilai[0] for (i 1 to k-1) do if (nilai[i] < minimum) minimum ← nilai[i] endfor return (minimum)
Algoritma Program Utama PROGRAM Minimum { Membaca, menyimpan 3 buah nilai ujian dalam sebuah larik dan menampilkan nilai ujian terendah } DEKLARASI i, N, nilai[N], : integer ALGORITMA: N 3 for (i 0 to N-1) do read ( nilai[i] ) endfor write (‘Nilai terendah =‘ cari_minimum(nilai, N))
Program Minimum #include <stdio.h> int cari_minimum(int nilai[],int k) { int i, minimum = nilai[0]; for (i=0;i<k;i++) if nilai[i] < minimum minimum = nilai[i]; return minimum; } main() int i, N = 3, nilai[N],; printf(“Masukkan 3 nilai ujian"); for (i=0;i<N;i++) { printf(“Nilai ke %d: ",i+1); scanf("%d",&nilai[i]); printf("Nilai terendah: %d", cari_minimum(nilai,N));
5. Menentukan Titik Tengah Tulislah algoritma dan program minimum yang membaca 2 buah titik koordinat dan menyimpannya dalam tipe terstruktur Titik. Program titik_tengah memanggil fungsi hitung_ titik_tengah yang mencari dan mengembalikan koordinat titik tengah. Program Titik kemudian menampilkan koordinat titik tengah tsb di layar monitor.
Algoritma Fungsi function cari_minimum (input nilai[ ], k : integer) → integer { Mencari dan mengembalikan nilai terendah } DEKLARASI i, minimum : integer ALGORITMA: minimum ← nilai[0] for (i 1 to k-1) do if (nilai[i] > minimum minimum ← nilai[i] endfor return (minimum)
Algoritma Program Utama PROGRAM Minimum { Membaca, menyimpan 3 buah nilai ujian dalam sebuah larik dan menampilkan nilai ujian terendah } DEKLARASI i, N, nilai[N], : integer ALGORITMA: N 3 for (i 0 to N-1) do read ( nilai[i] ) endfor write (‘Nilai terendah =‘ cari_minimum(nilai, N))
Program Minimum #include <stdio.h> typedef struct {float x,y;} Titik; /* variabel global */ Titik Titik_Tengah(Titik P1, Titik P2) { Titik Pt; Pt.x = (P1.x + P2.x)/2; Pt.y = (P1.y + P2.y)/2; return Pt; } main() Titik P1,P2; printf("Masukkan koordinat titik P1 (x,y):"); scanf("%f,%f",&P1.x, &P1.y); printf("Masukkan koordinat titik P2 (x,y):"); scanf("%f,%f",&P2.x, &P2.y); printf("Titik tengah:(%.1f, %.1f)\n", Titik_Tengah(P1,P2));