BELAJAR PROGRAM ARRAY

ARRAY

DEFINISI
Array atau Larik adalah :
Type data terstruktur yang terdiri dari sejumlah elemen dimana setiap elemennya mempunyai tipe data yang sama atau sejenis (setype).
  Larik dimanipulasikan dengan memanfaatkan index (subscript) dari tiap elemen larik tersebut.

Array Dimensi Satu
Array bisa dideklarasikan pada bagian deklarasi type atau bagian deklarasi Var.
Bentuk 1 :
               Var
                                NamaArray : Array[TypeIndex] Of TypeLarik;
Bentuk 2 :
               Type
                                NamaType = Arrat[TypeIndex] Of Type Larik;
                    Var
                                NamaVarArray : NamaType;
NamaLarik     :    Nama Variable bertype Array.
Type Larik      :    Type datanya.  Type larik dapat berupa integer, real, char, string atau record.
TypeIndex      :    data bertype ordinal seperti char, byte, integer atau enumerated.  Type Index dapat berupa NamaType atau Sub Range Langsung.
Contoh deklarasi  :
Type
            Daftar_nilai : array [1..5] of integer;
Var
            Nilai : daftar_nilai;
Atau dapat ditulis pada bagian var saja :
Var
            Nilai : array [1..5] of integer;
Dari deklarasi diatas mempunyai arti :
Variable array yang bernama Nilai mempunyai 5 buah elemen (dengan indeks 1 sampai 5) dan masing-masing elemen bertipe integer.
Dari deklarasi Array diatas dapat direpresentasikan  didalam memori  sebagai berikut :







Nilai
 

 


 


Elemen array yang masing-masing harus bertipe integer, sesuai tipe yang dideklarasikan
 
 


Tiap kotak disebut dengan elemen array, berfungsi seperti halnya variable, dapat diisi dengan sebuah data dari type tertentu sesuai yang dideklarasikan.  Tiap kotak mempunyai ‘nomor’ / ‘alamat’ yang disebut dengan index yang berfungsi untuk memberi identitas kotak tersebut.

Cara mengakses elemen array dimensi satu

Elemen array bisa diakses dengan cara menyebutkan nama array diikuti nilai indeksnya didalam kurung siku.
Nilai [1], ini berarti mengakses nilai elemen pertama.
Untuk memberikan nilai ke array, bisa menggunakan 2 cara, yaitu :
Dengan operator penugasan (:=)
Nilai [1] := 0 , elemen pertama dari nilai diberi nilai 70
Dengan statemen Read/readln
Read (nilai[1]);
Read (nilai[2]);
Jika menggunakan perintah ini banyaknya perintah yang diberikan harus sebanyak elemen yang dideklarasikan pada deklarasi array, sehingga bias digunakan perintah perulangan seperti berikut :
For I := 1 to 5 do
  Begin
        Readln(nilai[I]);
End;

Untuk mengambil nilai/membaca elemen dari array dimensi satu digunakan statemen Write
Write (nilai[1]);
Untuk mempersingkat program dipergunakan perintah berikut :
For I := 1 to 5 do
  Begin
        Writeln(nilai[I]);
End;

Contoh 1 :
program 1;
uses crt;
const
    max_test = 4;
type
    data_nilai = array[1..max_test] of integer;
var
    i,jum : integer;
    rata  : real;
    nilai_test : data_nilai;

begin
    clrscr;
    {memasukkan data}
    for i := 1 to max_test do
      begin
        write ('masukkan nilai test ke ',i,' = ');
        readln (nilai_test[i]);
      end;
    {menhitung total nilai dan rata-rata}
    jum := 0;
    for i := 1 to max_test do
      begin
        jum := jum + nilai_test[i];
      end;
    rata := jum / max_test;
    {mencetak}
    writeln ('Total nilai     = ',jum);
    writeln ('Rata-rata nilai = ',rata:5:2);
    readln;
end.

Array Dimensi Dua

Array berdimensi dua mempunyai bentuk table yang menpunyai 2 indeks, baris dan kolom

Format :
Deklarasi array dimensi dua bisa ditempatkan pada bagian type ataupun Var seperti halnya array dimensi satu.

Bentuk 1:
      Var
                NamaLarik : Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik;

Bentuk 2 :

        Type
                NamaType = Array[TipeIndexBaris,TypeIndexCol] Of TypeLarik;
        Var
                NamaVarArray : NamaType;

Indeks1 biasa disebut indeks baris yang menunjukkan banyaknya baris, sedang indeks2 disebut indeks kolom yang menunjukkan banyaknya kolom.
Contoh :
Var
      Nilai_mhs : array [1..100,1..3] of integer;
Dari deklarasi array 2 dimensi diatas dapat direpresentasikan dalam memori seperti berikut :


Kolom 1
Kolom 2
Kolom 3
Baris 1



Baris 2



Baris 3























Baris 100




Baris menunjukkan banyaknya mahasiswa, sedang kolom menunjukkan banyaknya nilai

Cara mengakses elemen array dimensi dua
Untuk mengakses elemen pada array dimensi 2 bisa disebutkan nama array diikuti dengan indeks baris dan indeks kolomnya.
Nama array [indeks_baris, indeks_kolom]

Untuk memberi nilai ke array, bisa dengan dua cara
Dengan operator penugasan (:=)
Nilai_mhs[4, 1] := 80;  
Berarti memberikan nilai 80 langsung kedalam elemen array baris ke 4 kolom ke 1
Dengan pernyataan masukan (read/readln)
Read (Nilai_mhs [4, 1]);
Berarti memberikan nilai kedalam elemen array baris ke 4 kolom ke 1 melalui keyboard
Banyaknya perintah yang diberikan dengan statemen diatas sesuai dengan banyaknya elemen array, yaitu jumlah baris dikalikan jumlah kolomnya. Untuk mempersingkat perintah bisa dipergunakan perintah perulangan, untuk deklarasi diatas bisa dipergunakan perintah berikut :
For I := 1 to 100 do
  Begin
      For J := 1 to 3 do
        begin
           Readln(Nilai_mhs[I,J);
       End;
End;
Dengan variable I mewakili baris dan variable J mewakili kolom.

Untuk mengambil atau mencetak nilai dari array, digunakan pernyataan keluaran (write/writeln)
Write (Nilai_mhs [4, 1]);
Untuk mempersingkat perintah bisa dipergunakan perintah perulangan, untuk deklarasi diatas bisa dipergunakan perintah berikut :

For I := 1 to 100 do
  Begin
      For J := 1 to 3 do
        begin
           Writeln(Nilai_mhs[I,J);
       End;
End;

Dengan variable I mewakili baris dan variable J mewakili kolom.
Contoh 2:
Program lat2;
Uses Crt;
Const          N = 10;
Var
                      Nim  : Array[1..N] Of integer;
                      Nama : Array[1..N] Of String[20];
                      IP   : Array[1..N] Of real;
                I    : Integer;
Begin
Clrscr;
{Baca Data}
Writeln(‘Masukkan’,N,‘buah data’);
For I := 1 to N Do
                Begin
                Write(‘No.Mhs   : ’);Readln(NIM[I]);
                Write(‘Nama Mhs : ’);Readln(Nama[I]);
                Write(‘IP Mhs   : ’);Readln(IP[I]);
                End;
{Cetak Hasil}
Writeln(‘Daftar Nilai’);
Writeln(‘No  NIM       NAMA      IP’);
For I := 1 to N Do
                      Writeln(‘I:2, Nim[I]:10, Nama[I]:15, IP[I]:6:2);
Readln
End.
Contoh 3 :
program lat3;
uses crt;
type
    data_nilai = array[1..100,1..3] of integer;
var
    max_siswa,i,j,jum : integer;
    rata : real;
    nilai_test : data_nilai;

begin
 clrscr;
 {memasukkan data}
 write ('masukkan jumlah siswa = ');
 readln (max_siswa);
 for i := 1 to max_siswa do
   begin
    writeln ('data Mahasiswa ke ',i,' = ');
     for j := 1 to 3 do
       begin
        write ('masukkan nilai test ke ',i,' = ');
        readln (nilai_test[i,j]);
       end;
   end;
    {menhitung total nilai dan rata-rata}
    clrscr;
    writeln ('DAFTAR NILAI');
    write ('No ');
    for i := 1 to 3 do
       write ('nilai ke-',i,'  ');
       writeln ('rata-rata');
       writeln;
    for i := 1 to max_siswa do
       begin
        jum := 0;
        for j := 1 to 3 do
         jum := jum + nilai_test[i,j];
         rata:= jum / 3;
        write (i:2);
       for j := 1 to 3 do
          write ('    ',nilai_test[i,j],'':7);
          writeln(rata:5:2);
       end;
    readln;
end.

Contoh 4 :
program lat4;
uses crt;

type
    tabel = array[1..10,1..10] of integer;

var
    matrixA,matrixB,mat_kali,mat_plus : tabel;
    No_baris,baris,kolom : integer;

procedure baca (var mat :tabel; var no_baris : integer);
var
    i,j : integer;

begin
    for i := 1 to baris do
       begin
          for j := 1 to kolom do
             begin
                gotoxy((j-1)*5+1,No_baris);
                read(mat[i,j])
             end;
          no_baris :=no_baris + 1;
          writeln;
       end;
end;

procedure kali (var mat_kali :tabel; matA,matB : tabel);
var
    i,j,k : integer;

begin
    for i := 1 to baris do
      for j := 1 to kolom do
         begin
             mat_kali[i,j] := 0;
             for k := 1 to baris do
             mat_kali[i,j] := mat_kali[i,j] + matA[i,k] * matB[k,j];
         end;
end;

procedure plus (var mat_plus :tabel; matrixA,matrixB : tabel);
var
    i,j : integer;

begin
    for i := 1 to baris do
     begin
      for j := 1 to kolom do
        begin
          mat_plus[i,j] := matrixA[i,j] + matrixB[i,j];
        end;
      end;
end;

procedure cetak (matrix : tabel);
var
    i,j : integer;

begin
    for i := 1 to baris do
     begin
       for j := 1 to kolom do
         begin
           write(matrix[i,j]:8);
         end;
       writeln;
     end;
end;

begin
     repeat
        clrscr;
        writeln ('perkalian dan penjumlahan matriks');
        No_baris := 6;
        write ('masukkan baris = '); readln(baris);
        write ('masukkan kolom = '); readln(kolom);
       if kolom <> baris then
          begin
           writeln ('banyaknya kolom harus sama dengan kolom');
           write ('tekan enter untuk ulangi');readln;
          end;
     until kolom = baris;

     writeln('MATRIKS A ');
     baca(matrixA,No_baris);
     writeln;
     writeln('MATRIKS B ');
     no_baris := 15;
     baca(matrixB,No_baris);
     kali(mat_kali,matrixA,matrixB);
     plus(mat_plus,matrixA,matrixB);
     clrscr;
     writeln('hasil');writeln;
     writeln('MATRIKS A =');writeln;
     cetak(matrixA);writeln;
     writeln('MATRIKS B =');writeln;
     cetak(matrixB);writeln;
     writeln('matrik A kali matriks B =');writeln;
     cetak(mat_kali);
     writeln;writeln;
     writeln('matriks A tambah matrik B =');writeln;
     writeln;
     cetak(mat_plus);
     readln;readln;
end.





FUNGSI DAN PROCEDURE

Pemrograman dengan menggunakan konsep subprogram merupakan konsep yang paling bermanfaat dan produktif,  dan penggunaan subprogram ini bisa mempertinggi derajad pemrograman terstruktur. Dalam pascal subprogram ini dikenal dengan istilah Procedure dan Function.
Modularisasi akan memberikan keuntungan :
;    Untuk aktivitas yang harus dilakukan lebih dari satu kali, modul program cukup ditulis sekali saja, lalu modul tersebut bisa dipanggil dari bagian lain dalam program.
;    Kemudahan menulis dan menemukan kesalahan program.
Di dalam Pascal terdapat dua jenis procedur dan fungsi, yaitu procedur dan fungsi bawaan (standard) yang sudah disediakan oleh pascal dan procedur dan fungsi yang diciptakan sendiri oleh pemrogram.

5.1.            PROCEDURE DAN FUNGSI STANDARD

5.1.1.            FUNGSI STANDARD

Fungsi adalah suatu routine yang terdefinisi, baik di definisikan oleh PASCAL (fungsi standard) maupun didefinisikan oleh pemakai (user define function).  Fungsi dapat kita bedakan dari hasil fungsinya, yang dapat berupa String, Numeric atau Boolean. Berikut ini adalah fungsi-fungsi pustaka ynag sudah terdefinisi dalam PASCAL.
1.         Fungsi Standard Aritmatika
Abs(x)          :    Menghasilkan nilai mutlak dari x, x real atau integer.
Exp(x)          :    Menghasilkan , x real atau integer.
 Ln(x)           :    Menghasilkan logaritma natural x.
Int(x)           :    Menghasilkan nilai integer dari x, x real.
Frac(x)        :    Menghasilkan bagian pecah dari x yang real.
Sqr(x)          :    Menghasilkan nilai kuadrat dari x, x real atau integer.
Sqrt(x)         :    Menghasilkan akar kuadrat dari x, x real.
Sin(x)           :    Sinus x, x real.
Cos(x)          :    Cosinus x, x real.
ArcTan(x)    :    Arch Tg x.
Random(x)  :    Menghasilkan bilangan bulat acak dari 0 – x.
2.         Fungsi Standard String
Copy(s,I,n)   :    Menyalin n buah character mulai dari posisi i dari string x.
Pos(s1,s2)    :    Menghasilkan posisi suatu string s1 dalam string s2.
Length(s)     :    Menghasilkan panjang suatu string s.
Readkey      :    Menghasilkan satu character yang diketik dari keyboard.  Bersifat menunggu masukkan satu character.
3.         Fungsi Standard Transfer
Ord(x)         :    Menghasilkan KODE ASCII dari x, x bertype Char.
Chr(x)          :    Menghasilkan character yang berkode ASCII x.
Round(x)     :    Menghasilkan nilai longint yang terdekat dari x real sesuai dengan aturan pembulatan.
Trunc(x)      :    Menghasilkan nilai longint yang terkecil dari x real.
Upcase(x)    :    Menghasilkan huruf besar.

5.1.2.  PROCEDURE STANDARD


Procedure standard adalah suatu routine yang juga siap pakai dan dipanggil dengan menyebutkan nama procedure dengan memberikan argumen yang sesuai.  Berikut adalah procedure-procedure standard yang   sering kita pakai.
5.1.   Procedure Input / Output
Write, writeln   :    sudah dibahas
Read, Readln    :    sudah dibahas

5.2.   Procedure Operasi String
Delete(x,i,n)         :    Membuang n buah character mulai dari i dari string x.
Insert(s1,s2,i)       :    Menyisipkan string s1 dalam string s2 di posisi i.
Str(n:w:d,s)          :    Merubah Numerik lebar w decimal d dalam string s.
Val(s,n,c)              :    Merubah s string menjadi numeric dalam n.
FillChar(x,n,ch)    :    Mengisi variable x dengan character ch sebanyak n.
5.3.   Procedure Lain-lain
Clrscr                   :    Hapus layar.
ClrEol                   :    Hapus baris mulai posisi cursor.
DelLine                :    Menghapus 1 baris di posisi cursor dan menggeser naik tampilan-tampilan di bawahnya.
InsLine                 :    Menyisipi sebuah baris pada posisi cursor.
Gotoxy(x,y)          :    Memposisikan cursor pada baris y, kolom x.
Delay(n)               :    Menunda proses n integer yang menunjukkan lama tunda.
Halt                      :    Menghentikan eksekusi program.
Sound(f)               :    Menghasilkan nada suara dengan frequensi f.
NoSound              :    Mematikan nada.
TextColor(x)         :    Memesan warna tulisan dengan konstanta warna x.  x dapat berupa angka 0, 1, 2, … atau Black, Red, White, …
TextBackGround(x) : Memesan warna latar belakang dengan konstanta warna x.

Untuk procedure dan fungsi standard yang sudah disediakan oleh pascal semuanya terdapat pada unit-unit yang harus disertakan pemakaiannya pada USES (pada kepala program).
Untuk selanjutnya yang akan dibahas adalah procedure dan function buatan pemakai.

5.2.  MENCIPTAKAN FUNGSI DAN PROCEDURE

5.2.1.      MENCIPTAKAN FUNGSI

Fungsi merupakan sebuah subprogram yang apabila dipanggil akan menghasilkan sebuah nilai.
Ciri-ciri suatu fungsi :
Ø  Fungsi hanya memberikan sebuah hasil
Ø  Nama fungsi selain digunakan untuk memanggil fungsi tersebut, juga dianggap sebagai suatu variable sehingga bias digunakan sebagai bagian dari ungkapan.
Ø  Dalam fungsi tidak digunakan parameter variable, semua parameter dianggap sebagai parameter nilai.
Ø  Semua parameter digunakan sebagai masukan pada fungsi tersebut dengan keluarannya nama fungsi yang bertindak sebagai satu variable.

Deklarasi fungsi :
Function pengenal [(daftar parameter formal)]: tipe;

 
 


Function, adalah kata tercadang pascal yang memberi tanda bahwa deklarasi fungsi dimulai.
Pengenal, adalah nama fungsi
Daftar parameter formal, adalah nama parameter yang akan dioperasikan dalam fungsi
tipe, adalah tipe data dari nilai fungsi. (yang diperbolehkan hanya tipe skalar, subjangkauan atau terbilang).
Kemudian untuk memanggil fungsi yang sudah dideklarasikan, digunakan bentuk sebagai berikut :


Pengenal(daftar parameter aktual);
 
 


Pengenal adalah nama fungsi yang akan dipanggil.
Beberapa hal penting yang perlu diperhatikan berkaitan dengan pemakaian fungsi, adalah :
;   Tipe hasil fungsi harus bertipe sederhana (integer, real, boolean, char atau string), karena fungsi hanya bisa mengembalikan nilai bertipe sederhana.
;   Jika fungsi tidak memiliki daftar parameter formal, maka tanda kurung buka “(“ dan kurung tutup “)” tidak ditulis.
Fungsi didefinisikan didalam blok program pemanggil (setelah kata tercadang var)

5.2.2.      MENCIPTAKAN PROSEDUR

Berapa hal yang harus diperhatikan dalam penggunaan prosedur, antara lain :
  • Deklarasi prosedur terletak pada bagian deklarasi program.
  • Sembarang tipe statemen pascal bisa digunakan dalam prosedur.
  • Parameter dalam prosedur bersifat optional, boleh ada boleh tidak.
  • Suatu prosedur bisa memanggil prosedur lain yang sudah didefinisikan terlebih dahulu.
  • Pemberian nama prosedur mengikuti aturan pemberian nama pengenal atau perubah.

Mendeklarasikan prosedur

Struktur prosedur hampir sama dengan struktur program pascal, yaitu :

Bagian kepala prosedur
Procedure nama_prosedur (dafatar parameter formal);
Bagian deklarasi
Digunakan untuk mendeklarasikan semua variabel lokal yang digunakan dalam prosedur.
Bagian pernyataan.
Digunakan untuk menuliskan semua statemen, yang diawali dengan begin dan diakhiri dengan end diikuti tanda titik koma (;).
Begin
(statemen)
end.

Pemanggilan prosedur dilakukan dengan cara menyebutkan nama prosedurnya diikuti dengan parameter (parameter aktual) jika memakai parameter formal pada saat mendeklarasikan.

NAMA LOKAL DAN NAMA GLOBAL

Nama lokal adalah suatu nama (variabel, konstanta dan type) yang dideklarasikan didalam sebuah prosedur (atau fungsi), yang mana nama tersebut hanya berguna didalam kelompok statemen atau dalam prosedur (atau fungsi) yang mendeklarasikannya. nama lokal ini hanya memerlukan tempat dimemori pada saat prosedur atau fungsi yang menggunakannya dikerjakan. Sembarang tipe data bisa digunakan sebagai nama lokal.
Nama global adalah nama (variabel, konstanta dan type) yang dideklarasikan dibagian deklarasi pada pogram yang mana nama tersebut bisa digunakan diseluruh bagian program termasuk pada prosedur dan fungsi.
Untuk menghindari kesalahan pengalihan informasi ke dan dari prosedur yang menggunakan variabel global, maka bisa dengan cara mendeklarasikan parameter-parameter yang harus digunakan.
Sebisa mungkin diminimalkan penggunaan nama global, karena penggunaan nama lokal bisa meminimalkan usaha pencarian kesalahan yang disebabkan oleh nama tersebut.

PARAMETER

Kebanyakan program memerlukan pertukaran informasi antara prosedur atau fungsi dan titik dimana prosedur atau fungsi dipanggil. Untuk hal tersebut digunakan suatu parameter.
Tujuan penggunaan parameter formal adalah untuk mengontrol komunikasi informasi ke dan dari prosedur. Ada dua jenis parameter yang bisa digunakan, yaitu :

Parameter formal
Parameter formal adalah parameter yang dideklarasikan didalam bagian kepala procedure atau fungsi itu sendiri.
Daftar parameter formal bisa berisi 4 tipe parameter yang berbeda, yaitu : perubah (var), nilai, fungsi dan prosedur.

Paramater perubah (variabel)
Parameter perubah ini biasa disebut dengan parameter referensi atau paramater var, adalah parameter yang mengambil nilai dari parameter actual, dan jika nilai paramater perubah tersebut mengalami perubahan, maka nilai parameter aktual juga berubah.
Bentuk umum deklarasi parameter perubah :


Var pengenal [, pengenal, …]:tipe;
 
 


Var, adalah kata baku yang menunjukkan pengenal yang mengikutinya adalah parameter perubah.
Pengenal, adalah nama parameter perubah.
Tipe , adalah tipe data parameter perubah.
Tipe data yang digunakan dalam parameter formal harus berupa pengenal atau tipe data skalar, tidak boleh menggunakan tipe data terstruktur.

Parameter Nilai (Parameter Masukan)
Jika pada saat mendeklarasikan parameter formal, kata Var tidak disertakan, maka parameter yang digunakan disebut parameter nilai (value parameter), yang berarti bahwa parameter tersebut hanya mengambil nilai dari parameter aktual yang sesuai. Nilai parameter aktual yang asli tidak mengalami perubahan meskipun nilai parameter formalnya mengalami perubahan.
Untuk kedua jenis parameter tersebut bisa digunakan bersama-sama.

Parameter  aktual
Parameter aktual adalah parameter yang disertakan pada saat pemanggilan suatu prosedur atau fungsi.
Bentuk umum pemanggilan prosedur
Pengenal(daftar parameter aktual);

 
 


Nama prosedur yang dinyatakan oleh pengenal harus sesuai dengan nama prosedur yang digunakan pada waktu mendeklarasikan prosedur. Daftar parameter aktual berisi nama-nama parameter aktual yang akan digunakan atau dioperasikan didalam prosedur yang akan dipanggil.
Parameter aktual harus sesuai dengan parameter formal dalam hal :
  • Urutan posisi dan jumlah parameter yang digunakan
  • Tipe data dari setiap parameter.
Operasi yang dilaksanakan pada saat prosedur dipanggil:
1.      Nilai dari semua parameter aktual yang berupa parameter nilai akan diberikan pada parameter formal untuk dioperasikan didalam prosedur.
2.      Lokasi setiap parameter perubah dialokasikan.
3.      Alokasi perubah untuk perubah lokal.
4.      Statemen dalam prosedur akan dikerjakan berdasarkan parameter formal dan variabel lokal.


Contoh 5 :
Progam dibawah ini digunakan untuk mencari nilai median dari sejumlah data yang diinputkan kemudian diurutkan terlebih dahulu .

program lat5;
uses crt;
type
   larik = array[1..100] of real;

var
   vektor : larik;
   n,i,bantu : integer;
   m,rerata,jum : real;

procedure baca;
begin
     clrscr;
     write('masukkan banyak data = ');
     readln(n);
     writeln('masukkan datanya =');
     bantu := 1;
     for I := 1 to n do
       begin
         read(vektor[I]);
         gotoxy(whereX+(I mod 8) * 8,whereY-1);
         if I mod 8 = 0 then
             writeln;
       end;
end;

procedure cetak(X:larik;p:integer);
var
    i : integer;
begin
    writeln;
    for I :=   1 to P do
     begin
        write(X[I]:6:2);
        if I mod 8 = 0 then
         writeln;
     end;
     writeln;
end;

procedure urut (var X : larik; P:integer);
var
   i,j,lokasi : integer;
   bantu : real;
begin
   for i := 1 to p-1 do
    begin
      lokasi := i;
      for j := i+1 to p do
       if x[lokasi] > x[j] then
          lokasi := j;
      bantu := x[i];
      x[i] := x[lokasi];
      x[lokasi] := bantu;
    end;
end;

procedure medu(var x : larik; n :integer);
begin
    if (n mod 2 = 0) then
       m := (x[n div 2] + x[(n div 2) +1])/2
    else
       m := x[(n+1)div 2];
end;

procedure rata (x:larik; n :integer);
var
    i   : integer;

begin
    jum := 0.0;
    for i := 1 to n do
       jum := jum + x[i];
    rerata := jum / n;
end;

begin
    clrscr;
    baca;
    clrscr;
    writeln('data sebelum diurutkan =');
    cetak(vektor,n);
    writeln;
    urut(vektor,n);
    writeln('data urut =');
    cetak(vektor,n);
    rata(vektor,n);
    writeln;
    writeln('banyaknya data  = ',n);
    writeln('total data      = ',jum:6:2);
    writeln('nilai rata-rata = ',rerata:6:2);
    medu(vektor,n);
    writeln('nilai median    = ',m:6:2);
    readln;
    readln
end.


Hasil run =
masukkan banyak data = 10
masukkan datanya =
53.55   34.67  43       23.33  90.11  53       54.54  65.03
44. 87  11.99

data sebelum diurutkan =
53.55   34.67  43.00  23.33  90.11  53.00  54.54  65.03
44. 87  11.99
data setelah diurutkan =
11.99   23.33  34.67  43.00  44. 87 53.00  53.55  54.54 
65.03        90.11
banyaknya data           = 10
total data                    = 474.09
nilai rata-rata             = 47.41
nilai median                = 48.93




































RECORD / REKAMAN

Type data record merupakan type data terstruktur yang mempunyai sejumlah elemen yang disebut medan atau field yang masing-masing elemen bisa berbeda tipe datanya, tetapi merupakan rangkaian data berbagai macam type yang kita pandang sebagai satu kesatuan.  Type data record dapat didefinisikan sebagai berikut :
Bentuk :
      Type
                pengenal = Record
             medan1 : Type1;
                  medan2 : Type2;
                  ...;
                  medann : Typen
                End;
        Var
                NamaVarRecord : pengenal;
Keterangan :
Type, record, end
:
Kata baku yang harus ditulis seperti apa adanya
pengenal
:
Pengenal yang menunjukkan tipe data yang akan dideklarasikan
Medan1 ....medann
:
Nama medan yang akan digunakan
Type1 … typen
:
Sembarang tipe data yang sudah dideklarasikan sebelumnya

Contoh :
Misal akan digunakan data rekaman/record  siswa yang mempunyai field atau medan nama, alamat, kelamin dan klas, maka dideklarasikan seperti berikut :
Type siswa = record
                           Nama     : string[25];
                           Alamat   : string[25];
                           kelamin  : (L,P);
                           klas        : 1..6
                        end;
maka yang terjadi pada memori utama dapat direpresentasikan sebagai berikut :


Nama
Alamat
Kelamin
Klas
Siswa








Operasi pada Record

Memasup (mengambil nilai) medan
Yaitu mengambil nilai pada seluruh rekaman atau pada medan-medan tertentu.
Caranya :
1.      Menyebutkan nama record, diikuti tanda titik dan nama medan yang diinginkan.


Nama rekaman.namamedan
 
 



Misal mengambil nilai medan nama pada  record siswa diatas  :
      Siswa.nama
2.      Dengan statement WITH
Bentuk :


With nama record Do
 
 



With , do  : kata baku
Nama record : nama record yang akan diambil nilainya.

Misal :
Type siswa = record
                           Nama     : string[25];
                           Alamat   : string[25];
                           kelamin  : (L,P);
                           klas        : 1..6
                        end;
Var  murid : siswa;
        Kode_sex : 0..1;

Maka untuk memasup record murid tersebut :

With murid do
    Begin
         Readln (nama);
         Readln (alamat);
         Readln (klas);
         Readln (kode_sex);
         If kode_sex = 1 then
               Kelamin := L
         Else
               Kelamin := P
      End;

Contoh 6
program lat6;
uses crt;
type
   rec_bar = record
        kobar  : string[5];
        nabar  : string[20];
        jumbar : integer;
        harsat : real;
        tot: real;
   end;
   barang = array[1..100] of rec_bar;

var
  data : barang;
  i,n  : integer;
  total : real;

procedure masuk_data;

begin
   clrscr;
   write('masukkan jumlah barang = ');
   readln(n);
   clrscr;
   writeln('No     Kode Barang    Nama Barang   quantity    Harga satuan');
   for i := 1 to n do
    begin
       with data[i] do
         begin
           gotoxy(2,2+i);write(i);
           gotoxy(10,2+i);readln(kobar);
           gotoxy(25,2+i);readln(nabar);
           gotoxy(40,2+i);readln(jumbar);
           gotoxy(50,2+i);write('Rp. ');readln(harsat);
         end;
       end;
end;

procedure hitung;
begin
     total := 0;
     for i := 1 to n do
       begin
        with data[i] do
         begin
           tot := jumbar * harsat;
         end;
        total := total + data[i].tot;
       end;
end;

procedure cetak_data;
begin
   writeln('No     Kode Barang    Nama Barang   quantity    Harga satuan   Total');
   for i := 1 to n do
    begin
       with data[i] do
         begin
           gotoxy(2,2+i);write(i);
           gotoxy(10,2+i);write(kobar);
           gotoxy(25,2+i);write(nabar);
           gotoxy(40,2+i);write(jumbar);
           gotoxy(50,2+i);write('Rp. ',harsat:8:2);
           gotoxy(65,2+i);write('Rp. ',tot:8:2);
         end;
       end;
     writeln;writeln;
     write('Total keseluruhan = ',total:10:2);
end;


begin
     masuk_data;
     hitung;
     clrscr;
     cetak_data;
     readln;
end.

Contoh 7 :
program lat7;
uses crt;
const
     upah = 5000;
type
    status = (tetap,honorer);
    rec_peg = record
        nip : string[8];
        nama : string[25];
        gaber : real;
        stat_peg : string[10];
        case stat:status of
           tetap : (gapok : real;
                    jam_lembur : real);
           honorer : (jam_kerja : real);
    end;
var
     pegawai : array[1..100] of rec_peg;
     i,n : integer;
     jawab : char;

procedure masuk_data;
begin
     clrscr;
     write ('Masukkan jumlah data = ');
     readln(n);
     clrscr;
     writeln('No      NIP      Nama Pegawai       Peg Tetap Jam kerja   Gaji Pokok Jam lembur');
     for i := 1 to n do
       begin
          gotoxy(2,3+i);write(i);
          with pegawai[i] do
            begin
               gotoxy(7,3+i);readln(nip);
               gotoxy(17,3+i);readln(nama);
               gotoxy(42,3+i);readln(jawab);
                 if (jawab = 'Y') or (jawab='y') then
                   begin
                     stat := tetap;
                     stat_peg := 'tetap';
                   end
                 else
                   begin
                     stat := honorer;
                     stat_peg := 'honorer';
                   end;
               case stat of
                   tetap : Begin
                           gotoxy(60,3+i);readln(gapok);
                           gotoxy(71,3+i);readln(jam_lembur);
                           gaber := gapok + (jam_lembur * upah);
                           end;
                   honorer: begin
                            gotoxy(47,3+i);readln(jam_kerja);
                            gaber := jam_kerja * upah;
                            end;
               end;
            end;
     end;
end;

procedure cetak_data;
begin
     writeln('No  NIP     Nama Pegawai   Status      Jam ker Gaji Pokok lembur Gaji Bersih');
     for i := 1 to n do
       begin
          gotoxy(2,3+i);write(i);
          with pegawai[i] do
            begin
               gotoxy(4,3+i);write(nip);
               gotoxy(12,3+i);write(nama);
               gotoxy(28,3+i);write(stat_peg);
                 if stat_peg = 'tetap' then
                   Begin
                      gotoxy(48,3+i);write(gapok:10:2);
                      gotoxy(60,3+i);write(jam_lembur:3:0);
                      gotoxy(65,3+i);write(gaber:10:2);
                   end
                 else
                   begin
                            gotoxy(41,3+i);write(jam_kerja:3:0);
                            gotoxy(67,3+i);write(gaber:10:2);
                   end;
            end;
     end;
end;


begin
     masuk_data;
     clrscr;
     cetak_data;
     readln;
end.



Komentar

Postingan populer dari blog ini

MAKALAH E-COMMERCE

MAKALAH GROUPWARE (IMK)

MAKALAH KEWIRAUSAHAAN (KWU) KEUANGAN