Mengubah String menjadi Integer di C++

Iseng googling tentang ini, ternyata artikel tentang mengubah string ke integer di C++ tidak ada yang berbahasa Indonesia. Karena itu saya akan menuliskannya kali ini.

Berbeda dengan Pascal yang cukup menuliskan val(), dalam C++ mengubah nilai string menjadi integer membutuhkan beberapa library, yaitu :

  • <cstring> = untuk mengaktifkan fungsi .c_str()
  • <cstdlib> = untuk mengaktifkan fungsi atoi()

Nah, atoi() inilah sintaks utama untuk mengubah string menjadi integer. Untuk mengubah char atau satu karakter, cukup ketikkan atoi(variabel_string.c_str());. Implementasinya :

#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int main() {
	string a="1234"; //string a bernilai 1234
	int aa=atoi(a.c_str()); //mengubah string a menjadi integer,lalu ditampung di variabel integer aa
	cout << aa << endl; //1234
	cout << aa*2 << endl; //aa x 2 = 2468
	}

Sekian dari postingan ini, semoga bermanfaat 😀

Referensi

Pembahasan Soal Matriks String

Kepengen nulis pembahasan soal programming lagi. Kali ini temanya tentang matriks string. Jujur sebelumnya saya lemah sekali, bahkan ketika final compfest kemarin pun saya tidak tahu apa-apa tentang implementasi matriks yang berupa string, makanya soal termudah final compfest 2013 (yang berupa matriks string) tidak bisa saya kerjakan :(. Oleh karena itu saya ingin sedikit sharing beberapa soal matriks string yang sudah saya kerjakan, yaitu soal pertama final compfest kemarin dan soal qualification round facebook hacker cup 2014.

Oke, langsung aja. Berikut pembahasannya

1. Laser Ajaib – Soal Final Compfest 2013

Soal :

Di masa depan, tepatnya tahun 20XX, polisi memiliki senjata canggih untuk menumpas kejahatan. Senjata tersebut diberi nama “laser ajaib”. Tidak seperti laser pada masa kini yang
hanya bisa menembak lurus, laser ajaib bisa menembak secara berbelok-belok. Akan tetapi, kelemahan dari laser ajaib ini adalah lasernya bisa terputus di tengah jalan sehingga tidak kena sasaran. Pak Chanek, sebagai seorang polisi di masa depan, ingin mengetahui apakah laser
ajaib miliknya kena sasaran atau tidak.

Diberikan sebuah pemetaan dari hasil tembakan laser ajaib. Pemetaan dari laser ajaib tersebut
memenuhi aturan sebagai berikut:
• Terdiri dari N baris dan M kolom
• Karakter ‘-‘ menyatakan daerah kosong, dan karakter ‘#’ menyatakan daerah yang ada
dalam pengaruh laser ajaib
• Dalam satu kolom, dijamin hanya ada satu karakter ‘#’, atau tidak ada sama sekali
• Dijamin terdapat setidaknya satu karakter ‘#’ pada suatu pemetaan
Laser di suatu kolom dianggap “menyambung” apabila setelah karakter ‘#’ di kolom itu, ada karakter ‘#’ lain yang berada tepat di kolom berikutnya (boleh pada baris yang sama, satu baris di atasnya, atau satu baris di bawahnya, selama masih belum keluar dari pemetaan).
Pengecualian pada kolom terakhir, yang selalu akan dianggap menyambung. Laser ajaib dianggap kena sasaran apabila seluruh kolom di pemetaan itu memiliki karakter ‘#’, dan
menyambung.
Tugas Anda adalah memeriksa apakah hasil tembakan itu kena sasaran atau tidak!

Format Masukan

Baris pertama berisi sebuah bilangan bulat T, yaitu banyaknya kasus uji.
Untuk setiap kasus uji:
Baris pertama berisi dua buah bilangan bulat yang dipisahkan oleh spasi, yaitu N dan M.
N baris berikutnya berisi M karakter, yang merupakan pemetaan dari laser ajaib.

Format Keluaran

Untuk setiap kasus uji, keluarkan “KENA” jika pada kasus tersebut tembakan laser ajaib kena
sasaran. Jika tidak, keluarkan “TIDAK KENA”.

Contoh Masukan

2
10 10
———-
———-
———-
-#–##—-
#-##–#—
——-##-
———#
———-
———-
———-
5 20
—##—##–##-#####
-##–###–##–#—–
——————–
——————–
——————–

Contoh Keluaran

KENA
TIDAK KENA

Yang bisa ditangkap dari soal ini adalah, menentukan apakah dari x awal sampai x akhir ‘#’ tidak putus. Solusinya adalah menentukan terlebih dahulu dari titik x=0, cari dari y awal sampai y akhir apakah ada char ‘#’. Jika tidak ada, maka outputkan langsung TIDAK KENA, tapi apabila ada, lalu pindah lagi ke koordinat x selanjutnya, dan y menjadi 0. Cari lagi tanda ‘#’. Jika ketemu, maka selisihkan antara koordinat y sekarang dengan y sebelumnya. Jika nilainya lebih besar dari 1 atau lebih kecil dari -1, maka outputkan program dengan TIDAK KENA dan program berhenti. Jika tidak, maka lanjutkan hingga nilai x==n. Jika nilai x==n, maka program berhenti dan kena=benar. Maka outputkan KENA.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int t;
	cin >> t;
	for (int i=1;i<=t;i++) {
		int n,m;
		cin >> n >> m;
		string s[n];
		for (int j=0;j<n;j++) cin >> s[j];
		int x=0,y=0;
		bool ketemu,kena;
		ketemu=false,kena=false;
		while (!ketemu && y<n) {
			if (s[y][x]=='#') ketemu=true;
			else y++;
			}
		bool kelar,dapet;
		if (ketemu) {
			kelar=false;
			x++;
			int ybef=y;
			y=0;
			while (!kelar) {
				dapet=false;
				while (!dapet && y<n) {
					if (s[y][x]=='#') dapet=true;
					else y++;
					}
				if (!dapet) kelar=true;
				else {
					if (y-ybef>1 || y-ybef<-1) kelar=true;
					else {
						x++;
						ybef=y;
						y=0;
						}
					}
				if (!kelar && x==m) {
					kelar=true;
					kena=true;
					}
				}
			}
		else kena=false;
		if (kena) cout << "KENA" << endl;
		else cout << "TIDAK KENA" << endl;
		}
	}

2. Square Detector – Qualification Round Facebook Hacker Cup 2014

Soal :

You want to write an image detection system that is able to recognize different geometric shapes. In the first version of the system you settled with just being able to detect filled squares on a grid.

You are given a grid of N×N square cells. Each cell is either white or black. Your task is to detect whether all the black cells form a square shape.

Input

The first line of the input consists of a single number T, the number of test cases.

Each test case starts with a line containing a single integer N. Each of the subsequent N lines contain N characters. Each character is either “.” symbolizing a white cell, or “#” symbolizing a black cell. Every test case contains at least one black cell.

Output

For each test case i numbered from 1 to T, output “Case #i: “, followed by YES or NO depending on whether or not all the black cells form a completely filled square with edges parallel to the grid of cells.

Example Input

5
4
..##
..##
....
....
4
..##
..##
#...
....
4
####
#..#
#..#
####
5
#####
#####
#####
#####
.....
5
#####
#####
#####
#####
#####

Example Output
Case #1: YES
Case #2: NO
Case #3: NO
Case #4: NO
Case #5: YES

Sebenarnya kode ini belum disubmit karena telat submit (batas submit cuma 6 menit dan saya kelamaan bikin file output), jadi gak tahu bener apa enggak. Tapi di testcase contoh, semuanya benar.

Lanjut. Jadi inti dari soal ini adalah menentukan apakah tanda ‘#’ membentuk persegi atau tidak. Solusinya, pertama kita cari dulu titik kiri atas (x awal dan y awal) dari ‘#”. Jika ketemu, lalu cari x akhir dan y akhir. Setelah itu, jika x akhir – x awal != y akhir – y awal, hentikan program dan outputkan NO karena sudah pasti bukan persegi. Jika tidak, maka ada beberapa kasus. Yang pertama adalah apabila ditengah-tengah persegi terdapat char ‘.’, dan kasus yang kedua adalah apabila ada tanda ‘#’ lain diluar persegi.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int t;
	cin >> t;
	for (int i=1;i<=t;i++) {
		int n;
		cin >> n;
		string s[n];
		bool kotak[n][n];
		for (int j=0;j<n;j++) {
			for (int k=0;k<n;k++) {
				kotak[j][k]=false;
				}
			}
		for (int j=0;j<n;j++) cin >> s[j];
		bool ketemu=false,kelar=false;
		int x=0,y=0; //koordinat
		while (!ketemu && !kelar) {
			if (y==n-1 && x==n-1) kelar=true;
			if (s[y][x]=='#') ketemu=true;
			else if (y==n-1) {
				x=0;;
				y++;
				}
			else x++;
			}
		int xx=x,yy=y; //xx = x akhir,yy = y akhir
		while (s[y][xx]=='#') xx++;
		xx--;
		while (s[yy][x]=='#') yy++;
		yy--;
		for (int k=y;k<=yy;k++) {
			for (int l=x;l<=xx;l++) {
				kotak[k][l]=true;
				}
			}
		bool benar=false;
		if (xx-x==yy-y) {
			//ngecek apa tengahnya kosong
			bool muncul=false,sudah=false;
			int tx=x,ty=y;
			while (!muncul && !sudah) {
				if (ty==yy && tx==xx) sudah=true;
				if (s[ty][tx]=='.') muncul=true;
				else if (tx==xx) {
					tx=x;
					ty++;
					}
				else tx++;
				}
			if (!muncul) benar=true;
			}
		//cari '#' yang nyampah di petak lain
		bool nyampah=false,tamat=false;
		int cariy=0,carix=0;
		while (!nyampah && !tamat) {
			if (cariy==n-1 && carix==n-1) tamat=true;
			if (s[cariy][carix]=='#' && !kotak[cariy][carix]) nyampah=true;
			else if (carix==n-1 && cariy!=n-1) {
				carix=0;
				cariy++;
				}
			else carix++;
			}
		if (nyampah) benar=false;
		if (benar) cout << "Case #" << i << ": YES" << endl;
		else cout << "Case #" << i << ": NO" << endl;
		}
	}

~~~

Sekian dari pembahasan ini. Kritikan, masukan, dan saran sangat ditunggu. Terimakasih 😀

Rajin.. (Cerita 7)

Roro sontak menengok karena ada yang tiba-tiba memanggilnya dan menawarkan bantuan. Kaget juga, sepagi ini ada aja yang sudah datang ke sekolah.

“Boleh deh, itu tolong gantungin snack-snack ke atas itu ya!” kata Roro.

“Oke sip” balas Dika.

Setengah enam pagi jelas pagi sekali untuk sekolah macam itu. Jam masuk saja jam 7 pagi, maka siswa jam setengah 6 aneh sekali, kecuali Roro karena ia memang membantu ibunya menyiapkan dagangan di sekolah. Tapi Dika?!

“Lo kok datengnya pagi banget? Bel masuk aja jam 7, rajin banget” kata Roro.

“Eng.. itu, bukan apa-apa kok, udah biasa dateng jam segini. Oh iya, ngomong-ngomong gua belum tahu nama lo, lo siapa? Gua Dika!” kata Dika mengalihkan pembicaraan dan mengajaknya berkenalan. Ia tak mungkin bercerita tentang rencana date-nya dengan Syifa yang gagal total dan dia datang pagi-pagi karena ingin menenangkan diri.

“Serius? Gua setiap hari dateng jam segini buat bantu siapin dagangan ibu gua, dan gua rasa anak-anak sekolah gak ada yang dateng jam segini” kata Roro tidak percaya, tanpa balas mengenalkan diri.

“Ah, gua juga biasa dateng jam segini kali, tapi langsung ke kelas. Gak ke kantin dulu,haha” kata Dika terus ngeles.

“Gak gak, udah lupain,hehe. Oh iya, nama gua Roro!”

“Roro? Roro Jonggrang? Kok bisa kabur ke sekolah ini ya?”

“Wah kampret lo, baru kenalan udah ngeledek aja” kata Roro sambil melempar bungkusan snack ke muka Dika.

“Bercanda doang kok,hehe. Oh iya, ngomong-ngomong lo dateng sepagi ini, apa gak keteteran tuh sama pr-pr? Sekolah ini kan pr-nya parahnya naudzubillah deh, kalo ketinggalan satu pr aja bakal keteteran sama pr yang estafet datengnya.” tanya Dika.

“Gak kok, sama sekali gak kesulitan kok. Gua sih nyantai aja kalo ada pr yang dateng.” kata Roro.

“Wah serius? Masa gua males banget sama pr. Bawaannya kalo ada pr, langsung pengen tidur”

“Nah itu yang salah. Kalo gua sih, kalo dikasih satu pr langsung dikerjain saat itu juga gak pake ditunda-tunda, biar gak numpuk juga.” kata Roro.

“Hmm bener juga.” kata Dika.

Hmm, benar juga. Kadang kita suka menumpuk-menumpuk tugas, dan ketika sudah mendekati batas, kita keteteran untuk menghadapinya. Sebenarnya sebanyak apapun tugas, sebanyak apapun pr yang dikasih itu tidak akan terasa berat apabila langsung dikerjakan pada saat itu juga dan tidak ditumpuk-tumpuk. Benar juga.

Handphone Dika tiba-tiba bergetar. Siapa nih? pikir Dika. Karena sedang asyik mengobrol, sontak panggilan di handphonenya langsung ia tutup. Ganggu orang ngobrol aja, pikirnya.

“Wah gak kerasa udah kelar nih. Makasih ya udah bantu-bantu” kata Roro.

“Sama-sama, gua cabut ke kelas dulu ya.”

Di tempat lain, Syifa masih terbingung sendirian, “Duh, Dika masih marah sama gua ya? Kenapa gak diangkat?!”

Satu Orang Baru (Cerita 6)

Gadis berkedudung itu datang pagi-pagi. Bukan karena dia rajin, dan bukan karena dia memang suka berangkat pagi-pagi. Setibanya di sekolah, dia tidak langsung menuju ke kelas, tetapi ke kantin terlebih dahulu. Tidak, tidak berarti dia belum sarapan ketika di rumah, dan tidak juga karena dia malas ke kelas.

“Ibu, ini aku udah bawa bungkusan-bungkusan makanannya”

“Oh iya nduk, taruh saja di meja itu. Kamu tolong bantu tata meja ini ya.”

Ternyata itu ibunya. Gadis berkerudung yang rajin sekali berangkat ke sekolah pagi subuh, ternyata untuk membantu ibunya menyiapkan dagangan di kantin sekolahnya. Dia termasuk murid yang cerdas, beruntung sekali dia bisa bersekolah di sekolah yang katanya ‘susah sekali masuknya’, dan mendapat beasiswa secara langsung dari pihak sekolah.

Roro.. nama gadis itu, teringat akan perkataan kepala sekolah kepadanya, “Kamu itu pintar, kamu itu cerdas, kemauan kamu itu kuat, jangan sampai karena masalah biaya kamu jadi kehilangan segalanya, ya nak”

Beberapa menit kemudian, datanglah lelaki itu. Seperti biasa, rambutnya kusut, baju dikeluarkan. Tetapi kali ini beda, ia jauh lebih kusut dan pakaiannya jauh lebih kacau dari sebelumnya. Mungkin karena pertemuannya yang hampir sedikit lagi dengan orang itu, sedikit lagi, tapi ternyata gagal.

“Bener-bener ga mood, ke kantin dulu ah” pikirnya.

Setibanya di kantin, ia melihat sesosok gadis berkerudung, itu. Sontak ia kaget. Pikirnya, biasanya dia yang paling pagi datang ke sekolah, ternyata ada lagi orang lain yang datang jauh lebih pagi darinya. Dika melihat gadis itu sedang menata meja dengan makanan-makanan ringan yang masih berceceran di meja.

“Eh, maaf, ada yang bisa gua bantu gak?”

Membuat Kalkulator Sederhana dengan VB6

Iseng gak ada kerjaan, tiba-tiba kepikiran buat bikin suatu kalkulator sederhana, kali ini dari VB6. Oke langsung aja,

Pertama-tama siapkan objek-objeknya terlebih dahulu, yaitu :

  • Command1 – Command17 sebagai tombol kalkulator
  • Label1 – Label5 sebagai penampil output hasil

Lalu setkan semua command menjadi seperti berikut :

  • Command1.Caption = “1”
  • Command8.Caption = “2”
  • Command3.Caption = “3”
  • Command7.Caption = “4”
  • Command2.Caption = “5”
  • Command4.Caption = “6”
  • Command5.Caption = “7”
  • Command6.Caption = “8”
  • Command9.Caption = “9”
  • Command10.Caption = “+”
  • Command17.Caption = “0”
  • Command12.Caption = “x”
  • Command15.Caption = “mod”
  • Command11.Caption = “:”
  • Command13.Caption = “-“
  • Command14.Caption = “=”
  • Command16.Caption = “ULANGI”

Lalu setkan semua label menjadi seperti berikut

  • Label1.Caption = “”
  • Label2.Caption = “”
  • Label3.Caption = “”
  • Label4.Caption = “”
  • Label5.Caption = “=”

Susun semuanya hingga menjadi seperti berikut :

seluruhSetelah itu, ketiklah kode berikut :

Private Sub Command1_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command1.Caption
Else
Label4.Caption = Label4.Caption + Command1.Caption
End If
End Sub

Private Sub Command10_Click()
Label2.Caption = Command10.Caption
End Sub

Private Sub Command11_Click()
Label2.Caption = Command11.Caption
End Sub

Private Sub Command12_Click()
Label2.Caption = Command12.Caption
End Sub

Private Sub Command13_Click()
Label2.Caption = Command13.Caption
End Sub

Private Sub Command14_Click()
If Label2.Caption = "x" Then
Label3.Caption = Val(Label1.Caption) * Val(Label4.Caption)
ElseIf Label2.Caption = "+" Then
Label3.Caption = Val(Label1.Caption) + Val(Label4.Caption)
ElseIf Label2.Caption = "-" Then
Label3.Caption = Val(Label1.Caption) - Val(Label4.Caption)
ElseIf Label2.Caption = ":" Then
Label3.Caption = Val(Label1.Caption) / Val(Label4.Caption)
ElseIf Label2.Caption = "mod" Then
Label3.Caption = Val(Label1.Caption) Mod Val(Label4.Caption)
End If
End Sub

Private Sub Command15_Click()
Label2.Caption = Command15.Caption
End Sub

Private Sub Command16_Click()
Label1.Caption = ""
Label2.Caption = ""
Label3.Caption = ""
Label4.Caption = ""
End Sub

Private Sub Command17_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command17.Caption
Else
Label4.Caption = Label4.Caption + Command17.Caption
End If
End Sub

Private Sub Command2_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command2.Caption
Else
Label4.Caption = Label4.Caption + Command2.Caption
End If
End Sub

Private Sub Command3_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command3.Caption
Else
Label4.Caption = Label4.Caption + Command3.Caption
End If
End Sub

Private Sub Command4_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command4.Caption
Else
Label4.Caption = Label4.Caption + Command4.Caption
End If
End Sub

Private Sub Command5_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command5.Caption
Else
Label4.Caption = Label4.Caption + Command5.Caption
End If
End Sub

Private Sub Command6_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command6.Caption
Else
Label4.Caption = Label4.Caption + Command6.Caption
End If
End Sub

Private Sub Command7_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command7.Caption
Else
Label4.Caption = Label4.Caption + Command7.Caption
End If
End Sub

Private Sub Command8_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command8.Caption
Else
Label4.Caption = Label4.Caption + Command8.Caption
End If
End Sub

Private Sub Command9_Click()
If Label2.Caption = "" Then
Label1.Caption = Label1.Caption + Command9.Caption
Else
Label4.Caption = Label4.Caption + Command9.Caption
End If
End Sub

Setelah itu, coba dites

hasil

~~~

Sekian dari pembahasan super singkat ini, semoga bermanfaat 🙂

Pembahasan Penyisihan JBITC 2013

Hari minggu kemarin, tanggal 22 September ada satu penyisihan lomba, yaitu Java Bali IT Competition 2013. Sebenarnya kontes ini cuma refreshing-lah setelah Final Compfest 2013 kemarin. Well, final kemarin kacau! -_- saya gak solve apa-apa, 2 soal ngebug parah, dan baru nyadar solusinya pas scoreboard udah difreeze. Tapi tak apa, yang penting masuk final, dan dapet kaos compfest :). Tapi sedikit kecewa karena gak bisa ikut acara puncak yang (katanya) rame parah karena dapet dispensasi cuma hari jumat-sabtu, gak sampe senin ._.

Oke, kembali ke JBITC. Kontes ini bisa dibilang unik, karena pengumpulan soal melalui email, tidak melalui online web grader seperti kontes-kontes lainnya, karena itu juga saya tidak tahu apakah kode saya accepted atau tidak. Tapi soalnya bisa dibilang mudah, mudah banget malah 😀

Di kontes ini, saya (kayaknya) solve 4 dari 5 soal. Saya masih belum tahu hasilnya, tapi karena program-program saya sesuai sama testcase di soal, maka akan saya bahas disini.

Update : hasil baru keluar hari ini, alhamdulillah lolos ke semifinal, tapi scoreboard gak ditampilin :/

Untuk soal bisa dilihat disini

Pembahasan :

Soal 1

Cukup sorting biasa, dari 1 ke 10. Terus lakukan operasi perkalian n dengan output seperti yang ada di soal.  Kompleksitasnya O(N).

Kode :

#include <iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	for (int i=1;i<=10;i++) {
		cout << n << "*" << i << "=" << n*i << endl;
		}
	}

Soal 2

Solusi simpelnya, cukup bikin perulangan dari integer ASCII ‘A’ sampai ‘Z’.  Nilai ASCII dari ‘A’ adalah 65, dan nilai ASCII dari ‘Z’ adalah 90.

Kode :

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	for (int i=65;i<=90;i++) {
		cout << (char)i << " ";
		}
	}

Soal 3

Soal pola. Kalau solusi saya, pertama perhatiin polanya dulu. Bintang di sebelah paling kiri biasanya berpindah posisi sebanyak 1 langkah setiap perulangan, dan bintang di sebelah paling kanan biasanya berpindah posisi sebanyak 2 langkah setiap perulangan. Nah, jadi bikin decision jika nilai j antara kiri dan kanan, maka cetak bintang, selain itu biarin aja.

Selesai? Belum. Perhatikan lagi, saat baris ke n/2, polanya berubah. Yang awalnya perubahan jumlah bintang dari kiri ke kanan, kembali dari kanan ke kiri. Maka bikin decision lagi, jika i>n maka nilai kiri berbalik jadi dikurangi 1, dan nilai kanan jadi dikurangi 2 setiap perulangan.

Kode :

#include <iostream>
using namespace std;
int main() {
	int n;
	cin >> n;
	int awal,akhir;
	awal=1;
	akhir=1;
	for (int i=1;i<=n*2;i++) {
		for (int j=1;j<=n*2;j++) {
			if (j>=awal && j<=akhir) cout << "*";
			else cout << " ";
			}
		cout << endl;
		if (i<=n) {
		awal++;
		akhir+=2;
		}
		else {
			awal--;
			akhir-=2;
			}
		}
		cout << "*" << endl;
	}

Soal 4

Soal bilangan prima. Mari kita ingat definisi bilangan prima, yaitu hanya bisa habis dibagi oleh 1 dan bilangan itu sendiri. Jadi solusinya adalah bikin perulangan dari n-1 ke 2. Jika n mod i=0, maka nilai count bertambah 1. Jika nilai count lebih besar dari 0, maka bukan bilangan prima, selain itu maka bilangan prima.

Kode :

#include <iostream>
using namespace std;
int main() {
	int n,d=0;
	cin >> n;
	int c;
	for (int i=n-1;i>1;i--) {
		if (n%i==0) d++;
		}
	if (d>=1) cout << "Bukan Bilangan Prima\n";
	else if (d==0) cout << "Bilangan Prima\n";
	}

Soal 5

Karena baterai laptop low critical, begitu baca soal ini langsung mati laptopnya, sekian. Untung udah submit soal 4 terlebih dahulu. 😀

~~

Sekian dari pembahasan saya. Komentar, kirik, saran, dan hujatan bisa disampaikan di komentar. Akhir kata, semoga bermanfaat! 😀

September : 15% timeline perjuangan kelas 11

Lamanya, tidak menulis lagi di blog ini. Tulisan terakhir tanggal 4 Agustus, berarti sudah sebulan tidak menulis lagi di blog ini, sebuah rekor yang cukup membanggakan! 😀

Mengingat dulu biasanya saya menulis di blog ini kalau tidak sehari sekali, ya seminggu sekali. Dulu waktu SMP masa-masanya saya aktif ngeblog, tetapi begitu SMA, blog ini sudah sedikit tak terurus karena sibuk dengan kegiatan di sekolah.

Awal saya masuk sekolah bulan Juli, dan sekarang sudah bulan September. Berarti prosesnya 15% menuju kenaikan ke kelas 3. Sejauh ini alhamdulillah masih bisa mengikuti pelajaran-pelajaran sekolah (tanpa bantuan bimbel). Saya benar-benar semangat belajar pelajaran-pelajaran di jurusan IPA, terutama belajar Fisika. Sumpah keren banget pelajaran vektor, differensial sama integral.

Di kelas 11 ini, saya juga banyak-banyak ikut lomba. Lomba terakhir yang saya ikuti yaitu Computer Festival 2013, dan alhamdulillah lolos ke final :D, walaupun dengan peringkat yang tidak memuaskan, 25 dari 28 yang maju ke final. Doakan supaya dapat hasil yang terbaik tanggal 21 nanti ya,hehe.

Next Competition : JBITC 2013, NPC Schematics, dan BNPCHS 2013. Doain semoga dapet final juga di ketiga lomba itu, amin 🙂

Bagaimana dengan OSN Komputer? Saya masih berjuang untuk itu kok. Lihat saja, saya pasti bisa ikutan di ajang OSN 2014 nanti, amin :). Well, kemarin saya iseng ikutan Open OSN 2013, dan soal-soalnya sangat imba menurut saya. Beda jauh sama OSN sebelumnya, saya aja cuma solve 1 soal di sesi 1, dan tidak solve satupun di sesi 2. 😦

Tapi yang lebih penting, saya bisa ambil soal-soal itu untuk dipelajari lebih lanjut. Oh iya, kalo yang baca ini ada yang mau bahas-bahas soal atau diskusi soal bareng,saya merasa sangat senang sekali! Mungkin bisa lewat twitter atau facebook saya. 😀

Di 2013 ini, saya ingin menyiapkan segalanya dengan baik. Nilai ulangan, nilai tugas, nilai rapot, semoga..eh sudah keharusan sih, di semester 3 dan 4 ini saya bisa mendapatkan peningkatan nilai rapot yang baik. Amin! 🙂

Satu tahun lagi, jalan masih panjang menuju.. emm entah apakah kesini..

423833_2395287857631_997578819_n

Atau malah kesana..

Future Campus? hmm maybe
Future Campus? hmm maybe

Kemanapun itu, pasti sudah yang terbaik! Tinggal sekarang singsingkan lengan, maksimalkan belajar pelajaran sekolah dan belajar hal-hal baru! Fastabiqul Khairat! Berlomba-lombalah dalam kebaikan!

Wassalamu’alaikum wr. wb.

“Musuh yang pintar lebih baik daripada teman yang bodoh” – R1M

Pembahasan Soal WIFI Utama 2013

bannerr

Lama gak nulis pembahasan, jadi pengen nulis ini lagi sekarang. Nama kontesnya yaitu WIFI Utama 2013, yang diselenggarakan oleh Universitas Widyatama. Ini salah satu kontes yang bikin kesel, karena saya salah belajar materi. Dibilangnya materi yang keluar aritmatika, ternyata hampir 100% materi yang keluar operasi string semua yang mana waktu itu saya belum belajar string sama sekali -_-

Makanya pas itu skor saya 0, ditambah waktu itu saya lagi migrasi dari Pascal ke C++, jadi pas itu codingnya masih setengah-setengah antara Pascal dan C++, kacau dah. Tapi sekarang saya otak-atik lagi soalnya, dan mau ditulis pembahasannya sekarang, mungkin mau balas dendam tahun depan buat ngejar juara 1 lagi,hehe, amin.

Soal bisa didownload disini

Pembahasan :

1. LalalaYeyeyeAllayYee

Inti dari soal ini menghitung jumlah huruf besar dan huruf kecil pada suatu string. Waktu kontes, solusi yang saya pikirkan yaitu membuat array ‘A’-‘Z’ dan ‘a’-‘z’, tetapi tidak optimal. Solusi sederhananya yaitu melalui perbandingan nilai ASCII nya. Nilai ASCII huruf a-z yaitu 97-122 dan A-Z yaitu 65-90. Pokoknya kalo ASCII nya antara segitu, langsung increment jumlah besar atau kecilnya.

Untuk yang biasa pake library <iostream> di C++, jangan menggunakan cin >>. Karena cin >> hanya membaca satu string tanpa spasi. Jadi setelah spasi akan dianggap sebagai null.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int n;
	cin >> n;
	string a;
	getline(cin,a);
	for (int i=0;i<n;i++) {
		string s;
		getline(cin,s);
		int kecil=0,besar=0;
		for (int j=0;j<s.length();j++) {
			if ((int)s[j]>=97 && (int)s[j]<=122) kecil++;
			else if ((int)s[j]>=65 && (int)s[j]<=90) besar++;
			}
		cout << besar << " " << kecil << endl;
		}
	}

2. Kata yang ditukar

(skipped for a moment :p)

3. Bolak-Balik, Aku Maju, Kamu Mundur.

(skipped for a moment :p)

4. ++2

Inti dari program ini adalah mengubah suatu huruf menjadi 2 di depannya. Misal A jadi C, a jadi c, dan sebagainya. Tapi jika membaca soal lebih teliti, huruf yang diubah hanyalah huruf dengan indeks genap (indeks dimulai dari 0). Solusinya adalah dengan mencari ASCII dari huruf itu, lalu ditambah 2, dan dijadikan huruf lagi.

#include <iostream>
#include <cstring>
using namespace std;
int main() {
	int n;
	string kosong;
	cin >> n;
	getline(cin,kosong);
	for (int i=0;i<n;i++) {
		string huruf="";
		getline(cin,huruf);
		for (int j=0;j<huruf.length();j++) {
			if ((j+2)%2==0) huruf[j]=(int)huruf[j]+2;
			}
		cout << huruf << endl;
		}
	}

5. StZ

Solusinya brute force aja, pokoknya kalo nilai a ditambah b dikurang c sama dengan 0, tulis aja.

#include <iostream>
using namespace std;
int main() {
	int n,count=0;;
	cin >> n;
	for (int i=0;i<n;i++) {
		int arr[3];
		cin >> arr[0] >> arr[1] >> arr[2];
		cout << arr[0] << " + " << 0 << " - " << arr[0] << " = " << 0 << endl;
		count++;
			if (arr[0]+arr[1]-arr[2]==0 && arr[0]!=0 && arr[1]!=0 && arr[2]!=0) {
				cout << arr[0] << " + " << arr[1] << " - " << arr[2] << " = " << 0 << endl;
				count++;
			}
			cout << arr[0] << " + " << 0 << " - " << arr[0] << " = " << 0 << endl;
			count++;
		}
		cout << count;
	}

~~~

Oh iya, sebelumnya thanks buat salah satu peserta WIFI 2013, Benget Immanuel Nata yang berbaik hati mengajarkan saya soal nomor 1, dan membuka pengetahuan saya tentang ASCII, hehe.

Yak sekian pembahasan saya kali ini, semoga bermanfaat. Tidak terasa sebentar lagi Compfest 2013, doakan semoga saya dapat hasil yang terbaik, amin 😀

Haruskah Kita Terus Mengeluh? Bersyukurlah!

Grave-Of-The-Fireflies-post

Assalamu’alaikum wr. wb.

Ada yang tahu gambar diatas?

Yup, gambar di atas adalah salah satu cuplikan dari sebuah film anime yang berjudul Grave of The Fireflies. Anime ini menceritakan tentang keadaan Jepang pada masa Perang Dunia II. Tokoh utamanya yaitu kakak beradik yang bernama Seita dan Setsuko. Banyak perjuangan yang mereka lalui untuk bertahan hidup, mulai dari mencari makanan dari puing-puing bangunan yang runtuh, meminta ke rumah seseorang, bahkan mencuri.

Satu hal yang saya tangkap, betapa menyedihkannya keadaan mereka. Lalu, lebih bahagia mana antara keadaan kita saat ini dan keadaan mereka pada masa itu? Dan, sudah sejauh mana kita bersyukur?

Pernahkah kita mengeluh? Ya, sering bahkan, termasuk saya juga suka mengeluh sebagai manusia biasa. Tentunya kita sering mengeluh karena kita tak lepas dari ego kita sebagai manusia.

Mengeluh itu normal, karena tentunya kita ingin mendapatkan yang lebih baik. Tapi mengeluh tentu ada batasnya, jangan sampai kita melampaui batas yang dapat merepotkan orang lain.

Lalu bagaimana? BERSYUKUR.

Bersyukurlah atas nikmat yang telah diberikan Allah kepada kita. Saat ini kita telah diberikan kehidupan yang damai, diberikan makanan enak, minuman enak, pendidikan yang bermutu, dan lain sebagainya. Kita tidak perlu tinggal di pengungsian seperti yang Seita dan Setsuko alami.

Jika kita mengeluh, bayangkanlah bahwa masih banyak yang lebih buruk nasibnya daripada kita. Kita ini beruntung, kawan. Jika harga BBM naik, harga makanan naik, harga kebutuhan pokok naik, ketahuilah kawan, kita ini beruntung karena zaman dahulu mencari bahan pokok saja sampai harus menggali puing-puing bangunan yang runtuh.

Daripada kita mengeluh, perbanyaklah bersyukur. Masih banyak hal lain yang harus kita lakukan daripada banyak mengeluh.

Semoga kita senantiasa dijadikan hamba Allah yang beruntung dalam segala keadaan, amin.

Wassalamu’alaikum wr. wb.

“Dan hendaklah bertakbir atas anugerah yang telah Allah berikan. Semoga kalian menjadi hamba-Nya yang bersyukur.” (QS al-Baqarah [2]: 185)