Dokumen tersebut membahas tentang array satu dimensi dalam bahasa pemrograman Pascal dan C. Secara umum dijelaskan tentang deklarasi, membaca, mencetak, dan contoh penggunaan array satu dimensi untuk menghitung rata-rata, deviasi standar, nilai maksimum, minimum, dan modus dari sekumpulan data.
1. BAB VI
ARRAY SATU DIMENSI
A.PENDAHULUAN
Array adalah struktur data yang mengandung type data yang mempunyai type
sama.Suatu array adalah sekelompok memori yang berhubungan.Array mempunyai nama
dan type yang sama.Untuk merujuk lokasi tertentu atau elemen dalam array;array dan
angka posisi (disebut subscript atau indeks) dari elemen tersebut dalam array.Sebagai
contoh :
Algoritmik Bahasa Pascal Bahasa C
c[2]←2 c[2] :=2; c[2] = 2;
Adalah cara mengisi pada indeks 2 array c.
Array c dibawah ini mengandung 5 elemen.Elemen pertama array adalah elemen
ke-nol (bukan ke-1).Bilangan posisi yang diapit [] dinamakan subscript.Subcript harus
berupa integer atau ekspresi integer.
Nama array
c[1]
c[2]
c[3]
c[4]
c[5]
↑ bilangan posisi
Jika suatu program menggunakan ekspresi sebagai subscript maka ekspresi dievaluasi dulu
untuk menentukan subscript Jika a=1 dan b=3 c[a+b] adalah array c yang bernilai 72.
B.Deklarasi Array
Deklarasi array ditentukan dengan tipe dari setiap elemen dan banyaknya elemen
yang diperlukan oleh setiap array sehingga komputer mempersiapkan sejumlah
memori.Deklarasi array adalah sebagai berikut :
Algoritmik Bahasa Pascal Bahasa C
-45
6
0
72
1543
2. c: array [1…5] of integer c: array [1…5] of integer ; Int c[5];
Memberitahu komputer untuk menyediakan 5 elemen integer array c.Array bisa saja
dideklarasikan untuk berisi tipe data yang lain.Sebagai contoh,array tipe char dapat
digunakan untuk menyimpan string karakter.
C. Membaca elemen array
Oleh karena indeks array umumnya urut teratur,biasanya digunakan perulangan for
untuk mengakses elemen array.Perhatikan perbedaan dialek dalam Bahasa Pascal dan
Bahasa C di bawah ini.Diasumsikan :
Type larik = array [ 1..20] of integer
Bahasa Pascal Bahasa C
Procedure input_data(var x :
larik;n:byte):
Var I :integer;
begin
For i:=1 to n do
Begin
Write (‘data’,1’,:’);
Readln (x[i]);
end;
end;
Void baca_data (int A [],int n)
{ int i;
for (i = 0 ; i < I + +)
{
printf(“Data ke-%d :”,i+1);
scanf(“%d”,& A[i]);
}
}
Perhatikan bahwa array dalam bahasa pascal dimulai dari indeks 1 sampai dengan
indeks n sementara dalam bahasa C,indeks dimulai dari 0 sampai dengan (n-1).Dalam
bahasa pascal,parameter formal mempunyai harga default tidak berubah,artinya perubahna
yang dilakukan pada array dalam procedure ketika keluar dari procedure nilainya tidak
berubah.Dalam bahasa C,default parameternya adalah berubah.Sehingga dalam bahasa
pascal,bila diinginkan adanya perubahan pada array perlu ditambahkan var.Sedangkan
dalam bahasa C bila tidak diinginkan perubahan dalam array perlu ditambahkan cosnt.
D.Mencetak elemen array
Pada subprogram dalam bahasa C dibawah inimenggunakan kualifier cosnt karena
untuk mencetak data tidak diperlukan adanya perubahan pada data tersebut.
Bahasa Pascal Bahasa C
Procedure cetak (x : larik; n :byte);
var i :integer ;
begin
for i :=1 to n do
writeln (‘Data’,i’, : ‘, x[i]);
end;
void cetak_data (cosnt int A[],int n)
{ int i;
for (i =0;i< n; i++)
printf(“%d”,A[i];
}
3. Pada dasarnya , array merupakan fasilitas untuk mengelompokkan data yang betipe
sama.Ini berguna bila data tersebut dapat dimanfaatkan kembali.Sebagai contoh akan
diperhatikan pada kasus berikut ini.
Contoh 6.1
Carilah rata-rata dari n bilangan bulat dengan menggunakan array.
Algoritma 6.1
Fungsi rata(input x array [1..10] of integer ,ninteger) :real
{Diberikan n data kemudian dicari rata-ratanya}
Deklarasi
i, jumlah : integer
Deskripsi
jumlah ← 0
for I ← 1 to ndo
jumlah ← jumlah + x [i]
endfor
rata ← jumlah / n
Translasi 6.1
Bahasa Pascal Bahasa C
program mencari_rata_rata ;
user wincrt;
type larik = array [1..10] of integer ;
var n : integer; data :larik;
x_bar : real;
procedure masuk_data(var A :larik ; n
:integer);
var i : integer ;
begin
for i : = 1 to n do begin
write (‘Data ke :’,:’); readln (a[i]);
end;
end;
function rata ( x : larik;N : integer ; : real ;
var i : integer ; total :+ x[i];
begin
total :=0;
for i : 1 to N do total + x[i]
rata := total/N;
end;
begin
write(‘Berapa data:’);
#include <stdio.h>
void masuk_data(int A[],int n)
{ int i;
for ( i=0;i < n; i++);
{ printf(“Date ke-% : “,i+1);
Scanf(“%”,&A[i]);
}
}
fload rata (int x[] N)
{ int I;
float total=0;
for (i=0;i<N;i++) total = total +[i];
return(total/N);
}
main() {
int n;
int data [10];
float x_bar;
printf(“Berapa data :”);
scanf(“%”,&n);
masuk_data(data,n);
4. readln(n);
masuk_data(data,n);
x_bar := rata(data,n);
write(‘Rata-rata dari’,n,
‘bilangan adalah : ‘,x_bar:6:3);
end.
x_bar =rata(data,n);
printf(“Rata-rata dari %d bilangan adalah
:
%6.3f”,n,x_bar);
return 0;
}
Hampir tidak ada bedanya dengan algoritma 4.3.Karena tujuan akhirnya hanya
untuk mencari nilai rata-rata dari n bilangan bulat.Tentu akan sangat berguna bila nilai rata-
rata tersebut beserta datanya digunakan kembali sebagaimana kasus dibawah ini.
Kasus 6.2
Carilah nilai deviasi standar dari n buah data.
Analisis :
Rumus deviasi standar adalah :
std=
Terlihat bahwa nilai rata-rata dan datanya digunakan kembali.
Algoritma 6.2
Fungsi std(input x : array [1..10]of integer,n : integer,rata : real) : real
{Diberikan n data kemudian dicari rata-ratanya}
Deklarasi
i,jumlah : integer
Deskripsi
jumlah ← 0
for i ← 1 to n do
jumlah ← jumlah + sqr(x[i]-rata)
endfor
std ← sqr(jumlah/(n-1))
Translasi 6.2.
Bahasa Pascal Bahasa C
program standar_Deviasi;
user wincrt;
#include <stdio.>
#include <math.>
X[i] dipakai kembali
k
5. type larik = array [1..100] of real;
var n : integer; data : larik;
x_bar,dev standar : real;
procedure masuk_data(var A :larik;n : integer);
var : integer ;
begin
for i: =1 to do begin
write(‘Data ke :’,I,’)readln(A[i]);
end;
end;
function rata(x:larik;N;integer):real;
var i:integer;
total :real;
begin
total :=0;
for i := 1 to N do
total :=total +x[i];
rata := total/N;
end;
function STD (x:larik;N:integer;rata:real):real;
var i: integer;jumlah :real;
begin
jumlah :=0;
for I :=1 to N do
jumlah :=jumlah +sqr(+[i]-rata);
STD :=sqr (jumlah/N-1));
end;
begin
void masuk_data(int A[].int n)
{ int i;
for (i =;i < n;i++);
{ printf(“Data ke%d” :”,i+1);
Scanf(“%d”,&A[i]);
}
}
float rata(int x[],int N)
{ int i;
float total=0;
for (i =0;i<N;i++)
total =total + x[i];
return(total/N);
}
long sqr(int n ){return(n*n);}
float STD(const int x[],int N float rata)
{ int i;
float jumlah=0;
for (i =0;i++)
jumlah = jumlah + sqr (x[i]-rata);
return(sqr (jumlah /N-1)));
}
main() {
int n;
int data[10];
6. write(‘Berapa data:’);readln (n);
masuk_data(data,n);
x_bar :=rata(data,n);
dev_standar :=STD(data,n,x_bar);
writeln (‘nilai rata-rata =’,bar6.3);
writeln (‘standar deviasi=’,standar6.3);
end
float x_bar,dev_standar;
printf(“Berapa data :”); scanf(“%d”,&n);
masuk_data(data,n);
x_bar = rata(data,n);
dev_standar = STD (data,n,x_bar);
printf(“Nilai rata-rata =%6.3fn”,n,
x_bar);
printf(“standar deviasi =
%6.3f”,dev_standar);
return 0;
}
Kasus 6.3
Dengan menggunakan algoritma 5.2., buatlah algoritma untuk menentukan nilai
maksimum dari n bilangan.
Algoritma 6.3
function maksimum(input data :array[1..10]of integer,n : integer):integer
Deklarasi
i,temp :integer
Deskripsi
temp ←data[1]
for i←2 to n do
temp ←maksimum 2(temp,data[i]
maksimum ← temp
Tranlasi 6.3
Bahasa Pacal Bahasa C
program nilai_maksimum_n_bilangan;
user wincrt;
type larik = array [1..10]of integer;
#include <stdio.h>
void masuk_data(int A[],int n)
{ int i:
7. var n : integer;bilangan :larik;
procedure masuk_data(var A :larik; n :integer);
var i : integer;
begin
for i :=1 to n do begin
write(‘data ke :’,i’, :’);readln(A[i]);
end;
end;
funcation maksimum2(a,b :integer):integer;
begin
if (a>b)then maksimum2 :=a
else maksimum2:=b;
end;
functionmaksimum(data:larik;n:integer):integer;
var i,temp:integer;
begin
temp:=data[1];
for i:=2 to n do
temp:=maksimum2(temp,data[i]);
maksimum :=temp;
end;
begin
write(‘masukkan banyak data’);readln(n);
masuk_data(bilangan,n);
write(‘Nilai terbesar :’,maksimum(bilangan,n));
end.
for (i =0:i<n;i++)
{ printf(“Data ke-%d:”,i+1);
Scanf(“%”,&A[i]);
}
}
int maksimum2(int a,int b)
{ if (a>b)return(a);
else return(b);
}
int maksimum(int data[],int n)
{ int i,temp;
temp=data[0];
for (i =1;i<n;i++)
temp=maksimum2(temp,data[i]);
return(temp);
}
main() {
int n;
int bilangan[10];
printf(“Masukkan banyak data :”);
scanf(“%d”,&n);
masuk_data(bilangan,n);
printf(“Nilai terbesar:%d”,maksimum(bilangan,n));
return 0;
}
8. Kasus 6.4
Buatlah algoritma untuk menentukan nilai maksimum dan minimum dari n
bilangan.
Algoritma 6.4
Procedure maks_min(input data :larik,n:integer,output m1,m2 : integer)
Deklarasi
i:integer
Deskripsi
m1←data[1]
m2←data[1]
for i←2 to n do
if(data[i]>m1)then m1←data[i];
if(data[i]<m2)then m2←data[i];
endfor
Translasi 6.4
Bahasa Pascal Bahasa C
program nilai_maks_dan_min_n_bilangan;
uses wincrt;
type larik =array[1..10]of integer;
var maks,min,n:integer;
bilangan:larik;
procedure masuk_data(var
A:larik;n:integer);
#include <stdio.h>
void masuk_data(int A[],int n)
{ int i;
for (i=0;i<n,i++)
{ printf(“data ke-%:”,i+1);
scanf(“%d”,&A[i]);
}
9. var i:integer;
begin
for i:=1 to n do begin
write(‘data ke:’,1’,:’);readln(A[i];
end;
end;
procedure maks_min(data:larik;n:integer;
var m1,m2:integer);
var i :integer;
begin
m1:=data[1];
m2:=data[1];
for i:=2 to n do
begin
if(data[i]>m1)then m1:=data[i];
if(data[i]>m2)then m2:=data[i];
end;
end;
begin
write(‘masukkan banyak data:’);readln(n);
masuk_data(bilangan,n);
maks_min(bilangan,n,maks,min);
writeln(‘Nilai terbesar :’,maks);
writeln(‘Nilai terkecil :’,min);
end.
}
void maks_min(const int data[],int n,int*m1,int*m2)
{ int i;
*m1 =data[0];
*m2 =data[0];
for (i=1;i<n;i++)
{
if(data[i]>m1)*m1=data[i];
if(data[i]<*m2=data[i];
}
}
main() {
int n,maks,min;
int bilangan[10];
printf(“masukkan banyak data:”);
scanf(“%d”,&n);
masuk_data(bilangan,n);
maks_min(bilangan,n,&maks,&min);
printf(Nilai terbesar :%d/n”,maks);
printf(Nilai terkecil :%d”,min);
return 0;
}
Kasus 6.5
Tentukan modus dari n buah data berupa bilangan bulat,dimana besar datanya
antara 1 sampai dengan 10.
Analisis :
10. Modus adalah bilangan atau data yang paling sering muncul.Dengan kata
lain,frekuensi data terbesarlah yang dicari.Jadi langkah penyelesaian massalahnya adalah:
1.setiap jenis data dihitung frekuensi kemunculannya.
2.dari frekuensi-frekuensi tersebut dicari frekuensi terbesarnya.
Algoritma 6.5.a.
Procedure maksimum(data:larik;n:integer,output maks,item:integer)
{procedure ini hasil modifikasi dari algoritma(…)karena selain nilai maks dari larik
data,juga perlu diketahui besar datanya item}
Deklarasi
i:integer
Deskripsi
maks ←data[1]
item ←1
for ←2 to n do
if(data[i]>maks)then
maks ←data[i];
item ←data[i];
endif
endfor
Algoritma 6.5.b.
procedure frekuensi(data:larik;n:integer,output f:larik)
{data akan diambil nilai frekuensi f-nya}
Deklarasi
i:integer
Deklarasi
for ←1 to n do
f(data[i]:=f[data[i]]+1{dengan prinsip memasukkan bola kekeranjang yang sesuai
dengan nomornya }
11. endfor
Translasi 6.5
Bahasa Pascal Bahasa C
program menentukan_modus_n_bilangan;
useswincrt;
type larik=array[1...20]of integer;
var I,maks,modus,n:integer;
bilangan,fk:larik;
procedure masuk_data(var A:larik;n:integer);
var i:integer;
begin
for i:=1 to n do begin
write(‘data ke:’,I,’:’);readln(A[i]);
end;
end;
procedure maksimum(data:larik;n:integer;var
maks,item:integer);
var i:integer;
begin
maks:=data[1];
item:=2 to n do
if(data[i]>maks)then begin
maks :=data[i];
item:=i;
#include <stdio.h>
void masuk_data(int A[],int n)
{ int i:
for(i=0;i<n;i++)
{ printf(“Data ke-%d:”,i+1);
scanf(“%d”,&A[i]);
}
}
void maksimum(const int data[],int n,int *maks,int,*item)
{ int i:
*maks=data[0];
*item=1;
For (i=0;i<n;i++)
If (data[i]>*maks) {
*maks =data[i];
*item=I;
}
12. end;
end;
procedure frekuensi(data:larik;n:integer;var
f:larik);
var i:integer;
begin
for i:=1 to n do f[data[i]]:=f[data[i]]+1;
end;
begin
write(‘masukkan banyak data:’);readln(n);
masuk_data(bilangan,n);
frekuensi(bilangan,n,fk);
maksimum(fk,n,maks,modus);
writeln(‘Nilai modusnya :’,modus);
writeln(‘datanya sebanyak :’,maks);
end.
}
void frekuensi(const int data[],int n,int f[])
{ int I;
for (i=1:i<n;i++)++f(data[i]];
}
main() {
int bilangan[20]={0};
int n,maks,modus;
printf(“masukkan banyak data:”);
scanf(“%d”,&n);
masuk_data(bilangan,n);
frekuensi(bilangan,n,fk);
maksimum(fk,n,&maks,&modus);
printf(“Nilai modusnya :%d/n”,modus);
printf(“datanya sebanyak :%d”,maks);
return 0;
}
E.STRING
String dapat dipandang sebagai sederetan karakter (misalnya dengan panjang 255)
atau array[1..255] of char).
Kasus 6.6
Buatlah suatu algoritma untuk mengecek apakah suatu kata atau kalimat merupakan
palindrome atau tidak.Palindrom adalah suatu kata atau kalimat yang dibaca dari kiri ked
kanan sama dengan kalu dibaca dari kanan ke kiri.
Analisis
Misalnya kata yang akan dicek adalah “kasur rusak”.Maka hurup pertama
dicek,apakah sama dengan huruf pertama terakhir atau tidak,demikian pula untuk huruf
kedua dicek denganhuruf kedua terakhir sampai huruf yang di tengah kalimat.Bila
pengecekan selalu sama maka kalimat tersebut adalah palindrom.Jika terdapat satu huruf
saja yang tidak sama,kalimat tersebut bukanlah palindrome.
13. Algoritma 6.6.
Function palindrome (input s:string) : Boolean
Deklarasi
i, pj : integer
Deskripsi
palindrome ←true { diasumsikan benar,dibuktikan dengan penyangkalan }
pj ← length(s)
if(s[i]<>s[pj-i+1])then palindrome ← false
Translasi 6.6.
Bahasa Pascal Bahasa C
program mengecek_palindrom;
uses wincrt;
var kata : string;
functionnpalindrom(s:string):Boolean;
vai I,pj:integer;
begin
palindrome:=true;
pj:=lengh(s);
for I:=1 to (pj div 2)do
if(s[i]< > s[pj-i+1])then
palindrome:=false;
end;
begin
write(“masukkan sebuah kalimat:’);
#include< stdio.h>
#include <string.h>
int palindrome(char *s)
{ int I,pj;
pj =strlen(s);
for(i=0;i<=pj/2;i++)
if(s[i]!=s[pj-i-1])return 0;
return 1;
}
main() {
char*kata;
printf(“masukkan sebuah kalimat:”);
gets(kata);
if(palindrome(kata))
14. readln(kata);
if (palindrome(kata))then
writeln(kata,’adalah palindrom’)
else writeln(kata,’bukan palindrom’);
end.
printf(“%s adalah palindrome”,kata);
else printf(“%sbukan
palindrome”,kata);
return 0;
}
E.1 Subprogram yang berkaitan dengan string
Bahasa Pascal Bahasa C Arti
Length Strlen Mengembalikan panjang string
Copy Strcpy Menyalin string
concat Strcat Menggabung string
Delete Menghapus sebagian string
Insert Menyisipkan suatu string ke dalam string
Positif Strstr Mengembalikan posisi substring dalam string
upcase Toupper Mengubah menjadi huruf basar
E.2.Penggunaan
Translasi 6.7.Mencoba length
Bahasa Pascal Bahasa C
program mencoba_length;
uses wincrt;
var
p:integer;
kata:string;
begin
kata:=’Algoritma’;
p:=length(kata);
write(‘panjang kata:’,kata’,=’,p);
end.
#include < stdio.h>
#include < string.h>
main() {
char*kata=”Algoritma”;
int p;
p=strlen(kata);
printf(“panjang kata:%s=%d”,kata,p);
return 0:
}
15. Translasi 6.8. Mencoba copy
Bahasa Pascal Bahasa C
program mencoba_copy;
uses wincrt;
var kata,hasil:string;
begin
kata:=’Algoritma’;
hasil:=copy(kata,3,5);
write(‘hasil copy:’,hasil);
end.
#include < stdio.h>
#include < stdio.h>
typedef char *string;
string copy(string str,int dari,int panjang)
{ char buf[50];
strcpy(buf,str+dari-1);
buf[panjang]=0;
return buf;
}
main()
{ char*kata=”Algoritma”,
hasil = copy(kata,3,5);
printf(“hasil copy:%s”,hasil);
return 0;
}
Translasi 6.9. Mencoba Concat
Bahasa Pascal Bahasa C
program mencoba_concat;
uses wincrt;
var kata1,kata2,gabung:string;
begin
kata1:=’Algoritma’;
kata2:=’pemrograman’;
gabung:=concat(kata1,kata2);
write(‘kata gabungan:’,gabung);
end.
#include < stdio.h>
#include < stdio.h>
main()
{ char*kata1=”Algoritma”;
char*kata2=”Pemrograman”;
strcat(kata1,kata2);
printf(“kata gabungan :%s”,kata1);
return 0;
}
16. Translasi 6.10.Mencoba_delete
Bahasa Pascal Bahasa C
program mencoba_delete;
uses wincrt;
var kata:string;
begin
kata:=’Algoritma’;
delete(kata,3,5);
write(‘hasil setelah dihapus:’,kata);
end.
#include < stdio.h>
#include < stdio.h>
#define delete(str,posisi,panjang)
strcpy(str+posisi-1,str+posisi+panjang-
1)
main()
{ char *kata,3,5);
printf(“hasil setelah dihapus :%s”,kata);
return 0;
}
Translasi 6.11.Mencoba Insert
program mencoba_insert;
uses wincrt;
var kata1,kata2,kata3,gabung:string;
begin
kata1:=’Algoritma pemrograman’;
kata2:=’dan’;
insert(kata2,kata1,10);
write(‘setelah kata disisipi:’,kata1);
end.
Translasi 6.12.Mencoba Pos
program mencoba_pos;
uses wincrt;
var letak:integer;
kata1,kata2:string;
begin
17. kata1:=’Algoritma dan pemograman’;
kata2:=’dan’;
letak:=pos(kata2,kata1);
write(‘letak kata:’”,kata2,”’dalam”’kata1,”’kata1,”’pada posisi:’,letak);
end.
Translasi 6.13.Mencoba upcase
Bahasa Pascal Bahasa C
program mencoba_upcase;
uses wincrt;
var kata:string;
procedure ubah_ke_huruf_besar(var
s:string);
var i:integer;
begin
for i:=1 to length(s) do
s[i]:=upcase(s[i]);
end.
begin
kata:=’Algoritma dan pemograman’;
ubah_ke_huruf_besar(kata);
writeln(kata);
write(‘panjang kata=’,length(kata));
end.
#include < stdio.h>
#include < stdio.h>
void ubah_ke_huruf_besar(char *s)
{ int I;
for(;*s!=’/0;s++)
*s=toupper(*s);
}
main ()
{ char *kata=”Algoritma dan
pemrograman”;
ubah_ke_huruf_besar(kata);
printf(“%s/n”,kata);
printf(“panjang kata=%d”,strlen(kata));
return 0;
}