[Xamarin – Android] How To Use Dialog (2)

From post : https://sabitlabscode.wordpress.com/2014/03/30/xamarin-android-how-to-use-dialog-1/ , we will learn how to make a dialog with multi choice item. Multi choice means we can choose more than one item from the list.  It will show as checkbox, not radio button. From previous project, call dialog with this code :

MultiChoiceItem Dialog

  protected override Dialog OnCreateDialog (int id)
 {
    switch (id) {
      case yourId:
      {
            string[] color_options = Resources.GetStringArray (Resource.Array.nameArray);
            
            bool[] check_list; // this use for make default check in list
            check_list = new bool[color_options.Length]; // it set the length of the list same with length options
            check_list [2] = true; // this is how we set the list,
            // you can set where list that you want to set with
            // set the index

          builder = new AlertDialog.Builder (this);
          builder.SetTitle ("Pick a color");
          builder.SetNegativeButton ("Cancel", CancelClicked);
          builder.SetPositiveButton ("OK", OkClicked);// make event ok separate in another event
          
          // it set the dialog with multi choice item, and if one of the item click/select
          // app will set check_list value
          builder.SetMultiChoiceItems (color_options, check_list, (o, e) => {
                check_list [e.Which] = e.IsChecked;
          });
          return builder.Create ();
       }
    }
    return null;
}

After that, we need to make “OkClicked” to run the event when user click “OK” button.

private void OkClicked (object sender, DialogClickEventArgs e)
{
    // insert your code here
    // you can get the value from check_list like "check_list[0]"
    ((Dialog)sender).Dismiss ();
}

Input Dialog

Input dialog is a dialog that you can input with a text not select an item. With input dilaog, get spesific value to process because it not only some options. To implement it, you just need to insert your code like this :

  protected override Dialog OnCreateDialog (int id)
 {
    switch (id) {
      case yourId:
      {
            EditText input = new EditText (this);            
            builder = new AlertDialog.Builder (this);
            builder.SetTitle ("Insert Value: ");
            builder.SetMessage ("Enter your text here");
            builder.SetView (input);
            builder.SetPositiveButton ("Ok", (o, e) => {
                // insert your code here
                ((Dialog)o).Dismiss ();
            });
            builder.SetNegativeButton ("Cancel", Cancelcancel);
            return builder.Create ();
      }
    }
    return null;
}

After insert that code, run your application and you will see input text on your dialog..

Finish… Hope it helps..

Happy coding…

[WP8 + SQLite] Delete Data From SQLite In Windows Phone

Sebelumnya saya pernah memposting menggenai SQLite juga tetapi baru tentang menginput data. Sekarang saya akan membahas bagaimana menghapus data dari SQLite. Project yang saya gunakan pada postingan ini adalah lanjutan dari postingan sebelumnya. Saya hanya melakukan penambahan fitur long press selected item pada listbox yang sudah pernah saya berikan.

Pada sadarnya untuk menghapus data di SQLite cukup gampang hanya membutuhkan SQL untuk mendeletenya saja. hanya saja sebelum membuat SQL kita perlu pendeklarasian SQL comment terlebih dahulu, carannya adalah dengan :

SQLiteCommand sqlComm = new SQLiteCommand(dbConn);

Setelah memiliki SQL comment sekarang anda bisa menyiapkan sintak SQL yang ingin dieksekusi dan disimpan dalam SQL comment, cara seperti di bawah ini:

 sqlComm.CommandText = "delete from task where nama = '" + Budi+ "'";

SQL diatas adalah untuk mendelete data yang dimiliki budi, ini bisa dimanipulasi dengan menganti kriterianya seperti SQL biasa. atau bisa disesuaikan dengan ini dari textbox seperti ini.

sqlComm.CommandText = "delete from task where nama = '" + textBox1.text+ "'";

Jika sudah siap SQLnya dan sudah disimpan dalam SQL comment sekarang saatnya untuk mengeksekusi SQL comment. Berikut caranya.

sqlComm.ExecuteQuery<Task>();

Penjelasan diatas adalah dasar dari cara menghapus data di SQLite, untuk implementasi penghapusannya mungkin banyak ide yang muncul dan berbeda-beda untuk setiap individu. Untuk implementasinya saya akan menambahkan fitur hapus jika ada item list yang di tekan lama (hold) maka akan ada konfirmasi penghapusan data. Cara menambahkan even hold cukup menambahkan even pada list seperti gambar di bawah ini.

delete

Sedangkan di mainpage.xml.csnya saya tambahkan kode di bawah ini yang merupakan hasil modipikasi code sebelumnya yang kita bahas.

private string potong(int urutan, string isiList) {
            string temp =string.Empty;int i=0;
            foreach (var t in isiList.ToCharArray()) {
                if (i == urutan && !t.Equals(':')) 
                    temp += t;
                else if (t.Equals(':')) 
                    i++;
            }
            return temp;
        }
        private void DataList() {
            List<Task> retrievedTasks = dbConn.Table<Task>().ToList<Task>();
            DaftarTlp.Items.Clear();
            foreach (var t in retrievedTasks)
            {
                DaftarTlp.Items.Add(t);
            }
            TBTlp.Text = string.Empty;
            TBNama.Text = string.Empty;
        }
        private void DaftarTlp_Hold(object sender, System.Windows.Input.GestureEventArgs e)
        {
            if (DaftarTlp.SelectedIndex >=0)
            {
                MessageBoxResult result=MessageBox.Show("Delete","Are you sure ?",MessageBoxButton.OKCancel);
                if (result==MessageBoxResult.OK) {
                    Task task = new Task();
                    SQLiteCommand sqlComm = new SQLiteCommand(dbConn);
                    sqlComm.CommandText = "delete from task where nama = '" + potong(1,DaftarTlp.SelectedItem.ToString()) + "'";
                    sqlComm.ExecuteQuery<Task>();
                    DataList();
                }
            }
        }

Jika item list kita hold maka akan muncul message box yang berfungsi mengkonfirmasi apakah kita benar-benar mau menghapus data item yang kita pilih. Jika user memilih iya maka data akan terhapus. Kurang lebih itu ide dari saya, jika anda memiliki ide yang berbeda silahkan dimodifikasi sesuai kebutuhan anda tetapi pada dasarnya penghapusan itu sama.. Selamat mencoba.. 🙂

[Xamarin – Android] How To Use Dialog (1)

There’s different style code between pure android and xamarin android while xamarin use a C#’s style and android use Java’s style. One of the different is how to use event and you will use event when use dialog. This is some sample to use dialog in xamarin.

List Dialog
dialog_list

image get from http://developer.android.com/guide/topics/ui/dialogs.html.  First, we must define data in resource value/array.xml.

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string-array name="nameArray">
     <item>Red</item>
     <item>Greeb</item>
     <item>Blue</item>
   </string-array>
</resources>

And this is how to make a list dialog :

protected override Dialog OnCreateDialog (int id)
{
   switch (id) {
       case yourId:
       {
           string[] color_options = Resources.GetStringArray (Resource.Array.nameArray);
           builder = new AlertDialog.Builder (this);
           builder.SetTitle ("Pick a color");
           // it will show a cancel button 
           //this is if you want make event separate
           builder.SetNegativeButton ("Cancel", CancelClicked); 
           builder.SetItems (color_options, (o, e) => {
               // do something here
               // to get position that click, use e.Which
            });
            return builder.Create ();
       }
   }
   return null;
}

Make an event for cancelClicked like this :

 private void CancelClicked (object sender, DialogClickEventArgs e)
 {
     ((Dialog)sender).Dismiss ();
 }

After that you will see the dialog that have the list and cancel button…

 

Single Choice Item

If you want to make the list be a single choice item (radio button list), your can do it with change dialog code like this :

 protected override Dialog OnCreateDialog (int id)
 {
    switch (id) {
      case yourId:
      {
          string[] color_options = Resources.GetStringArray (Resource.Array.nameArray);
          builder = new AlertDialog.Builder (this);
          builder.SetTitle ("Pick a color");
          builder.SetNegativeButton ("Cancel", CancelClicked); // this is if you want make event separate
          // color options for set the list, 0 set as default value will selected
          // the different between list is here
          builder.SetSingleChoiceItems (color_options, 0, (o, e) => {
             // do something here
             // to get position that click, use e.Which
          });
          return builder.Create ();
       }
    }
    return null;
}

Its just small different between list dialog..

Finish… we will post about dialog multi choice (you can select more that 1 list ) and input list ( you input it with text) later..

Hope it help.. sorry for my bad English.. happy coding..

[WP8 + SQLite] Insert Data With SQLite In Windows Phone

Kali ini saya akan membahas mengenai pembuatan database di Windows Phone. Sebelumnya saya pernah memperkenalkan XML, XML pada dasarnya berbeda sekali dengan sql yang biasa kita gunakan di pemrograman desktop sehingga banyak orang yang sudah biasa dengan sql merasakan kesulitan menggunakan XML. Di Windows phone SQL juga bisa digunakan melalui RDBM SQLite. Sebelum kita membuat aplikasi sederhana yang terhubung dengan database kita terlebih dahulu harus memastikan beberapa hal, diantaranya:

1. Menginstal SQLite Windows Phone

Caranya cukup pilih Tools -> Extentions and Update dan kemudian pilih tab Online dan kemudian pilih SQLite Windows Phone dan kemudian Download. Setelah didownload maka secara otomatis akan meminta restart Visual Studio anda.

2. Langkah kedua adalah menginstal Packages sqlite_net dan sqlite_net_wp8.Caranya adalah dengan memilih Tools -> Nuget Package Manager -> Manage Nuget Package for Solution. Kemudian pilih sqlite_net kemudian instal, lakukan kembali langkah dua untuk package sqlite_net_wp8

3. Menambahkan references SQLite Windows Phone dengan cara klik kanan References->Existing Item->Windows Phone pilih SQLite windows Phone.

4. Mendowload file disini https://github.com/peterhuene/sqlite-net-wp8. Setelah download silahkan di extrak dan klik kanan pada project dan pilih Add->exsiting item->cari tempat anda meng-extract file tadi dan pilih sqlite.vcxproj. File ini berfungsi sebagai penghubung antara SQLite for Windows Phone SDK dan sqlite-net NuGet package.

http://khatrishashank.files.wordpress.com/2013/12/downloadwrapper.png

5. Klik kanan pada Solution Project anda dan pilih Configuration Manager dan pilih ARM.

http://khatrishashank.files.wordpress.com/2013/12/confchange.png

Sekarang kita baru bisa mendesain aplikasi kita, kali ini saya akan membuat aplikasi untuk menampilkan buku telpon. Berikut tampilan aplikasi yang saya buat:

1

Isi dari file xml MainPage.xml adalah berikut:
<Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>
            <TextBlock Text="page name" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <TextBox x:Name="TBNama" HorizontalAlignment="Left" Height="72" Margin="188,22,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="222"/>
            <TextBlock HorizontalAlignment="Left" Margin="54,47,0,0" TextWrapping="Wrap" Text="Nama" VerticalAlignment="Top"/>
            <TextBox x:Name="TBTlp" HorizontalAlignment="Left" Height="72" Margin="188,92,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="222"/>
            <TextBlock x:Name="No_Telpon" HorizontalAlignment="Left" Margin="54,117,0,0" TextWrapping="Wrap" Text="No Telpon" VerticalAlignment="Top"/>
            <Button x:Name="BtnAdd" Content="Add" HorizontalAlignment="Left" Margin="317,169,0,0" VerticalAlignment="Top" Click="BtnAdd_Click"/>
            <ListBox Name="DaftarTlp" Margin="24,280,-24,0"></ListBox>
        </Grid>
        
    </Grid>

Setelah tampilan saatnya kita akan mulai mengubah isi dari MainPage.xml.cs, pertama kita harus membuat sebuah kelas yang berfungsi sebagai kelas enabler kolom database dengan pemprograman.

public sealed class Task
 {
     /// <summary>
     /// You can create an integer primary key and let the SQLite control it.
     /// </summary>
     [PrimaryKey, AutoIncrement]
     public int Id { get; set; }
     public string Nama { get; set; }
     public string Tlp { get; set; }
     public override string ToString(){
         return Id + ": " + Nama + " " + Tlp;
     }
 }

Letak koding diatas adalah di bawah kelas MainPage.xml.cs. Kemudian kita akan membuat sebuah perintah untuk menentukan nama database dan juga membuat konektor yang berada sebelum konstruktor MainPage().

public static string DB_PATH = Path.Combine(Path.Combine(ApplicationData.Current.LocalFolder.Path, "DBBukuTelpon.sqlite")); 
private SQLiteConnection dbConn;

Kemudian kita akan membuat event dari Tombol BtnAdd

 private void BtnAdd_Click(object sender, RoutedEventArgs e)
        {
            Task task=new Task(){
                Nama=TBNama.Text,
                Tlp=TBTlp.Text
            };
            dbConn.Insert(task);
            List<Task> retrievedTasks = dbConn.Table<Task>().ToList<Task>();
            DaftarTlp.Items.Clear();
            foreach (var t in retrievedTasks)
            {
                DaftarTlp.Items.Add(t);
            }
            TBTlp.Text = string.Empty;
            TBNama.Text = string.Empty;
        }

Jika Tombol BtnAdd diklik data yang diinput pada textboxt Nama, dan No Telpon akan disimpan ke dalam atribut Task dan akan diinsert ke tabel task. Setelah disimpan dalam tabel saatnya sekarang membaca isi dari tabel yang terbaru agar kita bisa memeriksa apakah data yang baru kita masukan sudah ada dalam tabel atau belum. Caranya adalah dengan menampilan semua data pada tabel ke dalam ListBox Daftar Telpon.

Tambahkan juga perintah di bawah ini di bawah konstruktor MainPage()

protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            /// Create the database connection.
            dbConn = new SQLiteConnection(DB_PATH);
            /// Create the table Task, if it doesn't exist.
            dbConn.CreateTable<Task>();
            /// Retrieve the task list from the database.
            List<Task> retrievedTasks = dbConn.Table<Task>().ToList<Task>();
            /// Clear the list box that will show all the tasks.
            DaftarTlp.Items.Clear();
            foreach (var t in retrievedTasks)
            {
                DaftarTlp.Items.Add(t);
            }
        }

        protected override void OnNavigatedFrom(NavigationEventArgs e)
        {
            if (dbConn != null)
            {
                /// Close the database connection.
                dbConn.Close();
            }
        }

Jika sudah sampai pada tahap ini berarti maka program anda sudah selesai. Project ini hanya bisa menginput data saja sedangkan untuk penghapusan akan saya bahas pada project selanjutnya. See You.. 🙂

Pemrosesan Kata dengan List (Word Processing with List)

Sebenarnya ini adalah tugas besar yang pernah saya berikan kepada mahasiswa saya. Karena batas pengumpulan sudah lama lewat maka rasanya tidak apa-apa jika saya publish solusinya.

Pada dasarnya kali ini saya akan membahas bagaimana membuat pemrosesan text di C++. Yang di maksud dengan  pemrosesan disini adalah menghitung banyak kata dari paragraf yang kita input dan menghitung ada berapa banyak sebuah kata muncul dalam satu paragraf. Binggung?? Baiklah saya berikan contoh :

Misal ada sebuah paragraf :

Pada hari minggu saya bersama keluarga akan berlibur ke sebuah pulau di kepualan Riau. 
Saya sudah menyiapkan semua kebutuhan sebelum kami pergi.

Dari paragraf di atas dapat kita hitung :

Jumlah kata : 22 kata
Pada : 1            hari : 1        minggu : 1        saya : 2

dan seterusnya akan dihitung untuk semua kata.

Saya rasa setelah melihat contoh diatas sudah lebih jelas gambaran aplikasi yang akan di banggun. Bahasa yang saya gunakan disini adalah bahasa C++, karena ini menggunakan Linked List. Kalau menggunakan bahasa pemrogram berorientasi objek tentu akan lebih mudah. Baiklah sebelum membuat aplikasi ini ada baiknya kita list terlebih dahulu apa yang harus dilakukan.
1. Tentu pertama adalah bagaimana kita bisa menginput sebuah paragraf di C++.
2. Kita salin semua paragraf ke dalam sebuah list.
3. Dari kalimat yang telah diinput, buang semua tanda baca.
4. Setelah dibuang semua tanda baca sekarang kita potong semua elemen list per kata simpan kedalam nested list dan hilangkan tanda spasi.
5. Menghitung kemunculan semua kata.
6. Tampilkan Jumlah semua kata dan masing-masing total.

Tahapan diatas memang terlalu berbelit, tapi kita harus menginggat kembali bahwa ini ditujukan untuk mahasiswa yang baru menggenal Senarai dan Struktur Data.

Baiklah mari kita mulai :
Langkah 1. Langkap pertama adalah input paragraf, pada dasarnya ini sanggat sederhana yaitu cukup membuat kode program yang bisa menerima inputan string.

string Tempparagraf;
cout<<"Input Paragraf :\n";getline(cin,Tempparagraf);

Langkah 2.
Kita sudah bisa menginput sebuah string yang berfungsi menampung paragraf kita. Sekarang saatnya untuk memotong string menjadi sekumpulan karakter. Sekaligus kita akan membuang semua tanda baca yang di masukkan kecuali spasi. Oh iya hampir lupa, angka juga akan dihapus karena kita hanya menghitung kemunculan suatu kata. Sebelum kita potong string menjadi sekumpulan karakter, kita sebaiknya menyiapkan sebuah list yang terlebih dahulu.

#define info(P) P->info
#define next(P) P->next
#define first(L) (L).first
typedef struct tElement *address;
typedef struct tElement{
    char info;
    address next;
}element;

typedef struct{
    address first;
}List;

Setalah list sudah siap sekarang kita salin isi string TempParagraf ke dalam list.

void CreateList(List *L){
    first(*L)=NULL;
}
address alokasi(char x){
    address P;
    P=(address)malloc(sizeof(element));
    if(P!=NULL){
        info(P)=x;
        next(P)=NULL;
    }
    return P;
}
void insertFirst(List *L, address Temp){
    Temp->next=first(*L);
    first(*L)=Temp;
}
void insertAfter(List *L,address prec, address x){
    x->next=prec->next;
    prec->next=x;
}
int IsEmpty(List L){
    if(first(L)==NULL)
        return 0;
    else
        return 1;
}
void insert(List *L, char x){
    address Temp;
    Temp=alokasi(x);
    if(IsEmpty(*L)==NULL)
        insertFirst(&(*L),Temp);
    else{
        address last=first(*L);
        while (last->next!=NULL){
            last=last->next;
        }
        insertAfter(&(*L),last,Temp);
    }
}

Sedangkan di void main kita cukup menulis :

List C;    
CreateList(&C);
address T=first(C);
for(int i=0; i<Tempparagraf.size(); i++){
        insert(&C,Tempparagraf[i]);
}
Tampil(C);

Jika telah kalian jalankan hasil dari potongan program ini adalah kita sudah berhasil menyalin semua huruf ke dalam sebuah list.

Langkah 3.

Setelah disalin sekarang saatnya kita menghapus tanda baca dan bilangan yang ada di dalam list. Untuk menghapus elemen list kita harus memiliki method untuk menghapus elemen baik elemen pertama, elemen di tenggah atau elemen yang terkahir. Tetapi untuk kasus masalah ini kita hanya membutuhkan delete after karena dalam bahasa indonesia yang benar tidak boleh ada tanda baca di awal paragraf. Untuk itu berikut kode untuk menghapus elemen list after adalah.

void DeleteAfter(address prev){
    address del=prev->next;
    prev->next=del->next;
    del->next=NULL;
}

Setelah method delete after sekarang saatnya membuat method untuk menghapus tanda baca.

void DeleteTandaBaca(List *L){
    if(first(*L)!=NULL){
        address temp=first(*L)->next;
        address prev=first(*L);
        do{
            if((temp->info<65 || temp->info>93 )&&( temp->info<97 || temp->info>125)&& (temp->info!=32)){
                prev->next=temp->next;
                temp->next=NULL;
                temp=NULL;
                temp=prev->next;
            }
            else{
                prev=temp;
                temp=temp->next;
            }
        }while(temp->next!=NULL);
        if((temp->info<65 || temp->info>93 )&&( temp->info<97 || temp->info>125)&& (temp->info!=32)){
                prev->next=temp->next;
                temp->next=NULL;
                temp=NULL;
                temp=prev->next;
        }
    }
}

Langkah 4.
Setelah dibuang semua tanda baca sekarang kita potong semua elemen list per kata simpan kedalam list dalam list dan hilangkan tanda spasi. untuk itu kita harus memiliki tipe data baru yaitu list dalam list.

typedef struct LList{
    List Info;
    LList *next;
};

LList *LinkList;

Pada dasarnya list dalam list adalah list biasa tetapi info dari list tersebut adalah sebuah. Binggung kan?? Kira-kira begitulah silahkan diperluas maknanya.. Nah sekarang bagaimana menyalin list yang sudah kita buat ke dalam list dalam list. Logikanya satu elemen list dalam list (yang saya beri nama Linklist) adalah sejumlah elemen dari list C. Contoh : isi list C :

S a y a p e r g i

Sekarang bagaimana menyalinnya kedalam Linklist menjadi seperti ini :

Dari gambar diatas pemotongan kata dilakukan jika kita menemukan spasi. Brikut cara memotong semua listnya.

void Salin(List L){
    LinkList=NULL;
    List temp;
    first(temp)=NULL;
    address elemenL=first(L);
    LList *LastLinkedList=new LList;
    LastLinkedList=NULL;
    LastLinkedList=LinkList;
    do{
        if(elemenL->info!=32)
            insert(&temp,elemenL->info);
        if(elemenL->info==32 ||elemenL->next->next==NULL){
            if(elemenL->next->next==NULL)
                insert(&temp,elemenL->next->info);
            LList *NewLList= new LList;
            NewLList->Info=temp;
            NewLList->next=NULL;
            first(temp)=NULL;
            Tampil(NewLList->Info);
            if(LastLinkedList==NULL){
                LinkList=NewLList;
                LinkList->next=NULL;
                LastLinkedList=LinkList;
            }else {
                NewLList->next=LastLinkedList->next;
                LastLinkedList->next=NewLList;
                LastLinkedList=LastLinkedList->next;
            }
        }
        elemenL=elemenL->next;
    }while(elemenL->next!=NULL);
}

Langkah 5 dan 6.

Menghitung kemunculan semua kata. untuk menghitung kemunculan kata tentu kita membutuhkan method untuk membandingkan 2 buah kata, apakah dua kata tersebut sama atau tidak. Berikut adalah method untuk pembandingan

int Kompare(List A, List B){
    address a=first(A);
    address b=first(B);
    int k=1;
    do{
        if(a->info!=b->info){
            k=0;
        }
        //cout<<"\na : "<<a->info<<" b:"<<b->info;
        a=a->next;b=b->next;
    }while(k!=0 && a->next!=NULL);
    return k;
}

Sesudah dibandingkan sekarang kita hitung kemunculan setiap kata dan sudah langsung menampilkan hasil dari perhitungan setiap kata.

void Hitung(){
    List A,B;
    first(A)=NULL;first(B)=NULL;
    LList *Temp=new LList;
    cout<<"\nCek:\n";
    CetakLL();
    LList *Temp2=new LList;
    Temp2=LinkList;
    do{
        cout<<"\nkata: ";
        Tampil(Temp2->Info);
        Temp=Temp2;
        A=Temp2->Info;
        int hasil=1;
        do{
            B=Temp->next->Info;
            int t=Kompare(A,B);
            hasil+=t;
            if(t==1){
                LList *Delete=NULL;
                Delete=Temp->next;
                Temp->next=Delete->next;
                Delete->next=NULL;
            }else
                Temp=Temp->next;
        }while(Temp->next!=NULL);
        Temp2=Temp2->next;
        cout<<"Hasil :"<<hasil;
        if(Temp2->next==NULL){
            Tampil(Temp2->Info);
            cout<<"Hasil :"<<1;
        }
    }while(Temp2->next!=NULL);
}

Selesai…
Semoga bisa menjadi bahan untuk anda yang sedang mendalami tentang list dan yang sedang belajar tentang struktur data. Semoga membantu.. 🙂

Pencarian dengan Algoritma Binary Search

Pencarian bagidua atau pencarian biner adalah metode pencarian yang diterapkan pada sekumpulan data yang sudah terurut (terurut menaik atau terurut menurun). Data yang terurut syarat mutlak penerapan algoritma ini. Salah satu keuntungan data terurut adalah memudahkan pencarian, dalam hal ini pencarian bagidua.

Misalkan indeks kiri adalah Ia dan indeks kanan adalah Ib. Kondisi awal Ia=1 dan Ib = N.
Langkah 1. Bagi dua elemen larik pada elemen tengah. Elemen tengah adalah elemen dengan indeks k = (Ia+Ib) div 2
(elemen tengah , L[k], membagi larik menjadi dua bagian, yaitu bagian kiri L[Ia..k-1] dan bagian kanan L[K+1..Ib])

Langkah 2. Periksa apakah L[k] = X.
Jika L[k] = X, pencarian dihentikan sebab X sudah ditemukan. Tetapi, jika L[k] ≠ X, harus ditentukan apakah pencarian akan dilakukan di larik bagian kiri atau di bagian kanan. Jika L[k] < X, maka pencarian dilakukan pada bagian kiri. Sebaliknya, jika L[k] > X, pencarian dilakukan pada larik bagian kanan.
Langkah 3. Ulangi langkah 1 sampai X ditemukan atau Ia > Ib (ukuran larik sudah nol).

Procedure Bagidua(input L: Larik, input N:integer, input X: integer, output IX:integer)
Algoritma
Ia <-N
Ib <-1
ketemu <-false
while (not ketemu) and (Ib > Ia) do
k <-(Ia + Ib) div 2
if (L[k] = X) then
ketemu= true
else
if (L[k] > X) then
Ia <-k
else
Ib <-k+1
endif
endif
endwhile
If (ketemu = true) then
IX <-k
else
IX <-0
endif

Contoh :
Diketehui sebuah senarai belum terurut dan bilangan yang akan dicari adalah 2 :

2 35 7 4 6 1 9 4 23 25

Penyelesaian :

1. Urutkan terlebih dahulu semua bilangan, boleh terurut menaik atau terurut menurun. Kali ini saya akan menggunakan terurut menaik sehingga diperoleh array sebagai berikut dan kemudian saya tambah dengan keterangan urutan di baris bawah.

Nilai 1 2 4 4 6 7 9 23 25 35
Indeks 1 (Ib) 2 3 4 5 6 7 8 9 10 (Ia)

2. Tentukan Indek atas (Ia) dan indek bawah (Ib). Ia adalah nilai indek terbesar dari array yaitu 10. Sedangkan Ib indek terkecik dari array yaitu 1. dan kita tetapkan bahwa saat ini ketemu=tidak ketemu.
3. Cek apakah saat ini ketemu != ketemu dan Ib < dari Ia? Jika iya maka buka elemen ke-k, dimana k adalah Ia+Ib/2 = 10+1/2= 5 (Biasanya pembulatan kebawah).
4. Sekarang periksa elemen ke-5 apakah sama dengan 2 (bilangan yang dicari)? Ternyata bukan, elemen ke-5 adalah 6.
5. Karena bukan maka periksa apakah nilai elemen ke-5 > dari 2?? Jika iya maka nilai Ia akan diubah menjadi k atau sama saja dengan Ia=k=5. Sehingga area yang dicari menjadi lebih sempit.

Nilai 1 2 4 4 6
Indeks 1 (Ib) 2 3 4 5 (Ia)

6. Cek apakah saat ini ketemu != ketemu dan Ib < dari Ia? Jika iya maka buka elemen ke-k, dimana k adalah Ia+Ib/2 = 1+5/2= 3.
7. periksa elemen ke-3 apakah sama dengan 2 (bilangan yang dicari)? Ternyata bukan, elemen ke-3 adalah 4.
8. Karena bukan maka periksa apakah nilai elemen ke-3 > dari 2?? Jika iya maka nilai Ia akan diubah menjadi  k atau sama saja dengan Ia=k=3.

Nilai 1 2 4
Indeks 1 (Ib) 2 3 (Ib)

9. Cek apakah saat ini ketemu != ketemu dan Ib < dari Ia? Jika iya maka buka elemen ke-k, dimana k adalah Ia+Ib/2 = 1+3/2= 2.
10. periksa elemen ke-2 apakah sama dengan 2 (bilangan yang dicari)? Ternyata benar. Jika benar ketemu =ketemu.
11. Cek apakah saat ini ketemu != ketemu dan Ib < dari Ia? tidak! ketemu=ketemu maka perlulangan berhenti.

Jika dilihat kembali dengan binary search elemen yang diperiksa hanya elemen ke 5, 3 dan 2. dengan tiga langkah elemen yang dicari langsung ketemu.

[WP8] Menyimpan Data di File XML di Windows Phone

Terkadang di pemrograman mobile juga membutuhkan pengolahan data. Tetapi yang jadi masalah adalah dimana data dapat kita simpan? Salah satu yang dapat digunakan adalah dengan menyimpan data di file XML. Format penulisan XML adalah sebagai berikut:

<NamaFile>
  <kolom1></kolom1>
  <kolom2></kolom2>
  ...
  <kolomN></kolomN>
</NamaFile>

Misal kita memiliki data yang ingin disimpan di XML adalah sebagai berikut:

ImageTabel di atas akan kita ubah ke dalam format XML. Pertama, tambahkan new item format xml di project anda. Kemudian berinama TSiswa singkatan dari Tabel Siswa.

<?xml version="1.0" encoding="utf-8" ?>
<Tsiswa>
  <Baris><NoInduk>12101</NoInduk><Nama>Budi</Nama><Umur>16</Umur></Baris>
  <Baris><NoInduk>12102</NoInduk><Nama>Andi</Nama><Umur>15</Umur></Baris>
  <Baris><NoInduk>12103</NoInduk><Nama>Jaka</Nama><Umur>16</Umur></Baris>
  <Baris><NoInduk>12104</NoInduk><Nama>Sri</Nama><Umur>17</Umur></Baris>
</Tsiswa>

Ini adalah cara menyimpan data dengan format XML sedangkan cara memanggilnya melalui file .cs. Pada file .cs yang ingin membaca data XML silahkan tambahkan kode dibawah ini

using System.Xml.Linq;

Kemudian tambahkan:

XDocument data = XDocument.Load("TSiswa.xml");
var TSiswa = data.Document.Descendants(XName.Get("Baris"));
String Temp="";
foreach (var Baris in TSiswa{
      Temp += Baris.Element(XName.Get(("NoInduk"))).Value+" "+Baris.Element(XName.Get(("Nama"))).Value+" "+Baris.Element(XName.Get(("Umur"))).Value+"\n";
}
MessageBox.Show(Temp);

Ini adalah contoh membaca data dari XML dan ditampilkan datanya melalui message box. 🙂

%d bloggers like this: