Jumat, 22 Maret 2019

Sejarah, Kegiatan, dan Dokumnetasi Angkatan Teknik Informatika 2017 (INTEGER_17)

Sejarah, Kegiatan, dan Dokumentasi Angkatan Teknik Informatika 2017 (INTEGER_17)



Assalamualaikum Wr. Wb.

INTEGER

Information Technology and Engineering adalah nama angkatan 2017 Teknik Infromatika Universitas Trunojoyo Madura. Hay Guys... Ini adalah angkatan kami dan kami sangat bangga kepada semuanya yaitu semua teman-teman yang membantu untuk menjaga dan mempertahankan agar nama INTEGER tidak hanya jadi sebuah nama angkatan tanpa adanya sebuah solidaritas dan kekompakan-kekompakan didalam angkatan kami.

A. Sejarah Terbentuknya Information Technology and Engineering (INTEGER)


Sebelum membahas lebih detail mengapa dinamakan INTEGER ?? 

Banyak (NETIZEN-NETIZEN) yang bertanya mengapa sih gak dinamakan float, fortran, linux, windows atau enggak istilah-istilah orang IT yang lebih bagus dari pada nama INTEGER!!!

Jadi, ada beberapa alasan nih mengapa angkatan kami di Jurusan Teknik Informatika Angkatan 2017 bernama INTEGER...

HEHEEH... PENGEN TAU KAN!!!!

Beberapa alasan tadi sebagai berikut dibawah guys...

  • Arti Kata Integer
  • Bahasa Pemrograman
  • Fakultas
Yuks... Simak dengan seksama yang guys....

1. Alasan pertama, jika kita melihat arti kata dari INTEGER...

Integer adalah type data pada bahasa pemrograman yang berupa angka bulat seperti 1, 22, 100, 1000, type data ini sangat umum digunakan di bahasa pemrograman khusunya berkaitan dengan angka bulat. Nilai integer bisa bernilai negatif atau positif dan jika tidak diberi tanda ( – ) maka diasumsikan sebagai nilai positif.


Yuks, kita kupas satu-satu:

  • Integer merupakan tipe data dalam bahasa pemrograman yang berupa angka bulat atau bilangan bulat, artinya kita semua merupakan tipe mahasiswa dari sekian ribu mahasiswa yang ada di Universitas Trunojoyo Madura khususnya Jurusan Teknik Informatika yang memilki tekad bulat dan kemauan yang gigih dalam mengarungi dunia IT yang identik dengan istilah CODING.
  • Nilai integer bisa bernilai negatif atau positif dan jika tidak diberi tanda ( – ) maka diasumsikan sebagai nilai positif, artinya negatif itu diartikan dengan istilah non-akademik seperti, ikut organisasi UKM maupun bergabung dalam organisasi eksekutif kampus yaitu HMP atau BEM. Sedangkan arti positif bisa kita sebut juga dengan kegiatan akademik yang identik dengan kegiatan NGODING. dan jika orang itu tidak suka non-akademik maka secara default orang lain akan menilai bahwa anak IT itu identik dengan ngoding terus, "tidak ada hari selain ngoding .... heheh".

2. Alasan selanjutnya kita lihat dari aktivitas rutin kita anak Teknik Informatika yaitu kegiatan NGODING (Bahasa Pemrograman).

Bahasa Pemrograman memiliki banyak sekali tipe data, dan tipe data pertama kali yang pasti kita jumpai dan kita pelajari dalam bahasa pemrograman  adalah tipe data INTEGER, dari hal itu kata-kata INTEGER menjadi istilah yang tidak asing lagi dikalangan anak Teknik Informatika.

Artinya;

Kita sebagai mahasiswa Teknik Informatika angkatan 2017 haruslah menjadi angkatan yang tidak asing bagi angkatan-angkatan lain didalam kampus sendiri khusunya dalam angkatan-angkatan lain di Teknik Informatika Guys... Kita harus bisa berkontribusi didalam tatanan kampus guys... jangan jadi mahasiswa yang positif-positif saja tapi tidak ada salahnya jika kita menjadi mahasiswa yang negatif yang dapat membawa perubahan-perubahan yang baik dan benar di dalam kampus guys...

NB:
*) positif = kegiatan akademik, *) negatif = kegiatan non-akademik


3. Alasan yang terakhir, kita melihat dari kepanjangan kata INTEGER (Information Technology and Engineering). yang ada kaitannya dengan Fakultas kita.

Di Universitas Trunojoyo Madura khusunya Jurusan Teknik Informatika masuk dalam naungan Fakultas Teknik. Sedangkan dalam Universitas-Universitas lain diluar ada yang namanya Fakultas Teknologi Informasi yang menaungi Jurusan Teknik Informatika.

Artinya;

Dari kondisi diatas guys.... Kami semua angkatan 2017 Teknik Informatika Univesitas Trunojoyo Madura bersepakat untuk menggabungkan kedua nama fakultas tadi diatas yaitu, Fakultas Teknik dan Fakultas Teknologi Informasi untuk menjadi nama angkatan kami Angkatan Teknik Informatika 2017 menjadi Information Technology and Engineering (INTEGER 17) dan ditambah angka 17 sebagai penanda bahwa kami merupakan angkatan yang mulai masuk kuliah di tahun 2017.


B. Kegiatan-Kegiatan Information Technology and Engineering (INTEGER)

Setiap angkatan pasti terdapat acara ataupun kegiatan-kegiatan yang memang khusus dirancang untuk dapat merekatkan, mengkompakkan angkatannya. INTEGER 17 memiliki beberapa kegiatan-kegiatan yang akan kita ceritakan kepada kalian-kalian semua nih guys.... Agar semua angkatan bisa tau bahwa Information Technology and Engineering yang disingkat dengan INTEGER 17 memiliki cara-cara dan agenda kegiatan untuk dapat merekatkan dan mengkompakkan angkatan kami guys... 

Mungkin....

Bisa menjadi opsi buat kalian untuk dapat diterapkan dalam angkatan kalian guys.... 

Jangan Lupa di Simak Baik-Baik Yah Guys...

1. Acara Pertama, Kami Membuat Agenda Jalan-Jalan Bila Libur Telah Tiba...

Liburan pertama yang kita agendakan adalah jalan-jalan ke desa Cangar, Mojokerto. 
Tantangan yang kita hadapi adalah sedikit yang ikut guys... Tapi gak ada masalah, namanya juga kita pengen mengeratkan dan membuat angkatan tetap kompak, jadi pasti akan tetap ada kendala dalam membuat suatu hal yang sempurna, yang penting kita harus tetap meningkatkan usaha agar dapat membuat teman-teman angkatan dapat kompak dan saling mengerti satu sama lain.



Foto bersama di salah satu spot foto di desa Cangar, Mojokerto.
Nama-nama yang ikut : Irsad, Deden, Fira, Bagus, Bolang(Fitri), Faiq, Lutvinda, Faiz, Fera, Avendika, Yongki, Laila. Ada yang kurang (Fany dan Sandi).


Foto Badan Pengurus Harian Information Technology And Engineering (INTEGER 17).
Dari kiri Saya (Moh. Irsad), Wakil Ketua Angkatan (Deden Nur Eka Abdi), Sekretaris 1 (Musfira), Sekretaris 2 (Bagus Fajariyanto).


Liburan kedua yang kita agendakan adalah muncak bareng gunung MT.Pundak, Mojokerto.
Tantangan yang kita hadapi adalah bagaimana caranya kita mengeratkan angkatan dengan cara yang berbeda yaitu muncak bareng ke gunung MT.Pundak guys... Tapi alhamdulillah kali ini yang ikut udah lebih banyak dari sebelumnya guys.... Jadi, jangan pernah menyerah dengan keadaan yah guys... Harus tetap semangat untuk mencoba karena kita tidak tahu usaha mana yang dapat membuat mereka terpacu untuk dapat ikut kumpul-kumpul meski itu dengan cara jalan-jalan... 


Information Technology and Engineering (INTEGER 17) memilih untuk muncak bareng karena dengan itu kita dapat belajar banyak dari muncak itu sendiri diantaranya :

1. MENDAKI GUNUNG MENGAJARKAN KITA UNTUK MENGAGUMI KEAGUNGAN TUHAN YANG MAHA KUASA.

Tuhan menciptakan gunung dengan segala keindahannya. Gunung yang begitu besar dan berdiri kokoh menunjukkan bahwa Tuhan maha besar kekuasaannya karena mampu dengan mudah menciptakan gunung bersama aneka ragam keindahannya. 

2. MENDAKI GUNUNG MENGAJARKAN KITA UNTUK SADAR BAHWA JALAN YANG KITA TEMPUH DALAM KEHIDUPAN KITA TIDAK SELALU SESUAI DENGAN APA YANG KITA INGINKAN

Jalan yang kita tempuh ketika mendaki tidak selalu landai, kadang turun kadang juga naik. Kadang mulus dan kadang juga terjal. Sama seperti kehidupan kita kadang tenang, kadang ada masalah, kadang senang, namun kadang juga kesedihan datang. Dengan begitu kita berharap angkatan kita bisa saling mengerti dan memecahkan masalah bersama dengan cara kekeluargaan karena dengan bersama kita pasti bisa melaluinya dengan mudah.

3. MENDAKI GUNUNG MENGAJARKAN KITA UNTUK MENJADI PRIBADI YANG SELALU MEMPERSIAPKAN SEGALA SESUATU DENGAN BAIK DAN MATANG

Ketika kita akan melakukan pendakian, kita pasti mempersiapkan segala sesuatunya dengan matang. Persiapan peralatan, makanan, pengetahuan mengenai medan yang akan ditempuh, biaya, transportasi, dan lain sebagainya. Ini akan kita lakukan agar pendakian berjalan dengan lancar. Dalam kehidupan kita sehari-hari pun kita juga dituntut untuk selalu mempersiapkan segala sesuatu dengan baik agar semuanya berjalan dengan lancar sesuai dengan rencana. Begitupula dengan mengelola angkatan kita agar dapat menjadi angkatan yang kompak kita harus merencanakan terlebih dahulu kegiatan-kegiatan apa saja yang ingin kita lakukan agar selalu terjalin silaturahmi dengan baik agar rasa chemistry dapat terbentuk antar sesama anggota angkatan.

4. MENDAKI GUNUNG MENGAJARKAN KITA UNTUK BERSABAR

Ketika mendaki rasanya kita selalu pengen banget cepet-cepet sampe tujuan atau puncak. Tapi kenyataannya ga bisa gitu Bro, kita jangan memaksakan diri untuk cepat sampai puncak karena itu sangat beresiko. Kita harus bersabar menempuh jalan yang jauh dengan berbagai macam rintangannya. Ketika lelah maka kita harus berhenti sejenak untuk memulihkan tenaga jangan dipaksakan. Dalam keseharian kita pun kita diharuskan untuk selalu bersabar jangan terburu-buru. Karena segala hal yang dilakukan dengan terburu-buru pasti akan berakhir dengan akhir yang tidak baik. Dalam angkatan segala permasalahan pasti akan muncul mungkin secara tiba-tiba ataupun muncul berdasarkan keadaan angkatan itu sendiri. Intinya guys.. Dalam angkatan permasalahan jangan jadikan beban tapi dijadikan tantangan dan jangan lupa bersabar yah guys.... karena suatu usaha tidaka akan pernah dapat terselesaikan kalo kuita sudah menyerah untuk mencari pemcahan masalah dalam angkatan kita senidri guys... 

5. MENDAKI GUNUNG MENGAJARKAN KITA UNTUK IKHLAS

Puncak memang menyenangkan. Tapi jika keadaan tidak memungkinkan maka jangan dipaksakan karena mencapai puncak bukanlah tujuan utama kita, tujuan utama kita adalah kembali pulang dalam keadaan sehat dan selamat. Apa yang kita inginkan tidak selalu akan kita dapatkan. Ikhlas menerima, akan menjadi kunci kebahagiaan dan keselamatan. Dalam angkatan kita dituntut untuk belajar ikhlas, karena dengan ikhlas kita dapat menerima angkatan kita bagaimanapun keadaan angkatan kita ntah terpuruk atau lagi mantap-mantapnya...

6. MENDAKI GUNUNG MENGAJARKAN KITA BAHWA BUAH DARI USAHA DAN KERJA KERAS TIDAK AKAN SIA-SIA

Kita pasti udah tau kalo naik gunung itu berat dan ga gampang. Jatuh bangun akan kita alami ketika melangkahkan kaki menuju puncak. Tapi ketika kita udah sampe puncak maka semua lelah terbayar sudah dengan keindahan yang disajikan dari atas puncak. Dalam hal apapun entah itu dunia kerja atau dunia usaha, kerja keras harus kita lakukan dalam upaya untuk mendapatkan hasil yang baik. Dalam prosesnya mungkin kita akan menemukan banyak rintangan sama halnya seperti ketika kita mendaki gunung yang jalannya terjal dan berliku. Namun, hasil dari kerja keras ga bakal bohong ko. Percaya deh Bro Lo akan menikmati hasil yang baik dari usaha dan kerja keras Lo.

7. MENDAKI GUNUNG MENGAJARKAN KITA TENTANG INDAHNYA KEBERSAMAAN DAN TOLONG MENOLONG

Tiap kali Gw naik gunung, setiap Gw berpapasan dengan pendaki lain di jalur pendakian pasti kita saling tegur sapa meskipun kita tidak kenal. Pernah suatu saat Gw kehabisan air minum dan kaki Gw terkilir, pendaki lain dengan sigap menawarkan minuman dan obat pereda nyeri ke Gw. Ini menurut Gw luarbiasa, karena para pendaki sangat menjungjung tinggi kebersamaan dan tolong menolong antar sesama.Dalam keseharian kita, tentu rasa kebersamaan ini harus kita jaga. Karena dengan rasa kebersamaan lah kita dapat mewujudkan negri yang damai dan sejahtra.

Nah Bro, naik gunung itu gak cuman soal senang-senang aja. Lebih dari itu, naik gunung banyak memberi makna kepada kita. Makanya Bro, jaga gunung itu baik-baik jangan dikotori agar selalu lestari.


C. Dokumentasi Kegiatan Information Technology and Engineering (INTEGER)



Makan bersama di gunung MT. Pundak



Foto para cewek-cewek tangguh




Foto pas turun puncak


Foto Badan Pengurus Harian Information Technology and Engineering


Foto bersama dibukit desa Cangar, Mojokerto


"Postingan Ini Di Ikut Sertakan Dalam Lomba Milad HIMATIF Universitas Trunojoyo Madura"

Information Technology and Engineering (INTEGER 17).

Wassalamualaikum Wr. Wb.












Jumat, 15 Juni 2018

Graph Pada Python

Graph Pada Python
graf dalam komputer sains (ilmu komputer) adalah sebuah tipe data abstrak. Graf terdiri dari titik-titik (nodes) yang terhubung dengan sisi/busur (edge/arcs).
Berikut ini contoh graf yang akan kita tulis dalam kode program python:
Graf tersebut merupakan graf berarah yang memiliki enam buah titik dan delapan busur (arcs). Adapun delapan busur tersebut bisa kita nyatakan seperti berikut ini.
A -> B
A -> C
B -> C
B -> D
C -> D
D -> C
E -> F
F -> C
Graf sebenarnya bisa diubah ke dalam bentuk matriks dan ditulis dalam bentuk array dua dimensi ke dalam kode. Namun, karena contoh yang saya temukan menggunakan dictionary, maka graf di atas bisa dituliskan seperti berikut ini.
graf = {'A': ['B', 'C'],
        'B': ['C', 'D'],
        'C': ['D'],
        'D': ['C'],
        'E': ['F'],
        'F': ['C']}
Source code :

from __future__ import print_function

graph = { "a": ["c","d"],
          "b": ["c", "e"],
          "c": ["a", "b", "d", "e"],
          "d": ["c","e"],"e": ["c", "b"],
          "f": []}

def find_path(graph, start, end, path=[]):
                path = path + [start]
                for node in graph[start]:
                    if not node in path:
                        newpath = find_path(graph, node, end, path)
                        if newpath != None:
                            return newpath
                if start == end:
                    return path
                if not start in graph:
                    return None

def all_path(graph, start, end, path=[]):
                path = path + [start]
                if start == end:
                    return [path]
                if not start in graph:
                    return []
                paths = []
                for node in graph[start]:
                    if not node  in path:
                        newpaths = all_path(graph, node, end, path)
                        for newpath in newpaths:
                            paths.append(newpath)
                return paths

def shortest_path(graph, start, end, path=[]):
                path = path + [start]
                if start == end:
                    return path
                if not start in graph:
                    return None
             
                shortest = None
                for node in graph[start]:
                    if node not in path:
                        newpath = shortest_path(graph, node, end, path)
                        if newpath != None:
                            if not shortest or len(newpath) < len(shortest):
                                shortest = newpath
                return shortest

def main_menu():
    print ("=".center(80,"="))
    print("Selamat Datang Di Aplikasi (Graph)".upper().center(80))
    print("By : Moh. Irsad 170411100024".upper().center(80))
    print ("=".center(80,"="))
    stop = False
    while not stop:
        print ("=".center(30,"="))
        print ("Menu Aplikasi Graph")
        print ("=".center(30,"="))
        print ("1. Menemukan Jalur")
        print ("2. Tampilkan Semua Jalur")
        print ("3. Jalur Tercepat")
        print ("=".center(30,"="))
        opsi = int(input("Masukkan pilihan anda : "))
        print ()
     
        if opsi == 1 :
            print ("=".center(30,"="))
            print ("1. Menemukan Jalur")
            print ("=".center(30,"="))
            for i in graph:
                print ("Jalur ",i,":",graph[i])
            print ()
            awal = raw_input("Masukan Jalur Awal : ")
            akhir = raw_input("Masukan Jalur Tujuan Anda : ")
            print ()
            Kondisi = find_path(graph, awal, akhir)
            if Kondisi == None :
                print ("=".center(40,"="))
                print ("Jalur yang anda inginkan tidak ada!!!")
                print ("=".center(40,"="))
            else :
                print ("=".center(40,"="))
                print("Jalur Ditemukan :",find_path(graph, awal, akhir))
                print ("=".center(40,"="))
             
        elif opsi == 2:
            print ("=".center(30,"="))
            print ("2. Tampilkan Semua Jalur")
            print ("=".center(30,"="))
            for i in graph:
                print ("Jalur ",i,":",graph[i])
            print ()
            awal = raw_input("Masukan Jalur Awal : ")
            akhir = raw_input("Masukan Jalur Tujuan Anda : ")
            no = 1
            for i in all_path(graph,awal,akhir):
                print ("=".center(40,"="))
                print ("Jalur ke-%d : " %(no),i)
                print ("=".center(40,"="))
                no += 1
             
        elif opsi == 3:
            print ("=".center(30,"="))
            print ("3. Jalur Tercepat")
            print ("=".center(30,"="))
            for i in graph:
                print ("Jalur ",i,":",graph[i])
            print ()
            awal = raw_input("Masukan Jalur Awal : ")
            akhir = raw_input("Masukan Jalur Tujuan Anda : ")
            print ("=".center(40,"="))
            print("Jalur tercepat : ", shortest_path(graph,awal,akhir))
            print ("=".center(40,"="))
         
        else :
            print ("=".center(40,"="))
            print ("Pilihan yang anda masukan tidak ada".center(40))
            print ("=".center(40,"="))
             
        if opsi != 4:       
            opsi2 =raw_input("Apakah anda ingin mencoba opsi lain? (Yes/No) :")
            if opsi2 == 'No':
                stop = True
                print("=".center(80,"="))
                print("Terimakasih telah mencoba aplikasi kami.".upper().center(80))
                print("Moh. Irsad 170411100024".center(80))
                print("=".center(80,"="))

main_menu()

Post,In, dan Preorder BinaryTree (Rekursif dan Non-Rekursif)

Post,In, dan Preorder BinaryTree (Rekursif dan Non-Rekursif)

Ada tiga pola umum yang digunkaan untuk mengunjungi semua node dalam tree. Perbedaan antara 3 pola ini adalah urutan kunjungan terhadap node. Kunjungan ini dinamakan “traversal.”, yaitu preorder, inorder dan postorder. Berikut ini adalah definisinya:

1. Preorder
Dalam suatu preorder traversal, node root dikunjungi pertama, kemudian secara rekursif melakukan preorder traversal dari subtree kiri, diikuti oleh suatu preorder traversal rekursif dari subtree kanan.

2. Inorder
Pada suatu inorder traversal, secara rekursif dilakukan inorder traversal pada subtree kiri, mengunjungi node root dan terakhir melakukan inorder traversal rekursif dari subtree kanan.

3. Postorder
Dalam suatu postorder traversal, dilakukan suatu postorder traversal rekursif dari subtree kiri dan subtree kanan diikuti dengan kunjungan ke node root.

Source code :

from __future__ import print_function

class Stack:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items==[]

    def push(self,items):
        self.items.append(items)

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[len(self.items)-1]

    def size(self):
        return len(self.items)
 
class Binarytree:
    def __init__(self,root):
        self.key = root
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None :
            self.leftChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None :
            self.rightChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t

    def getrightChild(self):
        return self.rightChild

    def getleftChild(self):
        return self.leftChild

    def getrootVal(self):
        return self.key

    def setrootVal(self,obj):
        self.key = obj

    def size(self):
        count = 0
        selfleft = self
        selfright = self
        while selfleft.getleftChild() != None or selfright.getrightChild() != None :
            count += 1
            if selfleft.getleftChild() != None:
                selfleft = selfleft.getleftChild()
            else :
                selfright = selfright.getrightChild()
        return count

#Post,In,Pre dengan Rekursif
def Inorder(root):
    if root!= None:
        Inorder(root.getleftChild())
        print(root.getrootVal(),end=" ")
        Inorder(root.getrightChild())

def Preorder(root):
    if root!= None:
        print(root.getrootVal(),end=" ")
        Preorder(root.getleftChild())
        Preorder(root.getrightChild())

def Postorder(root):
    if root!= None:
        Postorder(root.getleftChild())
        Postorder(root.getrightChild())
        print(root.getrootVal(),end=" ")

#Post,In,Pre tanpa Rekursif
def pre_order(root):
    s=Stack()
    current = root
    s.push(current)
    while not s.isEmpty():
        current = s.pop()
        print(current.getrootVal(),end =" ")
     
        if current.getrightChild()!=None:
            s.push(current.getrightChild())
         
        if current.getleftChild()!=None:
            s.push(current.getleftChild())

def post_order(root):
    s1=Stack()
    s2=Stack()
    current = root
    s1.push(current)
    while not s1.isEmpty():
        current = s1.pop()
        s2.push(current.getrootVal())
         
        if current.getleftChild()!= None:
            s1.push(current.getleftChild())
     
        if current.getrightChild()!=None:
            s1.push(current.getrightChild())
         
    while not s2.isEmpty():
        print(s2.pop(),end=" ")
 
def in_order(root):
    s=Stack()
    current = root
    done = False
    while not done:
        if current != None:
            s.push(current)
            current = current.getleftChild()
        else:
            if s.size() > 0 :
                current = s.pop()
                print(current.getrootVal(),end=" ")
                current = current.getrightChild()
            else:
                done = True
#Main_program
     
root = Binarytree('P')
root.insertLeft('F')
root.getleftChild().insertLeft('B')
root.getleftChild().insertRight('H')
root.getleftChild().getleftChild().insertLeft('A')
root.getleftChild().getrightChild().insertRight('M')
root.insertRight('S')
root.getrightChild().insertLeft("R")
root.getrightChild().insertRight("W")
print ("=".center(40,"="))
print ("Tugas Praktikum 7\nBy : Moh. Irsad(170411100024)")
print ("=".center(40,"="))
print ("Tree :\n")
print(root.getrootVal(),end = " ")
print(root.getleftChild().getrootVal(),end = " ")
print(root.getleftChild().getleftChild().getrootVal(),end = " ")
print(root.getleftChild().getrightChild().getrootVal(),end = " ")
print(root.getleftChild().getleftChild().getleftChild().getrootVal(),end = " ")
print(root.getleftChild().getrightChild().getrightChild().getrootVal(),end = " ")
print(root.getrightChild().getrootVal(),end = " ")
print(root.getrightChild().getleftChild().getrootVal(),end = " ")
print(root.getrightChild().getrightChild().getrootVal())
print ("=".center(25,"="))
print ("No. 1".center(25))
print ("=".center(25,"="))
print ("Menggunakan Rekursif\n")
print ("Inorder :\n")
Inorder(root)
print ()
print ("\nPreorder :\n")
Preorder(root)
print ()
print ("\nPostorder :\n")
Postorder(root)
print ()
print ("=".center(25,"="))
print ("No. 2".center(25))
print ("=".center(25,"="))
print ("Tanpa Menggunakan Rekursif\n")
print ("Inorder :\n")
in_order(root)
print ()
print ("\nPreorder :\n")
pre_order(root)
print ()
print ("\nPostorder :\n")
post_order(root)
print ()
print ("=".center(25,"="))

Selasa, 15 Mei 2018

Parse Tree Python

Parse Tree Python

Implementasi tree yang lengkap secara struktur dapat digunakan untuk menyelesaikan malasah ril, di antaranya adalah parse tree (pohon uraian).

Langkah pertama dalam pembangunan suatu parse tree Adalah memecah string ekspresi ke dalam daftar tokens. Ada 4 jenis token berbeda yang perlu diperhatikan: kurung left, kurung kanan, operator dan operan. Kita tahun bahwa kapanpun kita membaca kurung kiri kita

memulai suatu ekspresi baru, dan karena itu kita membuat suatu tree baru untuk menyesuaikan ekspresi tersebut. Sebaliknya, kapanpun kita membaca suatu kurung kanan, kita telah menyelesaikan suatu ekspresi. Kita juda mengetahui bahwa operan akan menjadi node daun (leave) dan anak-anak (children) dari operator-operatornya. Terakhir, kita mengetahui bahwa setiap operator akan mempunyai anak kiri dan kanan.

Berdasarkan informasi di atas kita dapat mendefinisikan 4 rule berikut:
1. Jika current token adalah '(', tambahkan node baru sebagai anak kiri (left child) dari current node, dan turunkan ke anak kiri tersebut.
2. Jika current token adalah operator dalam list ['+','-','/','*'], set nilai root dari current node ke operator yang direpresentasikan oleh current token. Tambahkan node baru sebagai anak nakan dari current node dan turunkan ke anak kanan tersebut.
3. Jika current token adalah suatu bilangan, set nilai root dari current node ke bilangan tersebut dan kembali ke induknya.
4. Jika current token adalah ')', pindahkan ke induk dari current node.

Sekarang mari kita manfaatkan 4 aturan di atas untuk menguji ekspresi matematika (3 + (4 * 5)). Ekspresi ini akan diurai ke dalam daftar token ['(', '3', '+', '(', '4', '*', '5' ,')',')']. Awalnya dimulai dengan suatu parse tree yang mengandung node root kosong.


Source Code :

from __future__ import print_function
class Stack:
    def __init__(self):
        self.items = []

    def isEmpty(self):
        return self.items==[]

    def push(self,items):
        self.items.append(items)

    def pop(self):
        return self.items.pop()

    def peek(self):
        return self.items[len(self.items)-1]

    def size(self):
        return len(self.items)
    
class Binarytree:
    def __init__(self,root):
        self.key = root
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None :
            self.leftChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None :
            self.rightChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t

    def getrightChild(self):
        return self.rightChild

    def getleftChild(self):
        return self.leftChild

    def getrootVal(self):
        return self.key

    def setrootVal(self,obj):
        self.key = obj

    def size(left):
        count = 0
        selfleft = self
        selfright = self
        while selfleft.getleftChild() != None or selfright.getrightChild() != None :
            count += 1
            if selfleft.getleftChild() != None:
                selfleft = selfleft.getleftChild()
            else :
                selfright = selfright.getrightChild()
        return count
    
def buildParseTree(fpexp):
    fplist = fpexp.split()
    pStack = Stack()
    eTree = Binarytree("")
    pStack.push(eTree)
    currentTree = eTree
    for i in fplist:
        if i == "(":
            currentTree.insertLeft("")
            pStack.push(currentTree)
            currentTree = currentTree.getleftChild()
        elif i not in ["+","-","*","/",")"]:
            currentTree.setrootVal(int(i))
            parent = pStack.pop()
            currentTree = parent
        elif i in ["+","-","*","/"]:
            currentTree.setrootVal(i)
            currentTree.insertRight("")
            pStack.push(currentTree)
            currentTree = currentTree.getrightChild()
        elif i == ")":
            currentTree = pStack.pop()
        else:
            return ("Error")
    return eTree

def Inorder(tree):
    if tree != None:
        Inorder(tree.getleftChild())
        print(tree.getrootVal(),end=" ")
        Inorder(tree.getrightChild())

def Preorder(tree):
    if tree != None:
        print(tree.getrootVal(),end=" ")
        Preorder(tree.getleftChild())
        Preorder(tree.getrightChild())

def Postorder(tree):
    if tree != None :
        Postorder(tree.getleftChild())
        Postorder(tree.getrightChild())
        print(tree.getrootVal(),end=" ")

pt = buildParseTree( "( ( 3 + ( 4 * 5 ) ) )" )
Inorder(pt)
print ()
Preorder(pt)
print ()
Postorder(pt)

Binary Tree Python

Binary Tree Python

Tree digunakan di banyak bidang informatika termasuk sistem operasi, pemrosessan bahasa alami, penggalian data web, grafika, sistem database dan jaringan komputer. Struktur data tree mempuyai suatu root (akar), branches (cabang) dan leaves (daun-daun).

Pada tree berbentuk list of lists (list di dalam list), kita menyimpan nilai dari node root sebagai elemen pertama dari list. Elemen kedua dari list akan merepresentasikan sub-tree kiri. Elemen ketiga adalah list lain yang mewakili sub-tree kanan. Tentang ilustrasikan struktur data ini, gambar 5.1 memperlihatkan tree sederhana beserta list yang mewakilinya.



Source Code :

from __future__ import print_function
class Binarytree:
    def __init__(self,root):
        self.key = root
        self.leftChild = None
        self.rightChild = None

    def insertLeft(self,newNode):
        if self.leftChild == None :
            self.leftChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.leftChild = self.leftChild
            self.leftChild = t

    def insertRight(self,newNode):
        if self.rightChild == None :
            self.rightChild = Binarytree(newNode)

        else :
            t = Binarytree(newNode)
            t.rightChild = self.rightChild
            self.rightChild = t

    def getrightChild(self):
        return self.rightChild

    def getleftChild(self):
        return self.leftChild

    def getrootVal(self):
        return self.key

    def size(self):
        count = 0
        selfleft = self
        selfright = self
        while selfleft.getleftChild() != None or selfright.getrightChild() != None :
            count += 1
            if selfleft.getleftChild() != None:
                selfleft = selfleft.getleftChild()
            else :
                selfright = selfright.getrightChild()
        return count

r = Binarytree('a')
r.insertLeft('b')
r.insertRight('c')
r.getleftChild().insertLeft('d')
r.getleftChild().insertRight('e')
r.getleftChild().getrightChild().insertLeft('f')
r.getleftChild().getrightChild().insertRight('g')
print(r.getrootVal())
print(r.getleftChild().getrootVal())
print(r.getleftChild().getleftChild().getrootVal())
print(r.size())

Double Linked List Python

Double Linked List Python

Hasil gambar untuk gambar double link list

from __future__  import print_function
class Node:
    def __init__(self,initdata):
        self.data = initdata
        self.next = None
        self.prev = None
    
    def getData(self):
        return self.data

    def getNext(self):
        return self.next
        
    def getPrev(self):
        return self.prev

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext
        
    def setPrev(self,newprev):
        self.prev = newprev

class Orderlist:
    def __init__(self):
        self.head = None
        
    def show(self):
        current = self.head
        print ("Head ->", end = " ")
        while current != None and current.getNext() != None:
            print (current.getData(), end = "<->")
            current = current.getNext()
        else :
            print (current.getData(), end = "-> None")
        print ("\nNone <-")

    def isEmpty(self):
        return self.head == None

    def add(self,item):
        temp = Node(item)
        temp.setNext(self.head)
        temp.setPrev(None)
        self.head = temp
        prev1 = temp.getData()
        next1 = temp.getNext()
        if next1 != None:
            next1.setPrev(temp)
            
    def size(self):
        current = self.head
        count = 0
        while current != None:
            count = count + 1
            current = current.getNext()
        return count
        
    def search(self,item):
        current = self.head
        found = False
        while current != None and not found:
            if current.getData() == item:
                found = True
            else :
                current = current.getNext()
        return found
    
    def remove(self,item):
        current = self.head
        previous = None
        found = False
        while current != None and not found:
            if current.getData()== item:
                found = True
            else :
                previous = current
                current = current.getNext()
                if current == None:
                    next1 = None
                else:                
                    next1 = current.getNext()
                    
        if previous == None:
            self.head = current.getNext()
        else:
            if current == None:
                previous.setNext(None)
            else :
                previous.setNext(current.getNext())
            if next1 != None:
                next1.setPrev(current.getPrev())
                
    def mainmenu(self):
        print ("=".center(80,"="))
        print("Selamat Datang Di Aplikasi (Double Linked List)".upper().center(80))
        print("By : Moh. Irsad 170411100024".upper().center(80))
        print ("=".center(80,"="))
        stop = False
        while not stop: 
            print ("=".center(30,"="))
            print ("Menu Aplikasi Linked List")
            print ("=".center(30,"="))
            print ("1. Tambah data")
            print ("2. Remove data")
            print ("3. Cari data")
            print ("4. Jumlah data")
            print ("5. Tampil data")
            print ("=".center(30,"="))
            opsi = int(input("Masukkan pilihan anda : "))
            print ()
            
            if opsi == 1 :
                print ("=".center(30,"="))
                print ("Tambah Data".center(30))
                print ("=".center(30,"="))
                n = int(input("Berapa banyak data yang ingin anda masukan : "))
                for i in range (n):
                    i +=1
                    data = int(input("Masukkan data ke- %d : "% i))
                    angka.append(data)
                angka.sort()
                angka.reverse()
                for j in angka:
                    self.add(j)
                print ("=".center(40,"=")) 
                print ("Data Berhasil Ditambahkan".center(40))
                print ("=".center(40,"="))
                
            elif opsi == 2:
                print ("=".center(30,"="))
                print ("Remove Data".center(30))
                print ("=".center(30,"="))
                data = int(input("masukkan data yang ingin anda remove : "))
                self.remove(data)
                if data in angka:
                    print ("=".center(40,"="))
                    print ("Data berhasil di remove!!!".center(40))
                    print ("=".center(40,"="))
                else :
                    print ("=".center(40,"="))
                    print ("Data yang ingin anda remove tidak ada".center(40))
                    print ("=".center(40,"="))
                    
            elif opsi == 3:
                print ("=".center(30,"="))
                print ("Cari Data".center(30))
                print ("=".center(30,"="))
                data = int(input("Masukkan data yang ingin anda cari : "))
                status = self.search(data)
                if status == True:
                    print ("=".center(40,"="))
                    print ("Data Ditemukan".center(40))
                    print ("=".center(40,"="))
                else :
                    print ("=".center(40,"="))
                    print ("Data yang anda cari tidak ada".center(40))
                    print ("=".center(40,"="))
                    
            elif opsi == 4:
                print ("=".center(30,"="))
                print ("Jumlah Data".center(30))
                print ("=".center(30,"="))
                print ("Panjang data : ", self.size())
                print ("=".center(30,"="))
                
            elif opsi == 5:
                print ("=".center(30,"="))
                print ("Tampilkan Data".center(30))
                print ("=".center(30,"="))
                if angka == []:
                    print ("Data Masih Kosong")
                else :
                    self.show()
                    
            else :
                print ("=".center(40,"="))
                print ("Pilihan yang anda masukan tidak ada".center(40))
                print ("=".center(40,"="))
                
            if opsi != 5:          
                opsi2 =raw_input("Apakah anda ingin mencoba opsi lain? (Yes/No) :")
                if opsi2 == 'No':
                          stop = True
                          print("=".center(80,"="))
                          print("Terimakasih telah mencoba aplikasi kami.".upper().center(80))
                          print("Moh. Irsad 170411100024".center(80))
                          print("=".center(80,"="))

#Main_Program                          
angka = []
mylist = Orderlist()
mylist.mainmenu()

Single Linked List Python

Single Linked List Python

Hasil gambar untuk gambar link list

" linked list bisa kita katakan juga sebagai rantai. karena linked list adalah struktur data yang terdiri dari urutan - urutan elemen yang saling terhubung satu sama lain yang membentuk seperti rantai. dimana setiap elemennya memiliki alamat yang menyimpan alamat dari elemen selanjutnya". sehingga di dalam setiap elemen terdapat dua informasi.. yaitu isi dari setiap elemen dan juga alamat elemen selanjutnya.

from __future__  import print_function
class Node:
    def __init__(self,initdata):
        self.data = initdata
        self.next = None
    
    def getData(self):
        return self.data

    def getNext(self):
        return self.next

    def setData(self,newdata):
        self.data = newdata

    def setNext(self,newnext):
        self.next = newnext

class Orderlist:
    def __init__(self):
        self.head = None
        
    def show(self):
        current = self.head
        print ("Head ->", end = " ")
        while current != None:
            print (current.getData(), end = " -> ")
            current = current.getNext()
        print ("None")

    def isEmpty(self):
        return self.head == None

    def add(self,item):
        temp = Node(item)
        temp.setNext(self.head)
        self.head = temp
        
    def size(self):
        current = self.head
        count = 0
        while current != None:
            count = count + 1
            current = current.getNext()
        return count
        
    def search(self,item):
        current = self.head
        found = False
        while current != None and not found:
            if current.getData() == item:
                found = True
            else :
                current = current.getNext()
        return found

    def remove(self,item):
        current = self.head
        previous = None
        found = False
        while current != None and not found:
            if current.getData()== item:
                found = True
            else :
                previous = current
                current = current.getNext()
                if current == None:
                    next1 = None
                else:                
                    next1 = current.getNext()
                    
        if previous == None:
            self.head = current.getNext()
        else:
            if current == None:
                previous.setNext(None)
            else :
                previous.setNext(current.getNext())
            if next1 != None:
                next1 = current.getNext()
        
    def mainmenu(self):
        print ("=".center(80,"="))
        print("Selamat Datang Di Aplikasi (Single Linked List)".upper().center(80))
        print("By : Moh. Irsad 170411100024".upper().center(80))
        print ("=".center(80,"="))
        stop = False
        while not stop: 
            print ("=".center(30,"="))
            print ("Menu Aplikasi Linked List")
            print ("=".center(30,"="))
            print ("1. Tambah data")
            print ("2. Remove data")
            print ("3. Cari data")
            print ("4. Jumlah data")
            print ("5. Tampil data")
            print ("=".center(30,"="))
            opsi = int(input("Masukkan pilihan anda : "))
            print ()
            
            if opsi == 1 :
                print ("=".center(30,"="))
                print ("Tambah Data".center(30))
                print ("=".center(30,"="))
                n = int(input("Berapa banyak data yang ingin anda masukan : "))
                for i in range (n):
                    i +=1
                    data = int(input("Masukkan data ke- %d : "% i))
                    angka.append(data)
                angka.sort()
                angka.reverse()
                for j in angka:
                    self.add(j)
                print ("=".center(40,"=")) 
                print ("Data Berhasil Ditambahkan".center(40))
                print ("=".center(40,"="))
            elif opsi == 2:
                print ("=".center(30,"="))
                print ("Remove Data".center(30))
                print ("=".center(30,"="))
                data = int(input("masukkan data yang ingin anda remove : "))
                self.remove(data)
                if data in angka:
                    print ("=".center(40,"="))
                    print ("Data berhasil di remove!!!".center(40))
                    print ("=".center(40,"="))
                else :
                    print ("=".center(40,"="))
                    print ("Data yang ingin anda remove tidak ada".center(40))
                    print ("=".center(40,"="))
                    
            elif opsi == 3:
                print ("=".center(30,"="))
                print ("Cari Data".center(30))
                print ("=".center(30,"="))
                data = int(input("Masukkan data yang ingin anda cari : "))
                status = self.search(data)
                if status == True:
                    print ("=".center(40,"="))
                    print ("Data Ditemukan".center(40))
                    print ("=".center(40,"="))
                else :
                    print ("=".center(40,"="))
                    print ("Data yang anda cari tidak ada".center(40))
                    print ("=".center(40,"="))
                    
            elif opsi == 4:
                print ("=".center(30,"="))
                print ("Jumlah Data".center(30))
                print ("=".center(30,"="))
                print ("Panjang data : ", self.size())
                print ("=".center(30,"="))
                
            elif opsi == 5:
                print ("=".center(30,"="))
                print ("Tampilkan Data".center(30))
                print ("=".center(30,"="))
                if angka == []:
                    print ("Data Masih Kosong")
                else :
                    self.show()
                    
            else :
                print ("=".center(40,"="))
                print ("Pilihan yang anda masukan tidak ada".center(40))
                print ("=".center(40,"="))
                
            if opsi != 5:          
                opsi2 = raw_input("Apakah anda ingin mencoba opsi lain? (Yes/No) :")
                if opsi2 == 'No':
                          stop = True
                          print("=".center(80,"="))
                          print("Terimakasih telah mencoba aplikasi kami.".upper().center(80))
                          print("Moh. Irsad 170411100024".upper().center(80))
                          print("=".center(80,"="))
            
#Main_Program
angka = []
mylist = Orderlist()
mylist.mainmenu()

Sejarah, Kegiatan, dan Dokumnetasi Angkatan Teknik Informatika 2017 (INTEGER_17)

Sejarah, Kegiatan, dan Dokumentasi Angkatan Teknik Informatika 2017 (INTEGER_17) Assalamualaikum Wr. Wb. INTEGER Information Te...