Advertisements
Archive | C RSS feed for this section

Algoritma Fibonaci Menggunakan Bahasa C

2 Jun

Kali ini saya akan membahas Algoritma Fibonaci dan tentunya saya ada source code yang dapat kalian coba menggunakan bahasa C. Udah tidak sabar kan?

Okey, langsung ke materi..

Algoritma Fibonaci merupakan deret hitung dengan penulisan seperti berikut:

1 1 2 3 5 8 13 21 34 55 89 dst…

Ada yang bisa melihat polanya? Kalau bagi saya, deret Fibonaci adalah deret hitung yang dimulai dari 1. Tetapi, sebenarnya sebelum angka 1, ada angka bayangan (itu menurut saya :D), yaitu 0 (nol). Mengapa? Ilustrasi di bawah mungkin bisa menjelaskan.

algoritma fibonaci

Selanjutnya, algoritma fibonaci 4

Mau lebih jelas lagi?
algoritma fibonaci 2

Dan sekarang kita masuk ke dalam koding C untuk membuat deret fibonaci, penasaran bagaimana saya membuatnya? Berikut ini adalah kodingnya..

#include
 using namespace std;
 void fibonaci (int n) {
 int num1 = 0, num2 = 1, temp;
 cout << num2 << " ";
 for (int i = 1; i < n; ++i) {
 //temp untuk menyimpan sementara nilai dari num2
 temp = num2;
 //num2 kemudian ditambahkan
 num2 += num1;
 cout << num2 << " ";
 //nilai dari num2 yang sebelumnya di pindahkan ke num1
 num1 = temp;
 }
 cout << "\n";
 }
 void main () {
 int jumlah;
 cout <> jumlah;
 fibonaci (jumlah);
 }

Berdasarkan kode di atas, nilai yang akan dihasilkan adalah deret Fibonaci sesuai dengan jumlah deret yang diminta oleh user. Misalkan, jika deret yang diminta oleh user adalah 2, maka yang tercetak adalah

1   1

Jika user memasukkan 10, maka outputnya akan seperti berikut ini :

algoritma fibonaci 3

Advertisements

Solusi: Implementasi Thread Pada Perhitungan Matriks (Sistem Operasi)

28 May

Tujuan
• Mahasiswa memahami konsep pembuatan thread pada lingkungan UNIX
• Mahasiswa mampu memanfaatkan API Posix Thread untuk membuat dan mengatur thread
• Meningkatkan kemampuan pemrograman bahasa C

Deskripsi
Thread adalah unit terkecil dari proses yang dapat dieksekusi oleh CPU. Satu proses dapat terdiri dari beberapa
thread. Pada lingkungan UNIX, thread dapat dibuat dan diatur dengan menggunakan API Posix Thread. Pada
tugas kedua ini Anda diminta untuk membuat program perkalian matriks yang ada pada buku Operating Systems
Concepts 8th Edition, halaman 178 atau buku Operating Systems Concepts Essential, halaman 170. Program yang
dibuat adalah dengan menggunakan bahasa C dan API Posix Thread.

Solusi dalam C


#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#define M 3
#define K 2
#define N 3

void *runner (void *param);

int A [M][K] = { {1,4}, {2,5}, {3,6} }; // Array ukuran M*K (3 baris 2 kolom)
int B [K][N] = { {8,7,6}, {5,4,3} }; // Array ukuran K*N (2 baris 3 kolom)
int C [M][N]; // Array ukuran M*N (3 baris 3 kolom)

/* Structure untuk mem-passing data ke thread */
struct v
{
 int i; // Menunjukkan baris
 int j; // Menunjukkan kolom
};

int main()
{
 pthread_t tid [M*N]; // Array of thread bernama tid dengan size M*N = 3*3 = 9
 int i; // Menunjukkan baris
 int j; // Menunjukkan kolom
 int indeks; // Menunjukkan indeks pada array of thread

 for (i = 0; i < M; i++)
 {
 for (j = 0; j < N; j++)
 {
 struct v *data = (struct v*) malloc (sizeof (struct v)); // Membuat objek structure v bernama data
 // dengan mengalokasikan memori sebesar size dari structure v
 data -> i = i; // Mengeset nilai i pada objek structure v bernama data dengan nilai i
 data -> j = j; // Mengeset nilai j pada objek structure v bernama data dengan nilai j
 pthread_create (&tid[indeks++], NULL, runner, (void *) data); // Membuat thread pada array of thread tid pada indeks ke-indeks
 // dengan memanggil fungsi runner dengan parameter data
 }
 }

 for (indeks = 0; indeks < M*N; indeks++)
 {
 pthread_join (tid[indeks], NULL); // Menggabungkan thread-thread yang ada
 }

 /* Mencetak hasil perkalian 2 Matriks */
 printf ("Hasil:\n");
 for (i = 0; i < M; i++)
 {
 for (j = 0; j < N; j++)
 {
 printf ("%d", C[i][j]); // Output matriks C baris i kolom j
 }
 printf ("\n");
 }
}

/* Fungsi untuk melakukan perkalian 2 matriks */
void *runner (void *param)
{
 struct v *par = (struct v*) param; // Mengeset objek structure v bernama par dengan param
 int h; // Variabel looping
 int i = par -> i; // Mengeset nilai i dengan nilai i pada par
 int j = par -> j; // Mengeset nilai j dengan nilai j pada par
 int hasil = 0; // Menunjukkan hasil perhitungan matriks

 for (h = 0; h < K; h++)
 {
 hasil += A[i][h] * B[h][j]; // Hasil didefiniskan dengan menambahkan semua hasil perkalian baris i kolom h dengan baris h kolom j
 C[i][j] = hasil; // Mengeset nilai matriks C pada baris i dan kolom j dengan hasil
 }
}