Sabtu, 28 April 2012

Tahapan-Tahapan Pemecahan Masalah

Tahapan-Tahapan Pemecahan Masalah

Penyelesaian masalah merupakan sebagian pemikiran. Dianggap sebagai fungsi intelektual yang paling rumit, penyelesaian masalah telah ditakrifkan sebagai satu proses kognitif yang berperingkat tinggi dan yang memerlukan pemodulatan  serta pengawalan kemahiran-kemahiran yang lebih rutin atau asas. Penyelesaian masalah berlaku apabila sebuah organisme  atau sistem  kecerdasan buatan tidak tau bagaimana menuju dari pada satu keadaan yang diberikan kepada satu keadaan sasaran yang diingini. Ia merupakan sebagian dari pada proses masalah  yang lebih besar yang meliputi pencarian masalah  serta  pembentukan masalah.
Tahapan-Tahapan Pemecahan Masalah
Herbert A.Simin mendefinisikan empat tahapan dasar pemecahan masalah yang telah diakui secara universal, yaitu;
Ø Aktivitas intelejen:Mencari kondisi-kondisi yang membutuhkan solusi di dalam lingkungan
Ø Aktivitas perancangan:Menemukan,mengembangkan  dan menganalisis kemungkinan-kemungkinantindakan
Ø Aktivitas pemilihan:Memilih salah satu tindakan tertentu dari berbagai tindakan yang tersedia
Ø Aktivitaas peninjauan :Menilai pilihan-pilihan tertentu masa lalu untuk melakukan masing-masing aktivitas,pemecah masalah harus memiliki informasi yang akurat,relevan,tepat waktu dan lengkap,sehingga keputusan tersebut mencerminkn sebagai kondisi yang ada  

Elemen-elemen pemecahan masalah
1. IDENTIFIKASI MASALAH
Ini langkah pertama yang harus dilakukan. Dalam situasi ini masalah baru saja muncul.
contoh: Membuat polisi tidur yang tidak cepat rusak dan dengan biaya yang murah.
2. SINTESIS MASALAH
Langkah-langkah kreatif yang dapat ditempuh untuk menghubungkan semua rumusan masalah menjadi satu kesatuan ide.
contoh: pergi menemui orang teknik sipil untuk menentukan bahan yang akan digunakan.
3. ANALISIS MASALAH
Tahap dimana masalah dipotong-potong jadi bagian yang kecil-kecil. Atau lebih tepatnya cakupan masalah dibuat lebih detail. Biasanya engineer focus ada pada tahap ini. Pada tahap ini kemampuan logika seorang engineer diuji, untuk membuat opini, mendeteksi error, membuat kesimpulan dari bukti-bukti, dan sebagainya.
contoh: Memikirkan dan membandingkan bahan-bahan yang dibutuhkan untuk membuat polisi tidur yang berkualitas bagus dengan biaya yang hemat.
4. APLIKASI
Tahap memcocokkan permasalahan dengan jawaban yang ada berdasarkan informasi yang akurat dan tepat.
contoh: supaya polisi tidur yang dibuat berkualitas maka perbandingan semen, pasir, dan air harus tepat. misal perbandingannya 2:1:2
5. KOMPREHENSI
Tahap yang mana penggabungan antara teori yang ada dengan data yang ada untuk memecahkan masalah.
contoh: dengan menggunakan rumus gaya tekan kebawah, kita dapat menyimpulkan berapa besar gaya tekan maksimal yang dapat ditahan dengan formula bahan .

Rabu, 18 April 2012

latihan array c++

#include<conio.h>
#include<stdio.h>
#include<iostream.h>
#include<iomanip.h>

main()
{
int a;
char nim[10][10],nama[10][30],kelas[10][10];
cout<<"data mahasiswa"<<endl;
cout<<"================"<<endl;
for(a=1;a<=2;a++)
 {
 cout<<"data ke-"<<a<<endl;
 cout<<"nim =";cin>>nim[a];
 cout<<"nama=";cin>>nama[a];
 cout<<"kelas=";cin>>kelas[a];
 cout<<endl;
 }
cout<<"data mahasiswa"<<endl;
cout<<"_______________"<<endl;
cout<<"no  nim  nama  kelas  "<<endl;
cout<<"________________________"<<endl;
for(a=1;a<=2;a++)
{
cout<<setiosflags(ios::left)<<setw(6)<<a;
cout<<setiosflags(ios::left)<<setw(12)<<nim[a];
cout<<setiosflags(ios::left)<<setw(12)<<nama[a];
cout<<setiosflags(ios::left)<<setw(12)<<kelas[a];
cout<<endl;
}
cout<<"_________________________"<<endl;
getch();
}

hasil program :

Selasa, 17 April 2012

Borland C++


ALGORITMA DAN PEMROGRAMAN 2
Oleh: Anis Cherid, M.T.I.


STRING DALAM BAHASA C
      Dalam bahasa pemrograman C,  string adalah array bertipe karakter (char). Untuk menampilkan string yang dikandung oleh sebuah array, karakter format yang yang dipergunakan adalah "%s". Ketika kita menginstruksikan komputer untuk menampilkan string,  komputer akan memeriksa satu per satu elemen array dan menampilkannya ke layar monitor.  Komputer akan berhenti memeriksa elemen array yang selanjutnya jika menemukan null character ('\0').  Perhatikan program di bawah ini:
#include <stdio.h>
void main(){
   char nama[20];
   nama[0]='B';
   nama[1]='u';
   nama[2]='d';
   nama[3]='i';
   nama[4]='m';
   nama[5]='a';
   nama[6]='n';
   nama[7]='\0';
   printf("%s\n",nama);
     /* output : Budiman */
  nama[4]='\0';
  printf("%s\n",nama);
     /* output : Budi ---- karena elemen 4 berisi null */
}

      String juga bisa dideklarasikan dan sekaligus diinisialisasi dengan cara sebagai berikut:
char namaSaya[20]="Budiman";
char namaDia[]="Wati";
char *namaNya="Indah";
char namaKu[]={'B','u','d','i','m','a','n','\0'};

      Berbeda dengan Bahasa Pascal,  Bahasa C tidak mengijinkan diisinya sebuah nilai string secara langsung, sehingga statement berikut ini akan menimbulkan compile error:
namaKu[]="Budiman"; /* ERROR */
namaKu="Budiman"; /* JUGA ERROR */
Untuk mengisi string dengan sebuah nilai secara langsung,  kita harus menggunakan fungsi strncpy (singkatan dari string-n-copy) atau fungsi sprintf (singkatan dari string-print-format). Untuk menggunakan fungsi strncpy dibutuhkan file header <string.h>. Berikut ini adalah bentuk pemanggilan kedua fungsi tersebut:
strncpy (string tujuan, string asal, jumlah karakter string asal yang akan disalin);
sprintf (string tujuan, "format string", var1, var2, var3, ...);

#include <stdio.h>
#include <string.h>
void main(){
   char namaKu[256]="Budiman";
   char namaSaya[256]="12345678901234567890";
   int umurSaya=35;
   strncpy(namaSaya,"Bukan Budiman",13);
   printf("%s\n",namaSaya);
     /* output : Bukan Budiman4567890
      "Bukan Budiman" = 13 huruf + 1 karaker NULL.
      Jika disalin sebanyak 13 huruf ke string namaSaya,
      maka karakter NULL tidak dikopi ke dalam string namaSaya
      */
  strncpy(namaSaya,"Adi",4);
   printf("%s\n",namaSaya);
      /* ouput : Adi
      "Adi" = 3 huruf + 1 karakter NULL.
      Jika dikopi sebanyak 4 huruf, maka karakter NULL
      ikut terkopi ke dalam string namaSaya
      */  
   strncpy(namaSaya,namaKu,256);
   /* cara paling baik menggunakan fungsi strncpy, yaitu
      menuliskan jumlah karakter yang akan dikopi sebanyak
      ukuran maksimum string tujuan.
   */
   printf("%s\n",namaSaya);
     /* output : Budiman */
   sprintf(namaSaya, "%s adalah %s dan berumur %d tahun",
        namaKu, namaKu, umurSaya);
   printf(namaSaya);
     /* output : Budiman adalah Budiman dan berumur 35 tahun
     */
}


      Untuk mengisi variabel string dari keyboard, Bahasa C menyediakan fungsi fgets dan fflush. Kombinasi kedua fungsi ini akan menghasilkan efek yang sama dengan instruksi readln dalam Bahasa Pascal. Perhatikan cara penggunaannya dalam program di bawah ini:
/* Contoh penggunaan FGETS dan FFLUSH untuk membaca string
      dari keyboard */
#include <stdio.h>
#include <string.h>
void main(){
   char nama[11];
   printf("Silakan masukkan nama anda:");
  fgets(nama,11,stdin);
  fflush(stdin);
  printf("Selamat pagi, %s.\n",nama);
   printf("%s mempunyai 2 e-mail pagi ini.",nama);
}

Dalam program di atas,  jika nama yang diketikkan lebih dari 10 karakter,  maka karakter ke-11 dan seterusnya akan diabaikan. Tetapi jika nama yang dimasukkan 9 karakter atau kurang,  maka string akan diakhiri dengan NEWLINE-CHARACTER dan NULL-CHARACTER ("\n\0"). Dalam contoh program di atas,  jika nama yang dimasukkan adalah "Sukmawati" (9 karakter),  maka output yang dihasilkan adalah:
Selamat pagi, Sukmawati
.
Sukmawati
 mempunyai 2 e-mail pagi ini.

Ini adalah masalah dari fungsi fgets yang harus ditangani oleh pemrogram. Untuk menangani masalah tersebut, program harus mampu memeriksa jika elemen array string sebelum NULL-CHARACTER adalah NEWLINE-CHARACTER, kemudian menggantinya "\n" tersebut dengan "\0". Perhatikan program di bawah ini,  yang merupakan perbaikan dari program sebelumnya:

/* Perbaikan untuk mengatasi masalah NEWLINE-CHARACTER */
#include <stdio.h>
#include <string.h>
void main(){
   char nama[11];
  int i,max=10;
   do {
     printf("Silakan masukkan nama anda:");
     fgets(nama,11,stdin);
     fflush(stdin);
     for (i=0;i<=max;i++){
        if(nama[i]=='\n'){
           nama[i]='\0';
           break;  /*Keluar dari for-loop*/
        }
     }
     if (i>0){
        break;  /*Keluar dari while-loop*/
     } else {
        printf("Anda belum memasukkan nama...\n");
     }
   } while (i==0);

  printf("Selamat pagi, %s.\n",nama);
   printf("%s mempunyai 2 e-mail pagi ini.",nama);
}

Contoh program di atas terdiri dari sebuah do/while-loop dan di dalam do/while-loop tersebut terdapat for-loop. Struktur do/while-loop dalam program di atas berguna untuk memastikan bahwa operator sudah memasukkan namanya, meskipun hanya terdiri dari sebuah karakter.  Sedangkan struktrur for-loop berguna untuk mengganti NEWLINE-CHARACTER dengan NULL-CHARACTER. Struktur perulangan untuk mengganti karakter tersebut dapat disederhanakan dengan menggunakan fungsi yang berguna untuk menentukan lokasi sebuah karakter di dalam sebuah string (fungsi strchr), sehingga:
     for (i=0;i<=max;i++){
        if(nama[i]=='\n'){
           nama[i]='\0';
           break;  /*Keluar dari for-loop*/
        }
     }

dapat diubah menjadi:
     if(strchr(nama,'\n')){
         strchr(nama,'\n')[0]='\0';
      }


      Bahasa Pascal mengijinkan dilakukannya operasi penjumlahan string, misalnya namaLengkap:='Ahmad'+' '+'Dahlan'. Dalam Bahasa C, diperlukan fungsi strcat.

/* Contoh Menjumlahkan String dengan STRCAT */
#include<stdio.h>
#include<string.h>
void main(){
   char namaLengkap[256];
   char *namaDepan="Kyai";
   char *namaTengah="Ahmad";
   char *namaBelakang="Dahlan";
   strcat(namaLengkap,namaDepan);
   printf("%s\n",namaLengkap);
   /*output: Kyai*/
   strcat(namaLengkap," ");
   strcat(namaLengkap,namaTengah);
   printf("%s\n",namaLengkap);
   /*output: Kyai Ahmad*/ 
   strcat(namaLengkap," ");
   printf("%s\n", strcat(namaLengkap,namaBelakang));
   /*output: Kyai Ahmad Dahlan*/
}


      Untuk mencari terdapat atau tidaknya sebuah string di dalam string lainnya, fungsi yang dipergunakan adalah strstr.
/* Contoh mencari string di dalam string dengan STRSTR */
#include<stdio.h>
#include<string.h>
void main(){
   char namaLengkap[]="Kyai Ahmad Dahlan";
   char namaDicari[]="Dahlan";
   if (strstr(namaLengkap,namaDicari)){
     printf("%s terdapat dalam %s",namaDicari,namaLengkap);
   }
}

Program di atas akan menghasilkan output:
Dahlan terdapat dalam Kyai Ahmad Dahlan.

Di bawah ini disajikan program Pascal untuk memisahkan digit bilangan integer dengan tanda titik dan mengubah tanda desimal dari titik menjadi koma.
program format_bilangan_dengan_pemisah_angka;
uses wincrt;
function formatstrbil(i:string):string;
var
   j:integer;
begin
j:=pos('.',i);
if j<>0 then begin
   i[j]:=',';
   j:=j-1;
end else
   j := length(i);
while j>3 do begin
   j := j - 3;
   insert ('.', i, j+1);
end;
formatstrbil:=i;
end;
var
   strbil:string;
   bil:real;
   posisiError:integer;
begin
   posisiError := 0;
   repeat
      write('Silakan masukkan sebuah bilangan: ');
      readln(strbil);
      val(strbil, bil, posisiError);
      if posisiError<>0 then
         writeln('Yang anda masukkan bukan bilangan real');
   until posisiError = 0;
   writeln(formatstrbil(strbil));
end.

Hasil penerjemahan program di atas menjadi program Bahasa C dapat dilihat di bawah ini. Program berbahasa C ini sangat intensif menggunakan pointer dan menggunakan fungsi strtod untuk mengkonversi string menjadi bilangan bertipe double.
/* Format bilangan dengan pemisah angka */
#include <stdio.h>
#include <string.h>
#include <stdlib.h> /* untuk fungsi strtod */

void formatstrbil(char *i){
   char *j, *k, temp[256];
   int p, ptemp=0;
   j = k = strchr(i,'.');
   if (j>0){
      p = strlen(i)-1;
      while (p>j-i){
         temp[ptemp++]=i[p];
         p--;
      }
      temp[ptemp++]=',';
      k = --j;
   } else {
      j = k = strchr(i,0) - 1;
   }
   while (j-i>=0){
     temp[ptemp++]= j[0];
      if ((k-j+1)%3==0 && k-j!=0 && j-i!=0){
         temp[ptemp++]= '.';
      }
      j--;
   }
   ptemp--;
   p=0;
   while (ptemp>=0)
      i[p++]=temp[ptemp--];
   i[p]=0;
}

main(){
   char strbil[256], *error;
   double bil;
   do {
      printf("Silakan masukkan sebuah bilangan: ");
      fgets(strbil, 256, stdin);
      if (strchr(strbil, '\n')) strchr(strbil, '\n')[0]=0;
      bil = strtod(strbil, &error);
      if (*error!=0)
         printf("Yang anda masukkan bukan bilangan double\n");
   } while (*error!=0);
   formatstrbil(strbil);
   printf(strbil);
}


Berikut ini adalah program untuk menampilkan tulisan bergerak seperti dalam "news ticker". Di dalamnya terdapat algoritma untuk melakukan jeda (pause) selama durasi tertentu, dengan ketentuan bahwa 1 durasi sama dengan 1 timer-tick atau 1/18 detik.
/* Program News Ticker */
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <dos.h>  /* dibutuhkan untuk tipe struct time dan fungsi
                        gettime() */
main(){
   char a[256];
   int i, mulai, durasi;
   struct time tmulai;
   clrscr();
   printf("Silakan masukkan teks untuk ditampilkan:");
   fgets(a, 256, stdin);
   if (strchr(a, '\n')) strchr(a, '\n')[0]=0;
   for (i=80-strlen(a); i>0; i--) strcat(a," ");
   clrscr();
   do {
      a[255]=a[0];
      i=0;
      while (a[i]!=0){
         a[i]=a[i+1];
         i++;
      }
      a[i-1]=a[255];
      a[255]=0;
      gotoxy(1,10);
      printf("%80s",a);
      gettime(&tmulai);
      durasi=3; /* 3 timer-tick */
      do {
         mulai = tmulai.ti_hund;
         do {
           gettime(&tmulai);
         } while (mulai==tmulai.ti_hund);
      } while (--durasi);
  } while (!kbhit());
}

Berikut ini disajikan program untuk menampilkan penyebutan bilangan. Program ini secara intensif menggunakan array di dalam algoritmanya, sehingga terlihat rumit. Di dalamnya terdapat teknik agar sebuah fungsi bisa mengembalikan nilai dalam bentuk string.
/* Program mengubah bilangan integer menjadi string penyebutannya */
#include <stdio.h>
#include <math.h>

char *penyebutan(long double);

void main(){
   long double x=112456709123450.0;
   printf(penyebutan(x));
}

char *penyebutan(long double b){
   char *unit[]={"trilyun","milyar","juta","ribu",""};
   char *bilangan[]={"se","dua","tiga","empat","lima","enam","tujuh",
   "delapan","sembilan","sepuluh","sebelas","duabelas","tigabelas",
   "empatbelas","limabelas","enambelas","tujuhbelas","delapanbelas",
   "sembilanbelas"};
   static char str[256];
   int a[15],i, belas;
   str[0]=0;
   for (i=0;i<15;i++){
      a[i]=b/pow(10,14-i);
      b=b-a[i]*pow(10,14-i);
   }
   belas=0;
   for (i=0;i<15;i++){
      if (a[i]!=0){
         if (a[i]==1&&i%3==1){
            strcat(str, bilangan[a[i]*10+a[i+1]-1]);
            belas=1;
         } else if (a[i]==1&&(i%3!=0&&i!=9)&&i%3!=1){
            strcat(str, "satu");
         } else {
            strcat(str, bilangan[a[i]-1]);
         }
         if(i%3==0){
            strcat (str, "ratus ");
         } else if(i%3==1&&!belas){
            strcat(str, "puluh ");
         }
      }
      i+=1*belas;
      if (i%3==2&&(a[i-2]!=0||a[i-1]!=0||a[i]!=0)){
         strcat(str, " ");
         strcat(str, unit[i/3]);
         strcat(str, " ");
      }
      i+=1*belas;
      belas=0;
   }
   return str;
}


REFERENSI
[BOR97] Borland. 1997. Turbo C++ 5.0 Help. Borland Inc.

Created : ass_oryza