modul algoritma bab 6

22
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 : -45 6 0 72 1543

Upload: eko-widyanto-napitupulu

Post on 09-Aug-2015

63 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: modul algoritma Bab  6

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

Page 2: modul algoritma Bab  6

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.

Page 3: modul algoritma Bab  6

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;}

Page 4: modul algoritma Bab  6

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

Page 5: modul algoritma Bab  6

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,

Page 6: modul algoritma Bab  6

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]);

}

}

Page 7: modul algoritma Bab  6

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

Page 8: modul algoritma Bab  6

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];

Page 9: modul algoritma Bab  6

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.

Page 10: modul algoritma Bab  6

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

Page 11: modul algoritma Bab  6

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() {

Page 12: modul algoritma Bab  6

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.

Page 13: modul algoritma Bab  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

Page 14: modul algoritma Bab  6

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>

Page 15: modul algoritma Bab  6

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>

Page 16: modul algoritma Bab  6

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’;

Page 17: modul algoritma Bab  6

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;

}