Algoritma dan Pemrograman 11

Pada pertemuan yang ke 11 kami melakukan material review kami membahas tentang struct file processing sorting dan searching.

kita membahas acara menggunakan struck dan cara mengoper ngopernya ke fungsi fungsi,
struct Baju{
char kodeBaju[7];
char namaBaju[100];
int qty;
int hargaSatuan;
};
int initProgram(Baju baju[]){
FILE *file = fopen(“data.txt”, “r”);
int index = 0;
char tempHarga[100], tempQty[100];
while (!feof(file)){
fscanf(file, “%[^;];%[^;];%[^;];%[^\n]\n”, baju[index].kodeBaju, baju[index].namaBaju, tempQty, tempHarga);
baju[index].qty = atoi(tempQty);
baju[index].hargaSatuan = atoi(tempHarga);
index++;
}
fclose(file);
return index;
}

void generateTable(Baju baju[], int totalItem){
printf(“%-4s%-12s%-20s%-5s%-15s\n”, “No.”, “Code”, “Name”, “Qty”, “Price”);
printf(“============================================================\n”);
for (int i = 0; i < totalItem; i++)
printf(“%-4d%-12s%-20s%-5d%-15d\n”, (i + 1), baju[i].kodeBaju, baju[i].namaBaju, baju[i].qty, baju[i].hargaSatuan);
if(totalItem == 0) printf(“There is no data!”);
printf(“\n\n\n”);
}

char *generateCode(Baju baju[], int totalItem){
static char kode[10], kodeReturn[10];
int count;
strcpy(kode, baju[totalItem – 1].kodeBaju);
kode[0] = ‘0’; kode[1] = ‘0’;
count = atoi(kode) + 1;
if (count < 10) strcpy(kodeReturn, “JF00”);
else if (count < 100) strcpy(kodeReturn, “JF0”);
else if (count < 1000) strcpy(kodeReturn, “JF”);
itoa(count, kode, 10);
strcat(kodeReturn, kode);
return kodeReturn;
}

int checkCode(char key[], Baju baju[], int totalItem){
int left = 0, right = totalItem – 1, mid;
do{
mid = (left + right) / 2;
if (strcmp(baju[mid].kodeBaju, key) == 0) return mid;
else if (strcmp(baju[mid].kodeBaju, key) == -1) left = mid + 1;
else right = mid – 1;
} while (left<=right);
return -1;
}

void sort(Baju baju[], int left, int right, char by[], char option[]){
int i = left, j = right;
int pivotInt;
char pivotChar[100];
Baju tempBaju;
if (strcmp(by, “code”) == 0)strcpy(pivotChar, baju[(left + right) / 2].kodeBaju);
else if (strcmp(by, “name”) == 0)strcpy(pivotChar, baju[(left + right) / 2].namaBaju);
else if (strcmp(by, “qty”) == 0)pivotInt = baju[(left + right) / 2].qty;
else if (strcmp(by, “price”) == 0)pivotInt = baju[(left + right) / 2].hargaSatuan;
while (i <= j){
if (strcmp(by, “code”) == 0) { while (strcmp(baju[i].kodeBaju, pivotChar) < 0) i++; while (strcmp(baju[j].kodeBaju, pivotChar) > 0) j–; }
else if (strcmp(by, “name”) == 0) { while (strcmp(baju[i].namaBaju, pivotChar) < 0) i++; while (strcmp(baju[j].namaBaju, pivotChar) > 0) j–; }
else if (strcmp(by, “qty”) == 0) { while (baju[i].qty < pivotInt) i++; while (baju[j].qty > pivotInt) j–; }
else if (strcmp(by, “price”) == 0) { while (baju[i].hargaSatuan < pivotInt) i++; while (baju[j].hargaSatuan > pivotInt) j–; }
if (i <= j){
tempBaju = baju[i];
baju[i] = baju[j];
baju[j] = tempBaju;
i++; j–;
}
}
if (left < j) sort(baju, left, j, by, option);
if (i < right) sort(baju, i, right, by, option);
}

void saveData(Baju baju[], int totalItem){
FILE *file = fopen(“data.txt”, “w”);
for (int i = 0; i < totalItem; i++)
fprintf(file, “%s;%s;%d;%d\n”, baju[i].kodeBaju, baju[i].namaBaju, baju[i].qty, baju[i].hargaSatuan);
fclose(file);
}

int main(){
Baju baju[100];
int totalItem = initProgram(baju);
int choose, avail;
char tempCode[10], tempBy[10], tempSrt[10];
do{
system(“cls”);
printf(“\t\t\tJackForce Store\n\n”);
generateTable(baju, totalItem);
printf(“Menu\n”);
printf(“====\n”);
printf(“1. Add Item\n”);
printf(“2. Remove Item\n”);
printf(“3. Sort Item\n”);
printf(“4. Exit\n”);
printf(“\nInput menu : “);
scanf(“%d”, &choose); fflush(stdin);
switch (choose){
case 1:
sort(baju, 0, (totalItem-1), “code”, “asc”);
do{
printf(“Input your item’s name [3..20] : “);
gets(baju[totalItem].namaBaju);
} while (strlen(baju[totalItem].namaBaju)<3 || strlen(baju[totalItem].namaBaju)>20);
do{
printf(“Input your item’s qty [1..1000] : “);
scanf(“%d”, &baju[totalItem].qty); fflush(stdin);
} while (baju[totalItem].qty<1 || baju[totalItem].qty>1000);
do{
printf(“Input your item’s price [10000..1000000] : “);
scanf(“%d”, &baju[totalItem].hargaSatuan); fflush(stdin);
} while (baju[totalItem].hargaSatuan<10000 || baju[totalItem].hargaSatuan>1000000);
strcpy(baju[totalItem].kodeBaju, generateCode(baju, totalItem));
totalItem++;
printf(“Success insert the new item!”);
getchar();
break;
case 2:
avail = -99;
do{
printf(“Input your item’s code [input ‘cancel’ to cancel] : “);
scanf(“%s”, tempCode); fflush(stdin);
if (strcmp(tempCode, “cancel”) != 0 && (avail = checkCode(tempCode, baju, totalItem)) == -1){
printf(“Can’t find the item that you mean.. Please check again the code.\n”);
getchar();
}
} while (strcmp(tempCode, “cancel”) != 0 && avail == -1);
if (avail != -99){
for (int i = avail + 1; i >= 1 && i < totalItem; i++){
baju[i-1] = baju[i];
}
totalItem -= 1;
printf(“Success delete an item!”);
getchar();
}
break;
case 3:
do{
printf(“Sort by [code/name/qty/price] : “);
scanf(“%s”, tempBy);
} while (strcmp(tempBy, “code”) != 0 && strcmp(tempBy, “name”) != 0 && strcmp(tempBy, “qty”) != 0
&& strcmp(tempBy, “price”) != 0);
sort(baju, 0, (totalItem-1), tempBy, “asc”);
printf(“The data has been sorted!”);
getchar();
break;
}
} while (choose != 4);
saveData(baju, totalItem);
printf(“Exit from the System.. Press Any Key to Continue…”);
getchar();
return 0;
}

Algoritma dan Pemrograman 10

Pada pertemuan yang ke 10 kami belajar cara untuk sorting dan search.

ada beberapa tipe tipe sorting

1.Bubble sort

seperti buble dari bawah di chek apakah lebih kecil kali lebih kecil dy pindah pindah pindah kedepan kalo kita mau ngurutinnya ascending,

  • Compare two neighboring values.
  • Compare and swap (if necessary)
  • Also known as exchange sort

saat ujian boleh di hafal kodenya:

void Bubble(int *DataArr, int n)

{

int i, j;

for(i=1; i<n; i++)

for(j=n-1; j>=i; j–)

if(DataArr[j-1] > DataArr[j])

Swap(&DataArr[j-1],&DataArr[j]);

}

2.Selection sort
cara ini juga cukup mudah dimana kita menggunakan variabel temp untuk menyimpan indeks dengan isi terkecil dan jika semua data sudah di chek maka indek yang ada di temp menjadi data terkecilnya dan prosenya d ulang lagi hingga habis.

3.Insertion sort
Setiap putaran tidak menentukan nilainya terkecil, namun iya akan menyisipkan index dengan isi yang terkecil  setiap kali menemukan indek yang lebih kecil. disini kita juga bisa menggunakan variabek temp tapi bebeda dengan selection sort karena temp di sini hanya untuk swamp aja.

4.Quick sort  sorting yang menggunakanmenggunakan teknik recursive. dan yang paling sulit di pahami, namun bisa di hafal juga kodenya. cocok untuk program dengan data yang banyak.

5.Merge sort  ini juga cukup cepat  dimana data di bagi  dua dua sampai habis dan kemudian di urutkan dan di gabung  dua dua. sampau tergabung semua lagi

Searching juga memiliki beberapa jenis :
-Linear search

menggunakan looping dan menyimpan data yag sesuai disuatu variabel temporary dan melanjutkan hingga data habis di looping dan menampilkan hasil yang ada di variabel temporary

-Binary search

-Interpolation search

Algoritma dan Pemrograman 8

Pada pertemuan ke 8 kami belajar tentang file processing

Ketika program C dijalankan ada 3 standard streams yang diaktifkan:
1. Standard Input Stream : Mengontrol stream input dari keyboard

2. Standard output Stream : Mengontrol stream output ke monitor

3. Standard error Stream : Mengontrol pesan error

– Definisi File
– File adalah kumpulan record (baris)
– Record adalah kumpu lan field (column)
– Field adalah blok byte
– Byte adalah kumpulan bit

FILE BINARY
menyimpan data numerik dalam format in line dengan format yang mikro-prosesor (contoh: Format sign-magnitude 2 ‘s complement).
Data yang hanya dapat dibuka oleh system (kata-kata atau hurufnya di .txt acak [cryptography])
Penulisan : FILE *fp;

Buffer Area
Buffer area adalah bagian dari memori yang digunakan sebagai ruang sementara sebelum data pindah ke sebuah file.

Contoh syntax :
FILE * fp;
(hati hati karena FILE menggunakan huruf besar)
(fp adalah pointer file awal dari buffer area)

Open File
Membuka File menggunakan fopen ():
FILE *fopen (const char *filename, const char *mode);
Contoh mode :
“r” membuka file untuk dibaca.
“w” membuat file untuk ditulis.
“A” membuka file untuk data append.
“r+” membuka file untuk membaca / menulis.
“w+” membuat file untuk membaca / menulis.
“a+” membuka file untuk membaca / tambahkan
“rb” membuka File (binary) untuk dibaca.
“wb” membuat file (binary) untuk menulis.
(Dalam penge-save-an Game sebaiknya menggunakan binary yaitu “rb” atau “wb” karena tidak dapat dibuka dengan notepad biasa)

Close File
int fclose (FILE *stream);
*harus ditutup agar bisa digunakan untuk aplikasi lainnya atau .txtnya akan digunakan terus menerus
fclose () didefinisikan di <stdio.h>
fclose () akan mengembalikan 0 jika berhasil, dan EOF jika error
EOF (End Of File) sama dengan -1 (EOF itu dibuat otomatis)
fclose () akan masuk ke buffer area dulu dan segera mengirimkan sisa data ke dalam file.

Input dan Output File

  • fgetc (INPUT)
    Syntax : int fgetc (FILE *stream);
    Membaca satu karakter(char) dari file.txt
    fgetc (stdin) ekuivalen dengan getchar ()
  • fputc (OUTPUT)
    Syntax : int fputc (int c, FILE * stream);
    Menulis/menaruh satu karakter(char) ke file.txt
    fputc (‘a’, stdout) sama dengan putchar (‘a’)
  • fgets (INPUT)
    Syntax : char *fgets( char *string, int n, FILE *stream );
    Membaca satu baris dari sebuah file yang berakhir dengan baris baru, atau maksimum n-1 jumlah karakter.
    Kembali string jika successful dan NULL jika error
  • fputs (OUTPUT)
    Syntax : int fputs( const char *string, FILE *stream );
    Menulis baris ke file
    Mengembalikan nilai non-negatif jika berhasi dan EOF jika error.
  • fscanf (INPUT)
    Syntax : int fscanf( FILE *stream, const char *format [, argument ]… );
    Membaca data dari file.txt dengan format scanf.
    mengembalikan jumlah field dan read jika successful, dan EOF jika error
  • fprintf (OUTPUT)
    Syntax : int fprintf( FILE *stream, const char *format [, argument ]…);
    Menulis data ke file.txt menggunakan format printf.
    Pengembalian byte written jika nilai successful dan negatif jika error.
  • fwrite
    Syntax : size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );
    Menulis ke file sebanyak n size
    Writing a block of data in the buffer area to the file
    Return number of byte data written, and error otherwise.
  • fread
    Syntax : size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
    Baca ukuran blok data dari file
    membaca dari file sebanyak n size
  • feof
    Syntax : int feof( FILE *stream );
    membaca terus menerus sampai file habis
    Mencari tahu apakah pointer telah mencapai end-of-file
    Kembali 0 jika tidak berakhir end-of-file

Algoritma dan Pemrograman 7

Pada pertemuan 7 kami diajarkan tentang function dan recursion

Function : Membuat sebuah program menjadi banyak modul-modul, function juga sering disebut modular programing.

Modul juga sering di sebut sebagai Sub-Program.

Best practice in module programming:
–High Fan-In, frequently used
–Low Fan-Out, more specific functionality/ small number of job
–Self-Contained, self resource sufficient

Syntax Function :

return-value-type function-name( parameter-list )
{
statements;
}

Identifier Scooping:
– Local
– Global
Recursive
adalah sebuah function yang yang di gunakan untuk memanggil function itu sendiri. Dan pada sesi kedua ada pembicara tamu dari PT. Dewa Web yang memberikan penjelasan tentang SSL dan Cryptography.

Algortima dan Pemrograman 6

Review Material

Sistem pemrograman sebenarnya cuma dibagi menjadi 3 step: Input, Process,Output

Input adalah apa yang di masukan oleh user ke komputer

lalu Process adalah tahap pemrosesan hasil Inputan user ke Komputer dan hasilnya adalah Output.

Selection : If, Else-If,Nested If, Switch Case

Looping : While,Do-While,For

 

Contoh coding segitiga pascal

#include <stdio.h>
int main()

{
int input;
int kolom,baris,segitiga[100][100];
scanf(“%d”,&input);fflush(stdin);
for (baris=0;baris<input;baris++)
{
for (kolom=0;kolom<=baris;kolom++)
{
if(kolom==0 || kolom==baris)
{
segitiga[baris][kolom]=1;
}
else if(baris>1 && kolom<baris)
{
segitiga[baris][kolom]=segitiga[baris-1][kolom]+segitiga[baris-1][kolom-1];
}
printf(“%d “,segitiga[baris][kolom]);
}
printf(“\n”);
}
return 0;
}

Algoritma dan Pemrograman 5

Hari kamis yang lalu saya mendapatkan  pelajaran tentang pointers dan array.

  • Pointer: variable yang menyimpan alamat dari variable lain syntaxnya adalah “*”
  • Pointer to Pointer : variable yang menyimpan alamat dari variable single pointer syntaxnya menggunakan “**”
  • Array: untuk menyimpan data berjumlah banyak dalam 1 tipe data (homogen), array memiliki nilai null di bagian akhir

    Acessing Arrays
    *(A+2) atau A[2]
    (A+2) menunjukan address/alamat + 2

    Assigning values
    A[6]=15;
    menunjukan di memori 6 menyimpan variable 15

    Pointer contant: value tidak dapat diganti
    Pointer variable: value dapat diganti

    2D Array
    – 2x looping, i dan j
    Syntax:
    type name_array[row][col];

    3D Array
    Syntax:
    type name_Array[row][col][depth];

    Array of Pointer
    Syntax:
    type *array_name[value_dim];

    Array of char
    Syntax:
    char array_name[value_dim];

Algoritma dan Pemrograman 4

Pada pertemuan ke 4 algortima dan pemrograman saya mempelajari tentang pengulangan(looping/repetition)

Ada 3 cara untuk looping yaitu :

  • For
  • While
  • Do – While
  • For : Perulangan yang dapat ditentukan nilai awal, batasan perulangan dan dapat menentukan interval dari perulangan.

Contoh :

   for( x = 1 ; x <= 10 ; x++ ) printf( “%d ”, x );

  • While : Akan melakukan pengulangan selama kondisi bernilai TRUE

Contoh :

while ( counter <= 5 )

{

printf( “%d ”, counter );

++counter;

}

  • Do-While : Sama seperti while namun do while akan menjalankan perintah minimal 1x.

do

{

printf(”%d\n”x);

}

while(x++ <=10);

 

  • Break untuk keluar looping, keluar scoop
  • Continue untuk skip

Algoritma dan Pemrograman 3

Selection

Pada pertemuan ke 3 saya diajarkan tentang selection. Ada 4 jenis selection yaitu

  1. If
  2. If-Else
  3. Nested-if

Switch-case

1. If

Fungsi “If” digunakan untuk menyeleksi peryataan tersebut benar atau salah.

2. If-Else

Fungsi “If-Else” terjadi apabila ada beberapa pilihan yang ada, dan di fungsi tersebut dicari fungsi yang lebih dahulu benar. ex . ada 4 pernyataan (A,B,C,D), apabila pernyataan A benar. fungsi tersebut berhenti dan menjalankan pernyataan A. Dan apabila pernyataan A salah, B salah, Dan C benar. Maka Fungsi tersebut dan akan menjalankan Pernyataan C, Begitu seterusnya.

3. Nested-If

Fungsi “Nested-If” terjadi apabila ada If di dalam If tersebut. jadi didalam kasus ini ada beberapa syarat yang harus dipenuhi agar pernyataan ini bisa berjalan. ex. ada 4 pernyataan (A*A.1,A.2*,B,C,D), apabila pernyataan A benar. fungsi tersebut menjalankan pernyataan A, namun memerika pernyataan A tersebut , karena di dalam pernyataan A ada ” A.1 Dan A.2″ .dan apabila A.1 Benar, maka akan menjalankan A.1 .begitu seterusnya.

4. Switch-case

Mirip seperti if.

Contoh :

printf(“Masukan pilihan Anda:\n”);
printf(“a. Program 1 \n”);
printf(“b. Program 2 \n”);
scanf(“%c”, &pilih);
switch (pilih)
{
case ‘a’:
printf(“Run program 1\n”);
break;
case ‘b’:{//pake {} karena > 1 statement
printf(“Run program 2\n”);
printf(“Please Wait\n”);
break;
}
default:
printf(“Inputan anda salah\n”);
break;

Algoritma dan Pemrograman 2

Pada hari kamis yang lalu saya diajarkan mengenai algoritma dan pemograman tentang Operator, Operand dan Arithmetic

Operator -> +, – , *, %, /

Unary -> butuh 1 Operand

Binary -> butuh 2 Operand

Tenary -> butuh 3 Operand

Operator:

Berdasarkan tipenya operator dapat dikelompokkan menjadi :

  • Assignment – > =
  • Logical -> &&, ||, !
  • Arithmatic -> +, -, *, /, %, ++, —
  • Relational -> ==, !=, <, >, <=, >=, ?:
  • Bitwise ->  Operasi Bit -> &, |, ^, ~, >>, <<
  • Pointer

Logical Operator

Operand dalan Logical Operator berperan untuk memberikan pernyataaan bahwa suatu nilai bernilai TRUE or FALSE

Contoh :

int x=5; int y=0;

x && y;                                               // FALSE

(x > y) && (y>=0);              // TRUE

Bitwise Operators

Dan tentang Bitwise Operator saya diberitahu cara cepat bilangan menghitung binary

contoh diberi angka 10

Cara menghintung binarynya dengan cara mencari bilangan pangkat 2 yang paing mendekati angka 10 yaitu 8 lalu 10 dikurangi dengan 8 sisanya adalah 2, lalu bilangan yang hasilnya 2 adalah 2 pangkat 1, dengan begitu sisanya adalah 0

bilangan binarynya _ _ _ _ anggap ( _ ) sebagai kolom kolom terakhir adalah 2^0 ke 2 dari kanan adalah 2^1 dst, jadi nilai binary dari angka 10 adalah 1010 jika dijumlah (2^3 + 0 + 2^1 + 0) = 10.

Algoritma dan Pemrograman

Pada hari kamis yang lalu saya diajarkan mengenai algoritma dan pemograman C++ oleh kak Feri Lauw.  Saya diajarkan mengenai OOP (Object Oriented Programming), yang terdiri dari:

 

  1. Inheritance
  2. Encapsulation
  3. Abstraction
  4. Interface

Algoritma terdiri dari 2 yaitu:

  1. Pseudo-code
  2. Flow chart

Penulisan algoritma dimulai dengan start kemudian isi lalu end.

Sebagai contohnya :

  • Start
  • print hello world
  • end

Pseudo-code terdiri dari:

  1. Input (Scan)
  2. Output (Print)
  3. Compute (+ – * / % dll)
  4. Storing value to an identifier (Store)
  5. Compare (
  6. Repetition (Loop) (Do-While, Repeat-Until)

Ada 3 struktur theorem

  1. Sequence
  2. Selection (if, else)
  3. Repetition (for)

Bahasa Pemrograman

Bahasa pemrograman terdiri dari tiga tingkatan

 

  1. Rendah / Low (Assembler)
  2. Sedang / Medium (C, Pascal, Fortran)
  3. Tinggi / High (Java, C++. C#)

Sebagian besar dari bahasa pemrograman tingkat tinggi merupakan OOP.

Keuntungan memakai bahasa C

  • Flexible
  • Portabel
  • Banyak orang yang tahu
  • Banyak library-nya