Rabu, 13 April 2016

Strategi Algoritma Fractional Knapsack

#include <iostream>

using namespace std;
int w[10],p[10],p_no[10],n,m;
float pwr[10];

template <class T>
void swap(T *a,int i,int j){
    T temp;
    temp=a[j];
        a[j]=a[i];
                a[i]=temp;
    return;}

void display(){
    cout<<"\nBanyak Produk :\t"<<n<<"\nK:\t"<<m<<"\n";
    cout<<"\nNo\t\tBerat\t\tProfit\t\tDensity(P/w)\n";
        for(int i=0;i<n;i++)
            cout<<p_no[i]<<"\t\t"<<w[i]<<"\t\t"<<p[i]<<"\t\t"<<pwr[i]<<"\n";
}

void knapsack(){
    int u,i;
    u=m;
    float x[10];
    for(i=0;i<n;i++)
        x[i]=0;
    for(i=0;i<n;i++){
        if(w[i]>u)
            break;
        else{
            x[i]=1;
            u=u-w[i];}
    }
    if(i<=n)
        x[i]=(float)u/w[i];
        for(i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
            if(p_no[i]>p_no[j])    {
                swap(p_no,i,j);
            swap(x,i,j);
        swap(p,i,j);
            }
        }
    }
    float pemecahan_masalah=0;
    cout<<"\nBarang Yang dibawa : \n\n";
    cout<<"(";
    for(i=0;i<n;i++)
        cout<<p_no[i]<<"  ";
    cout<<")";
    cout<<"\t\t(";
    for(i=0;i<n;i++)
    {
        cout<<x[i]<<" ";
        pemecahan_masalah=pemecahan_masalah+(p[i]*x[i]);
    }
    cout<<")";
    cout<<"\n\nSolusi Optimal : \t"<<pemecahan_masalah;
}

int main(int argc, char *argv[]){
    int i;
    cout<<"\nK :  ";
    cin>>m;
    cout<<"Jumlah Banyaknya : ";
    cin>>n;
    for(i=0;i<n;i++)
    {
        p_no[i]=i+1;
        cout<<"\nBarang "<<i+1<<"\nW:\t";
        cin>>w[i];
        cout<<"P:\t";
        cin>>p[i];
        pwr[i]=(float)p[i]/w[i];
}
    display();
    for(i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(pwr[i]<pwr[j])
            {
                swap(p_no,i,j);
                swap(w,i,j);
                swap(p,i,j);
                swap(pwr,i,j);
            }
        }
    }
    display();
    knapsack();
    cout<<"\n\n";
    return 0;
}

Rabu, 23 Maret 2016

openGL

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <glut.h>
#define drawOneLine(x1,y1,x2,y2)glBegin(GL_LINES);\
    glVertex2f((x1),(y1)); glVertex2f((x2),(y2)); glEnd();

void garis(){
    glClear(GL_COLOR_BUFFER_BIT);
    glLineWidth(10);
    glEnable(GL_LINE_STIPPLE);
    glLineStipple(1,0x00ff);
    glBegin(GL_LINES);
    glColor3f(1,1,0);
    drawOneLine(-0.1,0.0,0.5,0.0);
    glEnd();
    glFlush();
}

int main(int argc, char** argv)
{
    printf("saya mau buat garis gaes");
    glutCreateWindow("Garis Suci");
    glutDisplayFunc(garis);
    glutMainLoop();
}

Senin, 26 Oktober 2015

SDATA Pertemuan ke - 6 dan ke - 7

Link list
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambungmenyambung, dinamis dan terbatas. - Linked List sering disebut juga Senarai Berantai - Linked List saling terhubung dengan bantuan variabel pointer - Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis dan biasanya berupa struct yang terdiri dari beberapa field. Single Linked List adalah sebuah LINKED LIST yang menggunakan sebuah variabel pointer saja untuk menyimpan banyak data dengan metode LINKED LIST, suatu daftar isi yang saling berhubungan. Ilustrasi single LINKED LIST:
Berikut penjelasan dari catatan harian SData saya
monggo di waos rumiyen






Minggu, 25 Oktober 2015

SDATA Pertemuan ke - 5

Abstract  Data  Type  (ADT)  adalah  definisi  TYPE  dan  sekumpulan PRIMITIF  (operasi  dasar) terhadap TYPE tersebut. Definisi TYPE dari sebuah ADT dapat mengandung sebuah definisi ADT lain.Abstract data type (ADT) dapat didefinisikan sebagai berikut:
  1. Tipe penyimpanan data secara berkelompok yang mampu membungkus berbagai tipe data baik homogen maupun heterogen
  2. Spesifikasi dari sekumpulan data termasuk operasi yang dapat dilakukan pada data tersebut
  3. Sekumpulan data dan operasi terhadap data tersebut yang definisi-nya tidak bergantung pada implementasi tertentu.
ADT adalah tipe data yang dibuat oleh programmer sendiri yang memiliki suatu nama tertentu. ADT dapat berupa tipe data dasar namun diberi nama baru atau berupa kumpulan tipe data berbeda yang diberi nama baru. Untuk pembuatan ADT digunakan keyword typedef.
ADT dasar terdiri atas dua tipe:

1. ADT homogen
Mampu menampung tipe data dasar yang homogen dengan pola list berindex 
[A] [B] [C] [D]
Indeks 1 2 3 4
Dalam hal ini disebut sebagai Array.
Type
ADT : Array [1..jumlah_index] of type data;
2. ADT heterogen
Mampu menampung tipe data dasar yang heterogen dengan pola record
Dalam hal ini disebut sebagai Record.

SDATA Pertemuan ke - 4

Program C++: Menghitung Nilai Faktorial

Sekarang kita akan membuat program menghitung faktorial. Suatu faktorial di difinisikan seperti berikut:

n!=n x(n-1)x(n-2)x......x 2 x 1

Sebagai contoh:
2!= 2 x 1 =2
3!= 3 x 2 x 1 =6
4!= 4 x 3 x 2 x 1 = 24

Algoritma:
1. Masukkan (n)
2. bil <-- n
2. hasil=1
3.untuk bil>=1, maka bil-1
hasil <-- hasil* bil
4. tampilkan(hasil)

Contoh syntax implementasinya dalam C++
#include<iostream>
#include<conio.h
using namespace std;
int main()
{
int bil, n;
long int hasil;
cout<<"n = ";
cin>> n;

hasil=1;
for(bil=n; bil>=1;bil--)
{
hasil=hasil*bil;
}
cout<<"n!= "<<hasil<<"\n";
getch();
}


Kamis, 22 Oktober 2015

Membuat stack tunggal menjadi dua Bagian

#include <string>
#include <iostream>


using namespace std;
class stak{
 public:
        stak();
        void baru();
        void bagi1();
        void bagi2();
        void cetak1();
        void cetak_hasil();
 private:
        int top;
        char stackA[9];
        char stackC[9];
        char stackB[9];
        char x;};

stak::stak(){
        top=-1;
        cout<<"Tugas Kelompok Stack\n\n";}

void stak::baru(){
        cout<<"Stack A\n";
        for (int i=0; i<6; i++){
        cout<<"Masukkan stack ["<<i+1<<"] : ";
        cin>>x;
        top++;
        stackA[top]=x;}}

void stak::bagi2(){
     cout<<"\nKarakter yang di pop";
     cout<<"\nStack B\n";
     int i=0;
     for(i=2;i>=0;i--){
     x=stackA[i];
     stackB[i+1]=x;
     cout<<"stack ke ["<<i+1<<"] : "<< x<<endl;}}
  
void stak::bagi1(){
     cout<<"\nKarakter yang di pop";
     cout<<"\nStack C\n";
     int i=0;
     for(i=top;i>=3;i--){
     x=stackA[i];
     stackC[i-2]=x;
     cout<<"stack ke ["<<i-2<<"] : "<< x<<endl;}}

void stak::cetak1(){
        int i=0;
        for (i= top; i>=0; i--)
        cout<<"stack ke ["<<i+1<<"] : "<<stackA[i]<<endl;}

void stak::cetak_hasil(){
     cout<<"\nHasil pembagian stack";
     cout<<"\n\tStack B\n";
        int i=0;
        for (i= 3; i>=1; i--){
        cout<<"stackB ke ["<<i<<"] : "<<stackB[i]<<endl;}
        cout<<"\n\tStack C\n";
        int j=0;
        for (j= 3; j>=1; j--){
        cout<<"stackC ke ["<<j<<"] : "<<stackC[j]<<endl;}}
      
int main (){
        int input;
        stak a;
        a.baru();
        //a.cetak1();
        a.bagi1();
        a.bagi2();
        a.cetak_hasil();
         return 0;
         }

contoh syntax C++ Stack

#include <iostream>
#define maks 5

using namespace std;
class Stack {
 friend ostream& operator<<(ostream&, const Stack&);
 public :
     Stack();
     int penuh(int);
     int kosong(int);
     void cetak();
     void push(char);
     char pop();
     private :
    char A[maks];
     int banyak;
 };
 ostream& operator<<(ostream& out, const Stack& s)
 { cout << "\nIsi stack : ";
     for (int i=0; i< s.banyak; i++)
     out << s.A[i] << " ";
 }

 Stack::Stack() {
    banyak = 0;
     for (int i=0; i<maks; i++)
     A[i] = '0';
 }
 int Stack::penuh(int s)
 { return s == maks ? 1 : 0; }
 int Stack::kosong(int s)
 { return s == 0 ? 1 : 0; }

 void Stack::cetak() {
     cout << "\nIsi stack : ";
     for (int i=0; i< banyak; i++)
     cout << A[i] << " ";
     }
    
    
 void Stack::push(char x) {
     cout << "\nElemen masuk : " << x;
     if (penuh(banyak)) cout << "Stack penuh";
         else if (A[0]=='0') {
         A[0] = x;
         banyak++;
         }
       
 else {
         for (int i=banyak; i>=0; i--)
         A[i+1] = A[i];
         A[0] = x;
         banyak++; }
     }
 char Stack::pop() {
     cout << "\nPop stack, elemen yang di-pop : " << A[0];
     char temp=A[0];
         for (int i=0; i<banyak; i++) A[i] = A[i+1];
             A[banyak] = '0';
             banyak--;
        return temp;
}
 int main(int argc, char** argv) {

 Stack stack;
 for (char c='a'; c<'d'; c++) {
 stack.push(c);
 stack.cetak();
 }
 char p = stack.pop();
    stack.cetak();
    cout << "\n\nCetak pakai ovrloading : " << stack;
}