Kamis, 20 Mei 2010

Olimpiada pascal



Modul Praktek
Pascal Programming





TEAM PENYUSUN :
Syaiful Anwar,S.Kom
Ade Fitria,A.Md
Sita Anggraeni,A.Md


BINA SARANA INFORMATIKA
2007

Pembahasan 1
Pengenalan Pascal

Sejarah Pascal
    Berakar dari Bahasa Algol dan PL/1 pada tahun 60-an di benua Eropa
    Pascal disusun oleh Prof.Niklaus Wirth pada tahun 70 dan dipublikasikan tahun 71
    Diujicoba pada Komputer CDC 6000
    Turbo Pascal bersifat Compiler dan termasuk bahasa tingkat tinggi

Struktur Bahasa Pascal
    Judul
Program ;
Uses ;
    Bagian Deklarasi
Label ;
Const ;
Type ;
Var ;
Procedure ;
Function ;
    Bagian Pernyataan
Begin
;
End.

Contoh Program

Listing Programnya
Uses Crt;
Begin
    WriteLn( ‘Saya’ );
    Write( ‘Belajar’ );
    WriteLn( ‘Turbo’ );
    Write( ‘Pascal’ );
    Write( ‘Versi 7.0’ );
End.
Tekan Ctrl F9 untuk ekseskusi program
Tekan F5 untuk melihat hasilnya
Hasilnya :
Saya
Belajar Turbo
Pascal Versi 7.0

Tugas:
Buatlah Program cetak dilayar Biodata diri anda

Pembahasan 2
PERINTAH DASAR – IDENTIFIER - DEKLARASI

Perintah Dasar/Sederhana Pascal
    Write ( ‘Text/tulisan’,Variabel);
Perintah untuk menampilkan atau cetak dilayar monitor tanpa pindah baris
    WriteLn( ‘Text/Tulisan’,Variabel);
Perintah untuk menampilkan/cetak dilayar monitor lalu pindah baris kebawah
    Read(Variabel);
Perintah untuk menginput/mengisi data tanpa pindah baris
    ReadLn(Variabel);
Perintah untuk menginput/mengisi data lalu pindah baris

Identifier/Pengenal Data
Digunakan untuk penamaan elemen-elemen deklarasi seperti Label, Constanta, type, variabel, procedure, function

Syarat Identifier
    Diawali huruf
    Tidak boleh ada spasi/blank
    Tidak boleh menggunakan reserved word
    Tidak boleh menggunakan simbol khusus,
kecuali underscore(tanda bawah)
    Panjang maximal 63 character

Pembahasan 3
PENGUNAAN USES CRT – TIPE SEDERHANA - OPERATOR

Penggunaan Unit CRT (Cathoda Ray Tube)
    CLRSCR ;
Untuk membersihkan layar
    Delay (nilainya);
Untuk menghentikan program dalam satuan milisecond
    Gotoxy(x,y);
Untuk menempatkan kursor diposisi x dan y
    Window(x1,y1,x2,y2)
Untuk membuat batasan jendela pada layar

Tipe Data Bahasa Pascal
    Bilangan Bulat [integer] Terdiri dari

Tipe    Jangkauan nilainya
Shortint    -128 .. 127
Byte    0 .. 255
Integer    -32768 .. 32767
Word    0 .. 65535
Longint    -21747483648 .. 21747483647

    Bilangan Pecahan [real] terdiri dari single, real, double, extended
    Character à satu huruf/simbol saja
    String à lebih dari satu huruf/simbol
    Boolean à data berisi True/False

Operator-Operator Pascal
    Assignment Operator (Operator Pengerjaan) à :=
Contoh     A:=5        Nama:=Budi
    Binari Operator à * / +  -  DIV  MOD
    Unary Operator (Operator Tunggal) à
Contoh    -5        +2.5
    Bitwise Operator à NOT, AND, OR, XOR, SHL, SHR
    Relasi Operator (Operator Relasi) à =   <>   >   <   <=   >=   IN
    Logical Operator (Operator Logika) à NOT, AND, OR, XOR
    Address Operator (Operator Alamat) à @  ^
    Set Operator (Operator Himpunan) à +  -  *
    String Operator à +
Contoh     Nama1:= ‘Syaiful Anwar’;  Nama2:= ‘Anwar’;
               Nama3 := Nama1 + Nama2 ;
Hasilnya Nama3 à SyaifulAnwar





Tugas Program
1.    Buatlah Program Luas Segi Tiga
2.    Buatlah Program Luas dan Keliling Lingkaran
3.    Buatlah Program Persegi Panjang


Pembahasan 4
DEKLARASI TIPE - DEKLARASI LABEL

Deklarasi Type
Pengenal (identifier) dari data yang digunakan harus diperkenalkan Tipenya. Jika ingin menggunakan tipe data dengan nama yang dibuat oleh pemakai, maka harus disebutkan tipe data standarnya.













Deklarasi Label
Deklarasi label digunakan untuk melompati beberapa perintah program. Memiliki arah dan tujuan yaitu dengan menggunakan GOTO
Tugas :

Tugas Program
1.    Rubah Program Labelnya dgn Layout sbb
    TEXT2 TEXT4 TEXT6
2.    Buat luas dan Keliling lingkaran dengan menggunakan deklarasi type dan Var

Pembahasan 5
FORMAT TIPE DATA– LOKASI CURSOR

Tampilan Terformat
Untuk mengatur bentuk tampilan dari tampilan default ke bentuk yang diinginkan atau Batasan cetak
    Parameter Char:n
Batasan cetak/ bentuk tampilan/ jarak tampil data char
    Parameter String:n
Batasan cetak/ bentuk tampilan/ jarak tampil data string
    Parameter Boolean:n
Batasan cetak/ bentuk tampilan/ jarak tampil data Boolean
    Parameter Integer:n
Batasan cetak/ bentuk tampilan/ jarak tampil data Integer
    Parameter Real:n:m
Batasan cetak/ bentuk tampilan/ jarak tampil data Real

Uses Crt;
Const Kampus=‘Bsi’; {Tipe String}
          Nrata=2.5;    {Tipe Real}
          Ntotal=55;    {Tipe Integer}
          Cek   =True;  {Tipe Boolean}
          Huruf =‘A’;    {Tipe Char}
BEGIN
  Clrscr;
  Writeln(‘Nama Kampus :’,Kampus);
  Writeln(‘Nama Kampus :’,Kampus:3);
  Writeln(‘Nama Kampus :’,Kampus:6);
  Writeln(‘Nilai Rata  :’,Nrata);
  Writeln(‘Nilai Rata  :’,Nrata:3:0);
  Writeln(‘Nilai Rata  :’,Nrata:6:1);
  Writeln(‘Nilai Total :’,Ntotal:2);
  Writeln(‘Nilai Total :’,Ntotal:5);
  Writeln(‘Cek Boolean :’,Cek);
  Writeln(‘Cek Boolean :’,Cek:7);
  Writeln(‘Huruf Abjad :’,Huruf);
  Writeln(‘Huruf Abjad :’,Huruf:3);
  Readln;
End.

Contoh Program Lokasi Cursor
BEGIN
  CLRSCR;
  GOTOXY(10,2);
  WRITE(‘JUDUL INI TERCETAK DI KOLOM 10 BARIS 2’);
  READLN;
END.


Pembahasan 6
BRANCHING IF TUNGGAL/MAJEMUK – CASE OF

Bracnhing/ Penyeleksian Kondisi
Untuk menyeleksi kondisi-kondisi suatu proses makan diperlukan perintah IF. Adapun bentuk-bentuk IF sbb:

    Statement IF
Bentuk Umum :     If Then ;
             contoh :    IF N>=60 Then Ket:=‘Lulus’;  

Bentuk Umum :     If Then
                    Else ;
             contoh :     IF N>=60 Then Ket:=‘Lulus’
                           Else Ket:=‘Gagal’;

Nb :     apabila dalam satu statement lebih dari 1 baris perintah maka statemen tsb dimasukkan blok
  




Branching Majemuk
Bentuk Umum :     If Then
                               Else     If Then
                                       Else ;

             contoh :     IF (N>=84) and (N<100) Then Mutu:=‘Amat Baik’
                       Else     IF N>74 Then Mutu:=‘Baik’
                                     Else    IF N>60 Then Mutu:=‘Cukup’
                                             Else Mutu:=‘Kurang’;    

Statement Case…OF

        

Pembahasan 7
LOOPING ( PERULANGAN )

1.    Statement For....Do  (Perulangan Counter)
        B.U : For  variabel_kontrol : = nilai_awal  To nilai_akhir Do
                       Statement ;  
    B.U : For variabel_kontrol:= nilai_awal  DownTo nilai_akhir  Do
            Statement ;      
2.    Statement While ... Do (Perulangan Kondisi Terpenuhi)
B.U : While ungkapan_logika Do
                      Statement ;
3.    Statement Repaet...Until (Perulangan Kondisi Tidak Terpenuhi)
       B.U  : Repeat
                        Statement ;
               Until ungkapan_logika ;
                          
 

   














Tugas :
1.    Buat deret bilangan ganjil dan deret bilangan genap
2.    Buatlah deret bilangan Fibonanci  1 1 2 3 5 8 13 21 34 55
3.    Buatlah deret
1 2 3 4 5    b.    1    c.                5    d.    1 2 3 4 5  
1 2 3 4            1 2                 4 5           2 3 4 5
1 2 3            1 2 3              3 4 5            3 4 5
1 2                1 2 3 4           2 3 4 5               4 5
1                1 2 3 4 5        1 2 3 4 5                  5
4.    Buatlah deret
1 . 2     1 . 4     1 . 6    1 . 8
2 . 2    2 . 4    2 . 6   2 . 8  
      

Pembahasan 8
HIMPUNAN / SET

Himpunan termasuk salah satu tipe data terstruktur,yang terdiri dari sejumlah elemen yang bertipe data sama.
Pendefinisian tipe data himpunana diawali dengan kata tercadang Set dan Of,kemudian didikuti dengan tipe elemen.

Bentuk umum : SET OF tipe_elemen
Elemen Himpunan mempunyai bentuk eperti : [daftar_elemen] yang mana etiap elemen harus bertipe sama.

Operator hubungan dalam himpunan

Himp1 = Himp2    Dua Himpunan Dikatakan sama jika jumlah elemen sama dan    masing-masing elemen sama.Hasilnya True bila Himp1 sama dengan Himp2
Himp1 <> Himp2    Dua Himpunan Dikatakan tidak sama jika jumlah elemen tidak sama dan masing-masing elemen tidak sama. Hasilnya True bila Himp1 tidak sama dengan Himp2

Himp1 <= Himp2    Hasil bernilai True jika semua elemen dari Himp1 terdapat pada Himp2

Himp1 >= Himp2    Hasil bernilai True jika semua elemen dari Himp2 terdapat pada Himp1
Elemen  In Himp    Memeriksa elemen adalah anggota himpunan Himp atau tidak.Hasil true jika elemen adalah anggota dari Himp


Operator Operasi Himpunan

Himp1 * Himp2     Operasi Interseksi himpunan.untuk memperoleh himpunan yang terdiri dari elemen yang merupakan anggota  himpunan Himp1 dan sekaligus juga merupakan anggota Himp2
Himp1 + Himp2     Operasi penggabungan himpunan.Untuk memperoleh himpunan yang terdiri dari gabungan elemen anggota Himp1 dan Himp2
Himp1 - Himp2     Operasi selisih himpunan.Untuk memperoleh himpunan yang terdiri dari elemen anggota Himp1 yang bukan anggota himpunan Himp2



Contoh Ungkapan    Hasil
[1,2,3,4,5] * [1,3,5,7]    [1,3,5]
[1,2,3,4,5] * [6,7,8,9,10]    []
[1,2,3] * []    []
[1,2,3,4,5] + [6,7]    [1,2,3,4,5,6,7]
[1,2,4] + [1,2,3]    [1,2,3,4]
[1,2,3,4,5] - [1,2]    [3,4,5]
[1,2,3,4,5] - [4,5,6,7]    [1,2,3]
[4,5,6,7] - [1,2,3,4,5]    [4,6,7]


Contoh Program Himpunan
Program Himpunan;
Uses Crt;
Type     Hs = Set Of 1..9;
Var     H1,H2,H3 : Hs;
BEGIN
      CLRSCR;
      H1:=[1,2,3,4,5];
      H2:=[3,5,6,7,8];
      H3:=H1+H2;
      IF H3=[1..8] Then Writeln('H1+H2 Adalah [1..8]') Else Writeln('Salah');
      Readln;
       H3:=H1-H2;
      IF H3=[1,2,4] Then Writeln('H1-H2 Adalah [1,2,4]') Else Writeln('Salah');
      Readln;
      H3:=H1*H2;
      IF H3=[3,5] Then Writeln('H1*H2 Adalah [3,5]') Else Writeln('Salah');
      Readln;
END.



Pembahasan 9
ARRAY / LARIK

Array ( larik ) adalah tipe terstruktur yang terdiri dari sejumlah komponen yang mempuyai tipe sama.

B.U :  Array [ 1 . . 20  ]  of  tipe_data ;  (Dimensi 1)
B.U :  Array [1 . . 3 , 1 . . 2] of  tipe_data; (Dimensi 2)

Contoh Program Array  :
Uses crt ;
Var
Nama                : array [1..30 ] of string ;
Tugas, uts, uas, absen    : array [1..30] of integer ;
Rata                 : array [1..30] of real ;
x , jd                 : byte;
BEGIN
    CLRSCR ;
    Write ( ‘ Masukan Jumlah data  : ‘ ) ; readln ( jd ) ;
    For x : = 1 to jd do
    begin
Writeln ( ‘ ***************************** ‘ ) ;
Writeln ( ‘  PENILAIAN UJIAN MAHASISWA BSI  ‘ ) ;
Writeln ( ‘ ***************************** ‘ ) ;
Write ( ‘ Input Nama         : ‘ ) ;  readln (nama[x] ) ;
Write ( ‘ Input Nilai Tugas     : ‘ ) ;  readln (tugas[x] ) ;
Write ( ‘ Input Nilai Absen : ‘ ) ; readln (absen[x] ) ;
Write ( ‘ Input Nilai UTS     : ‘ ) ; readln (uts[x] ) ;
Write ( ‘ Input Nilai UAS     : ‘ ) ; readln (uas[x]) ;
        Rata[x]:=(0.1*tugas[x])+(0.2*absen[x])+(0.3*uts[x])+(0.4*uas[x]);
    End ;
    CLRSCR ;
      For i : = 1 to j do
        Begin
Writeln ( ‘ ***************************** ‘ ) ;
Writeln ( ‘  PENILAIAN UJIAN MAHASISWA BSI  ‘ ) ;
Writeln ( ‘ ***************************** ‘ ) ;
Writeln ( ‘ Nama                : ‘ , nama[i] ) ;
Writeln ( ‘ Nilai Tugas       : ‘ , tugas[i] ) ;
Writeln ( ‘ Nilai Absen       : ‘ , absen[i] ) ;
Writeln ( ‘ Nilai UTS      : ‘ , uts[i] ) ;
Writeln ( ‘ Nilai UAS      : ‘ , uas[i]) ;
Writeln ( ‘ **************************** ‘ ) ;
Writeln ( ‘ Rata-rata : ‘ , rata : 1: 0 ) ;
Readln ;
    End;
END.

Pembahasan 10
PROCEDURE


Prosedur adalah suatu program terpisah dalam blok sendiri yang berfungsi sebagai subprogram ( program bagian ). Parameter pada  procedure ada 2 :

    Bentuk Umum :
  








Parameter didalam prosedur terdiri dari 2 yaitu :
a.    Parameter bersifat Lokal  artinya bahwa nilai yang terdapat didalam suatu modul program hanya dapat digunakan pada modul yang bersangkutan sehingga tidak dapat digunakan pada modul lain.
b.    Parameter bersifat Global artinya bahwa nilai dapat digunakan pada semua modul maka nilai tersebut harus dideklarasikan di atas modul yang akan menggunakannya.














Pemanggilan parameter pada prosedur  terdiri dari 2 yaitu :
a.    Parameter Secara Nilai ( By Value )
Bersifat satu arah, jika terjadi perubahan pada subprogram, maka tidak akan mempengaruhi program utama.
b.    Parameter Secara Acuan ( By Reference )
Bersifat dua arah, jika terjadi perubahan pada subprogram, maka program utamanya akan ikut berubah.

Contoh Program Prosedure Standar
Uses Crt;
Const Bsi='Bina Sarana';
Begin
  Clrscr;
  Writeln(Copy(Bsi,6,4));             mengambil sebagian dari string
  Writeln(Pos('Sarana',Bsi));         mencari posisi string
  Writeln(Length(Bsi));             panjang string
  Writeln(Concat(Bsi,' Informatika'));     mengabungkan string
  Readln;
End.





Pembahasan 11
FUNGSI

Fungsi secara garis besar sama dengan prosedure baik parameter maupun pemanggilan parameternya hanya yang membedakannya adalah nama fungsi harus dideklarasikan dengan type datanya.

Bentuk Umum :


Contoh :
Uses crt ;
Function Hitung ( Var A, B : integer ) : integer ;
Begin
    Hitung : = A+B ;
End ;
Var
        X, Y : integer ;
BEGIN
Write ( ‘ Nilai X ? ‘ ) ; readln ( X ) ;
     Write ( ‘ Nilai Y ? ‘ ) ; readln ( Y ) ;
     Writeln ;
     Writeln ( X, ‘ + ‘, Y , ‘ =’, Hitung ( X, Y )) ;
    Readln ;
END.    

Parameter pada fungsi sama dengan parameter yang ada pada prosedure yaitu :
a.   Pemanggilan secara Nilai ( By Value )
    Contoh :
Uses crt ;
      Function Hitung ( X, Y, Z : integer ) : integer ;
      Begin
        Z : = X+Y ;
            Writeln ( ‘ Nilai X  = ‘, X ) ;
        Writeln ( ‘ Nilai Y  = ‘, Y ) ;
        Writeln ( ‘ Nilai Z  = ‘, Z ) ;
    End ;
Var
    A, B, C : integer ;
BEGIN
      A : = 5 ; B : = 7 ; C : = 3 ;
      Hitung ( A, B, C ) ;
    Writeln ( ‘ Nilai A =’, A, ‘ Nilai B = ‘, B, ‘ Nilai C = ‘, C ) ;
      Readln ;
END.  
c.    Pemanggilan secara Reference ( Acuan )
      Contoh :
      Uses crt ;
         Function Hitung ( var A, B, C : integer ) : integer ;
      Begin
          Hitung : = A+B ;
            C : = A * B ;
         End ;
    
    Var
          X, Y, Z : integer ;
         BEGIN      
        Write ( ‘ Nilai X : ‘ ) ; readln ( X ) ;
         Write ( ‘ Nilai Y :  ) ; readln ( Y ) ;
            Writeln ;
         Writeln ( X , ‘ + ‘ , Y, ‘=’, Hitung ( X, Y, Z )) ;
         Writeln ( X, ‘ * ’,Y,  ‘=’, Z ) ;
              Readln ;
      END.


Contoh Function Standar Aritmatika & Transfer
Uses Crt;
Const     A=2;       B=-2;
          C=4;       D=2.5;
          E=2.3;    F=2.7;
          G='A';
Begin
  Clrscr;
  Writeln('Absnya        : ',A, '=' ,Abs(A));     Argumen Mutlak
  Writeln('Absnya        : ',B, '=' ,Abs(-B));  
  Writeln('Expnya        : ',A, '=' ,Exp(A));         Eksponensial Argumen
  Writeln('Lnnya          : ',A, '=' ,Ln(A));         Logaritma Natural Argumen
  Writeln('Sqrnya        : ',A, '=' ,Sqr(A));     Kuadrat Argumen
  Writeln('Sqrtnya       : ',C,'=' ,Sqrt(C));     Akar Argumen
  Writeln('Pinya           : ',Pi);             angka Pi=3.14
  Writeln('Intnya         : ',D, '=' ,Int(D));     bagian bulat angka real
  Writeln('Truncnya     : ',D, '=' ,Trunc(D));     bagian bulat angka real    
  Writeln('Fracnya       : ',D, '=' ,Frac(D));     bagian pecahan real
  Writeln('Roundnya    : ',E, '=' ,Round(E));     bulatkan angka real
  Writeln('Roundnya    : ',F, '=' ,Round(F));  
  Writeln('Ordnya        : ',G, '=' ,Ord(G));     Character ke ordinal
  Writeln('Chrnya        : ',A, '=' ,Chr(67));     ordinal ke character
  Readln;
End.



Contoh Dengan Format
Uses Crt;
Const     A=2;      B=-2;
          C=4;       D=2.5;
          E=2.3;     F=2.7;
          G='A';
Begin
  Clrscr;
  Writeln('Absnya       : ',A, '=' ,Abs(A));
  Writeln('Absnya       : ',B, '=' ,Abs(-B));
  Writeln('Expnya       : ',A, '=' ,Exp(A):5:2);
  Writeln('Lnnya        : ',A, '=' ,Ln(A):5:2);
  Writeln('Sqrnya       : ',A, '=' ,Sqr(A));
  Writeln('Sqrtnya      : ',C,'=' ,Sqrt(C):1:0);
  Writeln('Pinya          : ',Pi:4:2);
  Writeln('Intnya        : ',D:3:1, '=' ,Int(D):1:0);
  Writeln('Truncnya    : ',D:3:1, '=' ,Trunc(D));
  Writeln('Fracnya      : ',D:3:1, '=' ,Frac(D):3:1);
  Writeln('Roundnya    : ',E:3:1, '=' ,Round(E));
  Writeln('Roundnya    : ',F:3:1, '=' ,Round(F));
  Writeln('Ordnya      : ',G, '=' ,Ord(G));
  Writeln('Chrnya      : ',A, '=' ,Chr(67));
  Readln;
End.


Pembahasan 12
RECORD

Adalah kumpulan item data (field) yang masing-masing dapat mempunyai tipe data yang beda

Contoh
Type
    Lgn= Record
        Kode     : integer;
        Nama      : string[35];
        Piutang : real;
    End;
Var Langganan : Lgn;

Menggunakan Tipe Data Record
Tiap-tiap komponen field dari record dapat dipergunakan dengan cara menuliskan
Pengenalrecord.pengenalfield

Contoh
Langganan.Nama := ’Maulana’ ;
            PengenalField
            PengenalRecord

Penulisan statemen diatas dapat menyebabkan statement menjadi panjang
Contoh lain :
Lingkaran.Keliling := 2 * Pi * JariJari ;

Menggunakan Statemen With Do menjadi :
With Lingkaran Do
    Begin
        Keliling := 2 * Pi * JariJari ;
    End;

Contoh :
Uses Crt;
Type
    Recsis = Record
        Nama : string[15];
        Nu    : byte;
    End;
Var DataSis : Array[1..10] of RecSis;
       X, JD      : Byte ;
       Pred      : String[6] ;


BEGIN
      CLRSCR ;
    Write( ’ Jumlah Data : ’ ) ; Readln(JD) ;
    For X := 1 To JD Do
    Begin
        Write( ’ Nama Siswa : ’ ) ; ReadLn(Datasis[x].Nama) ;
        Write( ’ Nilai Ujian     : ’ ) ; ReadLn(Datasis[x].Nu) ;
    End;
    For X := 1 To JD Do
    Begin
        With Datasis[X] Do
        Begin
            IF Nu > 60 Then Pred := ’Lulus’ ;
            Else Pred := ’Gagal’ ;
            WriteLn(X, ’ ’ , Nama:10, ’ ’ ,Nu:2, ’ ’ , Pred:6);
        End;
    End;
    ReadLn;
END.


Pembahasan 13
FILE

Suatu File terdiri dari urutn komponen yang mempunyai tipe sama. Berbeda dengan larik yang jumlah komponennya sudah pasti, jumlah komponen dalam file sifatnya luwes, yaitu dapat ditambah dan dikurangi sewaktu-waktu  

File Teks
Merupakan file yang berisi kumpulan dari karakter yang dibentuk dalam baris-baris dan masing-masing baris diakhiri dengan tanda akhir dari baris berupa karakter carriage return dan karakter line feed. File teks sebenarnya merupakan file dengan tipe char; tetapi mempunyai perbedaan, yaitu nilai yang bukan tipe char dapat direkam dan dibaca oleh File Teks

Prosedur Standar File Teks
Append    :    digunakan untuk membuka file yang telah ada untuk keperluan menambah data ke dalam file
Write    :    digunakan untuk merekam data ke file  
Flush    :    digunakan untuk segera merekam data yang ada di buffer ke file Teks
Read    :    untuk membaca satu atau lebih nilai dari file ke dalam satu atau lebih variabel
SetTextBuf    :    digunakan untuk membuat buffer yang baru sebagai pengganti dari internal buffer untuk file variabel

Fungsi Standar File Teks
EoLn    :    untuk mengetahui apakah posisi dari file berada di end-of-line marker atau tidak
SeekEOF    :    untuk menghasilkan status akhir dari File
SeekEoLn    :    untuk menghasilkan status akhir baris

Contoh :
Uses Crt ;
Label a,b ;
Var
        Vfbarang     : text ;
        Nabrg         : string [20 ];
        Hrg           : longint ;
        Jml             : integer ;
        X, y         : byte ;
        Ttl, gth       : longint ;
        Lagi         : char ;
        Pil             : byte ;
BEGIN
     A:
     Clrscr ;
    Writeln ( ‘ MENU PILIHAN FILE TEXT ‘ ) ;
    Writeln ( ‘ 1. Rekam Data File Baru ‘ ) ;
    Writeln ( ‘  2. Tambah Data File ‘ ) ;
    Writeln ( ‘  3. Lihat Data’ ) ;
    Writeln ( ‘  4. Exit’ ) ;
    Write ( ‘ Silakan Pilih Menu [ 1/2/3/4 ] : ‘ ); readln ( pil ) ;
    Case pil of
    1..2 :     begin
                  Assign (vfbarang,’barang.txt’ ) ; { variabel file barang }
                IF pil =1 then
                   Rewrite ( vfbarang )
                Else
                               Append (vfbarang ) ;
                           Lagi : = ‘Y’ ; X : = 0 ;
                           While (lagi =’Y’) or (lagi = ‘T’) do
                  begin
                     write ( ‘ Nama Barang : ‘ ) ; readln (  nabrg );
                     write ( ’ Harga Barang : ’ ) ; readln ( hrg ) ;
                     write ( ’ Jumlah Barang : ’ ) ; readln ( jml ) ;
                     write ( vfbarang, nabrg:1    5 , hrg : 10,  jml : 4 ) ;
                     write ( ’ Isi Data Lagi [ Y/T ] : ’ ) ; readln ( lagi ) ;
                end ;
                close (vfbarang) ;
                goto a ;
            end ;
        end;
3    :     begin
                     Assign ( vfbarang , ’ barang.txt ’ ) ;
                     Reset ( vfbarang ) ;
                     Writeln(’             DATA PENJUALAN BARANG             ’ ) ;
                     Writeln(’**************************************** ’) ;  
                     Writeln(’No  Nama Barang          Harga     Jumlah    Total  ’ ) ;
                  Writeln(’*************************************** ’ ) ;
                  { proses dan cetak data detail }
                  y : = 0 ; fth : = 0 ;
                  While not eof ( vfbarang ) do
                   Begin
                       Read ( vfbarang, nabrg, hrg, jml ) ;
                          Total : = hrg * jml ;
                   gth : = gth + ttl ;
                   Inc ( y) ;
                   Write (y, ’  ’ ,nabar:15, ’  ’ ,hrg:7,’  ’,jml:3, ’  ’,ttl) ;
                End ;
                { garis penutup subtotal }
                 Writeln(’**************************************** ’ ) ;
                 Writeln (’Grand Total:                                   Rp. ’, gth ) ;
                 Writeln(’**************************************** ’ ) ;
                 Close(vfbarang ) ;
                 Readln ;
                goto a  ;
            end ;
4    :     Goto b ;
    End ;
    Readln ;
    b:
END.
File Bertipe
Berbeda dengan file teks yang hanya dapat diakses secara urut, file bertipe disamping dapt pulajuga diakses secara urut(sequential acces, dapat juga diakses secara aaak (randam access). Dan Tipe dari file bertipe dapat berupa tipe integer, real, char, string array, record

Write    :    digunakan untuk merekam satu atau lebih nilai ke dalam file
Read    :    digunakan untuk membaca atau lebih, nilai dari file
Seek    :    Digunkan untuk mengarahkan penunjuk file ke suatu komponen tertentu di dalam file
Trunccate    :    digunakan untuk menghapus sejumlah komponen atau record mulai dari posisi record tertentu
FileSize    :    digunakan untuk menghasilkan jumlah dari komponen atau record

Contoh Program Bertipe Input Data
Uses Crt;
Type     MHS = Record
                          NM         : string[15];
                          UTS,UAS     : byte;
             End;
Var     FileMHS     : File of MHS;
            RecMHS      : MHS;
            No, Bts, JD, T, RN : Byte;
BEGIN
     CLRSCR;
      Write('Jumlah Data : '); ReadLn(JD);
      Assign(FileMHS,'C:\MHS.DAT');
      ReWrite(FileMHS);
      For No := 1 To JD Do
      Begin
             With RecMHS Do
             Begin
               Write('Nama : '); ReadLn(NM);
               Write('UTS  : '); ReadLn(UTS);
               Write('UAS  : '); ReadLn(UAS);
             End;
             Write(FileMHS,RecMHS);
      End;
      Close(FileMHS);
  ReadLn;
END.
Lalu disimpan










Contoh Program Bertipe Tampil Data
Uses Crt;
Procedure Judul;
Begin
      WriteLn('DAFTAR NILAI MAHASISWA');
      WriteLn('--------------------------------------------------------------------');
      WriteLn('No. Nama Mahasiswa UTS UAS Total Rata Predikat Kelulusan');
      WriteLn('--------------------------------------------------------------------');
End;

Type     MHS=Record
                    NM      : string[15];
                    UTS,UAS : byte;
             End;
Var     FileMHS     : File of MHS;
            RecMHS      : MHS;
            No,Brs,JD,T,R,RN : byte;
            P               : string[10];
            K               : string[5];
BEGIN
      CLRSCR;
      Judul;
      Assign(FileMHS,'C:\MHS.DAT');
      Reset(FileMHS);
      No:=0;
      While Not EOF (FileMHS) Do
      Begin
            With RecMHS Do
            Begin
              Read(FileMHS,RecMHS);
              T:= UTS+UAS; R:= T div 2; inc(No);
              Case R of
                    00..59 : P:='Kurang';
                    60..74 : P:='Cukup';
                    75..84 : P:='Baik';
                    85..100: P:='Amat Baik';
              End;
              IF R<60 Then K:='Gagal' Else K:='Lulus';
              WriteLn(No:3,' ',NM:15,' ',UTS:3,' ',UAS:3,' ',T:3,' ',R:3,' ',P:10,' ',K:5);
            End;
      End;
      ReadLn;
      Close(FileMHS);
END.
      

Pembahansan 14
PEMBUATAN UNIT BARU

Contoh Program Pembentukan Unitku
Unit Unitku;

Interface
Uses Crt;
Procedure Bersihkan;
Function Ls3(A,T:Integer):Real;

Implementation
Procedure Bersihkan;
Begin
  Clrscr;
End;

Function Ls3(A,T:Integer):Real;
Begin
    Ls3:=A*T/2;
End;
End
Lalu simpan

Contoh Program Pemakaian Unit Baru
Uses Unitku;
Var A,T :Integer;
Begin
  Bersihkan;
  Write('Nilai Alas   :');Readln(A);
  Write('Nilai Tinggi :');Readln(T);
  Write('Luas Segitiga :',Ls3(A,T):5:1);
  Readln;
End.

Senin, 03 Mei 2010

UJIAN SEMESTER 2

Petunjuk Umum:
1. Kerjakan soal pilihan ganda di lembar jawab ujian (LJU) pilihan ganda.
2. Nilai yang kurang dari 70 dianggap Herr.
3. Bagi yang Herr, dapat mengulang Minggu depan.

Soal Pilihan Ganda
Pilihlah salah satu jawaban yang paling tepat dengan memberi tanda silang (A/B/C/D/E) pada lembar jawab yang telah disediakan ! Skor masksimal pilihan ganda = 50.


1. Berikut ini merupakan penulisan kepala program yang benar ....
    A. Program UAS-TIK;
    B. Program UAS_TIK
    C. Program 2UAS_TIK;
    D. Program UAS_TIK;
    E. Program UAS TIK;


2. Berikut ini penulisan deklarasi variabel yang benar, kecuali ....
    A. var alas, tinggi: real;
    B. Var uang, upah, total: integer
    C. Var uang, upah: integer;
                total: real; i: integer;
    D. Var Alas, Tinggi: real;
    E. Var uang, upah: integer;
               Var total: real;


3. Hasil ekspresi 6*5/10*2+10 adalah ....
    A. 16
    B. 17
    C. 14
    D. 15
    E. 15.5


4. Berikut ini yang bukan merupakan tipe integer ....
    A. Word
    B. Byte
    C. Shortint
    D. Real
    E. Longint


5. Jika x = 4, y = 6, w = 8, z = 10, maka ekspresi (x*y+w)/z+x akan menghasilkan nilai ....
      A. 7.2
      B. 8.8
      C. 5.2
      D. 9.2
      E. 8.2


6. Interval tipe data byte adalah ....
      A. 0 s.d. 256
      B. -255 s.d 255
      C. 0 s.d. 32.767
      D. 0 s.d. 32.768
      E. 0 s.d 255


7. Berapakah jangkauan tipe data word.....
      A. 0...65536
      B. 0...255
      C. 0...25535
      D. -32768...32767
      E. Salah semua


8. Nilai dari 1000 MOD 360 adalah ... .
    A. 250
    B. 260
    C. 270
    D. 280
    E. 290


9. Operator dalam bahasa pemrograman Pascal yang digunakan untuk mendapatkan hasil bagi sebuah           bilangan bulat oleh bilangan bulat lain adalah ...
      A. MODULUS
      B. DIV
      C. DIVIDE
      D. MOD
      E. REST


10. Jika program dianggap benar dan lengkap, maka output dari pernyataan:
             Writeln(‘Ujian Akhir TIK’);
             Write(‘Kelas X’);Write(‘Semester I’);
             Writeln(‘Mudah dan Menyenangkan’);
     adalah ....
     A. Ujian Akhir TIK Kelas X
          Semester I
          Mudah dan Menyenangkan
     B. Ujian Akhir TIK
         Kelas XSemester I
         Mudah dan Menyenangkan
    C. Ujian Akhir TIK
         Kelas X Semester I
         Mudah dan Menyenangkan
    D. Ujian Akhir TIK
         Kelas X Semester IMudah dan Menyenangkan
     E. Ujian Akhir TIK
         Kelas XSemester IMudah dan Menyenangkan


11. Hasil dari (17 DIV 3) * (28 MOD 3) adalah ....
      A. 0
      B. 1
      C. 5
      D. 6
      E. 18



12. Berikut ini adalah konstanta integer ....
      A. -32768
      B. 32768
      C. 255
      D. -32769
      E. 256



13. Gambar belah ketupat dalam flow chart digunakan untuk ....
      A. Keputusan
      B. Selesai
      C. Input
      D. Output
      E.  Mulai


14. Tipe data manakah yang dapat memuat bilangan pecahan :
      A. Bolean
      B. Integer
      C. Real
      D. LongInt
      E. Byte



15. Berikut ini yang termasuk pernyataan perulangan dalam Pascal ....
      A. if dan case
      B.  repeat, for
      C. while
      D. for
      E. for, while dan repeat


16. Berikut ini merupakan potongan dari suatu program Pascal:
          x:=2; y:=6; z:=10;
                if z > y then
                if y > x then
                if x < z then
                    writeln(x)
                           else writeln(y)
                           else writeln(z);

Jika x, y dan z bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
     A. 2
     B. 6
     C. 10
     D. 120
     E. Tidak ada output


17. Berikut ini penulisan pernyataan if yang benar, kecuali ... .
      A. if nilai < 70 then;
          writeln(‘Tidak Tuntas’);
      B. if nilai < 70 then
                 writeln(‘Tidak Tuntas’)
         else writeln(‘Tuntas’);

     C. if nilai < 70 then
         begin
                 writeln(‘Tidak Tuntas’)
         end;
    D. if nilai < 70 then
          begin
                  writeln(‘Tidak Tuntas’);
          end.
     E. if nilai < 70 then;
                writeln(‘Tidak Tuntas’);
         else writeln(‘Tuntas’);


18. Berikut ini potongan program dalam Pascal yang akan menghasilkan output: 4 3 2 1
      A. for i:=4 to 1 do writeln(‘i’,’ ‘);
      B. for i:=4 to 1 do writeln(i, ‘ ‘);
      C. for i:=4 to downto 1 writeln(i,’ ‘);
      D. for i:=4 to 1 down to 1 write(‘i’,’ ‘);
      E. for i:=4 to 1 down to 1 write(i,’ ‘);


19. Diantara ekspresi berikut, yang tidak akan menghasilkan nilai 5 adalah ....
      A. 2+3/1
      B. 3 mod 2 + 4
      C. 20*3/12
      D. 15/5+2
      E.  5/1+1


20. Variabel x=‘KARIMUN’, dalam Pascal dimasukkan dalam tipe data .... .
      A. Char
      B. Longint
      C. Integer
      D. String
      E.  Real


21. Berikut ini merupakan potongan dari suatu program Pascal:
             x:=4; y:=5; z:=6;
            if z > y then
            if y > x then
            if x > z then
                 writeln(z)
                     else writeln(y)
                          else writeln(x);

      Jika x, y dan z bertipe integer dan program dianggap benar, maka output dari potongan program di atasadalah ....
      A. 4
      B. 5
      C. 6
      D. 20
      E. Tidak ada output


22. Perintah gotoxy(14,15) artinya kursor akan menuju ke .....
      A. baris 14 kolom 15
      B. kolom 15 baris 18
      C. baris 13 kolom 16
      D. kolom 16 baris 13
      E. kolom 12 baris 14



23. Berikut ini merupakan potongan dari suatu program Pascal:
             for i:=1 to 5 do
             write(i,’ ‘);

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di
atas adalah ....
      A. 1 2 3 4 5
      B. 2 3 4
      C. i i i i
      D. i i i i i
      E. Tidak ada output



24. Berikut ini merupakan potongan dari suatu program Pascal:
          for i:=4 to 2 do
          write(i,’ ‘);

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4 3 2
      B. 3
      C. 2 3 4
      D. i i i
      E. Tidak ada output


25. Berikut ini merupakan potongan dari suatu program Pascal:
             for i:=3 to 9 do
             if (i mod 3 = 0) then
                    write(i, ' ');

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 3
      B. 6
      C. 3 6 9
      D. 3 6
      E. 9 6 3



26. Berikut ini merupakan potongan dari suatu program Pascal:
             i:=4;
             while i < 0 do
                    begin
                             write(i,’ ‘);
                             i:=i-1;
                    end;

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4 3 2 1
      B. 1 2 3 4
      C. 3 2
      D. Tidak ada output
      E. Terjadi perulangan terus menerus


27. Berikut ini merupakan potongan dari suatu program Pascal:
               i:=6;
              repeat
                       write(i,’ ‘);
                    i:=i-1;
              until i<2;

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 1 2 3 4 5 6
      B. 2 3 4 5 6
      C. 6 5 4 3 2 1
      D. 6 5 4 3 2
      E. i i i i i i


28. Berikut ini merupakan potongan dari suatu program Pascal:
            for i:=1 to 3 do
            begin
                     for j:=1 to 5 do
                     write(‘*’);
                     writeln;
             end;
Jika i dan j bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
       A. * * *
       B. * * * * *
       C. * * *
           * * * * *
       D. * * *
            * * *
            * * *
            * * *
            * * *
       E. * * * * *
            * * * * *
            * * * * *


29. Berikut ini merupakan potongan dari suatu program Pascal:
          i:=1;
          while i < 5 do
              begin
                    write(‘i’,’ ‘);
                    i:=i+1;
              end;

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
     A. 1 2 3 4
     B.  i i i i i
     C.  i i i i     D. 1 2 3 4 5
     E. Tidak ada output


30. Berikut ini merupakan potongan dari suatu program Pascal:
           i:=4;
           repeat
                    write(i,’ ‘);
                i:=i-1;
           until i < 4;

Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
     A. 4
     B. 1 2
     C. 4 3 2 1
     D. Tidak ada output
     E. Terjadi perulangan terus menerus



               Untuk soal 31 – 32

               FUNCTION fak (x, y: integer) : Integer;
               BEGIN
                      if y:= 0 then fak := 1
                      else
                      fak := x * fak (x, y-1);
               END;
                       Writeln (fak(5, 3));


31. Apa hasil dari program di atas!
      A. 36
      B. 125
      C. 128
      D. 360
      E. 512


32. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah…
      A. 360
      B. 512
      C. 180
      D. 64
      E. 1024


33. Manakah yang salah dari deklarasi dibawah ini
      A. Function info(a:byte):real;
      B. Function info:byte;
      C. Function info(a,b:byte) : real;
      D. Function info(a: real; b:integer):real;
      E. Function info(a:real);


               Potongan program dibawah untuk soal 34 - 35

                     c := 0
                     d := 0
                     while (a>b) do
                     begin
                             a := a – b;
                             c := c + 1;
                             d := d + b;
                     end;
                             write(c,’,',d);


34. Jika nilai a = 15, b = 4 maka keluaran dari program diatas adalah..
      A. 3 , 12
      B. 1 , 4
      C. 0 , 0
      D. 6 , 23
      E. 2 , 8


35. Jika nilai a = 34, b = 11 maka keluaran dari program diatas adalah..
      A. 13 , 12
      B. 21 , 4
      C. 0 , 0
      D. 3 , 33
      E. 2 , 2



              Untuk soal 36 - 37

              y := 10;
              x := 0;
              for i := 0 to y-1 do
              begin
                      x:=x+ 2 * i;
              end;
                     Writeln (x);


36. Berapakah output dari program diatas?
      A. 112
      B. 110
      C. 90
      D. 72
      E. 45


37. Jika baris kelima (x :=x + 2 * i) diganti dengan x := x + i Berapakah output program tersebut?
      A. 54
      B. 64
      C. 752
      D. 172
      E. 45


      Ada 5 rumah dalam 1 baris dari timur ke barat. Tiap rumah berbeda warnanya, di huni 5 orang yang berbeda dengan peliharaan, makanan favorit, dan minuman favorit yang berbeda.
      • Yang tinggal di rumah kuning suka mie ayam.   
      • Susu diminum di rumah tengah.
      • Nami tinggal di rumah paling barat.
      • Yang suka soto tinggal di samping rumah yang memelihara rubah.
      • Yang makan nasi padang suka minum jus jeruk.    
      • Joni suka makan tongseng.
      • Nami tinggal di sebelah rumah warna biru.
      • Ekas tinggal di rumah merah.
      • Mie ayam dimakan dirumah yang memelihara kuda.
      • Udin sedang minum teh.
      • Rumah hijau berada di timur dan di samping rumah ungu.
      • Yeng suka nasi goreng memelihara siput.
      • Sandi memelihara anjing.
      • Kopi di minum dirumah hijau.


38. Siapa yang suka minum air mineral ?
      A. Udin
      B. Joni
      C. Nami
      D. Sandi
      E. Ekas


39. Siapa yang senang minum jus jeruk?
      A. Udin
      B. Joni

      C. Nami
      D. Sandi
      E. Ekas


40. Siapa yang memelihara Zebra ?
      A. Udin
      B. Sandi
      C. Nami
      D. Joni
      E. Ekas

Ulangan Harian

Petunjuk Umum:
1. Kerjakan soal pilihan ganda di lembar jawab ujian (LJU)

Soal Pilihan Ganda
Pilihlah salah satu jawaban yang paling tepat dengan memberi tanda silang (A/B/C/D/E) pada lembar jawab yang telah disediakan ! Skor masksimal pilihan ganda = 40.

1. Jika program dianggap benar dan lengkap, maka output dari pernyataan:
Writeln(‘Ujian Akhir TIK’);
Write(‘Kelas X’);Write(‘Semester I’);
Writeln(‘Mudah dan Menyenangkan’);
    adalah .... .
A.      Ujian Akhir TIK Kelas X
       Semester I
           Mudah dan Menyenangkan
        B. Ujian Akhir TIK
             Kelas X Semester I
             Mudah dan Menyenangkan
        C. Ujian Akhir TIK
            Kelas XSemester I Mudah dan Menyenangkan
        D. Ujian Akhir TIK
             Kelas X Semester I Mudah dan Menyenangkan
        E. Ujian Akhir TIK
             Kelas XSemester I
             Mudah dan Menyenangkan

2. Variabel x=‘DE BRITTO’, dalam Pascal dimasukkan dalam tipe data .... .
      A. Char
      B. String
      C. Integer
      D. Longint
      E. Real

3. Berikut ini adalah konstanta integer ....
      A. 32768
      B. -32768
      C. -25.5
      D. 25.6
      E. ‘50’

4. Nilai dari 1000 MOD 360 adalah ... .
      A. 2
      B. 260
      C. 280
      D. 2600
      E. 2800

5. Hasil ekspresi 6*5/10*2+10 adalah ....
      A. -16
      B. 0.25
      C. 1
      D. 16
      E. 11.5

6. Gambar belah ketupat dalam flow chart digunakan untuk ....
      A. Mulai
      B. Selesai
      C. Input
      D. Output
      E. Percabangan

7. Berikut ini merupakan penulisan kepala program yang benar ....
      A. Program UAS-TIK;
      B. Program UAS_TIK
      C. Program UAS_TIK;
      D. Program 2UASTIK
      E. Program UAS TIK;

8. Berikut ini penulisan deklarasi variabel yang benar, kecuali ....
      A. var alas, tinggi: real;
      B. Var Alas, Tinggi: real;
      C. Var uang, upah: integer;
                        total: real; i: integer;
      D. Var uang, upah, total: integer
      E. Var uang, upah: integer;
            Var total: real;

9. Berikut ini yang bukan merupakan tipe integer ....
      A. Word
      B. Byte
      C. Real
      D. Shortint
      E. Longint

10. Interval tipe data byte adalah ....
      A. 0 s.d. 255
      B. -255 s.d 255
      C. 0 s.d. 32.767
      D. 0 s.d. 32.768
      E. -32.678 s.d 32.678

11. Rumus y = a5 dalam Pascal dapat diekspresikan sebagai berikut, kecuali ....
      A. y := a * sqr(a)* sqr(a);
      B. y := sqr(a) + sqr(a) + a;
      C. y := sqr(a)*a * sqr(a);
      D. y := a *a *a *a *a;
      E. y := a *a *a * sqr(a);

12. Operator dalam bahasa pemrograman Pascal yang digunakan untuk mendapatkan hasil bagi  sebuah bilangan bulat oleh bilangan bulat lain adalah ...
      A. MOD
      B. DIV
      C. DIVIDE
      D. MODULUS
      E. REST

13. Hasil dari (17 DIV 3) * (28 MOD 3) adalah ....
      A. 0
      B. 1
      C. 5
      D. 6
      E. 18

14. Diantara ekspresi berikut, yang tidak akan menghasilkan nilai 5 adalah ....
      A. 2+3/1
      B. 3 mod 2 + 4
      C. 20*3/12
      D. 5/1+1
      E. 15/5+2

15. Jika x = 4, y = 6, w = 8, z = 10, maka ekspresi (x*y+w)/z+x akan menghasilkan nilai ....
      A. 23.2
      B. 28.8
      C. 7.2
      D. 19.2
      E. 8.2

16. Dalam Pascal rumus: y = a2 + b2  dapat dituliskan ... .
      A. y = (sqr(a) + sqr(b))
      B. y := sqrt(sqr(a)* sqr(b));
      C. y = sqrt(a *a + b*b)
      D. y := (a *a + b*b);
      E. y := sqrt(sqr(a) + sqr(b));

17. Perintah gotoxy(14,15) artinya kursor akan menuju ke .....
      A. baris 14 kolom 15
      B. kolom 15 baris 14
      C. baris 13 kolom 16
      D. kolom 16 baris 13
      E. baris 15 kolom 16

18. Berikut ini yang termasuk pernyataan perulangan dalam Pascal ....
      A. if dan case
      B. for
      C. while
      D. repeat
      E. for, while dan repeat

19. Berikut ini penulisan pernyataan if yang benar, kecuali ... .
      A. if nilai < 65 then;
                writeln(‘Tidak Tuntas’);
      B. if nilai < 65 then
                begin
                writeln(‘Tidak Tuntas’);
                end.
      C. if nilai < 65 then
            begin
            writeln(‘Tidak Tuntas’)
            end;
      D. if nilai < 66 then
            writeln(‘Tidak Tuntas’)
            else writeln(‘Tuntas’);
      E. if nilai < 66 then;
            writeln(‘Tidak Tuntas’);
            else writeln(‘Tuntas’);

20. Berikut ini merupakan potongan dari suatu program Pascal:
        x:=4; y:=5; z:=6;
                if z > y then
                                if y > x then
                                                if x > z then
                                writeln(z)
                else writeln(y)
        else writeln(x);
Jika x, y dan z bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4
      B. 5
      C. 6
      D. 20
      E. Tidak ada output

21. Berikut ini merupakan potongan dari suatu program Pascal:
        x:=2; y:=6; z:=10;
                if z > y then
                                if y > x then
                if x < z then
        writeln(x)
        else writeln(y)
        else writeln(z);
Jika x, y dan z bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 2
      B. 6
      C. 10
      D. 120
      E. Tidak ada output

22. Berikut ini merupakan potongan dari suatu program Pascal:
      for i:=1 to 5 do
            write(i,’ ‘);
      Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di
atas adalah ....
      A. 2 3 4
      B. 1 2 3 4 5
      C. i i i i i
      D. i i i i
      E. Tidak ada output

23. Berikut ini potongan program dalam Pascal yang akan menghasilkan output: 4 3 2 1
      A. for i:=4 to 1 do writeln(‘i’,’ ‘);
      B. for i:=4 to 1 do writeln(i, ‘ ‘);
      C. for i:=4 to downto 1 writeln(i,’ ‘);
      D. for i:=4 to 1 down to 1 write(‘i’,’ ‘);
      E. for i:=4 to 1 down to 1 write(i,’ ‘);

24. Berikut ini merupakan potongan dari suatu program Pascal:
      for i:=4 to 2 do
      write(i,’ ‘);
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4 3 2
      B. 3
      C. 2 3 4
      D. i i i
      E. Tidak ada output

25. Berikut ini merupakan potongan dari suatu program Pascal:
      for i:=3 to 9 do
            if (i mod 3 = 0) then
      write(i, ' ');
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 3
      B. 6
      C. 9
      D. 3 6 9
      E. 9 6 3

26. Berikut ini merupakan potongan dari suatu program Pascal:
      i:=1;
      while i < 5 do
      begin
            write(‘i’,’ ‘);
            i:=i+1;
      end;
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. i i i i
      B. i i i i i
      C. 1 2 3 4
      D. 1 2 3 4 5
      E. Tidak ada output

27. Berikut ini merupakan potongan dari suatu program Pascal:
      i:=4;
      while i < 0 do
      begin
            write(i,’ ‘);
            i:=i-1;
      end;
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4 3 2 1
      B. 1 2 3 4
      C. 3 2
      D. Tidak ada output
      E. Terjadi perulangan terus menerus

28. Berikut ini merupakan potongan dari suatu program Pascal:
      i:=6;
      repeat
            write(i,’ ‘);
            i:=i-1;
      until i<2;
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 1 2 3 4 5 6
      B. 2 3 4 5 6
      C. 6 5 4 3 2 1
      D. 6 5 4 3 2
      E. i i i i i i

29. Berikut ini merupakan potongan dari suatu program Pascal:
      i:=4;
      repeat
            write(i,’ ‘);
            i:=i-1;
      until i < 4;
Jika i bertipe integer dan program dianggap benar, maka output dari potongan program di atas adalah ....
      A. 4
      B. 1
      C. 4 3 2 1
      D. Tidak ada output
      E. Terjadi perulangan terus menerus

30. Berikut ini merupakan potongan dari suatu program Pascal:
      for i:=1 to 3 do
            begin
                        for j:=1 to 5 do
                        write(‘*’);
                        writeln;
            end;
      Jika i dan j bertipe integer dan program dianggap benar, maka output dari potongan program      di atas adalah ....
      A. * * *
      B. * * * * *
      C. * * *
          * * * * *
      D. * * *
           * * *
           * * *
           * * *
           * * *
      E. * * * * *
          * * * * *
          * * * * *

Untuk soal 31 – 32

            FUNCTION fak (x, y: integer) : Integer;
            BEGIN
             if y:= 0 then fak := 1
               else
            fak := x * fak (x, y-1);
            END;
            Writeln (fak(5, 3));

31. Apa hasil dari program di atas!
      A. 36
      B. 125
      C. 128
      D. 360
      E. 512

32. Jika writeln (fak(5,3)) diganti menjadi writeln (fak(4,5)), hasil dimunculkan adalah…
      A. 360
      B. 512
      C. 180
      D. 64
      E. 1024

33. Manakah yang salah dari deklarasi dibawah ini
      A. Function info(a:byte):real;
      B. Function info:byte;
      C. Function info(a,b:byte) : real;
      D. Function info(a: real; b:integer):real;
      E. Function info(a:real);

Potongan program dibawah untuk soal 34 - 35

            c := 0
            d := 0
            while (a>b) do
            begin
            a := a – b;
            c := c + 1;
            d := d + b;
            end;
write(c,’,',d);

34. Jika nilai  a = 15, b = 4 maka keluaran dari program diatas adalah..
      A. 3 , 12
      B. 1 , 4
      C. 0 , 0
      D. 6 , 23
      E. 2 , 8

35. Jika nilai  a = 34, b = 11 maka keluaran dari program diatas adalah..
      A. 13 , 12
      B. 21 , 4
      C. 0 , 0
      D. 3 , 33
      E. 2 , 2

            Untuk soal 36 - 37

            y := 10;
            x := 0;
            for i := 0 to y-1 do
            begin
                        x:=x+ 2 * i;
            end;
            Writeln (x);

36. Berapakah output dari program diatas?
      A. 112
      B. 110
      C. 90
      D. 72
      E. 45

37. Jika baris kelima (x :=x + 2 * i) diganti dengan x :=  x + i
      Berapakah output program tersebut?
      A. 54
      B. 64
      C. 752
      D. 172
      E. 45

      Ada 5 rumah dalam 1 baris dari timur ke barat. Tiap rumah berbeda warnanya, di huni 5 orang yang berbeda dengan peliharaan, makanan favorit, dan minuman favorit yang berbeda.
·         Ekas tinggal di rumah merah.
·         Sandi memelihara anjing.
·         Kopi di minum dirumah hijau.
·         Udin sedang minum teh.
·         Rumah hijau berada di timur dan di samping rumah ungu.
·         Yeng suka nasi goreng memelihara siput.
·         Yang tinggal di rumah kuning suka mie ayam.
·         Susu diminum di rumah tengah.
·         Nami tinggal di rumah paling barat.
·         Yang suka soto tinggal di samping rumah yang memelihara rubah.
·         Mie ayam dimakan dirumah yang memelihara kuda.
·         Yang makan nasi padang suka minum jus jeruk.
·         Joni suka makan tongseng.
·         Nami tinggal di sebelah rumah warna biru.
     
38. Siapa yang suka minum ari mineral ?
      A. Nami
      B. Sandi
      C. Udin
      D. Joni
      E. Ekas

39. Siapa yang memelihara Zebra ?
      A. Nami
      B. Sandi
      C. Udin
      D. Joni
      E. Ekas

40. Siapa yang senang minum jus jeruk?
      A. Nami
      B. Sandi
      C. Udin
      D. Joni
      E. Ekas