Monthly Archives: April 2012

Java : Menghitung jumlah kata, huruf dan angka

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/* - Menghitung jumlah setiap huruf dan angka
   - Menghitung jumlah kata
 */
import java.util.Scanner;
 
class StringHitung {
    private static final int JUMLAH_KARAKTER = 256;
    private static int[] total_per_karakter = new int[JUMLAH_KARAKTER];
 
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
 
        System.out.print("\nMasukan string : ");
        String kata = s.nextLine();
        kata = kata.toLowerCase();
 
        // inisialisasikan setiap karakter berjumlah 0 buah 
        for (int i=0; i<JUMLAH_KARAKTER; i++) {
            total_per_karakter[i] = 0;
        }
 
        // hitung jumlah setiap karakter
        int kata_len = kata.length();
        for (int i=0; i<kata_len; i++) {
            total_per_karakter[(int )kata.charAt(i)]++;
        }
 
        // tampilkan jumlah setiap karakter
        System.out.println();
        for (int i=0; i<JUMLAH_KARAKTER; i++) {
            if (total_per_karakter[i] > 0) {
                if (((char)i >= 'a' && (char)i <= 'z')) {
                    System.out.println("Jumlah huruf " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
                } else if ((char)i >= '0' && (char)i <= '9') {
                    System.out.println("Jumlah angka " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
                } else if ((char) i == ' ') {
                    System.out.println("Jumlah Spasi ada sebanyak " + total_per_karakter[i] + " buah");
                } else {
                    System.out.println("Jumlah karakter " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
                }
            }
        }
 
        // hitung jumlah kata
        int jumlahKata = 0;
        int i = 0;
        while (i < kata.length()) {
            // abaikan spasi pada awal string dan spasi lebih dari satu
            while (i < kata.length() && kata.charAt(i) == ' ') i++; 
 
            if (i < kata.length() && kata.charAt(i) != ' ') { 
                jumlahKata++;
                while (i < kata.length() && kata.charAt(i) != ' ') i++;
            }
        }
 
        System.out.println("\nJumlah Kata : " + jumlahKata + " buah");
    }
}
/* - Menghitung jumlah setiap huruf dan angka
   - Menghitung jumlah kata
 */
import java.util.Scanner;

class StringHitung {
	private static final int JUMLAH_KARAKTER = 256;
	private static int[] total_per_karakter = new int[JUMLAH_KARAKTER];

	public static void main(String args[]) {
		Scanner s = new Scanner(System.in);

		System.out.print("\nMasukan string : ");
		String kata = s.nextLine();
		kata = kata.toLowerCase();

		// inisialisasikan setiap karakter berjumlah 0 buah 
		for (int i=0; i<JUMLAH_KARAKTER; i++) {
			total_per_karakter[i] = 0;
		}

		// hitung jumlah setiap karakter
		int kata_len = kata.length();
		for (int i=0; i<kata_len; i++) {
			total_per_karakter[(int )kata.charAt(i)]++;
		}

		// tampilkan jumlah setiap karakter
		System.out.println();
		for (int i=0; i<JUMLAH_KARAKTER; i++) {
			if (total_per_karakter[i] > 0) {
				if (((char)i >= 'a' && (char)i <= 'z')) {
					System.out.println("Jumlah huruf " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
				} else if ((char)i >= '0' && (char)i <= '9') {
					System.out.println("Jumlah angka " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
				} else if ((char) i == ' ') {
					System.out.println("Jumlah Spasi ada sebanyak " + total_per_karakter[i] + " buah");
				} else {
					System.out.println("Jumlah karakter " + (char) i + " ada sebanyak " + total_per_karakter[i] + " buah");
				}
			}
		}

		// hitung jumlah kata
		int jumlahKata = 0;
		int i = 0;
		while (i < kata.length()) {
		    // abaikan spasi pada awal string dan spasi lebih dari satu
			while (i < kata.length() && kata.charAt(i) == ' ') i++; 

			if (i < kata.length() && kata.charAt(i) != ' ') { 
				jumlahKata++;
				while (i < kata.length() && kata.charAt(i) != ' ') i++;
			}
		}

		System.out.println("\nJumlah Kata : " + jumlahKata + " buah");
	}
}

file read & write (example)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
 
#define NEW_LINE printf("\n");
#define CLS system("cls");
#define PAUSE system("pause");
#define GETCHAR getchar();
 
int main()
{
    FILE *fout;
    FILE *fin;
    
    struct Mahasiswa {
        char NPM[10], Nama[256], Fakultas[64], Jurusan[64];
        float Nilai;
    };
    
    struct block {
        struct Mahasiswa Mhs;
    
        char *getNPM() {
            return Mhs.NPM;
        }
        
        char *getNama() {
            return Mhs.Nama;
        }
        
        char *getFakultas() {
            return Mhs.Fakultas;
        }
        
        char *getJurusan() {
            return Mhs.Jurusan;
        }
        
        void setNPM(char value[10]) {
            strcpy(Mhs.NPM, value);
        }
        
        void setNama(char value[256]) {
            strcpy(Mhs.Nama, value);
        }
        
        void setFakultas(char value[64]) {
            strcpy(Mhs.Fakultas, value);
        }
        
        void setJurusan(char value[64]) {
            strcpy(Mhs.Jurusan, value);
        }
        
        void setNilai(float value) {
            Mhs.Nilai = value;
        };
        
        float getNilai() {
            return Mhs.Nilai;
        };
        
        void setMhs(char npm[10], char nama[256], char fakultas[64], char jurusan[64], float nilai) {
            setNPM(npm);
            setNama(nama);
            setFakultas(fakultas);
            setJurusan(jurusan);
            setNilai(nilai);
        }
    } block;
    
    char input;
    int pilihan;
    char npm[10], nama[255], fakultas[64], jurusan[64];
    float nilai;
 
    do {
        NEW_LINE; CLS;
        printf("1. Input Data\n");
        printf("2. Lihat Data\n");
        printf("0. Keluar\n");
        printf("\nMasukan pilihan Anda : ");
        scanf("%d", &pilihan);
        
        switch (pilihan) {
            case 1:
                input = 'y';
                while (input == 'y' || input == 'Y') {
                    NEW_LINE; CLS; GETCHAR;
                    printf("NPM      : "); scanf("%[^\n]", npm); GETCHAR;
                    printf("Nama     : "); scanf("%[^\n]", nama); GETCHAR;
                    printf("Fakultas : "); scanf("%[^\n]", fakultas); GETCHAR;
                    printf("Jurusan  : "); scanf("%[^\n]", jurusan); GETCHAR;
                    printf("Nilai    : "); scanf("%f", &nilai);
                    
                    block.setMhs(npm, nama, fakultas, jurusan, nilai);
                    
                    fout = fopen("database.adb", "ab");
                    if (fout == NULL) {
                        fprintf(stderr, "\nError!. Tidak dapat mengakses file database.adb\n");
                        exit(1);
                    }
                    
                    fwrite((struct Mahasiswa *)&block.Mhs, sizeof(struct Mahasiswa), 1, fout);
                    fclose(fout);
                    
                    printf("\nIngin menginputkan lagi (y/n): ");
                    scanf("%s", &input);
                }
                break;
                
            case 2:
                fin = fopen("database.adb", "rb");
                if (fin == NULL) {
                    fprintf(stderr, "\nError!. Tidak dapat mengakses file database.adb\n");
                    exit(1);
                }
                
                NEW_LINE; CLS;
                while (!feof(fin)) {
                    fread((struct Mahasiswa *)&block.Mhs, sizeof(struct Mahasiswa), 1, fin);
                    
                    if (feof(fin)) break;
                    
                    printf(
                        "%s  %s  %s  %s  %f",
                        block.getNPM(), block.getNama(), block.getFakultas(),
                        block.getJurusan(), block.getNilai()
                    );
                        
                    NEW_LINE;
                }
                fclose(fin);
                NEW_LINE; PAUSE;
                break;
                
            case 0: break;  
            
            default:
                printf("\nPilihan salah !\n");
                break;
        }
    } while (pilihan != 0);
    
    return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

#define NEW_LINE printf("\n");
#define CLS system("cls");
#define PAUSE system("pause");
#define GETCHAR getchar();

int main()
{
	FILE *fout;
	FILE *fin;
	
	struct Mahasiswa {
		char NPM[10], Nama[256], Fakultas[64], Jurusan[64];
		float Nilai;
	};
	
	struct block {
		struct Mahasiswa Mhs;
	
		char *getNPM() {
			return Mhs.NPM;
		}
		
		char *getNama() {
			return Mhs.Nama;
		}
		
		char *getFakultas() {
			return Mhs.Fakultas;
		}
		
		char *getJurusan() {
			return Mhs.Jurusan;
		}
		
		void setNPM(char value[10]) {
			strcpy(Mhs.NPM, value);
		}
		
		void setNama(char value[256]) {
			strcpy(Mhs.Nama, value);
		}
		
		void setFakultas(char value[64]) {
			strcpy(Mhs.Fakultas, value);
		}
		
		void setJurusan(char value[64]) {
			strcpy(Mhs.Jurusan, value);
		}
		
		void setNilai(float value) {
			Mhs.Nilai = value;
		};
		
		float getNilai() {
			return Mhs.Nilai;
		};
		
		void setMhs(char npm[10], char nama[256], char fakultas[64], char jurusan[64], float nilai) {
			setNPM(npm);
			setNama(nama);
			setFakultas(fakultas);
			setJurusan(jurusan);
			setNilai(nilai);
		}
	} block;
	
	char input;
	int pilihan;
	char npm[10], nama[255], fakultas[64], jurusan[64];
	float nilai;

	do {
		NEW_LINE; CLS;
		printf("1. Input Data\n");
		printf("2. Lihat Data\n");
		printf("0. Keluar\n");
		printf("\nMasukan pilihan Anda : ");
		scanf("%d", &pilihan);
		
		switch (pilihan) {
			case 1:
				input = 'y';
				while (input == 'y' || input == 'Y') {
					NEW_LINE; CLS; GETCHAR;
					printf("NPM      : "); scanf("%[^\n]", npm); GETCHAR;
					printf("Nama     : "); scanf("%[^\n]", nama); GETCHAR;
					printf("Fakultas : "); scanf("%[^\n]", fakultas); GETCHAR;
					printf("Jurusan  : "); scanf("%[^\n]", jurusan); GETCHAR;
					printf("Nilai    : "); scanf("%f", &nilai);
					
					block.setMhs(npm, nama, fakultas, jurusan, nilai);
					
					fout = fopen("database.adb", "ab");
					if (fout == NULL) {
						fprintf(stderr, "\nError!. Tidak dapat mengakses file database.adb\n");
						exit(1);
					}
					
					fwrite((struct Mahasiswa *)&block.Mhs, sizeof(struct Mahasiswa), 1, fout);
					fclose(fout);
					
					printf("\nIngin menginputkan lagi (y/n): ");
					scanf("%s", &input);
				}
				break;
				
			case 2:
				fin = fopen("database.adb", "rb");
				if (fin == NULL) {
					fprintf(stderr, "\nError!. Tidak dapat mengakses file database.adb\n");
					exit(1);
				}
				
				NEW_LINE; CLS;
				while (!feof(fin)) {
					fread((struct Mahasiswa *)&block.Mhs, sizeof(struct Mahasiswa), 1, fin);
					
					if (feof(fin)) break;
					
					printf(
						"%s  %s  %s  %s  %f",
						block.getNPM(), block.getNama(), block.getFakultas(),
						block.getJurusan(), block.getNilai()
					);
						
					NEW_LINE;
				}
				fclose(fin);
				NEW_LINE; PAUSE;
				break;
				
			case 0: break;	
			
			default:
				printf("\nPilihan salah !\n");
				break;
		}
	} while (pilihan != 0);
	
	return 0;
}

Tugas Pengantar Multimedia (16 April 2012)

Berbagai Teknik Kompresi Data

Seiring dengan perkembangan informasi yang sangat cepat dan juga perkembangan teknologi multimedia yang sangat pesat,  maka data yang berkembang di seluruh dunia akan terus bertambah dan ukuran dari data-data yang dihasilkan juga terus meningkat. Hal ini juga didukung oleh semakin lebar dan murahnya bandwidth internet. Akan tetapi, tempat (storage) yang tersedia untuk menyimpan data saat ini masih terbatas dan juga internet yang murah dan cepat tidak dimiliki oleh semua orang, sehingga untuk melakukan transfer data yang besar melalui jaringan internet cukup sulit dilakukan.

Mengingat hal di atas, banyak orang yang berfikir bagaimana caranya untuk melakukan efisiensi penyimpanan data pada tempat penyimpanan yang terbatas. Hingga saat ini, sudah sangat banyak metode/algoritma yang dapat digunakan untuk melakukan kompresi/pemampatan pada data. Pada tulisan ini, saya akan membahas beberapa teknik kompresi data untuk data dengan tipe Text, Image, Audio, dan Video.

Sebelum membahas tentang berbagai algoritma tersebut, perlu diketahui bahwa pada kompresi data terdapat jenis kompresi Lossless Compression dan Lossy Compression.

 

Lossless Compression

Lossless Compression merupakan metode kompresi data dimana data yang sudah dikompresi dapat dikembalikan ke bentuk semula secara utuh. Kompresi jenis lossless compression biasanya melakukan kompresi dengan dua buah langkah: langkah pertama yaitu membangkitkan model statistik dari data yang dimasukkan, dan langkah kedua adalah menggunakan model tersebut untuk memetakan data yang dimasukan kedalam rangkaian bit dimana data/simbol yang memiliki frekuensi tertinggi akan menghasilkan keluaran (output) yang paling pendek. Salah satu implementasi dari lossless compression adalah Kode Huffman (Huffman Coding) yang merupakan bagian dari kompresi data/file dengan format ZIP.

 

Lossy Compression

Lossy Compression merupakan kebalikan dari Lossless Compression dimana data yang sudah dikompresi akan sulit atau bahkan tidak mungkin dikembalikan ke bentuk semula secara utuh. Biasanya kompresi jenis ini melakukan kompresi data dengan cara menghilangkan/membuang sebagian data dan tidak akan memberikan perubahan yang besar pada data tersebut.