Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
~Soal~
BAB I
BAB II
4. Jika diketahui sebuah kalimat adalah sebagai berikut : TEKNIK INFORMATIKA JURUSAN FAVORIT.
Buatlah program dengan bahasa C/C++ untuk membalikan kalimat tersebut!
BAB IV
5. Carilah 2 metode sorting lainnya dan buat masing-masing Algoritma, Flowchart, dan program
dengan menggunakan bahasa C/C++!
6. Dengan menggunakan Algoritma (langkah-langkah) yang ada pada metode Pengurutan langsung
dan metode seleksi, buatlah
a. Flowchart system
b. Program untuk pengurutan data metode seleksi dan metode langsung dengan C/C++
7. Dari contoh Program sorting dengan metode bubble sort diatas dengan bahasa pascal, rubahlah
ke dalam bahasa pemrograman C/C++!
BAB V
8. Carilah 2 metode searching (pencarian) lainya dan buatlah masing-masing Algoritma, flowchart
dan programnya menggunakan bahasa C/C++!
9. Dengan menggunakan Algoritma (langkah-langkah) yang ada pada pencarian data, buatlah :
a. Flowchart metode seuqential searching dan metode binary searching
b. Program dan outputnya untuk metode sequential searching dan metode binary searching
dengan bahasa C/C++
= Jawab =
Source Code :
#include <stdio.h>
#include <conio.h>
void main()
{ int A[3][4], B[3][4], X[3][4], i, j;
clrscr();
X[i][j]=jum;
getch();
}
clrscr();
printf(" DAFTAR NILAI 7 MATA KULIAH DARI 5 MAHASISWA\n");
printf("----------------------------------------------------------------------------\n");
printf("No.Mhs | M.kul | M.kul | M.kul | M.kul | M.kul | M.kul | M.kul | Jlh | Rata2\n");
printf(" | 1 | 2 | 3 | 4 | 5 | 6 | 7 | | \n");
printf("----------------------------------------------------------------------------\n");
for (i=0;i<n;i++)
{
printf(" \n");
for (j=0;j<=8;j++)
{
printf(" %d ",X[i][j]);
}
printf("%d ",X[i][8]/7);
hasil_rata=hasil_rata+(X[i][8]/7);
}
printf("\n============================================================================");
return(0);
}
void main ()
{
struct data_mahasiswa
{
char nim [50], unit [60], nama[100], semester[10];
};
int i, n;
struct data_mahasiswa biodata[20];
clrscr();
printf("\n\n");
clrscr ();
printf(" ----------------- \n");
printf(" | DATA MAHASISWA |\n");
printf(" ----------------- \n\n");
printf ("NIM\t\tNAMA\t\tUNIT\tSEMESTER\n\n");
for (i=0;i<n;i++)
{
printf ("%s\t%s\t %s\t %s\n", biodata[i].nim,
biodata[i].nama, biodata[i].unit, biodata[i].semester);
}
getch();
--(s->jmlh);
return (s->item[s->jmlh]);
}
main()
{
int i;
char input[50] = "TEKNIK INFORMATIKA JURUSAN FAVORIT";
printf ("Kalimat yang akan dibalikkan : TEKNIK INFORMATIKA JURUSAN FAVORIT\n\n");
stack tumpukan;
inisialisasitumpukan(&tumpukan);
MAXSTACK=strlen(input);
for(i=0;i<MAXSTACK;i++)
{
push(input[i],&tumpukan);
}
printf ("Hasil membalikkan dengan operasi stack : \n");
gotoxy(42,3);
for(i=MAXSTACK;i>0;i--)
{
printf("%c", pop(&tumpukan));
}
return (0);
}
Data yang akan diurutkan dibagi ke dalam dua kumpulan data yaitu kumpulan pertama
terdiri dari Data[0] sampai dengan Data[4] dan kumpulan kedua terdiri dari Data[5] sampai
dengan Data[9].
Ditentukan batas kiri L mulai 0 dari kumpulan pertama dan dicari data terkecil setelah data
ke 0 yaitu 9 pada batas kanan M=2 kemudian diurutkan.
Nilai L=M dan M ditentukan dengan posisi data yang lebih kecil dari data pada posisi L
kemudian diurutkan.
Proses dilakukan sampai kumpulan pertama terurut.
Hal yang sama dilakukan terhadap kumpulan kedua sampai data pada kumpulan kedua
terurut
Langkah terakhir mengurutkan keseluruhan data dari kumpulan pertama dan kedua yang
sudah terurut.
Flowchart :
Mulai
Int data[],x;
Input data
X = data[]/2
Pengurutan Pengurutan
Ascending untuk x1 Ascending untuk x2
Pengurutan
Ascending dari x1
dan x2
Tampilkan hasil
pengurutan
Selesai
left_end = tengah - 1;
tmp_pos = kiri;
num_elements = kanan - kiri + 1;
int tengah;
int main()
{
int i;
L dan R menunjukkan data nilai tumpukan teratas pada tumpukan kiri dan kanan. tumpukan
Mula-mula L=0 dan R=9 dan pivot adalah pada data ke-4 yaitu 3. Kita mencari data di
sebelah kiri pivot yang lebih besar daripada 3, ternyata data ke-0 yaitu 12 lebih besar
daripada 3. Untuk data di sebelah kanan pivot, ternyata tidak ada data yang lebih kecil
daripada 3, yang berarti 3 adalah data terkecil, sehingga dilakukan pertukaran.
Kemudian dibuat dua kumpulan data baru berdasarkan hasil ini. Kumpulan data pertama
adalah data yang memiliki indeks 0 s/d 4-0=4 dan kumpulan data kedua adalah data yang
memiliki indeks 0 + 1 = 1 s/d 9. Kumpulan data kedua ini belum bisa ditentukan sekarang
karena masih tergantung dari hasil pengurutan kumpulan data pertama.
Kembali ke kumpulan data pertama, dicari pivot kemudian menggunakan aturan yang
serupa. Pivot pada kumpulan data ini adalah data ke-2 yaitu 9. Ternyata terdapat data yang
lebih besar dari 9 di sebelah kiri yaitu 35 sehingga dilakukan pertukaran
Langkah selanjutnya membuat dua kumpulan data lagi. Kumpulan pertama mempunyai
indeks 0 sampai dengan 4-1=3. Pivot dari kumpulan data ini adalah 9. Perhatikan tidak ada
data yang lebih besar dari 9 di sebelah kiri dan lebih kecil dari 9 di sebelah kanan. Kumpulan
kedua dari indeks 0 s/d 4 adalah data ke 2 dan ke 4-1=3 yaitu 35 dan 11. Ternyata 35 lebih
besar dari 11 sehingga kedua data ini ditukar.
Kembali ke kumpulan data kedua yang memiliki indeks 1 s/d 9. Kumpulan ini dibagi menjadi
dua yaitu kumpulan data berindeks 1 s/d 4 dan kumpulan data berindeks 5 s/d 9. Pivot dari
data ini adalah data ke 5 yaitu 17. Data yang lebih besar dari 17 di sebelah kiri adalah 35 dan
data yang lebih kecil dari 17 di sebelah kanan adalah 15, jadi kedua data ini ditukar.
Dari hasil penukaran ini dilakukan pembagian menjadi 2 kumpulan data. Kumpulan pertama
yaitu dari indeks 2 s/d 4, pivot pada data ke 3 dan terjadi penukaran data 15 dan 12.
Kumpulan kedua yaitu dari indeks 4 s/d 5 tidak terjadi pertukaran data Kembali ke kumpulan
kedua dari indeks 5 s/d 9. Pivot dari kumpulan ini adalah 35. Dicari data yang lebih besar
dari 35 di sebelah kiri dan data yang lebih kecil dari 35 di sebelah kanan. Ternyata terjadi
pertukaran data 35 dan 20. Dari hasil pertukaran ini dilakukan pembagian kumpulan data
yaitu data yang mempunyai indeks 6 s/d 7 dan 8 s/d 9. Kumpulan data pertama terjadi
pertukaran data 23 dan 20 sedangkan kumpulan data kedua tidak terjadi pertukaran data
Mulai
Int data[],x;
Input data
X = data[]/2
Pengurutan Pengurutan
Ascending untuk x1 Ascending untuk x2
Pengurutan
Ascending dari x1
dan x2
Tampilkan hasil
pengurutan
Selesai
int i, j, L, R, x, ujung = 1;
Tumpukan[1].Kiri = 0;
Tumpukan[1].Kanan = MAX-1;
while (ujung!=0){
L = Tumpukan[ujung].Kiri;
R = Tumpukan[ujung].Kanan;
ujung--;
while(R > L){
i = L;
j = R;
x = Data[(L+R)/2];
while(i <= j){
while(Data[i] < x)
i++;
while(x < Data[j])
j--;
if(i <= j){
Tukar(&Data[i], &Data[j]);
i++;
j--;
}
}
if(L < i){
ujung++;
Tumpukan[ujung].Kiri = i;
Tumpukan[ujung].Kanan = R;
}
R = j;
}
}
}
void main()
{
int i;
//Memasukkan data yang belum terurut
printf("DATA SEBELUM TERURUT : \n");
for(i=1; i<MAX; i++)
{
printf("Data ke %d : ", i);
scanf ("%d", &Data[i]);
}
QuickSortNonRekursif();
6. a. Flowchart
Flowchart Metode pengurutan langsung :
Mulai
Int A, J,T;
T=A[i]
A[0]=T
J=J-1
if T<A[j]
A[J+1]=A[J]
A[J+1]=T J-J-1
Tampilkan hasil
pengurutan (A)
Selesai
Mulai
Int A, j,I,Lok;
Lok = l
J=I+1
A[lok]>A[j]
A[lok]=A[I] Lok = j
Tampilkan hasil
pengurutan (A)
Selesai
int Data[MAX];
// Fungsi pertukaran bilangan
void Tukar (int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
// Fungsi pengurutan metode seleksi
void SelectionSort()
{
int i, j, k;
for(i=1; i<MAX-1;i++){
k = i;
for (j=i+1; j<MAX; j++)
if(Data[k] > Data[j])
k = j;
Tukar(&Data[i], &Data[k]);
}
}
void main()
{
int i;
srand(6);
SelectionSort();
#define MAX 10
int Data[MAX];
int i;
void masukkan ()
{
printf ("Masukkan data sebanyak 10 : \n\n");
for (i=1; i<MAX; i++)
{
printf("Data ke %d : ", i);
scanf("%d", &Data[i]);
}
clrscr();
for (i=1; i<MAX; i++)
{
printf("%d ", Data[i]);
}
}
void Tukar (int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void BubbleSort()
{
int j;
for(i=1; i<MAX-1; i++)
for(j=MAX-1; j>=i; j--)
if(Data[j-1] > Data[j])
Tukar(&Data[j-1], &Data[j]);
}
void keluaran ()
{
printf ("\n");
printf ("-----------------------------------\n");
printf ("Data yang telah diurutkan : \n\n");
printf ("Ascending : ");
int main()
{
masukkan();
BubbleSort();
keluaran();
return(0);
}
Source code :
#include<stdio.h>
#include <conio.h>
void main()
{
//deklarasi variable
int A[10], i,j,k,tkr,low,high,pos,tm;
//proses penginputan data
for(i=0;i<10;i++)
{
printf("data ke-%d:",i+1);
scanf("%d",&A[i]);
}
//Input data yang akan dicari
clrscr();
printf("Masukkan data yang akan anda cari:");
scanf("%d",&k);
//proses pengurutan data
for(i=0;i<10;i++)
{
for(j=i+1;j<10;j++)
{
if (A[i]>A[j])
{
tkr=A[i];
A[i]=A[j];
A[j]=tkr;
}
}
}
//proses pencarian data
tm=0;
high=9;
low=0;
do
{
pos = ((k - A[low]) / (A[high] - A[low]))*(high-low) +
low;
if (A[pos] == k)
{
tm++;
break;
}
if (A[pos] > k)
high = pos-1;
else
if (A[pos] < k)
low = pos + 1;
}
while(k >= A[low] && k <= A[high]);
if (tm>0)
{
printf("data %d yang dicari ada dalam array\n",k);
}
//jika tidak ditemukan
else
{
printf("data tidak ditemukan dalam array\n");
}
Flowchart Metode interpolation search dan metode sequential dengan sentinel search
- Flowchart metode interpolation search
Mulai
Int
array[],N,ix;
i =0;
If array[i]!=x
I<N i+1
Data ketemu
Selesai
Mulai
Int A,high,low,
N,pos;
Tm=0, Low =0
High=N
Pos=(A-x[low]/A[high]-
A[low])*(high-low)+low
If A>=x[low] &&
A<=A[high]
If tm = 0
If [pos] = A Tm + 1
Cetak
hasil
If [pos] > A
High =pos-1
Selesai
void main()
{
int data[8] = {8,10,6,-2,11,7,1,100};
int cari;
int tanda=0;
cout<<"masukkan data yang ingin dicari = "; cin>>cari;
for(int i=0;i<8;i++){
if(data[i] == cari) tanda=1;
}
if(tanda==1) cout<<"Data ada!\n";
else cout<<"Data tidak ada!\n";
}
Hasil output programnya :
if(A[middle]<k)
{bottom=middle+1;
}
else
{top=middle-1;
}
}
if (tm>0)
{ printf("Data %d ditemukan\n",k);
}
else
{ printf("Data %d tidak ditemukan \n", k);
}
}
Hasil output program :
Int
array[],N,ix;
i =0;
If array[i]!=x
Data ketemu
Selesai
Mulai
Int atas,bawah,
N,T,A;
Atas=N,
Bawah = 1
If
atas>=bawah
T=atas+bawah/2
Selesai