1.PERBEDAAN
FUNGSI NEW DAN MALLOC
FUNGSI
NEW
Dalam bahasa c++, jika kita ingin mengalokasikan memori pada
ruang yang masih kosong maka kita dapat menggunakan kata kunci ‘new’. Kata
kunci ini akan diikuti oleh tipe data yang akan dialokasikan sehingga kompiler
akan mengetahui seberapa besar ruang memori yang diperlukan untuk proses
pengalokasian tersebut. Sintaknya adalah sebagai berikut :
nama_pointer
= new tipe_data;
contoh
: p1 = new float;
Namun
jika ingin mengalokasikan n buah ruang memori maka kita dapat menggunakan
bentuk umum dibawah ini.
nama_pointer
= new tipe_data [n]
contoh
: p2 = new int [5]
CONTOH PROGAM NEW
#include
<iostream>
#include
<memory>
#include
<new>
using namespace std;
struct myclass {myclass() {cout
<<"myclass constructed\n";}};
int main () {
// uses first version:
int * p1 = new int[5];
// uses second version:
int * p2 = new (nothrow) int[4];
// uses third version:
pair <myclass*,ptrdiff_t> p3 =
get_temporary_buffer<myclass>(3);
new (p3.first) myclass[3]; // calls
constructors
return_temporary_buffer(p3.first);
return 0;
}
FUNGSI
MALLOC
Malloc digunakan untuk mengatur
alokasi memory pada heap. Pengaksesan blok memory dilakukan melalui sebuah
pointer yang dikembalikan oleh malloc. ‘size’ menyatakan jumlah size yang ingin
dialokasi/diambil dari heap memory. Heap memory adalah area memory yang
diperlukan untuk kompilasi program. Heap digunakan untuk mensuplai memori
tambahan sesuai dengan permintaan kita. Jika alokasi berhasil dilakukan maka
akan dikembalikan ke alamat awal blok memori tersebut. Sedangkan jika alokasi
tidak berhasil dilakukan
CONTOH PROGAM MALLOC
#include "stdio.h"
#include "conio.h"
#include "stdlib.h"
void main()
{
int *a;
int b;
a=&b;
b=10;
printf(" Nilai b : %d \n", b);
printf(" Alamat b : %p \n\n", &b);
printf(" Niai A : %p \n", a);
printf(" Alamat A : %p \n", &a);
printf(" Niali rujukan A : %d \n\n", *a);
a=(int *)malloc(sizeof(int)); // --> memasukan alamat pada memori swap
*a=25;
// free(a); --> menghapus alamat kosong dari a di swap
printf(" Niai A : %p \n", a);
printf(" Alamat A : %p \n", &a);
printf(" Niali rujukan A : %d \n\n", *a);
a=(int *)malloc(sizeof(int)); // --
> memasukan alamat pada memori swap
*a=35;
printf(" Niai A : %p \n", a);
printf(" Alamat A : %p \n", &a);
printf(" Niali rujukan A : %d \n\n", *a);
printf("\n\n");
getch();
}
2.CONTOH
APLIKASI STACK
PENGERTIAN
APLIKASI STACK
Secara sederhana stack bisa diartikan
dengan sebagai tumpukan dari benda atau data yang seolah-olah diletakkan di
atas data yang lain dimana data yang pertama kali masuk akan terakhir. Didalam
suatu stack kita dapat menambah data (PUSH) dan menghapus data (POP) lewat
ujung yang sama.
1.
DARI NOTASI INFIK KE PREFIK
#include
“stdaftx.h”
#include
<iostream>
#inlcude
“conio.h”
#inlcude
<string.h>
#define
MAX 20
using
namespace std;
char
stack [MAX];
int
top = -1;
//push
function
void
push (char item)
{
Top++;
Stack[top]=item;
}
//pop
function
char
pop()
{
char
a;
a=stack[top];
top--;
return
a;
}
//function
to analyze the precedence of operators
int
prcd(char symbol)
{
switch(symbol)
{
case
‘+’:
case
‘-’:
return 2;
case
‘*’:
case
‘/’:
retun 4;
case
‘(’:
case
‘)’:
case
‘#’:
return 1;
}
}
//function
to sort operators from other data
int
isoperator(char symbol)
{
switch(symbol)
{
case
‘+’:
case
‘-’:
case
‘*’:
case
‘/’:
case
‘(’:
case
‘)’:
return 1;
default:
return 0;
}
}
//function
to invert infix to prefix
void
convertip(char infix[],char prefix[]
{
int
I,symbol,j=0;
char
test[MAX];
infix=strrev(infix);
stack[++top]=’#’;
for(i=0;i<strlen(infix);i++)
{
symbol=infix[i];
if(isoperator(symbol)==0)
{
prefix[j]=symbol;
j++;
}
else
{
if(symbol==’)’)
{
push(symbol);
}
else
if(symbol==’(‘)
{
while(stack[top]!=’)’)
{
prefix[j]=pp();
j++;
}
pop();//pop
out(.
}
else
{
if(prcd(symbol)>prcd(stack[top]))
{
push(symbol);
}
else
{
while(prcd(symbol)<=prcd(stack[top]))
{
prefix[j]=pop();
j++;
}
push(symbol);
}
}
}
}
}
}
}
while(stack[top]!=’#’)
{
prefix[j]=pop();
j++;
}
prefix[j]=’\0’;
prefix=strrev(prefix);
}
int
main()
{
char
infix[20],prefix[20];
cout<<”Masukkan
infix string : “<<endl;
gets(infix);
convertip(infix,prefix);
cout<<”
prefix string adalah : “<<endl;
puts(prefix);
getch();
return
0;
}
2.
DARI NOTASI INFIK KE POSTFIK
#include<iostream>
#include<string>
#define N 50
using namespace std;
class stack
{
private:
char arr[N];
int tos;
public:
void push(char p)
{
if (tos != N)
arr[++tos] = p;
else
cout << "stack full";
}
char pop()
{
if (tos == -1)
cout << "stack Empty";
else
return (arr[tos--]);
}
bool isempty()
{
if (tos == -1)
return (true);
else
return (false);
}
char top()
{
return arr[tos];
}
stack()
{
tos = -1;
}
};
int pres(char sym)
{
if (sym == '^')
return 3;
else if (sym == '*' || '/')
return 2;
else if (sym == '+' || '-')
return 1;
else if (sym == '(')
return 0;
}
bool isoperator(char op)
{
if (op=='+' || op=='-' || op=='/' || op=='*' || op=='^')
return true;
else
return false;
}
int main()
{
string infix, postfix;
stack s;
int in=0;
int post=0;
cout << "Enter an infix expression: ";
cin >> infix;
s.push('(');
infix.append(")");
char temp;
while (!(s.isempty()))
{
if (isdigit(infix[in]))
postfix[post++] = infix[in];
else if (infix[in] == '(')
s.push(infix[in]);
else if (infix[in] == ')')
{
while (1)
{
temp = s.pop();
if (temp == '(')
break;
else
postfix[post] = infix[in];
}
}
else if (isoperator(infix[in]))
{
while (pres(s.top()) >= pres(infix[in]))
postfix[post++] = s.pop();
s.push(infix[in]);
}
in++;
}
cout << "Postfix expression is: " << postfix;
system("pause");
}
3. CONTOH PEMAKAIAN SUATU FUNGSI DALAM
PERKALIAN MATRIK
#include <iostream>
#include <conio.h>
using namespace std;
void ascii(){
char huruf;
cout << "Masukkan sebuah huruf : ";
cin >> huruf;
cout << "\nKode ASCII dari huruf tersebut adalah : " << int(huruf);
getch();
}
void matriks(){
int rowA = 0;
int rowB = 0;
int colA = 0;
int colB = 0;
cout << "Masukkan jumlah baris matriks A : ";
cin >> rowA;
cout << "Masukkan jumlah kolom matriks A : ";
cin >> colA;
int a [rowA][colA];
cout << "\n——————————————————-\n";
for(int i=0; i<rowA; i++){
for(int j=0; j<colA; j++){
cout << "Masukkan baris ke " << (i+1) << " kolom ke " << (j+1) << " : ";
cin >> a[i][j];
}
}
cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" << endl;
cout << "Masukkan jumlah baris matriks B : ";
cin >> rowB;
cout << "Masukkan jumlah kolom matriks B : ";
cin >> colB;
int b [rowB][colB];
cout << "\n——————————————————-\n";
if(colA==rowB){
for(int i=0; i<rowB; i++){
for(int j=0; j<colB; j++){
cout << "Masukkan baris ke " << (i+1) << " kolom ke " << (j+1) << " : ";
cin >> b[i][j];
}
}
int hasil[rowA][colB];
for(int i=0; i<rowA; i++){
for(int j=0; j<colB; j++){
hasil[i][j] = 0;
for(int k=0; k<rowA; k++){
hasil[i][j] += a[i][k] * b[k][j];
}
}
}
cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" << endl;
cout << "Hasil perkalian Matriks A dan B adalah sebagai berikut";
cout << "\n=======================================================\n" << endl;
for(int i=0; i<rowA; i++){
for(int j=0; j<colB; j++){
cout << hasil[i][j] << " ";
}
cout << endl;
}
cout << "\n=======================================================\n" << endl;
}else{
cout << "\nMaaf, syarat tidak memenuhi.\nJumlah kolom matriks A harus sama dengan jumlah baris matriks B";
}
}
int main(){
mulai :
int pilihan;
cout << "1. Fungsi menampilkan kode ASCII" << endl;
cout << "2. Fungsi perkalian matriks A dan B" << endl;
cout << "+++++++++++++++++++++++++++++++++++" << endl;
cout << "Masukkan kode (1/2) : ";
cin >> pilihan;
cout << endl;
if(pilihan==1 || pilihan==2){
if(pilihan==1) ascii();
else matriks();
}
cout << endl << "+++++++++++++++++++++++++++++++++++" << endl;
char ulang;
fflush(stdin);
cout << "Ingin ulangi lagi ? (y/t) : ";
cin >> ulang;
if(ulang=='y'){
cout << endl;
goto mulai;
}
getch();
return EXIT_SUCCESS;
}
#include <conio.h>
using namespace std;
void ascii(){
char huruf;
cout << "Masukkan sebuah huruf : ";
cin >> huruf;
cout << "\nKode ASCII dari huruf tersebut adalah : " << int(huruf);
getch();
}
void matriks(){
int rowA = 0;
int rowB = 0;
int colA = 0;
int colB = 0;
cout << "Masukkan jumlah baris matriks A : ";
cin >> rowA;
cout << "Masukkan jumlah kolom matriks A : ";
cin >> colA;
int a [rowA][colA];
cout << "\n——————————————————-\n";
for(int i=0; i<rowA; i++){
for(int j=0; j<colA; j++){
cout << "Masukkan baris ke " << (i+1) << " kolom ke " << (j+1) << " : ";
cin >> a[i][j];
}
}
cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" << endl;
cout << "Masukkan jumlah baris matriks B : ";
cin >> rowB;
cout << "Masukkan jumlah kolom matriks B : ";
cin >> colB;
int b [rowB][colB];
cout << "\n——————————————————-\n";
if(colA==rowB){
for(int i=0; i<rowB; i++){
for(int j=0; j<colB; j++){
cout << "Masukkan baris ke " << (i+1) << " kolom ke " << (j+1) << " : ";
cin >> b[i][j];
}
}
int hasil[rowA][colB];
for(int i=0; i<rowA; i++){
for(int j=0; j<colB; j++){
hasil[i][j] = 0;
for(int k=0; k<rowA; k++){
hasil[i][j] += a[i][k] * b[k][j];
}
}
}
cout << "\n+++++++++++++++++++++++++++++++++++++++++++++++++++++++\n" << endl;
cout << "Hasil perkalian Matriks A dan B adalah sebagai berikut";
cout << "\n=======================================================\n" << endl;
for(int i=0; i<rowA; i++){
for(int j=0; j<colB; j++){
cout << hasil[i][j] << " ";
}
cout << endl;
}
cout << "\n=======================================================\n" << endl;
}else{
cout << "\nMaaf, syarat tidak memenuhi.\nJumlah kolom matriks A harus sama dengan jumlah baris matriks B";
}
}
int main(){
mulai :
int pilihan;
cout << "1. Fungsi menampilkan kode ASCII" << endl;
cout << "2. Fungsi perkalian matriks A dan B" << endl;
cout << "+++++++++++++++++++++++++++++++++++" << endl;
cout << "Masukkan kode (1/2) : ";
cin >> pilihan;
cout << endl;
if(pilihan==1 || pilihan==2){
if(pilihan==1) ascii();
else matriks();
}
cout << endl << "+++++++++++++++++++++++++++++++++++" << endl;
char ulang;
fflush(stdin);
cout << "Ingin ulangi lagi ? (y/t) : ";
cin >> ulang;
if(ulang=='y'){
cout << endl;
goto mulai;
}
getch();
return EXIT_SUCCESS;
}
4.PERBEDAAN TIPE DATA ARRAY DAN POINTER
BESERTA CONTOHNYA
ARRAY
Array adalah kumpulan dari nilai-nilai data bertipe sama
dalam urutan tertentu yang menggunakan sebuah nama yang sama. Nilai-nilai data
di suatu larik disebut dengan elemen-elemen larik. Letak urutan dari suatu
elemen larik ditunjukkan oleh suatu subscript atau suatu index.
Menurut dimensinya, array dapat
dibedakan menjadi :
1.
Array berdimensi satu
·
Setiap elemen array dapat diakses
melalui index
·
Index array secara default dimulai dari 0
·
Deklarasi array : Tipe_array
nama_array[ukuran]
2.
Array berdimensi dua
- Array dua dimensi merupakan array yang terdiri dari m buah baris dan n buah buah kolom. Bentuknya dapat berupa matriks atau tabel.
- Deklarasi array : Tipe_array nama_array [baris][kolom]
3.
Array multidimensi
- Array multidimensi merupakan array yang mempunyai ukuran lebih dari dua. Bentuk pendeklarasian array multidimensi sama saja dengan deklarasi array dimensi satu maupun dimensi dua.
- Deklarasi array : Tipe_array nama_array [ukuran 1][ukuran 2] . . . [ukuran N]
CONTOH PROGAM
#include<iosteam.h>
#define maks 10
int fibo[maks];
main()
{
int i;
fibo[1]=1;
fibo[2]=1;
for(i=3;i<=maks;i++)
fibo[i]=fibo[i-2]+fibo[i-1];
printf(“%d bilangan fibonanci
pertama adalah : \n”,maks);
for (i=1;i<=maks;i++)
printf(“%d
“,fibo[i]);
}
POINTER
Pointer adalah variabel yang merujuk pada alamat lokasi
suatu memori tertentu, variable pointer dapat dideklarasikan dengan menuliskan
nama variabelnya diawali dengan asterisk (‘*’). Perubahan yang terjadi pada
variabel asal akan mengakibatkan perubahan pada variabel pointernya dan
sebaliknya.
CONTOH PROGAM
#include<stdio.h>
main()
{
int y,x=8;
int *px;
px=&x;
y=*px;
printf (“Alamat x\t\t=%p\n”,&x);
printf(“Isi px\t\t\t=%p\n”,px);
printf(“Isi x\t\t\t=%d\n”,x);
printf(“Nilai yang ditunjuk oleh
px=%d\n”,*px);
printf(“Nilai y\t\t\t=%d\n”,y);
}
Tidak ada komentar:
Posting Komentar