modul algoritma bab 6
TRANSCRIPT
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 Cc[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 Cc: 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.
-45
6
0
72
1543
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 CProcedure 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 CProcedure 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];}
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 Cprogram 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:’); readln(n); masuk_data(data,n); x_bar := rata(data,n); write(‘Rata-rata dari’,n, ‘bilangan adalah : ‘,x_bar:6:3);end.
#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); 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;
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 ;
#include <stdio.>
#include <math.>
void masuk_data(int A[].int n)
{ int i;
X[i] dipakai kembali
k
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
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);
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];
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.3f\n”,n,
writeln (‘standar deviasi=’,standar6.3);
end
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;
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]);
#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(“%”,&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.
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;
}
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);
var i:integer;
begin
for i:=1 to n do begin
write(‘data ke:’,1’,:’);readln(A[i];
end;
end;
#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]);
}
}
void maks_min(const int data[],int n,int*m1,int*m2)
{ int i;
*m1 =data[0];
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.
*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 :
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 }
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;
end;
end;
procedure frekuensi(data:larik;n:integer;var f:larik);
#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;
}
}
void frekuensi(const int data[],int n,int f[])
{ int I;
for (i=1:i<n;i++)++f(data[i]];
}
main() {
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.
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.
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:’); readln(kata); if (palindrome(kata))then writeln(kata,’adalah palindrom’) else writeln(kata,’bukan palindrom’);end.
#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))
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:
}
Translasi 6.8. Mencoba copy
Bahasa Pascal Bahasa C
program mencoba_copy;
uses wincrt;
#include < stdio.h>
#include < stdio.h>
var kata,hasil:string;
begin
kata:=’Algoritma’;
hasil:=copy(kata,3,5);
write(‘hasil copy:’,hasil);
end.
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;
}
Translasi 6.10.Mencoba_delete
Bahasa Pascal Bahasa C
program mencoba_delete; #include < stdio.h>
uses wincrt;
var kata:string;
begin
kata:=’Algoritma’;
delete(kata,3,5);
write(‘hasil setelah dihapus:’,kata);
end.
#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
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;
}