# Pemrograman Pascal

## Menghitung Luas & Keliling Persegi Panjang

{% code title="HITUNG LUAS & KELILING PERSEGI PANJANG" %}
```csharp
program persegipanjang;
uses crt;
var
 P,L,Luas,Keliling : integer;
begin
   clrscr;
   writeln ('HITUNG KELILING & LUAS Persegi Panjang');
   write('Masukkan Panjang = ');
   readln(P);
   write ('Masukkan Lebar = ');
   readln(L);
   
   Luas := P * L;
   writeln('Luas Persegi Panjang = ', Luas);
   
   Keliling := 2 *(P + L);
   writeln('Keliling Persegi Panjang = ', Keliling);
   readln;
end.
```
{% endcode %}

## IF STATEMENT (Pernyataan Kondisi IF)

### IF then else

If Then Else adalah suatu pernyataan kondisi yang akan dijalankan jika kondisi itu benar, dan jika kondisi itu salah maka akan menjalankan atau mengeksekusi pernyataan yang salah.

![Sumber : https://www.tutorialspoint.com/pascal](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZCYs9j5ESaFKboB0m%2F-LRZFhucSt75VUGZEyz3%2Fif_else_statement.jpg?alt=media\&token=41acf2e8-eaab-4ea0-a3ff-8c7faaf22076)

Contoh Deklarasi If Then Else Menampilkan Bilangan Ganjil Genap :

{% code title="PASCAL IF THEN ELSE" %}
```csharp
program GanjilGenap;
uses crt;
var angka : Integer;
begin
	clrscr;
	writeln('Menentukan Bilangan');
	write('Masukkan Angka '); readln(angka);
	if angka mod 2 = 0 then 
		begin
			write('Bilangan Genap');
		end
	else 
		begin
			write('Bilangan Ganjil');
		end;
	readln;
end.

```
{% endcode %}

### Nested If Statement (IF Bersarang)

Contoh If Bersarang Menentukan Bilangan Ganjil Genap :

{% code title="PASCAL NESTED IF STATEMENT" %}
```csharp
program if_bersarang;
uses crt;
var angka:integer;
begin
  clrscr;
  write('Masukkan sebuah angka: ');readln(angka);
  if (angka mod 2 = 0) then
    begin
      write('Angka yang anda masukkan merupakan bilangan genap ');
      if (angka >= 10) then
        begin
          writeln('dan besar dari 10');
        end
      else
        begin
          writeln('dan kecil dari 10');
        end;
    end
  else
    begin
      write('Angka yang anda masukkan merupakan bilangan ganjil ');
     if (angka > 10) then
        begin
          writeln('dan besar dari 10');
        end
      else
        begin
          writeln('dan kecil dari 10');
        end;
    end;    
  readln;
end.
```
{% endcode %}



#### Contoh Hitung Nilai Rata-rata

```csharp
Program hitungnilai;
var
 nama:string;
 npm,absensi,tugas,uts,uas,nilai: integer;
 grade: char;
 rata_rata: double;
begin
   writeln('Data Nilai Mahasiswa');
   writeln('====================');
   writeln('');
   write('NPM   :');readln(npm);
   write('Nama  :');readln(nama);
   write('Absensi :');readln(absensi);
   write('Tugas :');readln(tugas);
   write('UTS   :');readln(uts);
   write('UAS   :');readln(uas);

   rata_rata := ((absensi*10)/100) +((tugas*20)/100)+((uts*30)/100)+((uas*40)/100);
   If rata_rata >= 79.5 Then
   begin 
      grade := 'A';
   end
   
   else if rata_rata >= 69.5 Then
   begin
      grade := 'B';
   end
   
   else if rata_rata >= 59.5 Then
   begin
      grade := 'C';
   end
   
   else if rata_rata >= 49.5 Then
   begin
      grade := 'D';
   end
   
   else
   begin
      grade := 'E';
   end;
   
   writeln('Hasil :', rata_rata:0:0);
   writeln('Grade :', grade);
   readln;
end.
```



## Case Of

Pada materi sebelumnya, Anda telah mengamati bahwa pernyataan **if-then-else** memungkinkan untuk menerapkan beberapa keputusan dalam suatu program. Ini juga dapat dicapai menggunakan pernyataan **kasus** dengan cara yang lebih sederhana.\
Di mana, **L1** , **L2** ... adalah label huruf atau nilai input, yang bisa berupa bilangan bulat, karakter, boolean atau data yang disebutkan. **S1** , **S2** , ... adalah pernyataan Pascal, masing-masing pernyataan ini mungkin memiliki satu atau lebih dari satu label kasus yang terkait dengannya. Ekspresi ini disebut **pemilih kasus** atau **indeks kasus** . Indeks kasus dapat mengasumsikan nilai yang sesuai dengan label kasus.

Pernyataan kasus harus selalu memiliki pernyataan **akhir** yang terkait dengannya. Aturan berikut berlaku untuk pernyataan kasus

* Ekspresi yang digunakan dalam pernyataan kasus harus memiliki tipe integral atau enumerasi atau menjadi tipe kelas di mana kelas memiliki fungsi konversi tunggal ke tipe integral atau enumerated.
* Anda dapat memiliki sejumlah pernyataan kasus dalam sebuah kasus. Setiap kasus diikuti oleh nilai yang akan dibandingkan dan titik dua.
* Label kasus untuk suatu kasus harus merupakan tipe data yang sama dengan ekspresi dalam pernyataan kasus, dan harus berupa konstanta atau literal.
* Compiler akan mengevaluasi ekspresi huruf. Jika salah satu nilai label kasus cocok dengan nilai ekspresi, pernyataan yang mengikuti label ini dieksekusi. Setelah itu, program berlanjut setelah akhir.
* Jika tidak ada label case yang cocok dengan nilai ekspresi, daftar pernyataan setelah yang lain atau kata kunci lainnya dieksekusi. Ini bisa menjadi daftar pernyataan kosong. Jika tidak ada bagian lain yang hadir dan tidak ada kasus konstan yang cocok dengan nilai ekspresi, aliran program berlanjut setelah akhir akhir.
* Pernyataan kasus dapat berupa pernyataan gabungan (yaitu, blok Begin ... End).

Contoh Diagram Alir CASE OF

![Sumber https://www.tutorialspoint.com/pascal](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZHyJYGKbIUUfCV1f-%2F-LRZIgkjsKunlKOEGKW_%2Fcase_statement.jpg?alt=media\&token=4fb77464-58b3-4e08-a1d6-1cb0bfaec7f1)

Berikut Contoh dengan Konsep Case Of

{% code title="PASCAL CASE OF" %}
```csharp
program contoh_case_of;
uses crt;
var
   grade: char;
begin clrscr;
	 write ('Pilih Grade = ');readln(grade);
   case (grade) of
      'A' : writeln('Sangat Bagus!' );
      'B' : writeln('Bagus!' );
      'C' : writeln('Cukup' );
      'D' : writeln('Buruk' );
      'F' : writeln('Sangat Buruk' );
   end;     
   writeln('Grade Nilai Anda adalah =  ', grade);
end.

```
{% endcode %}

## Looping (Perulangan)

### For Loop

Pada Struktur ini anda akan menjalankan blok program beberapa kali, dimana pernyataan yang dieksekusi secara berurutan. Pernyataan pertama dalam fungsi dijalankan pertama, diikuti oleh yang kedua, dan seterusnya.

Bahasa pemrograman menyediakan berbagai struktur kontrol yang memungkinkan jalur eksekusi lebih rumit.

Pernyataan loop memungkinkan kita untuk mengeksekusi pernyataan atau kelompok pernyataan beberapa kali dan mengikuti adalah bentuk umum dari pernyataan loop di sebagian besar bahasa pemrograman

Contoh Diagram Alir FOR

![Sumber : https://www.tutorialspoint.com/pascal](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZuVmbP1J0Frph661h%2F-LRZukUBJYc8_7BU1Aex%2Fpascal_for_do_loop.jpg?alt=media\&token=30b815b5-6c7e-483f-a3c9-987a848c8e96)

Contoh Deklarasi Perulangan FOR secara Naik atau ASCENDING

{% code title="PASCAL PERULANGAN (FOR ASCENDING)" %}
```csharp
program contoh_for;
var a,b,c:Integer;
begin
	for a := 1 to 10 do
	begin
		writeln('Nilai Ke => ', a);
	end;

	writeln('########################');

	for b := 0 to 8 do
	begin
		writeln('Nilai Ke => ', b);
	end;
end.

```
{% endcode %}

Jika Anda Runnig maka angka akan tampil dari kecil ke besar, seperti berikut:

![](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZJpX0zbJpfEl1EAPl%2F-LRZMswGd_4Q-EYxvCfI%2FScreenshot%20from%202018-11-18%2008-07-28.png?alt=media\&token=d465cdaa-0a56-4c76-956d-f0882078bd64)

Contoh Deklarasi Perulangan FOR Downto secara turun atau DESCENDING

{% code title="PASCAL PERULANGAN (FOR DESCENDING)" %}
```csharp
program forPas;
var a,b,c:Integer;
begin
	for a := 10 downto 1 do
	begin
		writeln('Nilai Ke => ', a);
	end;

	writeln('########################');

	for b := 8 downto 0 do
	begin
		writeln('Nilai Ke => ', b);
	end;
end.

```
{% endcode %}

Jika Anda Runnig maka angka akan tampil dari besar ke kecil, seperti berikut:

![](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZJpX0zbJpfEl1EAPl%2F-LRZO-Wg1xiEmTc1OZGN%2Floopdesc.png?alt=media\&token=b84c48c6-93a2-4512-88c6-892b3423e5bb)

### Nested For Loops

{% code title="PASCAL FOR NESTED (Bersarang)" %}
```csharp
program NestedFor;
uses crt;
var i,j,n : Integer;
begin clrscr;
	write('Masukkan Jumlah Baris '); readln(n);
	for i := 1 to n do
		begin
			for j := 1 to i do
				write('*');
			writeln;
		end;
	readln;
end.
```
{% endcode %}

Dari kondisi diatas merupakan Penggunaan FOR Bersarang, dimana proses eksekusi berdasarkan variable **n** yang diinput lihat pada baris 6 (enam). Dan kondisi berikutnya menampilkan perulangan pada variable **j**  untuk menampilkan simbol (\*).

Dalam [matematika](https://id.wikipedia.org/wiki/Matematika), **bilangan prima** adalah [bilangan asli](https://id.wikipedia.org/wiki/Bilangan_asli) yang lebih besar dari [angka](https://id.wikipedia.org/wiki/Angka) [1](https://id.wikipedia.org/wiki/1_\(angka\)), yang faktor pembaginya adalah [1](https://id.wikipedia.org/wiki/1_\(angka\)) dan bilangan itu sendiri. 2 dan 3 adalah bilangan prima. 4 bukan bilangan prima karena 4 bisa dibagi 2.

Jika suatu bilangan yang lebih besar dari satu bukan bilangan prima, maka bilangan itu disebut [bilangan komposit](https://id.wikipedia.org/wiki/Bilangan_komposit). Cara paling sederhana untuk menentukan bilangan prima yang lebih kecil dari bilangan tertentu adalah dengan menggunakan [saringan Eratosthenes](https://id.wikipedia.org/wiki/Saringan_Eratosthenes).

Berikut adalah 168 bilangan prima pertama (semua bilangan prima kurang dari 1000): (Sumber : [Wikipedia](https://id.wikipedia.org/wiki/Bilangan_prima))

### FOR & IF Mencari Bilangan Prima

{% code title="PASCAL BILANGAN PRIMA" %}
```csharp
program bilanganPrima;
var
   i, j:integer;
begin
   for i := 2 to 50 do
   begin
      for j := 2 to i do
        if (i mod j)=0  then
            break;
      if(j = i) then
        writeln(i , ' Adalah Bilangan prima' );
   end;
end.
```
{% endcode %}

### While Do

Sebuah pernyataan **while do** dalam Pascal memungkinkan perhitungan berulang sampai beberapa kondisi pengujian terpenuhi. Dengan kata lain, itu berulang kali mengeksekusi pernyataan target asalkan kondisi yang diberikan benar.

Contoh Diagram alir While:

![Sumber : https://www.tutorialspoint.com/pascal](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZS5afcws2j2svEJV7%2F-LRZSUJj4Hv5S03t0Qli%2Fpascal_while_do_loop.jpg?alt=media\&token=459e7ee7-a115-493f-a5a0-0d0cf5bc25e8)

Berikut Contoh Deklarasi While dengan Program Pascal:

```fsharp
while ekspresi kondisi do
  begin
      Pernyataan Benar atau Salah    
  end;
```

{% code title="PASCAL WHILE" %}
```csharp
program contoh_while;
uses crt;
	var a, b:Integer;
begin clrscr;
	
	a:=1;
	while a <= 5 do
	begin
		writeln('Hitung Naik ',a);
		a:= a + 1;
	end;
	
	writeln('#############################');
	
	b:=5;
	while b >= 0 do
    begin
      writeln('Hitung Turun: ',b);
      b:= b - 1;
    end;

	readln;
end.
```
{% endcode %}

Contoh While untuk menentukan Deret Angka Kelipatan 2 Dan Deret Angka Kelipatan 3 :

```csharp
program while_do;
uses crt;
var
  i: integer;
begin
  clrscr;
  i:= 2;
  writeln('Deret Angka kelipatan 2: ');
   
  while i <= 10 do
    begin
      write(i,' ');
      i:= i + 2;
    end;
  
  writeln();
  writeln('####################################');

  i:= 3;
  writeln('Deret Angka kelipatan 3: ');
   
  while i <= 10 do
    begin
      write(i,' ');
      i:= i + 3;
    end;
  readln;
end.
```

### Menampilkan Nested dengan WHILE

```csharp
program ProgramName;
var
	x,y, angka: Integer;
begin
	write('Masukkan Angka '); read(angka);
	
	x := 1;
	while x <= angka do
	begin
      y := 1;
      while y <= x do
         begin
           	write('*');
            y := y + 1;
         end;
         writeln;
         x := x + 1;
   end;
end.
```

### Repeat Until

Perulangan dengan menggunakan Repeat Until, tidak sama seperti perulangan dengan FOR dan WHILE.  Perbedaananya adalah Repeat Until membatasi perulangan yang dieksekusi paling bawah.

Diagram Alir Repeat Until

![Sumber : https://www.tutorialspoint.com/pascal](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LR_65_CIZiLnFxijmOR%2F-LR_7KwtnsAPO48pt9rG%2Fpascal_repeat_until_loop.jpg?alt=media\&token=b6cde8c2-b1bf-4ac5-ac99-cbf0b54e90da)

Penulisan Kondisi Repeat Until:

```
repeat
   S1;
   S2;
   ...
   ...
   Sn;
until condition;
```



{% code title="PASCAL REPEAT UNTUL" %}
```csharp
program repeat_unti;
uses crt;
var
  i: integer;
begin clrscr;
  
  i:= 0;
  repeat
    begin
      writeln('Repeat Ke = ', i);
      i:= i + 1;
    end;
  until i = 10;

  writeln();
  writeln('#################################');
  
  i:= 10;
  writeln('Berikut deret untuk kelipatan 10: ');
  repeat
    begin
      write(i,' ');
      i:= i + 10;
    end;
  until i > 100;
  readln;
end.
```
{% endcode %}

## Array

Array adalah konsep struktur untuk tipe data. Ini mengelompokkan unsur-unsur dari jenis yang sama. Array menyediakan akses acak ke setiap elemennya, juga dikenal sebagai komponen, dengan indeks linear.

Bahasa pemrograman pascal menyediakan struktur data yang disebut array, yang dapat menyimpan kumpulan sekuensial tetap dari elemen-elemen tipe yang sama. Array digunakan untuk menyimpan kumpulan data, tetapi seringkali lebih berguna untuk memikirkan sebuah array sebagai kumpulan variabel dari jenis yang sama.

Mendeklarasikan variabel individual, seperti angka1, angka2, ..., dan angka100, Anda menyatakan satu variabel array seperti angka dan menggunakan angka \[1], angka \[2], dan ..., angka \[100] untuk mewakili variabel individu. Elemen tertentu dalam larik diakses oleh indeks.

Semua array terdiri dari lokasi memori yang berdekatan. Alamat terendah sesuai dengan elemen pertama dan alamat tertinggi ke elemen terakhir.&#x20;

![Sumber : https://www.tutorialspoint.com/](https://3706297975-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LQAvaA5C_WOA6wW7nVB%2F-LRZvxwqlVRUWOgsJRSs%2F-LRZwFU69-7JygmHQkLS%2Farrays.jpg?alt=media\&token=e273df2d-7132-42bd-af81-21c6dda3d8a6)

### Deklarasi Array

Deklarasi array adalah seperti berikut  **N: array\[0..10] of integer**; Dimana **N** adalah variabel **array\[0..10]** adalah Panjang Array dan **Of Integer** adalah Tipe Data.

Semisal anda ingin mengawali indeks array dari 1 hingga 5 maka, anda deklarasikan seperti ini **nama\_array** : **array\[1..5] of tipe data**.

Contoh Kode Program Pascal Array&#x20;

{% code title="Pascal Array " %}
```csharp
program contoh_array;
uses crt;
var
  N: array[0..10] of integer;
  nama_buah : array[0..5] of String;
  begin
  clrscr;
  
   N[0]:= 10;
   N[1]:= 20;
   N[2]:= 30;
   N[3]:= 40;
  
  writeln('INDEKS N Ke 0 : ', N[0]);
  writeln('INDEKS N Ke 1 : ', N[1]);
  writeln('INDEKS N Ke 2 : ', N[2]);
  writeln('INDEKS N Ke 3 : ', N[3]);

  writeln('##########################');

  nama_buah[0]:='Apel';
  nama_buah[1]:='Melon';
  nama_buah[2]:='Pear';
  nama_buah[3]:='Mangga';

  writeln(nama_buah[0]);
  writeln(nama_buah[1]);
  writeln(nama_buah[2]);
  writeln(nama_buah[3]);
  
  readln;
  
end.
```
{% endcode %}

### Deklarasikan ARRAY dengan FOR&#x20;

{% code title="ARRAY Output Dengan FOR" %}
```csharp
program array_for;
uses crt;
	var 
		nama_buah : array[1..5] of String;
		j : Integer;
begin
	clrscr;
	nama_buah[1]:='Apel';
  	nama_buah[2]:='Melon';
  	nama_buah[3]:='Pear';
  	nama_buah[4]:='Mangga';
  	nama_buah[5]:='Jambu';
  
	for j:= 1 to 5 do
		begin
      		writeln('Ini Elemen Array [', j, '] = ', nama_buah[j] );
		end;
end.		
```
{% endcode %}

Perhatikan deklarasi variable baris 4 array\[1..5] berarti Indeks array dimulai dari 1 hingga 5, dan jika contoh berikut nya dengan while perhatikan baris 4 array\[0..10] yang diasusmsikan indeks array dimulai dari 0 hingga ke 10

```csharp
program array_while;
uses crt;
	var
		angka: array[0..10] of integer;
		i : integer; 
begin clrscr;
	angka[0]:= 10;
   	angka[1]:= 20;
   	angka[2]:= 30;
   	angka[3]:= 40;
   	angka[4]:= 50;
   	angka[5]:= 60;
   	angka[6]:= 70;
   	angka[7]:= 80;
   	angka[8]:= 90;
   	angka[9]:= 100;
   	i:=0;
   	while i < 10 do
   	begin
   		writeln('INDEKS KE = [', i ,']  VALUE ARRAY = ' , angka[i]);
   		i:= i + 1;
   	end;
   	readln;
end.
```

### Mengurutkan Nilai Array tanpa mendefinisikan Nilainya:

{% code title="PASCAL ARRAY DERET ASCENDING" %}
```csharp
program ArrayDeret;
uses crt;
var
   angka: array [1..100] of integer;
   i, j: integer;

begin clrscr;
   for i := 1 to 100 do
       angka[i] := i;  
   	for j:= 1 to i do
      writeln('Indeks Array [', j, '] Value Array = ', angka[j] );
end.
```
{% endcode %}

{% code title="PASCAL ARRAY DERET DESCENDING" %}
```csharp
program ArrayDeretx;
uses crt;
var
   angka: array [1..100] of integer;
   i, j: integer;

begin clrscr;
   for i := 100 downto 1 do
       angka[i] := i;  
   	for j:= 100 downto 1 do
      writeln('Indeks Array [', j, '] Value Array = ', angka[j] );
end.
```
{% endcode %}

### Contoh Program Biodata Mahasiswa dengan Array:

```csharp
program biodata_mahasiswa;

Type
	AngkaHuruf = String[25];
	MhsRecord =
			Record
				NPM, Nama : AngkaHuruf;
				Usia : Integer;
			End;

Procedure Biodata(var newData : MhsRecord);
Begin
	writeln('############# Isi Biodata #############');
	write('NPM: ');readln(newData.NPM);
	write('Nama: ');readln(newData.Nama);
	write('Usia: ');readln(newData.Usia);
end;

Var
	DataMahasiswa : Array[1..5] of MhsRecord;
	i            : 1..5;

Begin
	for i := 1 to 5 do
		Biodata(DataMahasiswa[i]);

	writeln('###################################################');
	write('Isikan 1 - 5 untuk Tampilkan Dari 5 array tersebut : ');readln(i);
	writeln('Hasil Record #',i,':');
	writeln;
	writeln('NPM:  ', DataMahasiswa[i].NPM);
	writeln('Nama: ', DataMahasiswa[i].Nama);
	writeln('Usia:  ', DataMahasiswa[i].Usia);
	readln;
end.
```
