memory. Disamping kita dapat memahami cara penyimpanan pengapilkasiananya pada meorry yaitu proses pemberian
data tersebut kita juga akan menggunakan fungsi dalam bahasa alamat untuk masing masing array oleh pointrnya.
C , yaitu array dan diharapkan dapat memahami cara kerjanya
sepertti pointer, array , fungsi dan structure dalam
proses penyimpanan didalam memory. Alat dan aplikasi yang
aka kita gunakan pada praktikan ini adalah sebuah laptop,
LANDASAN TEORETIS
aplikasi notepad ++, dan MinGw.
Tipe Data
Key words—Pointer, Structre, Array, Memory, Function.
Dalam pemrograman bahasa C dikenal beberapa tipe data
antara lain Bit, Char, Int, Long Int dan Float. Tipe data ini
I. PENDAHULUAN
biasanya terkait dengan sebuah konstanta atau variabel yang
Bahasa C adalah salah satu bahasa pemograman yang tealah
berguna pada proses pemrograman. masing-masing tipe data
umum digunakan. Pada praktikan sebelumnya telah kita
tersebut mempunyai ukuran dan jangkauan yang berbeda-
ketahui bahwa bahasa C jug digunakan oleh intel sebagai
beda seperti tipe data Char memiliki ukuran 8 bit dengan
algoritma peyipanan datanya. Pada C terdapat beberapa
jangkauan 256 sedangkan tipe data Int memiliki ukuran 16
fungsi yang digunakan sebagai algoritma dimemory yaitu
bit dengan jangkauan 65536.
pointer,array, strucuter yang tersimpan dalam bentuk bit.
Khusus untuk tipe data Char, Int dan Long Int dikenal
Pointer (variable penunjuk) adalah suatu variable yang
istilah Signed dan Unsigned atau dalam bahasa Indonesia
berisi alamat memori dari suatu variable lain. Pad a pointer
berarti bertanda dan tak bertanda. Yang dimaksud dengan
terdapat 2 buah operator yang digunakan, yaitu & (address
bertanda disini adalah penggunaan tanda minus (-). Tipe data
of/operator alamat) dan * (value pointed by).
yang termasuk “Signed” boleh disebut dengan tipe datanya
Array adalah rentetan data yang memiliki tipe data sama.
saja, misalnya tipe data Signed Char bisa ditulis dengan
Array dan pointer memiliki hubungan yaitu pada setiap
array memiliki alamat yang dipegang oleh sebuah pointer.
Tipe Data Ukuran Rentang Nilai
Char 1 Byte -128 – 127
Unsigned 1 Byte 0 – 255
Chart
Signed 1 Byte -128 – 127
Chart
Short 2 Byte -32768 – 32768
Array merupakan kumpulan lokasi penyimpanan data yang Array juga dapat memiliki elemen array berupa array.
lokasi penyimpanan dalam sebuah array disebut elemen demikian, kita dapat mendefinisikan array n-dimensi.
array. Array dialokasikan secara sekaligus dalam Contohnya, sebuah matriks merupakan array dengan dua
memorysesuai dengan ukurannya. Karena letak elemen yang dimensi. Array akan dideklarasikan sehingga akan
berurutan, akses elemen arraypada memory relatif lebih dialokasikan sejumlah tempat di memori
mudah dan cepat dibandingkan dengan struktur data Linked- komputer sebanyak m x n byte yang letaknya
List. Setiap elemen dalam array dapat diakses menggunakan
selalu berdekatan. Contohnya, sebuah matriks
indeks yang biasanya berupa bilangan bulat skalar bukan
negatif. Dalam bahasa C, elemen pertama dalam array diberi
merupakan array dengan dua dimensi.
indeks 0. Representasi array dalam memory dengan Arraytersebut memiliki elemen arrayberupa
deklarasi int nim [8] adalah sebagai berikut (asumsikan array, contohnya int pusheen[][5]atau int
address elemen ke-0 adalah 0x4000 dengan nilai elemen A[2][2].Namun, karena memory komputer
pertama adalah 1, nilai elemen kedua adalah 3, nilai elemen
bersifat linear, komputer akan menyimpan
ketiga adalah 2, nilai elemen keempat adalah 1, nilai elemen
kelima adalah 1, nilai elemen keenam adalah 0, nilai elemen
arrayn-dimensi dalam bentuk linear. Hal ini
ketujuh adalah 0, dan nilai elemen kedelapan adalah 7). menyebabkan harus memerhatikan urutan indeks
untuk mengakses setiap elemen arrayn-
dimensi,dikarenakan hal ini akan berpengaruh
terhadap performancedari program yang dibuat,
terlebih data array yang diolah cukup besar,
Bahasa C mendukung deklarasi array secara statis maupun seperti seberapa baikkah program yang kita buat
secara dinamis. Array statis memiliki ukuran yang tidak bisa dalam memanfaatkan cache memory (cache-
diubah-ubah sedangkan array dinamis memiliki ukuran yang
friendly).
dapat ditentukan saat program sedang berjalan.Arraydinamis
di memory. Pointer ini juga dapat di-dereferensi seperti
halnya pointer lain dalam bahasa C, yaitu menggunakan
operator dereference (*). Selain itu, juga terdapat operator
yang sangat berguna yaitu struct_name -> member untuk
melakukan dereferensi pointer-to-struct lalu mengakses nilai
dari anggota structure tersebut. Operator tersebut memiliki
ekuivalensi dengan (*struct_name).member. Sebetulnya,
sebuah fungsi dapat langsung mengembalikan sebuah
Gambar di atas menunjukkan bagaimana penyimpanan structure walaupun hal ini terkadang tidak efisien saat
E. Pointer
Pointer merupakan variabel yang menyimpan alamat
memory. Dengan kata lain, pointer memiliki nilai alamat
memory untuk melakukan referensi terhadap suatu objek
yang tersimpan dalam memory komputer. Dengan
menggunakan pointer, kita dapat memiliki akses terhadap
memory secara langsung. Untuk setiap tipe data T, terdapat
pointer ke T. Deklarasi pointer dalam bahasa C dapat
dilakukan dengan mudah, contohnya int* ptr yang
III.HASILDANANALISIS
merupakan pointer yang melakukan referensi terhadap objek
bertipe integer.
A.Tugas 1: Membuat Fungsi bitwise XOR dengan bitwise
Pointer juga dapat digunakan untuk menunjukkan structure
NOT & AND
berdasarkan alamatnya di memory. Hal ini sangat berguna
Operator XOR merupakan salah satu operasi bitwise.
untuk melakukan passing structure ke atau dari sebuah
Penulisannya dalam bahasa C yaitu ‘ ^’ . XOR adalah
fungsi hanya dengan memberikan alamat structure tersebut
singkatan dari Exclusive OR atau dapat disebut juga sebagai
gerbang “setiap tetapi tidak semua” . Gerbang XOR akan 1 1 1 0
muncul apabila muncul satan ganjil pada mausukan. 1 0 0 1
X Y X^Y 0 1 0 1
Tabel disamping
0 0 0 1 1 1 0
adalah tabel kebenaran
0 1 1 gerbang XOR. Pada
1 0 1 tugas ini kita akan Fungsi tersebut kemudian di buat ke dalam bahasa C dan
B.Tugas 2: Membuat suatu fungsi untuk mengekstrak tersebut. Proses ekstraksi ini membutuhkan urutan/besar
Byte. byte ekstraksi (Dalam kode program adalah nilai ‘n’) yaitu
pada Low Significant Bit bernilai 0 hinggi 2 untuk nilai
Fungsi ekstraksi Byte adalah funsi yang menerima Most Significant Bitnya.
beberapa bit data dan dapat melakukan ekstraksi dari data
Fungsi untuk proses ekstraksi Byte return ((unsigned) (x &
0x00FF0000)) >> 16;
case 3 :
return ((unsigned) (x &
0xFF000000)) >> 24;
}
}
//Tanggal : 13 Oktober 2018 00FF0000(n=2)Biner=0000 0000 1111 11111 0000 0000 0000
0000
//Kelompok :
//Rombongan : 02
AND (&) Biner= 0000 0000 0011 0100 0000 0000 0000
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
0000
//Nama File : getByte.c
// Deskripsi : fungsi yang dapat melakukan ekstraksi
return((unsigned)(x &0x00FF0000))>>16;
data yang memperhatikan nilai MSB nya.
Analisis:
D. Tugas 4 :Fungsi Membalik Urutan Byte Pengoperasian penjumlahan maupun pengurangan pada
bilang hex yang memiliki sifat hex haruslah menggunakan
komplemen dalam setian pengiputannya.
Analisis :
Dengan menggunakan encrypt maka uruatan bilangan Tugas 9 : Fungsi membalik Urutan Array
integer maupun hexa dapat kita ubah sesuai dengan batas
encrpyt, sehingga orang lain yang ingin menembus
keamanan kita dapat dicegah.
Pada praktikum ini kita disuruh untuk membuat sebuah Tugas 11 : Matriks nama dengan pointer
program menerima beberapa karakter yang diberikan oleh
pengguna, menyimpan berupa tipe data char tersebut pada
sebuah array of character, dean menampilkan dengan
posisi terbalik .
5. DAFTAR PUSTAKA
• Bryant, Randal, dan David O’Hallaron. Computer
Pada praktikum ini kita disuruh untuk membuat sebuah Systems : A Programmer’s Perspective 2nd Edition. 2011.
program yang dapat melakukan simulasi operasi Massachusetts : Pearson Education Inc.
penjumlahan dan pengurangan pada level bit dengan • Patterson, David, dan John Hennessy. Computer
representasi two’s complement menggunakan array. Array Organization and Design : The Hardware/Software
yang digunakan terdiri atas 8 bit saja dan hanya boleh diisi Interface. 2012. Waltham: Elsevier Inc.
oleh angka 1 atau 0. Buatlah makefile untuk melakukan • http://gentongkosong.blogspot.co.id/2011/12/violitta -
kompilasi program ini. Bila diperlukan, Anda dapat yesmaya-skom-lecturer-17-posts.html, 14 Oktober 2015,
menggunakan fungsi pada printbitbyte.c. Analisis : Dari 10:18
hasil compile diatas kita bisa melihat
KESIMPULAN
1. Array adalah suatu urutan memory yang tesusun
dan dapat diisi ileh tipe data yang berbeda
LAMPIRAN //Tanggal : 11 Oktober 2018
Tugas 1 //Kelompok :
//Praktikum NWS3103 Arsitektur Sistem Komputer //Rombongan : 02
//Modul :2 //Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Percobaan :0 //Nama File : fungsiXOR.c
// Deskripsi : sebuah fungsi yang sama dengan XOR
menggunakan AND dan Komplemen
// librray
#include<stdio.h>
int fungsiXor (int x, int y); #include<stdio.h>
int fungsiXor (int x, int y) #include "fungsiXOR.h"
{
// code
// algoritma int main (void) {
int result; //Deklarasi variabel
result = ~((~(~x&y))&(~(x&~y))); // fungsi AND int a,b ;
dan komplement. printf("Masukan bilangan integer
return result; pertama : ");
} scanf("%d",&a);
printf("Masukan bilangan integer kedua
//Praktikum NWS3103 Arsitektur Sistem Komputer : ");
//Modul :2 scanf("%d",&b);
//Percobaan :0 printf("Hasil operasi XOR :
//Tanggal : 13 Oktober 2018 %d",fungsiXor(a,b));
//Kelompok : return 0;
//Rombongan : 02 }
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Nama File : fungsiXOR.c Tugas 2
// Deskripsi : Header untuk fungsi Xor //Praktikum NWS3103 Arsitektur Sistem Komputer
//Modul :2
#ifndef FUNGSIXOR //Percobaan :0
#define FUNGSIXOR //Tanggal : 13 Oktober 2018
int fungsiXor (int x, int y); //Kelompok :
#endif //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata (14S16014)
//Praktikum NWS3103 Arsitektur Sistem Komputer //Nama File : getByte.c
//Modul :2 // Deskripsi : Fungsi yang dapat melakukan ekstraksi
//Percobaan :0 byte ke-n dari suatu data X yang memiliki ukuran
//Tanggal : 13 Oktober 2018 tertentu. urutan byte pada data X diberi nomor 0 untuk
//Kelompok : LSB hingga 3 untuk MSB.
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata (14S16014) #include<stdio.h>
//Nama File : main.c #include "getByte.h"
// Deskripsi : fungsi main Xor int getByte (int x, int n)
{ //Nama (NIM) 1 : Albert A Simarmata(14S16014)
switch (n) //Nama File : getByte.h
{ case 0 : // Deskripsi : main program (main.c)
return ((unsigned) (x &
0x000000FF)) >> 0; #include <stdio.h> #include "getByte.h"
case 1 : int main(void)
return ((unsigned) (x & {
0x0000FF00)) >> 8; int x,result,n;
case 2 : printf("Masukan data yang akan di
return ((unsigned) (x & ekstraksi : 0x");
0x00FF0000)) >> 16; scanf ("%x",&x);
case 3 : printf("Ekstraksi dilakukan pada data
return ((unsigned) (x & ke-: ");
0xFF000000)) >> 24; scanf("%d",&n);
} printf("Hasil ekstraksi data : 0x%x",
} getByte(x,n));
return 0;
//Praktikum NWS3103 Arsitektur Sistem Komputer }
//Modul :2
//Percobaan :0
//Tanggal : 11 Oktober 2018 Tugas 3
//Kelompok : //Praktikum NWS3103 Arsitektur Sistem Komputer
//Rombongan : 02 //Modul :2
//Nama (NIM) 1 : Albert A Simarmata(14S16014) //Percobaan :0
//Nama File : getByte.h //Tanggal : 11 Oktober 2018
// Deskripsi : header sebagai penghubung fungsi //Kelompok :
(getByte.c) dengan main program (main.c) //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
#ifndef GETBYTE //Nama File : bitMask.c
#define GETBYTE // Deskripsi : fungsi yang menghasilkan suatu mask
int getByte(int x,int n); dengan aturan seluruh bit diantara batas atas
#endif // (highbit) dan
batas bawah (lowbit) diset menjadi 1 sedangkan bit
//Praktikum NWS3103 Arsitektur Sistem Komputer diluar highbit dan lowbit diset menjadi 0.
//Modul :2 // Asumsi yang
//Percobaan :0 digunakan adalah 0<= batas bawah <=31 dan 0<=
//Tanggal : 11 Oktober 2018 batas atas <= 31.
//Kelompok :
//Rombongan : 02 #include <stdio.h> #include "bitMask.h"
int bitMask (int highbit, int lowbit) //Nama (NIM) 1 : Albert A Simarmata (14S16014)
{ // Deskripsi : main program untuk masking bit
int range = highbit-lowbit;
//Banyak bit yang akan di mask sesuai #include <stdio.h>
dengan range+1(maks adalah 32) #include "bitMask.h"
unsigned masking; int main(void)
if (range<1) {
return 0; // masking dilakukan int x,y;
untuk seluruh bit printf("Masukan batas atas bit yang
else { akan dimasking : ");
masking = (1<<31)>>range; scanf ("%d",&x);
//dilakukan pengeseran suatu bilangan dengan bit ke printf("Masukan batas bawah bit yang
31-(31-range) bernilai 1 akan dimasking : ");
return masking>>(31-highbit); scanf("%d",&y);
} printf("Hasil masking bit : 0x%x",
} bitMask(x,y));
return 0;
//Praktikum NWS3103 Arsitektur Sistem Komputer }
//Modul :2
//Percobaan :0 Tugas 4
//Tanggal : 11 Oktober 2018 //Praktikum NWS3103 Arsitektur Sistem Komputer
//Kelompok : //Modul :2
//Rombongan : 02 //Percobaan :0
//Nama (NIM) 1 : Albert A Simarmata(14S16014) //Tanggal : 11 Oktober 2018
// Nama File : bitMask.h //Kelompok :
// Deskripsi : header sebagai penghubung fungsi //Rombongan : 02
(bitMask.c) dengan main program (main.c) //Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Nama File : main.c
#ifndef BITMASK // Deskripsi : main program untuk melakukan reverse
#define BITMASK bytes
int bitMask(int highbit,int lowbit); #include <stdio.h>
#endif #include "reverseByte.h"
int main(void)
//Praktikum NWS3103 Arsitektur Sistem Komputer {
//Modul :2 int x;
//Percobaan :0 printf("Masukan data yang akan di
//Tanggal : 11 Oktober 2018 reverse urutannya : 0x");
//Kelompok : scanf ("%x",&x);
//Rombongan : 02 printf("Hasil reverse urutan byte :
0x%x", reverseBytes(x)); Byte2 = Byte2 >> 8;
return 0; //Byte2 ini menjadi byte ke-1 atau di
} shift kanan sebanyak 2 byte
Byte1 = Byte1 << 8;
//Byte1 ini menjadi byte ke-2 atau di
//Praktikum NWS3103 Arsitektur Sistem Komputer shift kiri sebanyak 2 byte
//Modul :2 Byte0 = Byte0 << 24; //Byte0 ini
//Percobaan :0 menjadi byte ke-3 atau di shift kiri sebanyak 6 byte
//Tanggal : 11 Oktober 2018 return (Byte0 + Byte1 + Byte2 +
//Kelompok : Byte3);
//Rombongan : 02 }
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Deskripsi : fungsi yang dapat membalik urutan byte
dari suatu data X dengan menukar byte ke-0 dengan
byte ke-3 dan byte ke-2 dengan byte ke-1. Urutan byte
pada data berurutan dari byte ke-0 pada LSB dan byte //Praktikum NWS3103 Arsitektur Sistem Komputer
ke-3 pada MSB. //Modul :2
//Percobaan :0
#include <stdio.h> //Tanggal : 11 Oktober 2018
#include "reverseByte.h" //Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
int reverseBytes(int x) // Nama File : reverseBytes.h
{ // Deskripsi : header sebagai penghubung fungsi
unsigned Byte3 = (x & 0xFF000000); (reverseBytes.c) dengan main program (main.c)
//byte ke-3 dari x tetap, byte lainnya #ifndef REVERSEBYTE
diset 0 #define REVERSEBYTE
unsigned Byte2 = (x & 0x00FF0000); int reverseBytes(int x);
//byte ke-2 dari x tetap, byte lainnya #endif
diset 0
unsigned Byte1 = (x & 0x0000FF00);
//byte ke-1 dari x tetap, byte lainnya Tugas 5
diset 0
unsigned Byte0 = (x & 0x000000FF); //Praktikum NWS3103 Arsitektur Sistem Komputer
//byte ke-0 dari x tetap, byte lainnya //Modul :2
diset 0 //Percobaan :0
Byte3 = Byte3 >> 24; //Tanggal : 11 Oktober 2018
//Byte3 ini menjadi byte ke-0 atau di //Kelompok :
shift kanan sebanyak 6 byte //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014) {
// Nama File : minBytes.c //x = (x<<24)>>24;
// Deskripsi : main program untuk melakukan //y = (y<<24)>>24;
pengurangan byte y = ~y+1;
#include <stdio.h> // untuk mengubah y menjadi -y
#include "minBytes.h" x = x+y; // melakukan
int main(void) pengurangan,x = x-ykarena y = -y
{ x = x&0x000000FF;
// Deklarasi variabel return x;
int x,y;//Meminta masukan input dari user }
printf("Masukan bilangan pertama (hex max 2
angka) : 0x");
scanf("%x",&x);
printf("Masukan bilangan kedua (hex max 2
angka) : 0x");
scanf ("%x",&y);//Menampilkan hasil //Praktikum NWS3103 Arsitektur Sistem Komputer
printf("Hasil pengurangan : 0x0%x", //Modul :2
minBytes(x,y)); //Percobaan :0
//Tanggal : 11 Oktober 2018
} //Kelompok :
//Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
//Nama (NIM) 2 : Tuggul Pasaribu (14S15020)
// Nama File : minBytes.h
//Praktikum NWS3103 Arsitektur Sistem Komputer // Deskripsi : header sebagai penghubung fungsi
//Modul :2 (minBytes.c) dengan main program (main.c)
//Percobaan :0 #ifndef MINBYTES
//Tanggal : 11 Oktober 2018 #define MINBYTES
//Kelompok : int minBytes(int x, int y);
//Rombongan : 02 #endif
//Nama (NIM) 1 : Albert A Simarmata(14S16014)
// Nama File : minBytes.c
// Deskripsi : fungsi yang dapat menghitung hasil Tugas 6
pengurangan antara byte data pertama dikurangi //Praktikum NWS3103 Arsitektur Sistem Komputer
dengan byte data kedua. //Modul :2
//Percobaan :0
#include <stdio.h> //Tanggal : 11 Oktober 2018
#include "minBytes.h" //Kelompok :
int minBytes(int x, int y) //Rombongan : 02
//Nama (NIM) 1 : Albert A Simarmata(14S16014) setiap nilai dimasukan ke dalam shift register secara
//Nama (NIM) 2 : Tuggul Pasaribu (14S15020) bergantian adalah 5 bit
// Nama File : main.c #include<stdio.h>
// Deskripsi : main program untuk fungsi shift register #include "shiftRegister.h"
#include <stdio.h> int global_var = 0;
#include "shiftRegister.h" int shiftRegister (int x)
int main (void) {
{ global_var = (global_var << 8) | x;
// Deklarasi variabel return global_var;
int x,n=0;//Meminta masukan input dari }
user
while(n<=4){
printf("Masukan input : 0x"); //Praktikum NWS3103 Arsitektur Sistem Komputer
scanf("%x",&x); //Menampilkan //Modul :2
hasil shift register //Percobaan :0
printf("Hasil shift register yaitu : //Tanggal : 11 Oktober 2018
0x%.8x", shiftRegister(x)); //Kelompok :
printf("\n"); //Rombongan : 02
n++; //Nama (NIM) 1 : Albert A Simarmata(14S16014)
} // Nama File : minBytes.h
return 0; // Deskripsi : header sebagai penghubung fungsi
} (shiftRegister.c) dengan main program (main.c)
#ifndef SHIFTREGISTER
#define SHIFTREGISTER
int shiftRegister(int x);
#endif
int main()
//Praktikum NWS3103 Arsitektur Sistem Komputer {
//Modul :2 char kata[100];
//Percobaan :0 int i, n;;
//Tanggal : 11 Oktober 2018
//Kelompok : printf("Masukkan input kata \n");
//Rombongan : 02 gets(kata);//mengambil sebuah kata inputan
//Nama (NIM) 1 : Albert A Simarmata(14S16014) n=strlen(kata);
// Nama File : coba1.c printf("Karakter yang sudah dibalik
urutannya : \n");
void coba1(int* x, int* y, int* z) for (i=n-1;i>=0;i--)
{ {
// Kamus printf("%c",kata[i]);
} // Nama File : pointer_nama.c
// Deskripsi : merupakan sebuah program yang
printf ("\nPanjang kata = %d",n); didalamnya terdapat pengaplikasian array of pointer to
return 0; array of array of character.
}
#include<stdio.h>
#define MAX 10
#define SIZE 31
Tugas 10
int main ()
#include <stdio.h> {
char *nama[MAX],input[MAX][SIZE];
int main(){ int n,x,y;
int jM,n; printf("Masukkan nama kata per kata (maksimal
char nama[100][100]; 10 enter) : \n");
printf("Jumlah Mahasiswa : "); for(n=0;n<MAX;n++)
scanf("%d", &n); {
for(jM=0;jM<n;jM++){ gets(input[n]);
printf("Nama Mahasiswa-%d : ",jM+1); nama[n]=input[n];
scanf("%s", &nama[jM]); if(!strcmp(nama[n],"exit"))
} {
for(jM=0;jM<n;jM++){ break;
printf("%s",nama[jM]); }
printf("\n"); }
} printf("\n=======Output========\n");
for(x=0;x<n;x++)
return 0; {
} printf("%s ",nama[x] );
}
return (0);
Tugas 11 }
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : 2
// Percobaan : 11 Tugas 12
// Tanggal : 12 Oktober 2017 // Praktikum Arsitektur Sistem Komputer (NWS3102)
// Kelompok : 10 // Modul :2
// Rombongan : 1 // Percobaan : 11
// Nama (NIM) 1 : Albert A Simarmata (14S16014) // Tanggal : 11 Oktober 2018
// Rombongan : 2 x.nilai[i][j] +=
// Nama (NIM) 1 : Albert A Simarmata (14S16014) l*B.nilai[k][j];
// Nama File : mulMatriks.c }
// Deskripsi : merupakan sebuah yang akan }
melakukan proses perkalian antara dua inputan }
matriks.
return x;
#include <stdio.h> }
#include <stdlib.h>
#include "mulMatriks.h"
// Praktikum Arsitektur Sistem Komputer (NWS3102)
struct Matriks // Modul :2
{ // Percobaan : 11
int jumlahBaris; // Tanggal : 11 Oktober 2018
int jumlahKolom; // Rombongan : 2
int** nilai; // Nama (NIM) 1 : Albert A Simarmata (14S16014)
}; (14S15050)
struct Matriks mulMatriks (struct Matriks A, struct // Nama File : mulMatriks.h
Matriks B) // Deskripsi : merupakan sebuah fungsi yang
{ didalamnya merupakan penghubung antara fungsi
int i,j,k,l; mulmatriks.c dengan main.c.
struct Matriks x;
x.jumlahKolom = B.jumlahKolom; #ifndef MULMATRIKS
x.jumlahBaris = A.jumlahBaris; #define MULMATRIKS
extern struct Matriks mulMatriks
x.nilai = (int**) (struct Matriks A, struct Matriks B);
calloc(x.jumlahBaris,sizeof(int*)); #endif
for (i=0;i<x.jumlahBaris;i++)
{ // Praktikum NWS3103 Arsitektur Sistem Komputer
x.nilai[i] = (int*) // Modul : 2
calloc(x.jumlahKolom, sizeof(int)); // Percobaan : Program Enkripsi Sederhana
} // Tanggal : 11 Oktober 2018
for (k=0;k<A.jumlahKolom;k++) // Kelompok : 9
{ //
for (i=0;i<A.jumlahBaris;i++) // Nama File : main.c
{ // Deskripsi : main program untuk perkalian matrix
l = A.nilai[i][k];
for (j=0;j<x.jumlahKolom;j++)
{ #include<stdio.h>
#include<stdlib.h> {
#include"multmatrix.h" B.nilai[i]=
malloc(B.jumlahkolom*sizeof(int));
struct Matrix }
{ for(i=0;i<=B.jumlahbaris-1;i++)
int jumlahbaris; {
int jumlahkolom; for(j=0;j<=B.jumlahkolom-1;j++)
int** nilai; {
}; printf("Masukkan elemen ke
%d, %d: ", i+1,j+1);
int main(void) scanf("%d", &B.nilai[i][j]);
{ }
struct Matrix A,B,C; }
int i,j;
printf("Masukkan jumlah baris matrix A: "); if(A.jumlahkolom = B.jumlahbaris)
scanf("%d", &A.jumlahbaris); {
printf("Masukkan jumlah kolom matrix A: "); C = multmatrix(A,B);
scanf("%d", &A.jumlahkolom); printf("\nHasil perkalian dua buah
A.nilai = malloc(A.jumlahbaris*sizeof(int*)); matrix:\n");
for(i=0;i<=A.jumlahbaris;i++) for(i=0;i<=A.jumlahbaris-1;i++)
{ {
A.nilai[i]= for(j=0;j<=C.jumlahkolom-
malloc(A.jumlahkolom*sizeof(int)); 1;j++)
} {
for(i=0;i<=A.jumlahbaris-1;i++) printf("%d ",
{ C.nilai[i][j]);
for(j=0;j<=A.jumlahkolom-1;j++) }
{ printf("\n");
printf("Masukkan elemen ke }
%d, %d: ", i+1,j+1); }
scanf("%d", &A.nilai[i][j]); else
} {
} printf("Tidak memenuhi syarat
printf("Masukkan jumlah baris matrix B: "); perkalian matrix!");
scanf("%d", &B.jumlahbaris); }
printf("Masukkan jumlah kolom matrix B: ");
scanf("%d", &B.jumlahkolom); return 0;
B.nilai = malloc(A.jumlahbaris*sizeof(int*)); }
for(i=0;i<=B.jumlahbaris;i++)
{
int i;
int value = 0;
for (i=0;i<=6;i++)
{
value += A[i]*pow(2,i);
}
Tugas 13 value -= A[7]*pow(2,7);
// Praktikum EL3111 Arsitektur Sistem Komputer
// Modul : 2 return value;
// Percobaan : 12 }
// Tanggal : 12 Oktober 2017
// Kelompok : 10 int main (void)
// Rombongan : 1 {
// Nama (NIM) 1 : Albert A Simarmata (14S16014) int x,y,i,temp,hasil,plus, min;
// Nama File : main.c int C[8],D[8],E[8],result[8];
// Deskripsi : merupakan sebuah file yang int carry = 0;
didalamnya terdapat proses penjumlahan dan printf("Masukan bilangan pertama :\n");
pengurangan biner menggunakan fungsi array. scanf("%d",&x);
#include <stdio.h> printf("Masukan bilangan kedua :\n");
#include <math.h> scanf("%d",&y);
} fungsiXor(fungsiXor(C[i],D[i]),carry);carry
=((C[i]&carry)|(D[i]&carry))|(C[i]&D[i]);
int getBit (int x, int n) }
{ printf("Hasil penjumlahan biner : ");
return ((x>>n)&1); for (i=0;i<8;i++)
} {
printf("%d",result[i]);
int bitDes (int *A) }
plus = bitDes(result); {
printf("\nHasil desimal : %d",plus); int des_1, des_2;
y = ~y+1; printf("Masukkan bilangan desimal pertama:");
for (i=0;i<8;i++) scanf("%d",&des_1);
{ printf("Masukkan bilangan desimal kedua:");
E[i] = getBit(y,i); scanf("%d",&des_2);
} sumofbiner(des_1,des_2);
for (i=0;i<8;i++) return 0;
{ }
result[i] =
fungsiXor(fungsiXor(C[i],E[i]),carry);
carry
=((C[i]&carry)|(E[i]&carry))|(C[i]&E[i]); //Praktikum NWS3103 Arsitektur Sistem Komputer
} //Modul :2
printf("\nHasil pengurangan biner: "); //Percobaan :0
//Tanggal : 11 Oktober 2018
for (i=0;i<8;i++) //Kelompok :
{ //Rombongan : 02
printf("%d",result[i]); //Nama (NIM) 1 : Albert A Simarmata(14S16014)
}
min = bitDes(result); #ifndef START_VAL
printf("\nHasil desimal : %d",min); #define START_VAL 0
void sumofbiner (int bil1, int bil2);
return(0); #endif
}