Selasa, 01 Maret 2016

Menghitung jumlah loop pada cpp

Loop atau struktur pengulangan pada pemograman cpp sangat berguna ketika kita hendak melakukan sebuah rutinitas suatu fungsi secara berulang-ulang dan terus menerus sampai mendapatkan kondisi tertentu atau menghasilkan suatu fungsi lain dan juga loop berguna untuk menjaga efisiensi program yang kita buat.
Tentu sangat tidak efektif jika suatu fungsi kita ulang secara manual dengan cara menuliskan kode fungsi tersebut pada setiap perulangannya. Terdapat tiga buah jenis perlulangan yang ada pada cpp yaitu : struktur pengulangan FOR, struktur pengulangan WHILE dan struktur pengulangan DO-WHILE.

Pada kesempatan kali ini yang akan kita bahas adalah bukan tentang struktur pengulangan itu sendiri, tetapi adalah menghitung jumlah loop atau pengulangan yang terjadi pada suatu fungsi. Pengulangan atau loop dapat berupa nilai STRING, METODA, INTERGER dan lain-lain, tentu sangat sulit jika kita harus mengkonversi atau membuat fungsi lain untuk menentukan jumlah loop atau perulangan dalam suatu fungsi sedangkan nilai yang diulang bermacam-macam bentuknya.

Pokok dari artikel ini adalah jika kita dapat mengambil jumlah dari suatu loop atau pengulangan dari suatu fungsi maka kita dapat menggunakan hasil dari jumlah pengulangan atau loop tersebut pada fungsi lainnya sehingga dapat mendukung konsep object oriented pada bahasa cpp dan program yang kita buat semakin efisien.
Sebagai contoh jika kita membuat program yang menghitung jumlah huruf, jumlah kata, jumlah kalimat dan jumlah paragraf, tentu kita harus menggunakan loop atau struktur pengulangan untuk menghitung dari setiap jumlah huruf, jumlah kata, jumlah kalimat dan jumlah paragraf dari setiap loop yang terjadi harus menghasilkan nilai jumlah dari loop atau pengulangan. Untuk lebih jelasnya perhatikan contoh kode pengulangan di bawah.

#include <iostream>

using namespace std;

int main(){
   while(j=11) {
      for (int k=1; k<=j; k++) {
         cout<<k*j<<;
         }
      cout<<'\n';
      j++;
      }
system("pause");
return 0;
}

Diharapkan hasilnya jika dijalankan akan seperti dibawah ini :

1
2 4
3 6 9
4 8 12 16
5 10 15 20 25
6 12 18 24 30 36
7 14 21 28 35 42 49
8 16 24 32 40 48 56 64
9 18 27 36 45 54 63 72 81
10 20 30 40 50 60 70 80 90 100

Seperti yang kita lihat hasilnya adalah sebuah fungsi perkalian 1 sampai 10 dan terdapat dua buah pengulangan pada fungsi diatas. Sekarang coba hitung jumlah pengulangan yang terjadi pada fungsi tersebut, jika kita melihat dari hasilnya maka dengan cepat kita akan menyimpulkan bahwa terdapat atau terjadi 10 kali pengulangan, benarkah ?
Jawabannya ya benar ada 10 kali pengulangan yang terjadi dalam satu fungsi tetapi ada berapa total semuanya? jawabannya adalah 66 kali,lihat gambar dibawah.

pengulangan exe
pengulangan exe
Pada setiap loop yang terjadi pada line kita dapat menghitungnya dan jumlah total line yang terjadi adalah 10 kali sehingga jika total line dan jumlah pengulangan yang terjadi di tiap line kita jumlahkan maka akan terdapat 66 kali pengulangan dalam aplikasi tersebut.

Kesimpulan : Loh kok 66 kali bukan 100 kali bukankah setiap loop di berikan nilai 10 dan terjadi sepuluh kali loop di tiap linenya?itu dengan variable integer loh, belom yang lainnya...bingung!!!, itulah inti dari tutorial ini bahwa menghitung jumlah loop sangat berguna dalam aplikasi kita, coba pelajari sendiri bagaimana itu terjadi dengan download contoh source code nya dan langsung dibuka dengan IDE CPP kesukaan kamu.
Selamat belajar dan berkarya, klo masih ada pertanyaan langsung saja berkomentar atau kontak saya di halaman kontak.

Minggu, 28 Februari 2016

Cara enabled disabled menu item android

Misalkan pada aplikasi android yang kita buat mempunyai opsi menu yang dinamis pada sebuah activity yang bertujuan untuk membuat aplikasi semakin bagus dan fungsionalitas, contohnya ketika user ingin mengedit tulisan pada edittext box maka user akan mengklik icon menu item edit dan icon save akan menjadi enabled sedangkan icon edit menjadi disabled yang sebelumnya icon save disabled dan icon edit enabled.
android_icon
Android Icon
Bagaimana cara untuk membuat suatu fungsi untuk mengimplementasikan kasus diatas dengan mudah dan benar pada project android kita, lihat source code berikut ini.

private MenuItem menusaya1;

@Overide
public boolean onCreateOptionsMenu (Menu menu) {
       MenuInflater inflater = getMenuInflater();
       inflater.inflate (R.menu.main_menu, menu);
       menusaya1 = menu.getItemId(0);
       return true;
}

public void sebuahmetode {
       menusaya1.setEnabled(true);
       menusaya1.setVisible(true);
       menusaya1.setIcon(R.drawable.ic_add);
}

Penjelasan : Ketika anda membuat menu maka metoda "public boolean onCreateOptionsMenu" akan terbentuk secara default pada MainActivity class, anda tinggal menambahkan atau mendeklarasikan variable "MenuItem" yang berisi "menusaya1".
Lalu panggil "menusaya1" dalam metoda "public boolean onCreateOptionsMenu" dan inisialisasi dengan "menu" untuk mendapatkan item id dari menu yang anda tuju, ini ditunjukkan pada nilai interger pada kode "getItemId(0)", angka nol itu adalah id menu yang anda tuju untuk mengisi dan menginisial variable "menusaya1".
Selanjutnya anda dapat memanggil variable "menusaya1" pada sebuah metoda yang mendefinisikan fungsi lain dari aplikasi kita dan kita dapat disabled atau enabled atau setvisible atau mengganti icon dari menu dari metoda tersebut sesuai kebutuhan.

Kesimpulan : Dengan membuat dinamis menu pada aplikasi android yang kita buat maka menurut saya semakin bagus dan fungsional aplikasi tersebut sehingga user merasa nyaman dan merasa mudah dalam mengoperasikan aplikasi kita.

Demikian tutorial kali ini, jika masih ada yang kurang jelas atau berdiskusi dapat berkomentar atau hubungi saya pada halaman kontak.

Minggu, 14 Februari 2016

Membuat teks file editor sederhana dengan bahasa C

Tutorial kali ini saya akan membagikan cara membuat sebuah file text editor sederhana untuk platform windows dengan menggunakan bahasa C dan editor yang saya gunakan adalah Dev-C++ versi 4.9.9.2, editor ini sangat ringan dan compiler nya dapat diganti dengan mudah dengan compiler yang lain sesuai dengan selera kita selain compiler defaultnya mingw, dan bisa di download situs resmi Dev-C++.
Tujuan dari tutorial ini adalah bagaimana cara kita membangun sebuah program dalam bahasa C dengan user interface yang dapat berjalan pada semua platform window tanpa harus menambahkan runtime library pada sistem, atau disebut juga native program jadi program yang kita buat sangat ringan untuk sistem kita.

Langkah 1. Buat new project
New_Project_Dev-cpp
New_Project_dev-cpp
Langkah 2. Akan muncul dialog window untuk memilih jenis project yang akan dibuat.
New_Project_dev-cpp_dialog
New_Project_dev-cpp_dialog
Langkah 3. Pilih Empty Project kemudian pilih C project dan beri nama project anda dan klik Ok,lalu akan muncul dialog save project. Pilih folder dimana project akan disimpan, sebaiknya simpan project anda pada folder Document,.lihat gambar.
New_Project_dev-cpp_savedialog
New_Project_dev-cpp_savedialog
Langkah 4. Tambahkan file baru pada project anda, lihat gambar.
New_file_project
New File Project
Langkah 5. Buat C main file dengan source code dibawah ini.


#include <windows.h>
#include "main.h"

static char g_szClassName[] = "MyWindowClass";
static HINSTANCE g_hInst = NULL;

#define IDC_MAIN_TEXT   1001

BOOL LoadFile(HWND hEdit, LPSTR pszFileName)
{
   HANDLE hFile;
   BOOL bSuccess = FALSE;

   hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
      OPEN_EXISTING, 0, 0);
   if(hFile != INVALID_HANDLE_VALUE)
   {
      DWORD dwFileSize;
      dwFileSize = GetFileSize(hFile, NULL);
      if(dwFileSize != 0xFFFFFFFF)
      {
         LPSTR pszFileText;
         pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);
         if(pszFileText != NULL)
         {
            DWORD dwRead;
            if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL))
            {
               pszFileText[dwFileSize] = 0; // Null terminator
               if(SetWindowText(hEdit, pszFileText))
                  bSuccess = TRUE; // It worked!
            }
            GlobalFree(pszFileText);
         }
      }
      CloseHandle(hFile);
   }
   return bSuccess;
}

BOOL SaveFile(HWND hEdit, LPSTR pszFileName)
{
   HANDLE hFile;
   BOOL bSuccess = FALSE;

   hFile = CreateFile(pszFileName, GENERIC_WRITE, 0, 0,
      CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
   if(hFile != INVALID_HANDLE_VALUE)
   {
      DWORD dwTextLength;
      dwTextLength = GetWindowTextLength(hEdit);
      if(dwTextLength > 0)// No need to bother if there's no text.
      {
         LPSTR pszText;
         pszText = (LPSTR)GlobalAlloc(GPTR, dwTextLength + 1);
         if(pszText != NULL)
         {
            if(GetWindowText(hEdit, pszText, dwTextLength + 1))
            {
               DWORD dwWritten;
               if(WriteFile(hFile, pszText, dwTextLength, &dwWritten, NULL))
                  bSuccess = TRUE;
            }
            GlobalFree(pszText);
         }
      }
      CloseHandle(hFile);
   }
   return bSuccess;
}

BOOL DoFileOpenSave(HWND hwnd, BOOL bSave)
{
   OPENFILENAME ofn;
   char szFileName[MAX_PATH];

   ZeroMemory(&ofn, sizeof(ofn));
   szFileName[0] = 0;

   ofn.lStructSize = sizeof(ofn);
   ofn.hwndOwner = hwnd;
   ofn.lpstrFilter = "Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0\0";
   ofn.lpstrFile = szFileName;
   ofn.nMaxFile = MAX_PATH;
   ofn.lpstrDefExt = "txt";

   if(bSave)
   {
      ofn.Flags = OFN_EXPLORER | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY |
         OFN_OVERWRITEPROMPT;
       
      if(GetSaveFileName(&ofn))
      {
         if(!SaveFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
         {
            MessageBox(hwnd, "Save file failed.", "Error",
               MB_OK | MB_ICONEXCLAMATION);
            return FALSE;
         }
      }
   }
   else
   {
      ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
      if(GetOpenFileName(&ofn))
      {
         if(!LoadFile(GetDlgItem(hwnd, IDC_MAIN_TEXT), szFileName))
         {
            MessageBox(hwnd, "Load of file failed.", "Error",
               MB_OK | MB_ICONEXCLAMATION);
            return FALSE;
         }
      }
   }
   return TRUE;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam)
{
   switch(Message)
   {
      case WM_CREATE:
         CreateWindow("EDIT", "",
            WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE |
               ES_WANTRETURN,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            hwnd, (HMENU)IDC_MAIN_TEXT, g_hInst, NULL);

         SendDlgItemMessage(hwnd, IDC_MAIN_TEXT, WM_SETFONT,
            (WPARAM)GetStockObject(DEFAULT_GUI_FONT), MAKELPARAM(TRUE, 0));
      break;
      case WM_SIZE:
         if(wParam != SIZE_MINIMIZED)
            MoveWindow(GetDlgItem(hwnd, IDC_MAIN_TEXT), 0, 0, LOWORD(lParam),
               HIWORD(lParam), TRUE);
      break;
      case WM_SETFOCUS:
         SetFocus(GetDlgItem(hwnd, IDC_MAIN_TEXT));
      break;
      case WM_COMMAND:
         switch(LOWORD(wParam))
         {
            case CM_FILE_OPEN:
               DoFileOpenSave(hwnd, FALSE);
            break;
            case CM_FILE_SAVEAS:
               DoFileOpenSave(hwnd, TRUE);
            break;
            case CM_FILE_EXIT:
               PostMessage(hwnd, WM_CLOSE, 0, 0);
            break;
            case CM_ABOUT:
               MessageBox (NULL, "File Editor for Windows !\n Using the Win32 API" , "About...", 0);
         }
      break;
      case WM_CLOSE:
         DestroyWindow(hwnd);
      break;
      case WM_DESTROY:
         PostQuitMessage(0);
      break;
      default:
         return DefWindowProc(hwnd, Message, wParam, lParam);
   }
   return 0;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
   LPSTR lpCmdLine, int nCmdShow)
{
   WNDCLASSEX WndClass;
   HWND hwnd;
   MSG Msg;

   g_hInst = hInstance;

   WndClass.cbSize        = sizeof(WNDCLASSEX);
   WndClass.style         = 0;
   WndClass.lpfnWndProc   = WndProc;
   WndClass.cbClsExtra    = 0;
   WndClass.cbWndExtra    = 0;
   WndClass.hInstance     = g_hInst;
   WndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
   WndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);
   WndClass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
   WndClass.lpszMenuName  = "MAINMENU";
   WndClass.lpszClassName = g_szClassName;
   WndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);

   if(!RegisterClassEx(&WndClass))
   {
      MessageBox(0, "Window Registration Failed!", "Error!",
         MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
      return 0;
   }

   hwnd = CreateWindowEx(
      WS_EX_CLIENTEDGE,
      g_szClassName,
      "File Editor Example Program",
      WS_OVERLAPPEDWINDOW,
      CW_USEDEFAULT, CW_USEDEFAULT, 320, 240,
      NULL, NULL, g_hInst, NULL);

   if(hwnd == NULL)
   {
      MessageBox(0, "Window Creation Failed!", "Error!",
         MB_ICONEXCLAMATION | MB_OK | MB_SYSTEMMODAL);
      return 0;
   }

   ShowWindow(hwnd, nCmdShow);
   UpdateWindow(hwnd);

   while(GetMessage(&Msg, NULL, 0, 0))
   {
      TranslateMessage(&Msg);
      DispatchMessage(&Msg);
   }
   return Msg.wParam;
}


lalu simpan dengan file extensi C dengan nama "main", lihat gambar.
save_C_file
save main C file
Langkah 6. Buat H main file pada project dan simpan dengan nama "main"tetapi dengan ekstensi file H, lihat source codenya dibawah.

#define CM_FILE_SAVEAS 9072
#define CM_FILE_EXIT 9071
#define CM_FILE_OPEN 9070
#define CM_ABOUT        9069

Langkah 7. Kemudian buat file RC pada project dan simpan dengan nama "menu" dengan ekstensi RC. File menu.rc ini adalah file yang mendefinisikan nama menu pada aplikasi yang akan kita buat. Source code nya lihat dibawah.

#include "main.h"

MAINMENU MENU
{
 POPUP "&File"
 {
  MENUITEM "&Open...", CM_FILE_OPEN
  MENUITEM "Save &As...", CM_FILE_SAVEAS
  MENUITEM SEPARATOR
  MENUITEM "E&xit", CM_FILE_EXIT
 }

 POPUP "&Help"
 {
  MENUITEM "&About", CM_ABOUT
 }
}

Langkah 8. Setelah semua file dibuat maka selanjutnya compile project, lihat gambar dibawah.
compile_new_project
Compile new project
Langkah 9. Jika tidak ada yang error maka kompilasi file pada project maka dialog compile done akan muncul.
Compile_done_new_project
Compile done
Langkah 10. Jalankan aplikasi file editor dengan memilih menu "run" pada menu, atau dengan Crtl+F10.Lihat gambar aplikasi yang sudah berjalan.
running_fileeditor.exe_application
Running_fileeditor.exe_aplication
Kesimpulan : Pada tutorial project file editor ini kita dapatkan 3 pelajaran penting yaitu tentang membuat windowed aplikasi, membuat menu pada aplikasi dan mengakses direktori sistem untuk membuka text file, kita dapat mempelajari satu demi satu fungsi dari ketiga pelajaran diatas dengan mengamati source code nya.

Masih bingung dengan tutorial ini, langsung saja download projectnya disini supaya langsung dapat dibuka dengan editor dev-c++ dan dijalankan.