Rabu, 14 Juni 2017

PRAKTIKUM_MODUL_10

MODUL X LINKED LIST

Praktikum

Studi Kasus 1

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

typedef struct nod
{
int data;
struct nod*next;
}NOD,*NODPTR;
void CiptaSenarai(NODPTR*s)
{
*s=NULL;
}
NODPTR NodBaru(int m)
{
NODPTR n;
n =(NODPTR) malloc(sizeof(NOD));
if(n!=NULL)n-> data=m;
n-> next=NULL;
}
return n;
}
void SisipSenarai(NODPTR *s, NODPTR t, NODPTR p)
{
if(p==NULL){
t -> next =*s;
*s =t;
}

else{
t->next=p->next;
p->next=t;
}
}
void CetakSenarai(NODPTR s)
{
NODPTR ps;
for(ps = s; ps!=NULL; ps=ps->next)
printf("%d -->", ps-> data);
printf("NULL\n");
}
int main()
{
NODPTR pel;
NODPTR n;
CiptaSenarai(&pel);
n=NodBaru(55);
SisipSenarai(&pel, n, NULL);
CetakSenarai(pel);
return 0;
}


Hasil Running :





Pembahasan :
            Dalam program linked list tersebut menggunakan struct untuk mengakses variablenya dan nod*next itu next nya berfungsi untuk menyimpan nilai selanjutnya dan merupakan sebuah variable pointer.



Studi Kasus 2


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
typedef struct mahasiswa
{
int nim;
mahasiswa *next;
}*p;


void init(mahasiswa **p)
{
*p =NULL;
}
mahasiswa *alokasi(int nim)
{
mahasiswa *p;
p=(mahasiswa*)malloc(sizeof(mahasiswa));
if(p!=NULL)
{
p->next =NULL;
p->nim =nim;
}
return(p);
}

void add(mahasiswa **p, int nim)
{
*p= alokasi (nim);
printf("%d",(*p)->nim);
}

int main()
{
mahasiswa *head;
init(&head);
add(&head,56);
getch();
return 0;
}


Hasil Running :

  

Pembahasan :
            Dalam Program Linkedlist ini hampir sama dengan program sebelumnya, dalam program ini akan menampilkan sebuah NIM dari mahasiswa, sama seperti sebelumnya variable next ini bergunak untuk selanjutnya atau bisa di bilang nilai selanjutnya yang akan keluar.



Latihan

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct node{
int data;
struct node*p;};
void TambahElemen (struct node **d, struct node **b, int nilai){
/*membuat struktur node baru*/
struct node*temp;
temp=(struct node *)malloc (sizeof (struct node));

/*mendefinisikan field yang terdapat pada struktur node yang baru dialokasikan*/
temp->data=nilai;
temp->p=NULL;
if(*d== NULL){
*d= temp;
}else{
(*b)->p=temp;}
*b=temp;}
void HapusElemen (struct node **d, struct node **b){
struct node*temp;
if(*d == NULL){
printf("Tidak terdapat elemen dalam queue");
}else{
temp= *d;
*d= temp->p;
free(temp);
if(*d == NULL){
*b=NULL;
}
}
}
void TampilkanNilai(struct node *d){
int nilai;
while(d != NULL){
nilai = d->data;
printf("%d\n",nilai);
d=d->p;}
}
int main(void){
struct node*depan, *belakang;
depan = belakang =NULL;
TambahElemen(&depan,&belakang,10);
TambahElemen(&depan,&belakang,20);
TambahElemen(&depan,&belakang,30);
TambahElemen(&depan,&belakang,40);
TampilkanNilai(depan);
HapusElemen(&depan,&belakang);
printf("Nilai-Nilai didalam queue");
printf("Setelah penghapusan elemen pertama:\n");
TampilkanNilai(depan);
getch();
return 0;
}


Hasil Running :




Pembahasan :

            Program ini merupakan sebuah antrian dan dalam program ini terdapat penghapusan antrian. Dalam program ini menggunakan function, pointer dan juga linked list( temp -> data ) itu dinamakan linked list, linked list ini berguna sebagai penghubung nilai satu dengan yang lannya.

Sabtu, 10 Juni 2017

PRAKTIKUM_MODUL_9

MODUL IX QUEUE

Praktikum

Studi Kasus 1


#include<iostream.h>
#include<stdio.h>
#include<conio.h>
void main()
{
int cek=0, data[8], x, hapus;
char pil;
do
{
clrscr();
cout<<" Ujian Praktikum Struktur Data Queue "<<endl;
cout<<" Rinaldi "<<endl;
cout<<" Universitas Kuningan "<<endl;
cout<<endl;
printf("d. Masukan Data Antrian \n");
printf("e. Hapus Data Antrin \n");
printf("n. Lihat Data Antrian \n");
printf("y. Exit Program \n");
cout<<endl;
printf(" Ketikan Huruf Dari Salah Satu Pilihan Diatas ");
pil=getche();
cout<<endl;
if (pil!='d' && pil !='e' && pil !='n' && pil!='y')
printf("\n\n salah ketik, ulangi lagi .. \n");
else
{
if(pil=='d')
{
if(cek==8)
{
printf("\n Antrian Penuh\n");
getch();
}
else
{
printf("\n MASUKKAN ANGKA->"); scanf("%i",&x);
data[cek]=x;
cek++ ;
}}
else {
if(pil=='e')
{
if(cek==0)
printf("\nMaaf Tidak Antrian Untuk Dihapus \n\n");
else
{
hapus=data[0];
for(int v=0; v<cek; v++)
data[v]=data[v+1];
data[cek-1]=NULL;
cek--;
cout<<endl;
printf("Yakin  Anda Ingin Data Ini Dihapus ?? ");
cout<<endl;
printf("\nData dengan nilai = %i akan terhapus. [Tekan Enter]",hapus);
}
getch();
}
else
{
if(pil=='n')
{
if(cek==0)
printf("\n Maaf Tidak Ada Antrian Untuk Di Tampilkan. \n\n");
else
{
printf("\n");
for(int z=0; z<cek; z++)
{
printf(" [ %i ] \n",data[z]);
}
}
getch();
}
}
}
}
}while(pil!='y');
cout<<endl;
cout<<endl;
printf(" Yakin Anda Ingin Keluar .. ?? {{{ Tekan Enter Cak }}} ");
pil=getche();
}


 Hasil Running :





 Pembahasan :
            Program diatas membahas tentang program Queue(antrian),didalam program diatas kita memilih 4 Menu pilihan yang kita inginkan yaitu ada input,delete,view,dan exit. Di Program ini dibatasi Inputannya yaitu hanya 10 antrian batas maksimalnya,program ini menggunakan do-while untuk melakukan perulangan secara bertambah. Kemudian untuk Input Data antrian digunakanif else jika yang diinputkan melebihi batas maka akan keluar peringatan antrian penuh.




Studi Kasus 2


#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct node{
int data;
struct node*p;};
void TambahElemen (struct node **d, struct node **b, int nilai){
/*membuat struktur node baru*/
struct node*temp;
temp=(struct node *)malloc (sizeof (struct node));

/*mendefinisikan field yang terdapat pada struktur node yang baru dialokasikan*/
temp->data=nilai;
temp->p=NULL;
if(*d== NULL){
*d= temp;
}else{
(*b)->p=temp;}
*b=temp;}
void HapusElemen (struct node **d, struct node **b){
struct node*temp;
if(*d == NULL){
printf("Tidak terdapat elemen dalam queue");
}else{
temp= *d;
*d= temp->p;
free(temp);
if(*d == NULL){
*b=NULL;
}
}
}
void TampilkanNilai(struct node *d){
int nilai;
while(d != NULL){
nilai = d->data;
printf("%d\n",nilai);
d=d->p;}
}
int main(void){
struct node*depan, *belakang;
depan = belakang =NULL;
TambahElemen(&depan,&belakang,10);
TambahElemen(&depan,&belakang,20);
TambahElemen(&depan,&belakang,30);
TambahElemen(&depan,&belakang,40);
TampilkanNilai(depan);
HapusElemen(&depan,&belakang);
printf("Nilai-Nilai didalam queue");
printf("Setelah penghapusan elemen pertama:\n");
TampilkanNilai(depan);
getch();
return 0;
}


Hasil Running :




Pembahasan :
            Program ini merupakan sebuah antrian dan dalam program ini terdapat penghapusan antrian. Dalam program ini menggunakan function, pointer dan juga linked list( temp -> data ) itu dinamakan linked list.



Minggu, 04 Juni 2017

PRAKTIKUM_MODUL_8

MODUL VIII STACK


Praktikum
Studi Kasus 1

#include <iostream.h>
#include <conio.h>
#define max 5

struct Tumpukan{
int atas;
int data[max];
}T;

void awal(){
T.atas=-1;
            }

int kosong(){
if(T.atas==-1)
return 1;
else
return 0;
                        }

int penuh(){
if(T.atas==max-1)
return 1;
else
return 0;
                        }
void input(int data){
if(kosong()==1)
{T.atas++;
T.data[T.atas]=data;
cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}
else if(penuh()==0)
{T.atas++;
T.data[T.atas]=data;
cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";}

else
cout<<"Tumpukan penuh";
}
void hapus(){
if(kosong()==0){
cout<<"Data teratas sudah terambil";
T.atas--;
}
else
cout<<"Data kosong";
}
void tampil(){
if(kosong()==0)
{for(int i=T.atas;i>=0;i--)
{cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];}
}
else
cout<<"Tumpukan kosong";
}
void bersih(){
T.atas=-1;

cout<<"Tumpukan kosong!";
}
void main(){
int pil,data;
awal();
do
{
clrscr();
cout<<"1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan :";
cin>>pil;
switch(pil)
{case 1:cout<<"Masukkan data = ";cin>>data;
input(data);
break;
case 2:hapus();
break;
case 3:tampil();
break;
case 4:bersih();
break;
case 5: cout<<"Terimakasih, tekan enter untuk keluar";
}
getch();     }
while(pil!=5);}



Hasil Running :


Pembahasan :
            Program diatas adalah contoh sebuah stack yang dimana di dalamnya terdapat operasi PUSH ( memasukan data ), POP ( menghapus data yang terakhir diinputkan ) Tampil ( Menampilkan isi tumpukan) CLEAR ( menghapus semua tumpukan ) dan exit.




Studi Kasus 2

#include<iostream.h>
#include<conio.h>
#include<string.h>
struct
{
char data [15][100], max[15];
int i,j;
}stack;
void push()
{
stack.i++;
cout<<" Masukan Data : ";
cin>>stack.max;
strcpy(stack.data[stack.i], stack.max);
}
void pop ()
{
if(stack.i>0)
{
cout<<" Data Yang Terambil : "<<stack.data[stack.i]<<endl;
stack.i--; stack.j--;
}
else
cout<<" Tak Ada Data Yang Terambil "<<endl;
}
void view(int n)
{
if(stack.j>0)
{
for(int e=n; e>=1; e--)
cout<<stack.data[e]<<endl;
}
else
{
cout<<" Tak Ada Data Tersimpan "<<endl;
}
}
void clear()
{
stack.j=0; stack.i=0;
}
void main()
{
int n, plh;
ayo:
clrscr();
cout<<" Contoh Program Stack [Tumpukan] \n\n ";
cout<<" Maksimal Tumpukan Data : "; cin>>n;
stack.data[n];
stack.i=0;
stack.j=0;
balik:
clrscr();
cout<<"\n 1. Push \n 2. Pop \n 3. View \n 4. Clear \n 5. Qiit \n";
cout<<"\n Pilih : "; cin>>plh;
cout<<endl;
if(plh==1)
{
if(stack.j<n)
{
stack.j++;
push();
}
else
{
cout<<" Tumpukan Penuh "<<endl;
getch();
}
goto balik;
}
else if(plh==2)
{
pop();
getch(); goto balik;
}
else if(plh==3)
{
view (stack.i);
getch(); goto balik;
}
else if(plh==4)
{
clear();
getch();
goto balik;
}
else if(plh==5)
{
getch(); goto ayo;
}
else
{
cout<<" Input Yang Anda Masukan Salah !!! "<<endl;
getch(); goto ayo;
}
}



Hasil Running :





Pembahasan :
            Program ini sama seperti dengan study kasus sbelumnya, namun terdapat beberapa yang berbeda yaitu dalam program ini kita dapat menentukan batasan perulangan input dan output atau berapa maksimal tumpukan yang dapat diinputkan.





Latihan

Konsep stack dilogikakan seperti sebuah tumpukan barang yang tersusun keatas dengan ketinggian tumpukan yang telah di tentukan, untuk mengilustrasikannya program dibawah ini.

#include<conio.h>
#include<stdio.h>
#define N 20
main()
{
int nilai[N],i,jml;
printf(" Jumlah Maksimal Tumpukan (<=20) = ");
scanf("%d",&jml);
for(i=0; i<jml; i++)
{
printf(" Data ke-%d = ", i+1);
scanf("%d",&nilai[i]);
if(i==jml-1)
{
printf("Tumpukan Penuh");
getch();
}
}
for(i=jml-1; i>=0;i--)
{
printf("\n data ke-%d = %d", i+1, nilai[i]);
}
getch();
return 0;
}


Hasil Running :



 Pembahasan :
            Program ini melakukan inputan data penuh,kita masukan dulu tampungan data array nya maksimal 20,Kemudian menggunakan perulangan for nilai pertama yang diinputkan.


Minggu, 21 Mei 2017

PRAKTIKUM_MODUL_7

MODUL VII POINTER

Praktikum

Studi Kasus  1

Buatlah program yang dapat memindahkan isi variable awal menuju ke variable tujuan yang ditunjuk serta menampilkan alamat alokasi memory sebelum di pindahkan kevariable tujuan.

#include<iostream.h>
#include<conio.h>
void main()
{
int x, y;
int *px;
clrscr();

x = 87;
px = &x;
y = *px;
cout<<" Alamat x Pada Memori  = "<<&x<<endl;
cout<<" Isi px = "<<px<<endl;
cout<<" Isi x = "<<x<<endl;

cout<<" Nilai Yang Ditunjuk Oleh px = "<<*px<<endl;
cout<<" Alamat y pd Memori = "<<&y<<endl;
cout<<" Nilai y = "<<y<<endl;
getch();
}

Hasil Running :


Pembahasan :
            Dari program diatas bisa dilihat itu memindahkan nilai dan mengetahi alokasi dengan x nya mempunyai nilai 87,kemudian px itu alokasi nya sama dengan x.Dan nilai y memiliki nilai y=*px bintang itu termasuk ke dalam reference nya.
           



Studi Kasus  2

Terdapat sebuah array yang memiliki hanya satu elemen yaitu 5 dan tempatkan pada indeks ke 0 dalam array, sementara alamat indeks selebihnya bernilai 0, buatlah program yang dapat mengisi alamat indeks yang lain melalui nilai elemen indeks ke – 0 ( contoh penyelesaian kasus di atas pada program dibawah ini bersifat sains).

#include<iostream.h>
#include<conio.h>
int main()
{
int x[5], *p, k;
clrscr();
p = x;

x[0] = 5 ;//x[0] diisi dengan 5 sehingga x[0] = 5
x[1] = x[0]; // x[1] diisi dengan x[0] sehingga x[1] = 5

x[2] = *p + 2; // x[2] diisi dengan x[0] + 2 sehingga
x[2] = 7;
x[3] = *(p+1) - 3 ; // x[3] diisi dengan x[1] - 3 sehingga x[3] = 2;

x[4] = *(x + 2);// x[4] diisi dengan x[2] sehingga
x[4] = 7;

cout<<" Array Setelah Diisi = "<<endl;
cout<<endl;

for(k=0; k<5; k++)
{
cout<<"x["<<k<<"] = "<<x[k]<<endl;
}
getch();
return 0;
}

Hasil Running :


Pembahasan :
        Program diatas yaitu cara mengisi indeks yang didalamnya terdapat variable pointer yang digunakan untuk memindahkan nilai indeks pertama sampai indeks terakhir.


Studi Kasus  3

#include<stdio.h>
#include<conio.h>
void tambahsepuluh(int *);
void ubahkarakter(char *);

int main()
{
int bilangan = 4;
char sesuatu = 's';
printf(" Bilangan Sebelum  fungsi di panggil : %d \n",bilangan);
printf(" Nilai sesuatu sebelum fungsi dipanggil : %c \n\n",sesuatu);

tambahsepuluh(&bilangan);
ubahkarakter(&sesuatu);

printf(" Bilangan Setelah Fungsi Dipanggil : %d \n",bilangan);
printf(" Nilai sesuatu setelah fungsi dipanggil : %c \n",sesuatu);
getch();
return 0;
}
void tambahsepuluh(int *bil){
*bil = *bil + 10;
}
void ubahkarakter(char *kar)
{
char karakter = 'H';
*kar = karakter;
}

Hasil Running :


Pembahasan :
            Dari program diatas digunakan untuk merubah suatu nilai dan karakter dengan menggunakan fungsi pointer.



Latihan 1

Dengan memasukan nilai integer 5 nilai dan melalui variable pointer bagaimana agar dapat mengetahui elemen tersebutakan menempati di lokasi memory berapa program berjalan secara setatis hanya sebanyak 5 buah nilai integer

#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
int i;
int nilai[50];
int *trnilai;
trnilai = nilai;
for(i=0;i<5;i++)
{
cout<<" Masukan Nilai ke - "<<i<<": ";
cin>>nilai[i];
}
cout<<endl;
cout<<" Pengaksesan Elemen Array Lewat ";
cout<<" Pointer";
cout<<endl<<endl;
for(i=1;i<=5; i++)
{
cout<<" Elemen "<<i<<" Nilai "<<nilai[i]<<endl;
cout<<" Menempati Alamat Memory : "<<&trnilai[i];
cout<<endl;
}
getch();
return 0;
}


Hasil Running :


Pembahasan :
            Dari program diatas mencari suatu alokasi dengan menggunakan pointer yang telah diiputkan, kita inputkan 5 variabel terlebih dahulu , kemudian untuk mengetahui alokasinya  kita gunakan operasi pointer deference pada variabel nilainya karena memiliki nilai variabel yang sama.



Latihan 2

Dengan Memasukan Nilai integer N nilai dan melalui variable pointer bagaimana agar dapat mengetahui elemen tersebutakan menempati di lokasi memory berapa program berjalan secara setatis hanya sebanyak N buah nilai integer

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
main()
{
int i, N;
int nilai[50];
int *trnilai;
trnilai = nilai;
cout<<" Masukan Batasan = ";
cin>>N;
cout<<endl<<endl;
for(i=0;i<N;i++)
{
cout<<" Masukan Nilai ke - "<<i<<": ";
cin>>nilai[i];
}
cout<<endl;
cout<<" Pengaksesan Elemen Array Lewat ";
cout<<"Pointer";
cout<<endl<<endl;
for(i=1;i<=N; i++)
{
cout<<" Elemen "<<i<<" Nilai "<<nilai[i]<<endl;
cout<<" Menempati Alamat Memory : "<<&trnilai[i];
cout<<endl;
}
getch();
return 0;
}


Hasil Running :
       



Pembahasan :
            Program diatas hampir sama dengan  program Latihan 1, pada program ini kita diharuskan  memasukan batasan pengulangannya,  pertama kita masukan batasan perulangannya baru setelah itu kita inputkan isi datanya.