Anda di halaman 1dari 139

Struktur Data

Kode Kelas
Reg Sore 56fecs

Eko Travada
Unas PASIM
 Aktifitas Kuliah
 Perangkat Belajar
Perkuliahan &  Silabus
Atribut  Referensi
 Materi Pembahasan
Penilaian Kelas 60 %
 Kehadiran 10 %
 Tugas 20 %
 Take Home
 Kelas
 UTS 30 %
Aktifitas Kuliah
 UAS 40 %
& Penilaian Penilaian Pratikum 40 %
 Kehadiran 10 %
 Tugas 20 %
 UTS 30 %
 UAS 40 %
 Editor Python versi 3.0 atau setelahnya
 Py Charm
Perangkat  Jupyter

Belajar
 E Book
 A Byte of Python v1.92 (for Python 3.0),
http://code.pediapress.com
 Data Structures and Algorithms with Python, Kent
D. Lee , Steve Hubbard, Springer 2015

Referensi Situs
https://docs.python.org/3.7/tutorial/
https://www.tutorialspoint.com/python
 Pengertian Struktur Data
 Pengenalan Python Programming
 Sejarah Python
 Setup
 Kata Kunci Dasar
 Review Algoritma
 Sequensial
 Percabangan
 Perulangan
 Sub Program
 List (Array)
 Access Value in List
Silabus  Updating List
 Delete List Elements
 Basic List Operations
 Indexing, sequence
 Function & Methods
 Sorting/Pengurutan
 Searching/Pencarian
 Rekursi
 Class for Pointer
 Link list
 Antrian
 Stack
 Tree
 Struktur Data adalah cara penyimpanan, penyusunan dan
pengaturan data di dalam media penyimpanan komputer
sehingga data tersebut dapat digunakan secara efisien
(sumber :Wiki).
 STRUKTUR DATA menyangkut susunan fisik data dalam
komputer dan berfungsi agar [1]:
1. penyimpanan lebih efisien
Pengertian 2. Agar tersusun lebih terurut
3. Agar data retrieval lebih efektif 
Struktur Data  Retrieval adalah Metoda untuk pengambilan atau pencarian data
Pemakaian STRUKTUR DATA yang tepat di dalam proses
pemrograman akan menghasilkan algoritma yang lebih jelas dan
Tujuan tepat, sehingga menjadikan program secara keseluruhan lebih
efisien dan sederhana[1].
Struktur Data
 Anda Diminta membuat aplikasi pemilu di sebuah TPS dengan
ketentuan sebagai Berikut
1. Setiap pemilih yang datang ke TPS masuk harus mendapat no
urut
2. No Urut terakhir menunjukkan jumlah pemilih yang datang
3. Ada 3 calon pemimpin yang akan dipilih
Contoh 4. Pemilih masuk ke kotak TPS sesuai dengan no urut untuk
memilih calon
Kasus 1
5. Setelah semua pemilih memilih ditunjukkan dengan no antrian
telah kembali semua maka proses penghitungan dimulai
6. Hasil perhitungan suara akan ditampilkan berurutan dari
terkecil hingga terbesar
Untuk Kasus diatas struktur yang harus dibuat
1. Membuat system antrian untuk pengambilan no urut
2. Ada counter yang menunjukkan jumlah antrian yang diambil

Solusi 3. Ada counter yang menunjukkan bahwa semua pemilih sudah


memilih dengan counternya nilai sama dengan counter antrian
4. Dapat menampilkan secara berurutan yang mendapat
perolehan suara terbesar hingga terkecil.
Contoh kasus 2
Dalam suatu Gudang metode pengambilan barang adalah dengan barang yang
terakhir masuk maka yang pertama diambil maka yang pertama masuk akan
diambil paling akhir
Solusi
Untuk kasus diatas menggunakan struktur Stack dimana yang terakhir masuk maka
Contoh yang pertama diambil

Kasus Contoh kasus 3


Dalam suatu pertandingan orlahraga setiap pemain bermain sebanyak 5 kali
pertandingan, nilai yang didapat dari setiap pemain nilai terbesar dan terkecilnya
dihapus. Penentuan pemain dengan menjumlah 3 nilai yang tersisa dan pemenang
Solusi adalah diambil 3 pemain yang terbesar nilainya
Solusi Struktur
Data hasil pertandingan setiap pemain perlu disimpan menggunakan struktur list
Cari nilai terbesar dan terkecil daris etiap pemain dan buang nilai tersebut
Jumlahkan Nilainya
Tampilkan secara berurut dari terbesar dan terkecil dan ambil 3 pemain terbesar.
Type data sederhana
a. Type data sederhana tunggal, misalnya Integer, real, boolean dan
karakter
b. Type data sederhana majemuk, misalnya String

STRUKTUR DATA, meliputi


Klasifikasi a. STRUKTUR DATA sederhana, misalnya array dan record
Data b. STRUKTUR DATA majemuk, yang terdiri dari
Linier : Stack, Queue, serta List dan Multilist
Non Linier : Pohon Biner dan Graph
 Python adalah bahasa pemrograman yang kuat dan
mudah dipelajari. Ini memiliki struktur data tingkat
tinggi yang efisien dan pendekatan yang sederhana
namun efektif untuk pemrograman berorientasi
objek. Sintaksis elegan dan pengetikan dinamis
Tools : Python, bersama dengan sifatnya yang intrepreter,
Python menjadikannya bahasa yang ideal untuk
pembuatan skrip dan pengembangan aplikasi yang
Programming cepat di banyak area di sebagian besar platform.
 Python Itu dibuat oleh Guido van Rossum selama
1985-1990. Seperti Perl, kode sumber Python juga
tersedia di bawah GNU General Public License
(GPL). (terjemahan bebas dari tutorialpoint.com)
 GNU General Public License adalah GNU General
Public License (disingkat GNU GPL, atau cukup GPL;
dalam bahasa Indonesia diterjemahkan menjadi lisensi
publik umum) merupakan suatu lisensi perangkat
lunak bebas yang aslinya ditulis oleh Richard Stallman
untuk proyek GNU.
 Lisensi GPL memberikan penerima salinan perangkat
Python II lunak hak dari perangkat lunak bebas dan
menggunakan copyleft untuk memastikan kebebasan
yang sama diterapkan pada versi berikutnya dari karya
tersebut.(sumber Wikipedia)
 Copyleft merupakan metoda umum untuk membuat
sebuah program menjadi perangkat lunak bebas, serta
menjamin kebebasannya untuk semua modifikasi ...
 Anda telah memiliki pemahaman dasar tentang
Prerequisite terminologi Pemrograman Komputer. Pemahaman
Python dasar tentang salah satu bahasa pemrograman adalah
nilai tambah.
Python adalah bahasa scripting tingkat tinggi, intrepeter, interaktif
dan berorientasi objek.
Python dirancang agar mudah dibaca. Ia sering menggunakan kata
kunci bahasa Inggris di mana bahasa lain menggunakan tanda baca,
dan memiliki konstruksi sintaksis yang lebih sedikit daripada bahasa
lain.
Python Intrepreter - Python diproses pada saat runtime oleh
Intrepreter. Anda tidak perlu mengkompilasi program Anda sebelum
menjalankannya. Ini mirip dengan PERL dan PHP.
Mengenal
Python Interaktif - Anda bisa duduk tenang di prompt Python dan
Python berinteraksi dengan penerjemah secara langsung untuk menulis
program Anda.
Python Berorientasi Objek - Python mendukung gaya atau teknik
pemrograman Berorientasi Objek yang merangkum kode di dalam
objek.
Python adalah Bahasa Pemula - Python adalah bahasa yang bagus
untuk pemrogram tingkat pemula dan mendukung pengembangan
berbagai aplikasi mulai dari pemrosesan teks sederhana hingga
perambah WWW hingga permainan.
 Mudah dipelajari - Python memiliki beberapa kata kunci, struktur
sederhana, dan sintaks yang jelas. Ini memungkinkan siswa untuk
memahami bahasa dengan cepat
 Mudah dibaca - kode Python lebih jelas dan terlihat oleh mata.
 Perpustakaan standar yang luas - sebagian besar perpustakaan Python
sangat portabel dan lintas platform yang kompatibel pada UNIX,
Windows, dan Macintosh.
Fitur di Python  Portable - Python dapat berjalan di berbagai platform perangkat keras
dan memiliki antarmuka yang sama di semua platform.
 Basis data - Python menyediakan antarmuka ke semua basis data
komersial utama.
 Pemrograman GUI - Python mendukung aplikasi GUI yang dapat dibuat
dan dipindahkan ke banyak pemanggilan sistem, pustaka dan sistem
windows, seperti Windows MFC, Macintosh, dan sistem X Window Unix.
Intrepeter Interaktif
Anda dapat memulai Python dari Unix, DOS, atau sistem lain yang memberi
Anda juru bahasa command-line atau jendela shell.
Masukkan python pada baris perintah.
Mulai koding segera di interpreter interaktif.

Menjalankan
Python
>>> 5*6 #perkalian
30
>>> 7*8+5*2 #perkalian dan penjumlahan
66
>>> 8/4+4 #Pembagian

Python 6.0
>>> 2**2 #pangkat/Power
sebagai 4
kalkulator >>> 2**3
8
>>> panjang=5
>>> lebar=6
>>> panjang*lebar
30
>>> panjang=5
>>> lebar=6
>>> panjang*lebar
30
Mendefinisikan >>> panjang+_ #panjang ditambahkan dengan hasil _
variabel di 35
Python >>> lebar=22/3
>>> panjang*lebar
36.666666666666664
>>> round(_,2) # dibulatkan 2 digit
36.67
>>> a,b=0,3
>>> a
0
>>> b
3
>>> a,b+a
Mendefinisikan (0, 3)
Variabel di Python >>> a=4
>>> a,b+a
(4, 7)
Lebih detail ke
https://docs.python.org/3.7/tutorial/introduction.html
>>> 'halo'
'halo'
>>> 'dua'+ ' Halo'
String di 'dua Halo'
>>> 'dua' + 5
Python Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not
"int") to str
>>> mylist='01234567' >>> mylist='01234567’
>>> mylist='01234567' >>> mylist[:1] >>> mylist[-1:]
>>> mylist[1] '0'
'7’
>>> mylist[:3]
'1' '012'
>>> mylist[:8]
'01234567’
>>> mylist[0] >>> mylist[:6]
'012345' >>> mylist[-1:8]
'0' '7’
>>> mylist[-1:]
>>> mylist[3] '7' >>> mylist[0:]
String di '3' >>> mylist[-2:] '01234567’

Python >>> mylist[3:]


'67'
>>> mylist[-3:]
>>> mylist[6:]
'67’
'34567' '567'
>>> mylist[:3]
>>> mylist[0:] >>> mylist[:-1]
'012’
'0123456'
'01234567' >>> mylist[:-2]
>>> mylist[0:3]
'012'
>>> mylist[:0] '012345'
>>> mylist[:-3] >>> mylist[1:3]
'' '12'
'01234'
>>> kataku='0123456789' >>> kataku='0123456789'
>>> kataku[1] >>> kataku[-8:3]
'1' '2‘
>>> kataku[0] >>> kataku[3:-8]
'0' ''
>>> kataku[-1] >>> kataku[:-8]
'9' '01'
String Di >>> kataku[-7]
'3'
>>> kataku[:3]
'012'
Python >>> kataku[-2:] >>> kataku[-3:]
'89‘ '789'
>>> kataku[-2:-1] >>> kataku[-8:]
'8' '23456789'
>>> kataku[-7:1] >>> kataku[:3]
'' '012'
>>> kataku[-7:3] >>> kataku[3:]
'' '3456789'
 >>> kataku='0123456789'
 >>> kataku[-8:0]
 ''
String Di  >>> kataku[0:3]
Python  '012'
 >>> kataku[-8:-1]
 '2345678'
IDE adalah suatu editor yang telah dilengkapi fitur fitur yang
Integrated mendukung untuk mengetikkan instruksi Bahasa Program. IDE
yang digunakan untuk Python dapat menggunakan
Development
Environment  Pycharm (yang digunakan)
 Spyder
(IDE) Python
Tempat mengetikkan
Instruksi

Mengenal IDE Informasi File Program


Py Charm yang pernah dibuat

Lokasi hasil Compiling dan


informasi bila ada
kesalahan dalam program
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:59:51) [MSC v.1914
64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print(Hello World)
File "<stdin>", line 1
Programing print(Hello World) Contoh Terjadi Error karena
kurang ‘ ‘
Python ^
SyntaxError: invalid syntax

>>> print('Hello World')


Hello World Setelah Diperbaiki
>>>
Pengidentifikasi Python adalah nama yang digunakan untuk
mengidentifikasi variabel, fungsi, kelas, modul atau objek lainnya.
Identifier dimulai dengan huruf A ke Z atau a ke z atau garis bawah (_)
diikuti dengan nol atau lebih huruf, garis bawah dan angka (0 hingga 9).
Contoh a,sampel,Sampel, Sampel_data, data9

Contoh Identifikasi Salah sampel Data,8data


Pengenal/Peng
Python tidak mengizinkan karakter tanda baca seperti @, $, dan% dalam
identifikasi pengidentifikasi. Python adalah bahasa pemrograman case-sensitive

Dalam Python Penjelasan :


 Variabel : adalah tempat penyimpanan Data yang bisa berubah
 Fungsi : adalah Sub Program
 Kelas : Pengelompokkan Variabel dan Method dalam suatu Objek Class
 Modul : Sub Program/program lain yang terpisah filenya dengan
program utama
 Case Sensitive : adalah membedakan Huruf besar dan huruf kecil
Daftar berikut menunjukkan kata kunci Python. Ini adalah kata yang
dilindungi system dan Anda tidak dapat menggunakannya sebagai
konstanta atau variabel atau nama pengenal lainnya. Semua kata
kunci Python hanya berisi huruf kecil.

Kata Kunci/
Reserved Word
 Python tidak memberikan tanda kurung untuk menunjukkan blok
kode untuk definisi kelas dan fungsi atau kontrol aliran. Blok kode
dilambangkan dengan indentasi baris, yang ditegakkan dengan
kaku.
Aturan  Jumlah spasi dalam indentasi adalah variabel, tetapi semua
PenulisanProgr pernyataan dalam blok harus indentasi dengan jumlah yang sama.
Contoh
an : >>> a=4
>>> if a>3:
Lines and ... print('benar') #Indention
Indentation ... else :
... print('salah') #indention
...
Benar (keluaran)
>>>
import sys

try:
# open file stream
file = open(file_name, "w")
except IOError:
print "There was an error writing to", file_name

Indentation sys.exit()
print "Enter '", file_finish,

(Contoh lain) print "' When finished"


while file_text != file_finish:
file_text = raw_input("Enter text: ")
if file_text == file_finish:
# close the file
file.close
break
file.write(file_text)
file.write("\n")
file.close()
Pernyataan dalam Python biasanya diakhiri dengan baris baru. Namun,
Python mengizinkan penggunaan karakter kelanjutan garis (\) untuk
menunjukkan bahwa garis harus dilanjutkan.
Contoh
>>> a=5+\
... 7+\
... 8
Multi Line >>> print (a)
20
Statemen >>>
Pernyataan yang terkandung dalam kurung [], {}, atau () tidak perlu
menggunakan karakter kelanjutan garis
>>> a=[5,4,
... 3,2]
>>> print(a)
[5, 4, 3, 2]
>>>
Python menerima tanda kutip tunggal ('), dobel (") dan rangkap tiga (' '' atau" "") untuk
menunjukkan string literal, selama jenis kutipan yang sama dimulai dan diakhiri string.
Kutipan rangkap tiga digunakan untuk merentangkan string melintasi beberapa baris
Contoh
>>> word='word'
>>> kalimat=" ini adalah kalimat"
>>> Paragraph=""" ini adalah sebuah
... paragraph panjang"""
Quotation In >>> print(word)
word
Python >>> print(kalimat)
ini adalah kalimat
>>> print(Paragraph)
ini adalah sebuah
paragraph panjang
>>>
Tanda hash (#) yang tidak ada di dalam string literal memulai
komentar. Semua karakter setelah # dan hingga akhir garis fisik
Comment di adalah bagian dari komentar dan interpreter Python
mengabaikannya.
Python >>> print ('Hello Python') #ini comment
Hello Python
 Baris berikut dari program ini menampilkan prompt, pernyataan
yang mengatakan "Tekan tombol enter untuk keluar", dan
menunggu pengguna untuk mengambil tindakan –
 >>> input('\n\nTekan Sembarang tombol')

Waiting for
the User  Tekan Sembarang tombol
 ''
 >>>
 \n\n adalah untuk memberi 2 line kosong
Tanda titik koma (;) memungkinkan banyak pernyataan pada baris
tunggal mengingat tidak ada pernyataan yang memulai blok kode
Multiple baru. Berikut ini cuplikan sampel menggunakan titik koma –

Statements >>> print(a);print(word);print(kalimat)


[5, 4, 3, 2]
on a Single
word
Line ini adalah kalimat
>>>
(var a,word,kalimat : telah didefinisikan sebelumnya)
Buat Program dengan Python dengan kasus Berikut :
1. Program Menghitung Luas Lingkaran (luaslingk=Phi*r*r)
2. Menukar 2 buah variabel contoh a =5 ; b=6  a=6 ; b=5
Tugas 1 3. Program menghitung selisih waktu dalam satuan jam ,menit,
(dikumpulkan detik tanpa menggunakan if
Contoh waktu 1 = 10:00:00 waktu 2: 11:12:20
di pertemuan
selisih = 1:11:20
berikutnya) 3. Program konversi satuan detik ke Jam,Menit dan Detik
Contoh
3750 detik = 1 jam ; 2 menit ; 30 detik
[1] Sumber Artikel: PENGERTIAN STRUKTUR DATA | Amalkan Ilmu
Berbagi Untuk Semua
http://blog-arul.blogspot.com/2012/01/pengertian-struktur-data.ht
Referensi ml#ixzz5e7S0SJtj

- Wikipedia
Fungsi Random digunakan untuk membangkitkan bilangan acak
Fungsi Random di python antara lain
 Fungsi choice(seq)
 Fungsi randrange([start],[stop],[step])
Fungsi  Fungsi random()

Random  Fungsi seed([x])


 Fungsi shuffle([list])
 Fungsi uniform(x,y)
 Fungsi ini mengembalikan sebuah item random dari sebuah list
random dari sebuah list, tuple, maupun string. Parameter seq
merupakan sebuah list,tuple, maupun string.
Contoh
import random
print('choice([2,1,4,6,4]):',random.choice([2,1,4,6,4])) #contoh list
number
Fungsi print('choice(Belajar Python assyik) : ',random.choice('Belajar
Python assyik')) # contoh list string
choice(seq) Qo='State'
S='Qo'
F='Q5'
Epsilon=[1,2,3]
print('Choice Tupel : ',random.choice([Qo,S,F,Epsilon]) ) # contoh
Tuple
Run ke 1
choice([2,1,4,6,4]): 4
choice(Belajar Python assyik) : n
Choice Tupel : [1, 2, 3]

Run ke 2
choice([2,1,4,6,4]): 4
Keluaran choice(Belajar Python assyik) : a
Choice Tupel : Q5
Fungsi Choice
Run ke 3
choice([2,1,4,6,4]): 1
choice(Belajar Python assyik) : i
Choice Tupel : Qo
 Fungsi ini mengembalikan bilangan random berdasarkan
jangkauan atau range(start,stop,step). Start adalah awal range,
stop adalah akhir range, dan step adalah keluaran bilangan
random

Contoh
import random
Fungsi print(random.randrange(0,10,1))
print(random.randrange(5,15,3))
randrange
Output
0
11

2
8
 Fungsi ini akan mengembalikan bilangan float random x, dimana
0<x<1. Fungsi random() tidak memiliki parameter masukkan
Contoh
print('random() :',random.random())
print('random() :',random.random())
print('random() :',random.random())
Fungsi
Hasil
random() random() : 0.793279180493279
random() : 0.9777996760606558
random() : 0.32604548061585703

random() : 0.39838998779623125
random() : 0.20510185519287483
random() : 0.23954777964331908
 random.seed adalah pemberi umpan atau sering disebut benih pertama
dari suatu bialnagn acak. Jika random.seed dijalankan maka bilangan
pengacak tidak akan pernha berubah
 Contoh
random.seed(0.5)
print('random() :',random.random())
print('random() :',random.random())
print('random() :',random.random())

Fungsi seed Bilangan dibangkitkan


random() : 0.2794930785867423
random() : 0.7912631961880867
random() : 0.5698671052566573

Dijalankan kedua kali


random() : 0.2794930785867423
random() : 0.7912631961880867
random() : 0.5698671052566573
 Fungsi shuffle adalah mengacak urutan dari suatu list
myList=[3,2,7,5,8,9]
print('Kondisi Awal List',myList)
random.shuffle(myList)
print('isi List : ',myList)
random.shuffle(myList)
print('isi List : ',myList)

Fungsi Shuffle Hasil


Kondisi Awal List [3, 2, 7, 5, 8, 9]
isi List : [5, 3, 2, 7, 8, 9]
isi List : [7, 9, 2, 8, 5, 3]

Kondisi Awal List [3, 2, 7, 5, 8, 9]


isi List : [8, 9, 3, 5, 2, 7]
isi List : [7, 2, 3, 8, 5, 9]
Fungsi uniform(x,y) digunakan untuk menampilkan bilangan float
random dengan batas bilangan awal x dan batas akhir y
print("Random Float :",random.uniform(3,5))
print("Random Float :",random.uniform(6,10))
Fungsi
Random Float : 3.1633619448022934
Uniform Random Float : 9.030033268733744

Random Float : 4.397867376889238


Random Float : 6.410509994301025
 Membuat simulasi dadu yang dilempar sebanyak n kali dan
menampilkan frekuensi kemunculan muka dadu yang menghadap
ke atas setelah dilempar n kali
Solusi 1 tanpa menggunakan list
1. dadu terdiri 6 (enam) muka
2. Kemunculan muka tidak dapat diprediksi, muncul secara acak
Studi Kasus 1 3. Karena menghitung kemunculan muka dadu maka perlu
variabel sebagai penyimpan kemunculan muka dadu
4. Menampilkan frekuensi kemunculan muka dadu setelah
dilempar n kali
import random
satu=0
dua=0
tiga=0 #Variabel untuk menyimpan Muka Dadu
empat=0
lima=0
enam=0
for i in range (0,1000): # Perintah For dy Python
a=random.randrange(6)+1 # Pembangkit Bilangan acak dengan
nilai akhir 5
print(a)
if a==1:
satu+=1
Solusi Python if a==2:
dua+=1

simulasi muka if a == 3:
tiga+=1
if a == 4: Menyimpan banyak kemunculan Nilai dadu

dadu tanpa list empat+=1


if a == 5:
lima +=1
if a == 6:
enam +=1

print("Dadu 1 : ",satu)
print("Dadu 2 : ",dua)
print("Dadu 3 : ",tiga)
print("Dadu 4 : ",empat) Menampilkan
print("Dadu 5 : ",lima)
print("Dadu 6 : ",enam)
print("Total : ",satu+dua+tiga+empat+lima+enam)
Dadu 1 : 163
Dadu 2 : 177
Dadu 3 : 180
Dadu 4 : 140
Dadu 5 : 167
Dadu 6 : 173
Keluaran Total : 1000
Run ke 2
simulasi Dadu Dadu 1 : 169
Dadu 2 : 170
Dadu 3 : 168
Dadu 4 : 168
Dadu 5 : 160
Dadu 6 : 165
Total : 1000
import random #Dadu 0 - 6
hasil=0 Hasil
myList=[0,0,0,0,0,0,0] Dadu - 1 : 968
Dadu - 2 : 1039
for i in range (0,6000): Dadu - 3 : 962
b=random.randrange(6)+1 Dadu - 4 : 963
myList[b]+=1 #Penyimpanan hasil Dadu - 5 : 1038
Solusi 2, lempar Dadu - 6 : 1030
simulasi dadu for i in range (1,7):
print('Dadu -',i, ' : ',myList[i])
Total : 6000

dengan list hasil+=myList[i]


Menampilkan
print("Total : ",hasil) Hasil
lemparan
Buat Program yang menghitung kemunculan Frekuensi data
Contoh diketahui data =[4,3,2,2,5,3,6,5]
Maka Frekuensi :
Studi Kasus 2 Nilai 2 = 2
Menghitung Nilai 3 = 2
Frekuensi data Nilai 4 = 1
Nilai 5 = 2
Nilai 6 = 1
Struktur
1. Definisikan data yang akan dihitung simpan di list
Score Siswa yaitu [4, 3,
2. Buat tempat penyimpanan kemunculan data di list yang 4, 2, 2, 3, 5, 6, 7, 7, 8, 9,
lain 9, 2, 3, 4, 1, 5, 1, 4, 3, 7,
3. Tampilkan isi data di langkah 2 0, 0, 4]
Frekuensi score - 0 : 2
Frekuensi score - 1 : 2
#Program ini hanya berlaku untuk data score Frekuensi score - 2 : 3
Solusi 1 >= 0
Frekuensi score - 3 : 4
score=[4,3,4,2,2,3,5,6,7,7,8,9,9,2,3,4,1,5,1,4,3,7,0,0,4] Frekuensi score - 4 : 5
frekuensi=[0,0,0,0,0, 0,0,0,0,0] Frekuensi score - 5 : 2
Frekuensi score - 6 : 1
print('Score Siswa yaitu ',score) Frekuensi score - 7 : 3
Menghitung
for i in range (len(score)): Frekuensi Data Frekuensi score - 8 : 1
frekuensi[score[i]]+=1 dan menyimpan Frekuensi score - 9 : 2

for i in range (len(frekuensi)):


print('Frekuensi score -',i,': ',frekuensi[i])
#Program ini hanya berlaku untuk data score >= 0
score=[4,3,4,2,2,3,5,6,7,7,8,9,9,2,3,4,1,5,1,4,3,7,0,0,3,4,1,2,20]
if min(score)>=0:
frekuensi=[0 for i in range(min(score),max(score)+1)] List Dinamis
print('Score Siswa yaitu ',score)
for i in range (min(score),len(score)):
Keyword min(untuk
frekuensi[score[i]]+=1
mendapat nilai terkecil dan
max mendapat nilai terbesar
for i in range (min(score),len(frekuensi)):
Solusi II if frekuensi[i]>0:
print('Frekuensi score -',i,': ',frekuensi[i])
Filtering frekuensi bila==0
tidak ditampilkan
else:
print(min(score))
print('Perhitungan tidak bisa dilakukan karena Data terkecil
harus >= 0')
Score Siswa yaitu [4, 3, 4, 2, 2, 3, 5, 6, 7, 7, 8, 9, 9, 2, 3, 4, 1, 5, 1, 4, 3,
7, 0, 0, 3, 4, 1, 2, 20]
Frekuensi score - 0 : 2
Frekuensi score - 1 : 3
Frekuensi score - 2 : 4
Hasil Dari Frekuensi score - 3 : 5
Frekuensi score - 4 : 5
Solusi II Frekuensi score - 5 : 2
Frekuensi score - 6 : 1
Frekuensi score - 7 : 3
Frekuensi score - 8 : 1
Frekuensi score - 9 : 2
Frekuensi score - 20 : 1
 Untuk menampilkan nilai terbesar dan terkecil dengan struktur
seperti Berikut
1. Ambil salah satu nilai asumsikan sebagai nilai terbesar atau
terkecil dan simpan ke variabel max atau min
Algoritma Max  nilaiPertama\
2. Bandingkan nilai max dengan nilai yang lain bila nilai max lebih kecil
Menampilkan (jika mencari nilai terbesar ganti isi max dengan nilai yang lain tersebut

Nilai terbesar 3. Lakukan terus langkah no 2 (dua) hingga seluruh nilai telah
dibandingkan
atau terkecil 4.
5.
Tampilkan isi max
Untuk menampilkan nilai terkecil maka di langkah 1 ganti variabel
dengan nama min dan di langkah 2 diganti bila nilai min lebih kecil dari
nilai yang lain
myData=[0,2,1,3,4,5,6,7,9,-3,-2,10,13]
print("Dketahui data sebagai berikut ",myData)
pilih=int(input('Mencari Nilai terbesar atau kecil (b=1/k=0)'))
if pilih==1:
Implementasi max=myData[0] Asumsikan list ke-0 sebagai nilai terbesar
di Python Mencari for i in range(len(myData)):
if max<myData[i]:
nilai Lakukan Perbandingan isi max
Mencari nilai terbesar max=myData[i] dengan data berikutnya bila isi
max lebih kecil ganti isi max
terbesar print('nilai Terbesar adalah ',max)
elif pilih==0:
/terkecil min=myData[0] Asumsikan list ke-0 sebagai nilai terkecil
Mencari for i in range(len(myData)):
nilai if min>myData[i]: Lakukan Perbandingan isi min
terkecil dengan data berikutnya bila isi
min=myData[i]
min lebih kecil ganti isi min
print('nilai Terkecil adalah ',min)
 Sub Program adalah bagian dari program yang ditempatkan di
luar program utama (main Program)
 Di Python untuk mendefinisikan Sub Program menggunakan kata
kunci def
 Sub Program terdiri dari 2 jenis yaitu procedure dan function
Menggunakan  Procedure adalah sub program dengan tidak ada nilai yang
dikembalikan
Sub Program  Function adalah Sub Program dengan ada nilai yang dikembalikan
dari sub program tersebut.
 Dalam membuat subprogram baik procedure ataupun function dapat
menggunakan parameter atau tanpa parameter
 Parameter adalah variabel yang didefinisikan setelah nama subprogram
yang berfungsi sebagai jalan untuk menginputkan suatu nilai ke sub
program.
Sub program di python sebagai procedure menggunakan format
Berikut
def namaSubProgram():
statement
def namaSubProgram(parameter1,parameter2,parameter ke n):
Sub program statement
Sub program di python sebagai function menggunakan format Berikut
di Python def namaSubProgram():
statement
return nilai
def namaSubProgram(parameter1,parameter2,parameter ke n):
statement
return nilai
def menuUtama():
print(‘ Menu Utama\n\n’)
print(‘1. Menghitung Luas Segitiga’)
print(‘2. Menghitung Luas Bujursangkar’)
print(‘3. exit’)
Contoh Sub
Program tanpa menuUtama()

Parameter Output program diatas


Menu Utama
(procedure)
1. Menghitung Luas Segitiga
2. Menghitung Luas Bujursangkar
3. Exit
def luasSegitiga(alas,tinggi):
luas=alas*tinggi*0.5
return luas
Contoh Sub alas=float(input('Alas : '))
Program tinggi = float(input('Tinggi : '))
print('Luas segitiga :',luasSegitiga(alas,tinggi))
dengan Ouput
parameter Alas : 10
(function) Tinggi : 4
Luas Segitiga : 20
def selectionSort(listData):

print('Data diurutkan terkecil ke terbesar')


for i in range(0,len(listData)-1):
for j in range(i,len(listData)):
if listData[i]>listData[j]:
listData=tukar(listData,i,j)
Contoh Sub print(listData)

Program def tukar(listData,data1,data2):

listData[data1],listData[data2]=listData[data2],listData[data1]
dengan return listData

parameter listData=[2,3,1,2,5,3,2,-3,-10,20,7]
random.shuffle(listData)
print('Data awal ', listData)
hasil=selectionSort(listData)
print('setelah diurutkan dengan selection',hasil)
def luasSegitiga(alas,tinggi):
luas=alas*tinggi*0.5
return luas

def luasLingkaran(r):
luas=22/7*r*r
return luas Sub program sebagai
def luasPersegiPanjang(panjang,lebar):
function berparameter
luas=panjang*lebar

Contoh return luas

def mainMenu():
Implementasi menuAwal=('1. Luas Segitiga','2. Luas Lingkaran','3. Persegi Panjang')
print(menuAwal[0])
Sub program sebagai
procedure non
Sub Program print(menuAwal[1])
print(menuAwal[2]) parameter
mainMenu() Memanggil procedure
pilih=int(input('Pilih Menu : '))
if pilih==1:
alas=float(input('Alas : ')) Memanggil function
tinggi = float(input('Tinggi : '))
print('Luas segitiga :',luasSegitiga(alas,tinggi))
elif pilih==2:
r=float(input('jari jari lingkarang :'))
print('Luas Lingkarang',luasLingkaran(r))
else:
panjang = float(input('Panjang : '))
lebar = float(input('Lebar : '))
print('Luas segitiga :', luasPersegiPanjang(panjang, lebar))
 Modul adalah sub program yang diletakkan di file yang lain
 Untuk memanggil modul tersebut digunakan kata kunci import
Contoh
Berikut modul
def tesModul():
print("Ini Modulku pertama di python")
Modul File diatas disimpan dengan nama ModulCoba.py
Kemudian buat program untuk memanggil modul diatas

import ModulCoba
ModulCoba.tesModul()

Maka Output akan keluar


Ini Modulku pertama di python
 Rekursi adalah program yang memanggil diri sendiri
 dideskripsikan dalam gambar
 animasi seperti Berikut :

Rekursi
def NamaSubProgramRekursi(parameter)
batasPengulanganPemanggilanRekursi
NamaSubProgramRekursi(parameter-n)
atau
NamaSubProgramRekursi(parameter+n)
atau
Proses lain untuk mengubah nilai parameter agar menuju batas pemanggilan
Struktur rekursi

Rekursi NamaSubProgramRekursi(nilaiParameter)
Penjelasan
1. Program utama memanggil sub Program Rekursi dengan mengirimkan nilai dari
parameter
2. Di dalam sub program terdiri dari
1. Batas pengulangan pemanggilan rekursi dengan mendeteksi perubahan parameter apakah
sudah mencapai nilai tertentu
2. Pemanggilan sub program itu sendiri dengan mengirimkan parameter yang telah diubah
nilainya
Contoh Kasus Rekursi
Contoh Menghitung Faktorial
Faktorial secara matematis ditulis
n! =n*(n-1)!
Contoh
6!=6*(6-1)! Memanggil faktorial itu sendiri
6!=6*5*(5-1)!
Mendisain 6!=6*5*4*(4-1)!
6!=6*5*4*3*(3-1)!
Rekursi 6!=6*5*4*3*2*(2-1)!
6!=6*5*4*3*2*1*(1-1)!
6!=6*5*4*3*2*1*(0)!
0! adalah 1 maka ini sebagai batas pemanggilan rekursi
def rekursiFaktorial(nilai):
if nilai<1: Batas pemanggilan
return 1 rekursi
else:
return nilai*rekursiFaktorial(nilai-1) pemanggilan rekursi

faktorial=5
Faktorial di print('Program rekursi Faktorial')
print(faktorial,'! : ',rekursiFaktorial(faktorial) )
Python
Output

Program rekursi Faktorial


5 ! : 120
def rekursiFaktorial(nilai):
if nilai<1:
return 1
else:
return nilai*rekursiFaktorial(nilai-1)
Misal
Cara kerja nilai = 1
rekursi def rekursiFaktorial(1):
faktorial If nilai <1: dikembalikan nilai =1
return 1
Nilai = 2
def rekursiFaktorial(2):
Nilai = 2
def rekursiFaktorial(nilai):
If nilai <1: Nilai= 1
return 1 Nilai = 2
else:
Mekanisme return nilai*rekursiFaktorial(nilai-1)

rekursi 1
*
factorial 2
dengan nilai =2 =2
Nilai = 3
def rekursiFaktorial(nilai):
Nilai = 3 If nilai <=1: return 1 Nilai = 2
else: Nilai = 1
return nilai*rekursiFaktorial(nilai-1)
Mekanisme Nilai = 2

rekursi factorial 3* 2 * 1 = 6
dengan nilai = 3
Bilangan ganjil adalah 1,3,5,….
Bila n adalah bilangan akhir ganjil dimaksud maka nilai yang diulang adalah
n-2
N=9 dengan n-2 terus diulang 9,7,5,3,1
Nilai Batas akhir adalah 1 sebagai pembatas rekursif maka rekursif
dibentuk

def deretGanjil(n):
Rekursi Jumlah if n<2:
bilangan ganjil print(n,',',end='')
return n
else:
print(n,',',end='')
deretGanjil(n-2)

bil=int(input("Bilangan akhir "))


deretGanjil(bil)
Dengan Algoritma Rekursif buat program dengan python untuk
kasus

Tugas Rekursif 1. Penjumlahan deret bilangan Ganjil


2. Penjumlahan Deret bilangan Genap
3. Program deret pangkat 2
Deret Fibonnaci dirumuskan
Maka
Nilai minimal 0 maka batas dimulai dari 2 untuk
Misal deret hingga jumlah deret=5

Fibonaci di Batas pemanggilan rekursi


 
Python
Jika jumlah deret 5 dimulai dari 0

=0
#Untuk menghitung Nilai fibonaci
def fibonaci(panjangDeret):
if panjangDeret<2:
return panjangDeret
else:
return fibonaci(panjangDeret-1)+fibonaci(panjangDeret-2)

#Program utama yang menampilkan deret fibonaci


Fibonaci di NF=10
print('Program Fibonaci')
Python for i in range(0,NF):
print(fibonaci(i),',‘,end=‘’)

Output

0 ,1 ,1 ,2 ,3 ,5 ,8 ,13 ,21 ,34 ,


Menara Hanoi
dengan rekursi
Bila diasumsikan bahwa A adalah sumber, B adalah Target dan C adalah bantu
maka berdasar gambar diatas
1. Posisi awal asumsikan jumlah Menara n
2. Pindahkan Menara sumber di A n-1 ke Menara bantu di C (hingga tersisa 1)
secara rekursif
3. Pindahkan Menara paling bawah (ke-1 ) di A ke Menara target di B
4. Pindahkan Menara di bantu di C n-1 ke Menara target dengan menjadikan
Menara A sebagai Menara bantu
def menaraHanoi(n,source,target,bantu): Fungsi dengan parameter
if n<2: N jumlah bilah , Source =
print(‘Bilah ke ',n,’dari’,source,target) Menara sumber, Target =
Menara Target dan Bantu =
return n
Menara bantu
else:
menaraHanoi(n-1,source,bantu,target) Batas Pemanggilan rekursi

Implementasi print(‘Bilah ke ',n,’dari’,source,target)


menaraHanoi(n-1,bantu,target,source)
Rekursi pemindahan Source
ke bantu (target menjadi
Fungsi Menara Menara bantu)
Rekursi pemindahan Bantu
Hanoi # Program Utama ke target (source menjadi
source='Sumber(A)' Menara bantu)
target='Target(B)'
bantu='Bantu(C)' Program Utama dengan
menaraHanoi(2,source,target,bantu) jumlah bilah 2
Jumlah bilah 1
Bilah ke 1 dari Sumber(A) Target(B)
Jumlah Bilah 2
1. bilah ke 1 Sumber(A) Bantu(C)
2. bilah ke 2 Sumber(A) Target(B)
3. bilah ke 1 Bantu(C) Target(B)
Output Jumlah Bilah 3
Menara Hanoi 4. Bilah ke 1 dari Sumber(A) Target(B)
5. Bilah ke 2 dari Sumber(A) Bantu(C)
6. Bilah ke 1 dari Target(B) Bantu(C)
7. Bilah ke 3 dari Sumber(A) Target(B)
8. Bilah ke 1 dari Bantu(C) Sumber(A)
9. Bilah ke 2 dari Bantu(C) Target(B)
10. Bilah ke 1 dari Sumber(A) Target(B)
 Bahasa adalah kumpulan symbol yang memiliki makna. Symbol
dalam bahas seperti huruf , angka dan tanda baca. Sedangkan
makna adalah memiliki arti atau maksud atau penjelasan atas
sesuatu. Simbol symbol tersebut bila dikumpulkan akan memiliki
arti contoh kumpulan huruf
Memvalidasi  Mobil terdiri dari kumpulan symbol huruf yang memiliki makna
Bahasa apakah suatu benda yang dapat bergerak
 Rumah yang memiliki makna sebagai tempat yang dapat
sesuai dengan ditinggali
sintaks yang  Print yang memiliki makna mencetak.
ditetapkan Dari contoh diatas symbol tersebut akan memiliki makna bila
dikumpulkan sesuai aturan tertentu dan kemungkinan tidak
memiliki makna bila digabung secara tandom/acak.
Salah satu model matematis untuk memvalidasi kumpulan symbol
yaitu diagram state , mesin finite State Automata
Mesin Mengecek Parity
0 0

GENAP 1 GANJIL

Contoh 1

implementasi Gambar diatas adalah model matematis yang merupakan representasi


mesin state pengecek parity.
diagram state  Lingkaran tunggal disebut sebagai state awal diberi nama state Genap
Finite State  Lingkaran ganda disebut sebagai state akhir disebut sebagai state akhir

Automata  Di state Genap sebagai input dimana anda bisa memasukkan suatu nilai
binary dan mesin akan mengecek apakah data yang dimasukkan benar
atau tidak dengan menguji apakah data tersebut berhenti di state Ganjil
(lingkaran ganda)
- Secara formal matematis model mesin diatas dinotasikan ddalam 4 tupel
yaitu [S,F,T,A,ListTransisi]
Penjelasan Notasi dalam tupel
S adalah state awal
F adalah state akhir
T himpunan transisi

Model Formal A himpunan State


List Transisi adalah tabel transisi
Mesin
Untuk mesin parity S adalah state Genap dan F adalah state ganjil
pengecek himpunan transisi adalah (0,1) dan himpunan state (Genap,Ganjil)
parity Sedangkan tabel transisi sesuai gambar Berikut

Ganjil Genap
0 Ganjil Genap
1 Genap Ganjil
Proses Contoh di parity bahasa 101
pengujian  
Bahasa secara
matematis
Mesin parity diberi input bahasa ‘01’ maka proses pengecekan
sebagai Berikut
1. Proses selalu dimulai dari state awal
2. Input Bahasa diparsing sehingga menjadi 1 digit
3. Setiap digit diinputkan ke state hingga seluruh input telah
Mesin Parity dimasukkan
4. Setelah seluruh digit diinputkan dicek state akhir yang
diperoleh
5. Bahasa diterima (valid) jika berhenti di state akhir, bila bukan di
state akhir maka Bahasa ditolak (tidak valid)
S='GENAP'
F='GANJIL'
T=['0','1']
A=['GENAP','GANJIL']
tabelEpsilon=[['GENAP','0','GENAP'],
Implementasi Tupel ['GENAP','1','GANJIL'],
mengggunakan ['GANJIL','0','GANJIL'],
['GANJIL','1','GENAP']]
List
banyakData=len(tabelEpsilon)
tupel=[S,F,T,A,tabelEpsilon]
banyakData=len(tabelEpsilon)
tupel=[S,F,T,A,tabelEpsilon]
print(‘Initial State ',S)
print(‘Final State ',F)
print('Transation ',tabelEpsilon)
bahasa='001011111'
print(‘Language ',bahasa)
Memasukkan panjang=len(bahasa)-1
state=epsilon(tupel,bahasa,panjang)
Bahasa ke print('State akhir :',state)
if state==F:
state print('due to final state = ',F,'language ',bahasa,'
Accepted')
else:
print('due to final state <>',F,'language ',bahasa, '
Rejected')
Parsing dengan rekursi
def epsilon(tupel,bahasa,panjang):
if panjang<1:
print('eps(', tupel[0], ',',
bahasa[panjang], ')=',end='')
tupel[0] = searchTupel(tupel[0],
bahasa[panjang])
Sub Program print(tupel[0])
return tupel[0]
Rekursi else:
epsilon(tupel,bahasa,panjang-1)
parsing print('eps(', tupel[0], ',',
bahasa[panjang], ')=', end='')
q
tupel[0]=searchTupel(tupel[0],bahasa[panjang])
print(tupel[0])
return tupel[0]
def searchTupel(state,bahasa):
Sub Program for i in range(len(tupel[2]*len(tupel[3]))):
for j in range (len(tupel[4][0])):
Menentukan if tupel[4][i][0]==state and
state tupel[4][i][1]==bahasa:
return tupel[4][i][2]
berikutnya
Initial State GENAP
Final State GANJIL
Transation [['GENAP', '0', 'GENAP'], ['GENAP', '1', 'GANJIL'], ['GANJIL', '0', 'GANJIL'], ['GANJIL', '1',
'GENAP']]
Language 00101111101
eps( GENAP , 0 )=GENAP
eps( GENAP , 0 )=GENAP

Output Rekursi eps( GENAP , 1 )=GANJIL


eps( GANJIL , 0 )=GANJIL
Finite State eps( GANJIL , 1 )=GENAP

Automata eps( GENAP , 1 )=GANJIL


eps( GANJIL , 1 )=GENAP
eps( GENAP , 1 )=GANJIL
eps( GANJIL , 1 )=GENAP
eps( GENAP , 0 )=GENAP
eps( GENAP , 1 )=GANJIL
State akhir : GANJIL
due to final state = GANJIL language 00101111101 Accepted
Pengurutan data adalah proses untuk mengurutkan data dari
terkecil ke terbesar dan sebaliknya. Terkecil ke terbesar disebut
Ascending dan sebaliknya Descending
Mengurutkan Dalam mengurutkan ada beberapa metode yang bisa dilakukan
Data 1. Selection
2. Buble Sort
3. Merge Sort
Ascending Selection Sort Ascending Buble Sort Ascending Merge Sort

0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

2 3 -1 6 3 2 -1 3 3 6 2 3 -1 6 3

2 3 -1 6 3

Mengurutkan -1 3 2 6 3 -1 2 3 3 6

Selection Sort 2 3 -1 3 6

Buble Sort -1 2 3 6 3 -1 2 3 3 6

Merge Sort -1 2 3 3 6
-1 2 3 6 3 -1 2 3 3 6

-1 2 3 3 6 -1 2 3 3 6
Ascending Quick Sort Sort
0 1 2 3 4
2 3 -1 6 3

2 3 -1 6 3

2 3 -1 6 3

Quick Sort -1 2 3 6 3

-1 2 3 6 3

-1 2 3 3 6
Quick Sort
def bubleSort(listData,sortAsDesc):
if sortAsDesc==1: # 1 untuk kode urut menaik
print('Data diurutkan terkecil ke terbesar')
for i in range(0,len(listData)-1):
for j in range(0,len(listData)-1):
if listData[j]>listData[j+1]:
Implementasi listData=tukar(listData,j,j+1)
print(listData)
Sorting Buble elif sortAsDesc==0: # 0 untuk kode urut menurun
Sort print('Data diurutkan terbesar ke terkecil')
for i in range(0,len(listData)-1):
for j in range(0,len(listData)-1):
if listData[j]<listData[j+1]:
listData=tukar(listData,j,j+1)
print(listData)
return listData
def selectionSort(listData,sortAsDesc):
if sortAsDesc==1:
print('Data diurutkan terkecil ke terbesar')
for i in range(0,len(listData)-1):
for j in range(i,len(listData)):
if listData[i]>listData[j]:
listData=tukar(listData,i,j)
Implementasi print(listData)
elif sortAsDesc==0:
Selection Sort print('Data diurutkan terbesar ke terkecil')
for i in range(0,len(listData)-1):
for j in range(i,len(listData)):
if listData[i]<listData[j]:
listData=tukar(listData,i,j)
print(listData)
return listData
def tukar(listData,data1,data2):

listData[data1],listData[data2]=listData[data2],listData[data1]
return listData

listData=[2,3,1,2,5,3,2,-3,-10,20,7]
Sub Program pilih=-1
Tukar Data while (pilih<2):
random.shuffle(listData)
Dan Program print('Data awal ', listData)
jenisSort=int(input('Selection Sort / Buble Sort (1/0)'))
Utama pilih=int(input('Ascending / Descending /Keluar (1/0/2)'))
if pilih <2 :
if jenisSort==1:
hasil=selectionSort(listData,pilih)
print('setelah diurutkan dengan selection',hasil)
elif jenisSort==0:
hasil = bubleSort(listData, pilih)
print('setelah diurutkan dengan BubleSort', hasil)
def mergeSort(panjang,myData):
if panjang<2:
print('Pengurutan Merge Sort A : ', myData)
return panjang
else:
mergeSort((panjang // 2), myData)
print('Pengurutan Merge Sort B : ',myData)
Implementasi selectionSort(panjang,myData)
print('Pengurutan Merge Sort C : ', myData)
Merge Sort def selectionSort(panjang,listData):
dengan rekursi for i in range(0, panjang - 1):
for j in range(0, panjang - 1):
if listData[j] > listData[j + 1]:
listData = tukar(listData, j, j + 1)
return listData

def tukar(myData,a,b):
myData[a],myData[b]=myData[b],myData[a]
return myData
Program Utama
myListData=[3,2,4,1,5,6,8,4,2,9,12,-1,3,2,-4,-60]
print('Data awal : ',myListData)
panjang=len(myListData)
mergeSort(panjang,myListData)
print('Data diurutkan : ',myListData)

Output
Main Program Data awal : [3, 2, 4, 1, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort A : [3, 2, 4, 1, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Merge Sort Pengurutan Merge Sort B : [3, 2, 4, 1, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort C : [2, 3, 4, 1, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort B : [2, 3, 4, 1, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort C : [1, 2, 3, 4, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort B : [1, 2, 3, 4, 5, 6, 8, 4, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort C : [1, 2, 3, 4, 4, 5, 6, 8, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort B : [1, 2, 3, 4, 4, 5, 6, 8, 2, 9, 12, -1, 3, 2, -4, -60]
Pengurutan Merge Sort C : [-60, -4, -1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 8, 9, 12]
Data diurutkan : [-60, -4, -1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 6, 8, 9, 12]
1. Buat program untuk Menghitung Rata rata Nilai (gunakan List)
2. Buat Program untuk mencari Nilai tengah
Tugas II 3. Buat Program untuk menghitung frekuensi kemunculan data
(Perorang) kemudian menampilkan Nilai terbesar dan terkecil dari data di list
tersebut (jumlah data di list minimal 10) kemudian urutkan data
tersebut dengan merge sort
 1. Buat Program untuk menentukan pemenang dari suatu perlombaan dengan
jumlah peserta 20 orang. Jumlah pertandingan terdiri dari 20 pertandingan
Tampilkan hanya pemenang ke 1 hingga ke 6. untuk urutan 1 hingga 3 disebut
sebagai juara 1 , juara 2 dan juara 3, sedangkan pemenang 4 hingga 6 disebut
sebagai pemenang harapan 1, hingga harapan 3 Pemenang diperoleh dari
penghitungan frekuensi kemunculan nomor peserta yang paling sering muncul di list
dari ke 20 pertandingan yang diselenggarakan. Data pemenang dari 15
pertandingan sebagai Berikut :
Tugas II Pemenang=[2,3,2,4,1,3,6,7,10,11,12,14,14,2,2,4,8,6,19,10]
(kelompok) Keluaran Aplikasi
(kerjakan berkelompok 3 orang 1. Tampilkan kemunculan Frekuensi yang pernah memperoleh kemenangan dari
dan dikumpulkan ke Google seluruh pertandingan
Class paling lambat 1 hari 2. Tampilkan kemunculan frekuensi tesebut dengan memilih 3 paling atas disebut
sebelum UTS) juara
3. Sedangkan 3 berikutnya disebut sebagai juara harapan
4. Sisanya tidak ditampilkan
5. Gunakan comment di dalam program untuk menuliskan peserta di setiap
kelompok
Pesan : Dalam membuat program gunakan struktur program yang paling efisien dan
gunakan sub program atau modul
Pencarian adalah mencari data di sebuah
lokasi misal list.
 Algoritma pencarian paling sederhana
Search dengan cara linier search yaitu
/Pencarian membandingkan antara data yang dicari
dengan data yang ada di dilist
 Algoritma berikutnya yang sanggat
efisien yaitu binary search
Binary Search
example=[9,3,1,2,5,4,2,8,7,12,11,2,17,11,2,18,20,35,60,
22,100]
search=5
print('Data Awal ',example)
Implementasi print('Urutkan data')
exampleSort=sortData(example) Menggurutkan Data
Binary Search print(exampleSort)
long=len(exampleSort)
dan Linear loopB=0
loopL=0
Search print('panjang Index : ',0,' - ',long-1)
Angka yang dicari
(main print('Angka yang dicari : ',search)
print('Proses Pencarian Binary Search ') Pencarian dengan binary
Program) binary_search(search,exampleSort,0,long,loopB)rekursi
print('\n\nProses Pencarian linear Search di lokasi
berikut')
print(example) Pencarian dengan linear
linearSearch(search,example,long,loopL) rekursi
def binary_search(search,value,low,high,loopB):
if high<low :
print('Data tidak ditemukan hingga posisi index hi - low
--> ',high,'-',low,'Jumlah Loop',loopB)
return loopB
else:
mid = (high + low) // 2
if value[mid]==search:
print(value)
Sub Program print('data ditemukan di index ',mid,' data ',
value[mid],'Jumlah Loop ',loopB)
Binary Search return loopB
else:
if search<=value[mid]:
print('c3',value[mid])
binary_search(search,value,low,mid-1,loopB+1)
elif search>value[mid]:
print('c5',value[mid])
binary_search(search,value,mid+1,high,loopB+1)
print('c6', value[mid])
def linearSearch(search,value,long,loopL):
if long<0:
print('pencarian Liner hingga index ',long,'Data
tidak ditemukan jumlah loop ',loopL)
return loopL
else:
Sub Proggram if search==value[long-1]:
print ('data ',value[long-1], 'ditemukan di
Linear Search index ',long-1,'Jumlah Loop ',loopL)
return loopL
else:
print(value[long-1])
linearSearch(search,value,long-1,loopL+1)
def sortData(value):
for j in range(0, len(value)):
for i in range(0, len(value) - 1):
Sub Program if value[i] > value[i + 1]:
temp = value[i]
Binary Search value[i] = value[i + 1]
value[i + 1] = temp
return value
Data Awal [9, 3, 1, 2, 5, 4, 2, 8, 7, 12, 11, 2, 17, 11, 2, 18, 20, 35, 60, 22, 100]
Urutkan data
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
panjang Index : 0 - 20
Output Search Angka yang dicari : 5
Binary Search Proses Pencarian Binary Search
(data c3 9
ditemukan) c5 2
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
data ditemukan di index 7 data 5 Jumlah Loop 2
c6 2
Proses Pencarian linear Search di lokasi berikut
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
100
60
35
Output Search 22
20
Linear Search 18

(data 17
12
ditemukan) 11
11
9
8
7
data 5 ditemukan di index 7 Jumlah Loop 13
Data Awal [9, 3, 1, 2, 5, 4, 2, 8, 7, 12, 11, 2, 17, 11, 2, 18, 20, 35, 60, 22, 100]
Urutkan data
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
panjang Index : 0 - 20
Angka yang dicari : 50
Output Binary Proses Pencarian Binary Search
c5 9
Search (data c5 20

tidak c3 60
c5 22
ditemukan c5 35
Data tidak ditemukan hingga posisi index hi - low --> 18 - 19 Jumlah Loop 5
c6 35
c6 22
c6 20
c6 9
Proses Pencarian linear Search di lokasi berikut
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
100
60
35
22
20
18

Output Linear 17
12
Search (data 11
11
tidak 9
8
ditemukan) 7
5
4
3
2
2
2
2
1
pencarian Liner hingga index -1 Data tidak ditemukan jumlahh Loop 22
Data Awal [9, 3, 1, 2, 5, 4, 2, 8, 7, 12, 11, 2, 17, 11, 2, 18, 20, 35, 60, 22, 100]
Urutkan data
[1, 2, 2, 2, 2, 3, 4, 5, 7, 8, 9, 11, 11, 12, 17, 18, 20, 22, 35, 60, 100]
panjang Index : 0 - 20
Angka yang dicari : 50
Proses Pencarian
Output Binary c5 9
search Data c5 20
c3 60
tidak c5 22
c5 35
ditemukan Data tidak ditemukan hingga posisi index hi - low --> 18 - 19
c6 35
c6 22
c4 60
c6 20
c6 9
Linked List adalah cara penyimpanan data dengan mengaitkan antara 1
data dengan data berikutnya, digambarkan sebagai Berikut

Kelebihan penyimpanan data dengan Linked List adalah


Linked List 1. Mengefisienkan memory yang digunakan, karena dialokasikan saat
dibutuhkan dan dibuang saat sudah tidak dibutuhkan
(Pengertian) 2. Data dapat dengan mudah disisipkan di lokasi mana saja, karena
tidak bergantung Kepada indeks dari lokasi data
Kerugian
3. Waktu pencarian lebih lama karena harus selalu memulai dari awal
atau tergantung lokasi pointer terkini
4. Lokasi memori yang tidak terpakai dan tidak dihapus maka akan
menjadi garbage collection (tempat sampah) yang menghabiskan
memori komputer
Operasi adalah aktivitas terhadap data di linked list yang terdiri dari
1. Menambah data (insert)
1. Di Head (Depan)
2. Tail (belakang)
3. Di Tengah (insert)
2. Menghapus data (delete)
3. Mengedit/mengubah data
Operasi dalam Bentuk Struktur linked list dari semua operasi diatas untuk model
Linked List 4. Queue (antrian)
5. Stack (tumpukkan)
6. Tree (Pohon dan Heap)
linked-list-add-a-new-node-at-the-end.png

Linked List
(Menambah data ke tail)
Linked List
Menambah
Data ke head
Point A

Menambah
Data di tengah
(insert/sisip)
(Code)
Node Terdiri dari Data dan Next
Data Next
Dalam Membuat Node menggunakan class
Membuat class adalah Menggabungkan Method dan Variabel
Node Link List Variabel Privat Method diimplementasikan dengan menggunakan fungsi def
class Product:
di Python dan __vendor_message = "Ini adalah rahasia"
name = ""
Memahami price = ""
size = ""
Class unit = ""
Fungsi terpanggil otomatis
saat class dipanggil,
def __init__(self, name): digunakan untuk
Setiap method harus memiliki
print ("Ini adalah constructor") menentukan kondisi awal
parameter self yang artinya
self.name = name
method tersebut dimiliki dan self.unit = "ml"
terdaftar ke class tersebut self.size = 250
untuk membedakan dari
method atau fungsi yang ada di def get_vendor_message(self): Fungsi Memanggil var private
luar class print (self.__vendor_message)

def set_price(self, price): Fungsi Mengeset variabel price


self.price = price
p = Product("Ultora Milek") Mengeset Kondisi awal konstruktor
p.set_price(5500)
Mengeset price
print (p.name,' dengan ukuran ',p.size,' harganya
Rp.',p.price)
# print p.__vendor_message

p.get_vendor_message() Memanggil var private


Memahami
p1 = Product("Indomilek")
Class p1.set_price(5000)

print (p1.name,' dengan ukuran ',p1.size,'harganya Rp.


',p1.price)

print (p == p)
print (p1 == p1) Menguji variabel berbeda dari class
print (p == p1) yang sama
Ini adalah constructor
Ultora Milek dengan ukuran 250 harganya Rp. 5500
Ini adalah rahasia
Keluaran Ini adalah constructor
Program Indomilek dengan ukuran 250 harganya Rp. 5000
True
True
False
Data Next

class Node:
def __init__(self,val): Mendefinisikan Node
self.val = val
Membuat self.next = None # Pointer diisi Nilai NULL

Node Linked def traverse(self):


node = self # start from the head node Membaca Node
List dengan while node != None:
class print(node.val,'->',end='') # Membaca Node
node = node.next # baca ke node berikutnya jika belum NULL
print(' NULL')
node1 = Node(12)
node2 = Node(99) Mengisi Node
node3 = Node(37)

node1.next = node2 # 12->99


Linked List node2.next = node3 # 99->37
Menyambungkan
Node

# Menelusuri Node : 12->99->37


node1.traverse()
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
self.nextval = None
Mendefinisikan  
class SLinkedList:
Linked List dengan
def __init__(self):
membentuk
self.headval = None
penunjuk class  
Head def listprint(self):
printval = self.headval
while printval is not None:
print (printval.dataval)
printval = printval.nextval
list = SLinkedList() # mendefinisikan Variabel tersambung ke head
list.headval = Node("Mon") #diisi node head
e2 = Node("Tue")
e3 = Node("Wed")

# sambungkan link kepala ke berikutnya


Mendefinisikan list.headval.nextval = e2
Linked List dengan
# sambungkan e2 ke e3
membentul class e2.nextval = e3
Head
list.listprint()

Mon
Tue
Wed
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
self.nextval = None

class SLinkedList:
def __init__(self):

Menambah self.headval = None


# Print the linked list
Data di head def listprint(self):
printval = self.headval
while printval is not None:
print (printval.dataval,’->’,end=‘’)
printval = printval.nextval
print(‘None’)
def AtBegining(self,newdata):
NewNode = Node(newdata)
# Update New Node Sub Program Node Baru
NewNode.nextval = self.headval
self.headval = NewNode
list = SLinkedList()
list.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node("Wed")

list.headval.nextval = e2
e2.nextval = e3
Menambah list.AtBegining("Sun")
list.listprint()
Data di Head list.AtBegining("Sat")
list.listprint()

Keluaran Program
Sebelum ditambah di head
Mon ->Tue ->Wed ->None
ditambah Sun
Sun ->Mon ->Tue ->Wed ->None
ditambah Sat
Sat ->Sun ->Mon ->Tue ->Wed ->None
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
Menambah self.nextval = None
Data di tail class SLinkedList:
def __init__(self):
self.headval = None
#Function to add newnode
def AtEnd(self, newdata):
NewNode = Node(newdata)
if self.headval is None:
self.headval = NewNode
return
laste = self.headval
Menambah while(laste.nextval):
Data di Tail laste = laste.nextval
laste.nextval=NewNode

# Print the linked list


def listprint(self):
printval = self.headval
while printval is not None:
print (printval.datival,’->’,end=‘’)
printval = printval.nextval
print(‘None’)
list = SLinkedList()
list.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node("Wed")

list.headval.nextval = e2 Sebelum ditambah di ekor


Menambah e2.nextval = e3 Mon ->Tue ->Wed ->None
Data di Tail List.listprint() Ditambah Ekor Thu
Mon ->Tue ->Wed ->Thu ->None
(ekor) list.AtEnd("Thu") Ditambah Ekor Fri , Sat
list.listprint() Mon ->Tue ->Wed ->Thu ->Fri ->Sat ->None
list.AtEnd(“Fri")
list.AtEnd(“Sat")
list.listprint()
class Node:
Sub Program def __init__(self, dataval=None):
Menyisipkan self.dataval = dataval
Node di lokasi self.nextval = None
tertentu
(deskripsi di class SLinkedList:
slide ) def __init__(self):
self.headval = None
# Function to add node
def Inbetween(self,middle_node,newdata):
Sub Program if middle_node is None:
Menyisipkan print("The mentioned node is absent")
return
Node di lokasi
NewNode = Node(newdata)
tertentu NewNode.nextval = middle_node.nextval
(statis) middle_node.nextval = NewNode
def InbetweenLocation(self,begin_node,location_node,newdata):
if begin_node is None:
print("The mentioned node is absent")
return
Sub Program
while begin_node.dataval is not location_node:
Menyisipkan begin_node = begin_node.nextval #pencarianLokasi
Node di
NewNode = Node(newdata)
lokasi NewNode.nextval = begin_node.nextval
tertentu begin_node.nextval=NewNode

(dinamis)
Cetak Link List # Print the linked list
Menyisipkan def listprint(self):
printval = self.headval
Node di lokasi while printval is not None:
tertentu print (printval.dataval,'->',end='')
printval = printval.nextval
print('None')
list = SLinkedList()
list.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node("Thu")

list.headval.nextval = e2
Main Program e2.nextval = e3
print('Kondisi Awal')
Menyisipkan list.listprint()
Node di lokasi print('Ditambahkan Fri setelah "Tue"')
tertentu list.Inbetween(list.headval.nextval,"Fri")
list.listprint()
print('Ditambahkan Sat setelah "Tue"')
list.Inbetween(list.headval.nextval,"Sat")
list.listprint()
print('Ditambahkan "Hari" setelah "Mon"')
Main Program list.InbetweenLocation(list.headval,"Mon","Hari")
Menyisipkan list.listprint()
Node di lokasi print('Ditambahkan "Halo" setelah "Sat"')
list.InbetweenLocation(list.headval,"Sat","Halo")
tertentu list.listprint()
Kondisi Awal
Mon ->Tue ->Thu ->None
Ditambahkan Fri setelah "Tue"
Mon ->Tue ->Fri ->Thu ->None
Ditambahkan Sat setelah "Tue"
Output Mon ->Tue ->Sat ->Fri ->Thu ->None
Program Ditambahkan "Hari" setelah "Mon"
Mon ->Hari ->Tue ->Sat ->Fri ->Thu ->None
Ditambahkan "Halo" setelah "Sat"
Mon ->Hari ->Tue ->Sat ->Halo ->Fri ->Thu ->None
Buat Program yang dapat mensimulasikan Proses antrian dalam
berobat dengan mekanisme
1. Setiap Peserta mengambil nomor antrian terlebih dahulu untuk
mengambil nomor antrian pendaftaran berikutnya (asumsikan
ada 30 pasien
2. Antrian yang telah didapat digunakan untuk mengantri kembali
dokter yang akan dipilih dengan dokter yang tersedia yaitu
Tugas dokter umum,dokter gigi, dan dokter kulit dengan cara
menukar nomor antrian lama dengan nomor antrian sesuai
Kelompok dokter (Asumsikan masing masing dokter sesuai urutan diatas
mendapat nomor antrian 15,10,5)
3. Pasien yang telah mengambil nomor antrian akan dipanggil
sesuai urutan (asumsikan ada nomor yang tidak terpanggil 2 ~ 3
hingga pasien setiap dokternya)
4. Cetak tampilan simulasi antrian 1 hingga 3
Buat program studi kasus tumpukkan
1. Buat suatu tumpukkan dimana anda menyimpan data buku
secara stack (tumpukkan), dimana setiap tumpukkan ada kategori
buku (asumsi buat 3 kategori)
Tugas 2. Saat hendak mencari buku dilakukan pencarian terlebih dahulu
terhadap di setiap tumpukkan yang ada
Kelompok 3. Bila ditemukan di salah satu kategori tumpukkan maka ambil
simulasi Stack buku tersebut dengan anda harus mengeluarkan data tumpukkan
buku yang ada diatasnya hingga buku tersebut dapat diambil
4. Setelah buku tersebut diambuil maka kembali kembali
tumpukkan buku yang tadi sudah dikeluarkan
op 10 Programming Language In Demand Across The Globe
#ProgrammingLanguage #Programmer #Developer #
SoftwareDeveloper