Wednesday, December 9, 2015

Input 1 Line String dengan Spasi

Berikut code untuk menginput 1 baris kalimat yang dipisah dengan spasi ke dalam suatu variabel.

#include<stdio.h>
int main ()
{   
    char string1[100];
   
    // Input
    scanf("%[^\n]s", string1);
   
    // Output
    printf("%s", string1);
}

Contoh input:
symbol 123456 abcde !@#$%^

Contoh output:
symbol 123456 abcde !@#$%^

Strcpy

Strcpy adalah salah satu perintah dalam library string.h untuk menyalin suatu string ke variabel lain dan menambah karakter '\0' ke akhir kalimat.

strcpy(string1, string2);
string1: variabel tujuan penyalinan
string2: string yang akan disalin

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{
    char string1[50], string2[50];
   
    // Input
    scanf("%[^\n]s", string2); getchar();
   
    // Output
    strcpy(string1, string2);
   
    printf("%s", string1);
}

Contoh input:
teknik informatika

Contoh output:
teknik informatika

Strncpy

Strncpy adalah salah satu perintah dalam library string.h untuk menyalin suatu string ke variabel lain. Bedanya dengan Strcpy adalah Strncpy menyalin string berdasarkan panjang tertentu dan tidak menambahkan karakter '\0' ke akhir kalimat.

strncpy(string1, string2, panjang);
string1: variabel tujuan penyalinan
string2: string yang akan disalin
panjang: panjang string2 yang akan disalin. Dihitung dari awal

Hati-hati!
Perintah strncpy tidak menambahkan karakter '\0' ke akhir kalimat. Akibatnya, string dalam variabel string1 akan terus berlanjut hingga karakter yang tidak dapat ditentukan sesuai nilai yang ada dalam urutan memori RAM.

Solusinya adalah menambah baris berikut setelah fungsi strncpy dipanggil.
string1[strlen(string2)] = "\0";

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{
    char string1[50], string2[50];
    int panjang;
   
    // Input
    scanf("%[^\n]s", string2); getchar();
    scanf("%d", &panjang);
   
    // Output
    strncpy(string1, string2, panjang);
   
    printf("%s", string1);
}

Contoh input:
teknik informatika
10

Contoh output:
teknik inf??????

Strcat

Strcat adalah salah satu perintah dalam library string.h untuk menyambung string2 ke belakang string1 dan menambah karakter '\0' di akhir kalimat.

strcat(string1, string2);
string1: string utama yang akan disambung dengan string2
Return value: string1 yang sudah tersambung dengan string2.

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main(){
    char string1[50], string2[50];

    // Input
    scanf("%[^\n]s", string1); getchar();
    scanf("%[^\n]s", string2); getchar();
  
    // Output
    strcat(string1, string2);
    printf("%s", string1);
   
    /* Perintah di bawah ini menghasilkan output yang sama */
    /* printf("%s", strcat(string1, string2)); */
}

Contoh input:
teknik
 informatika

Contoh output:
teknik informatika

Strncat

Strncat adalah salah satu perintah dalam library string.h untuk menyambung string2 ke belakang string1 dan menambah karakter '\0' di akhir kalimat jika perlu. Bedanya dengan Strcat adalah Strncat menyambung string2 sebanyak panjang karakter tertentu dari awal.

strncat(string1, string2, panjang);
string1: string utama yang akan disambung dengan string2
panjang: panjang string2 yang akan disambung. Penghitungannya dari awal
Return value: string1 yang sudah tersambung dengan string2.

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main(){
    char string1[50], string2[50];
    int panjang;

    // Input
    scanf("%[^\n]s", string1); getchar();
    scanf("%[^\n]s", string2); getchar();
   
    scanf("%d", &panjang);

    // Output
    strncat(string1, string2, panjang);
    printf("%s", string1);
   
    /* Perintah di bawah ini menghasilkan output yang sama */
    /* printf("%s", strncat(string1, string2, panjang)); */
}

Contoh input:
teknik
 informatika
4

Contoh output:
teknik inf

Tuesday, December 1, 2015

Strcmp

Strncmp adalah salah satu perintah dalam library string.h untuk membandingkan 2 buah string.

strcmp(string1, string2);
string1 dan string2: string yang akan dibandingkan.

Return value: negatif (< 0), 0, atau positif (> 0)
< 0 : string1 lebih pendek atau nilai karakter pertama yang berbeda lebih kecil dalam urutan kode ASCII
0    : string1 = string2
> 0 : string1 lebih panjang atau nilai karakter pertama yang berbeda lebih besar dalam urutan kode ASCII

Hati-hati!
Jika return valuenya tidak 0, maka return valuenya tidak tepat -1 atau 1 walaupun hasil perintah printf menampilkan nilai -1 atau 1.
Jadi, gunakan kode ini

if(strcmp(string1, string2) > 0)
atau
if(strcmp(string1, string2) < 0)

daripada

if(strcmp(string1, string2) == 1)
atau
if(strcmp(string1, string2) == -1)

Berikut implemetasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{   
    char string1[50], string2[50];
   
    scanf("%[^\n]s", string1); getchar();
    scanf("%[^\n]s", string2);
    
    printf("%d", strcmp(string1, string2));
}

Contoh input 1:
teknik informatika
teknik informatika

Contoh output 1:
0

Contoh input 2:
teknik informatika
teknik industri

Contoh output 2:
1

Strncmp

Strncmp adalah salah satu perintah dalam library string.h untuk membandingkan 2 buah string. Bedanya dengan Strcmp adalah Strncmp membandingkan string berdasarkan panjang string tertentu yang dihitung dari awal.

strncmp(string1, string2, len);
string1 dan string2: string yang akan dibandingkan.
len: panjang string yang akan dibandingkan (dihitung dari awal).

Return value: negatif (< 0), 0, atau positif (> 0)
< 0 : string1 lebih pendek atau nilai karakter pertama yang berbeda lebih kecil dalam urutan kode ASCII
0    : string1 = string2
> 0 : string1 lebih panjang atau nilai karakter pertama yang berbeda lebih besar dalam urutan kode ASCII

Hati-hati!
Jika return valuenya tidak 0, maka return valuenya tidak tepat -1 atau 1 walaupun hasil perintah printf menampilkan nilai -1 atau 1.
Jadi, gunakan kode ini

if(strncmp(string1, string2, panjang) > 0)
atau
if(strncmp(string1, string2, panjang) < 0)

daripada

if(strncmp(string1, string2, panjang) == 1)
atau
if(strncmp(string1, string2, panjang) == -1)

Berikut implemetasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{   
    char string1[50], string2[50];
    int panjang;
   
    scanf("%[^\n]s", string1); getchar();
    scanf("%[^\n]s", string2); getchar();
   
    scanf("%d", &panjang);
   
    printf("%d", strncmp(string1, string2, panjang));
}

Contoh input 1:
teknik informatika
teknik industri
9

Contoh output 1:
0

Contoh input 2:
teknik informatika
teknik industri
10

Contoh output 2:
1

Sunday, November 29, 2015

Strlen

Strlen adalah salah satu perintah dalam library string.h yang berfungsi untuk menghitung panjang suatu string.

strlen(string1);
string1: string yang panjangnya akan dihitung
Return value: panjang karakter dalam bentuk integer (int)

Hati-hati!
Apabila panjang stringnya 10, maka  proses penghitungannya akan dilakukan 10 kali.
Apabila panjang stringnya 100 ribu, maka proses penghitungannya akan dilakukan 100 ribu kali.
Jadi, perintah ini kurang efektif untuk beberapa case terutama di looping (contoh case di bawah).

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
int main()
{
    char str1[50];
    scanf("%[^\n]s", str1);
   
    printf("%d", strlen(str1));
}

Contoh input:
pohon saya

Contoh output:
10

Contoh potongan kode yang tidak efektif:
int i;
for(i = 0; i < strlen(string1); i++)
{...}

Kode tersebut bisa diubah menjadi efektif:
int i, panjang = strlen(string1);
for(i = 0; i < panjang ; i++)
{...}

Strtok

Strtok adalah salah satu perintah dalam library string.h yang berfungsi untuk memisahkan string dari karakter (huruf) tertentu.

strtok(string1, string2);
string1: berisi string asal yang akan dipisah.
string2: berisi karakter-karakter dalam bentuk string yang digunakan sebagai titik pemisahan.
Return value: string1 yang sudah dipisah dari string2 (disimpan dalam variabel pointer char/char *pch)

Variabel 'string1' diisi 'NULL' untuk pemanggilan selanjutnya.

Berikut implementasinya dalam bahasa pemrograman C.

#include<stdio.h>
#include<string.h>
void main(){
    char a[50], b[50];
    char *pch;
  
    scanf("%[^\n]s", a); getchar();
    scanf("%[^\n]s", b);
  
    pch = strtok(a, b);
    while(pch != NULL)
    {
        printf("%s\n", pch);
        pch = strtok(NULL, b);
    }
}

Contoh test case:
.saya .!mahasiswa! angkatan.!.2014
. !

Contoh output:
saya
mahasiswa
angkatan
2014

Bubble Sort

Bubble Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Algoritmanya paling sederhana
Kekurangan: Proses pengurutannya lambat

Kompleksitas: O(n^2)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Bubble_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   // Input jumlah test case
    int N; scanf("%d", &N);

    // Input Data
    int arr[N], i;
    for(i = 0;i < N;i++)
        scanf("%d", &arr[i]);
   
    // Bubble Sort
    int j, tmp, fl;

    for(i = 0;i < N;i++)
    {
        fl = 1;
        for(j = N-1;j >= i;j--)
            if(arr[j - 1] > arr[j])
            {
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
                fl = 0;
            }
       
        if(fl == 1) break;
    }

    // Output
    printf("%d", arr[0]);
    for(i = 1;i < N;i++)
        printf(" %d", arr[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7

Selection Sort

Selection Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Algoritmanya cukup sederhana dan mudah diimplementasikan
Kekurangan: Tidak efektif jika mengurutkan data yang banyak

Kompleksitas: O(n^2)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Selection_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   int N, i;

    // Input jumlah test case
    scanf("%d", &N);
  
    // Input Data
    int arr[N];
    for(i = 0;i < N;i++)
        scanf("%d", &arr[i]);
       
    //Selection Sort
    int j, akhir = N-1, indeks, tmp;
   
    for(i = 0;i < akhir;i++)
    {
        indeks = i;
        for(j = i+1;j < N;j++)
            if(arr[indeks] > arr[j])
                indeks = j;
       
        if(indeks != i) // Switch data
        {
            tmp = arr[i];
            arr[i] = arr[indeks];
            arr[indeks] = tmp;
        }
    }

    // Output
    printf("%d", arr[0]);
    for(i = 1;i < N;i++)   
        printf(" %d", arr[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7

Insertion Sort

Insertion Sort adalah salah satu teknik mengurutkan data.

Kelebihan: Cepat pada data yang sebagian besar sudah terurut, codenya cukup singkat, dan stabil
Kekurangan: Tidak efektif (lambat) jika datanya banyak dan terurut secara terbalik (worst case)

Kompleksitas
Worst case/Average: O(n^2)
Best case (data sudah terurut): O(n)

Animasi visualnya dapat dilihat di visualgo.net/sorting.html
Penjelasan lebih lanjut dapat dilihat di en.wikipedia.org/wiki/Insertion_sort

Berikut code dan implementasinya dalam bahasa pemrograman C.

#include <stdio.h>

int main()
{   int N, i;

    // Input jumlah test case
    scanf("%d", &N);
   
    // Input Data
    int ar[N];
    for(i = 0;i < N;i++)
        scanf("%d", &ar[i]);
   
    //Insertion Sort
    int tmp, j;

    for(i = 1;i < N;i++)
    {
        tmp = ar[i];
        j = i - 1;
       
        while((ar[j] > tmp) && (j > -1))
        {
            ar[j + 1] = ar[j];
            j--;
        }
       
        ar[j + 1] = tmp;
    }
   
    // Output
    printf("%d", ar[0]);
    for(i = 1;i < N;i++)
        printf(" %d", ar[i]);
}

Contoh test case:
7
7 5 3 1 6 4 2

Contoh output:
1 2 3 4 5 6 7