Senin, 19 November 2012

UTS SDAT TEORI


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

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