Rabu, 11 November 2015

Struktur Data



Pengertian dan Penjelasan tentang Struktur Data , Array , Link List , Stack , Queue , Sorting , Searching dan Tree

Struktur data adalah cara menyimpan atau memprentasikan data didalam komputer agar bisa dipakai secara efisien ,sedangkan data adalah refresentasi dari fakta dunia nyata. Fakta atau ketrengan tentang kenyataan yang disimpan ,direkam atau di refresentasikan dalam bentuk tulisan , gambar ,sinyal atau simbol.

Secara garis besar type data dikategorikan menjadi :
type sederhana ,type data sederhana tunggal misalnya integer ,real , boolean dan karakter.
type data sederhana majemuk misalnya String.

Struktur data meliputi ,struktur data sederhana misalnya array dan record.
Struktur data majemuk yang terdiri dari
 Linier : Stack , Queue , List dan Multilist
Non Linier : Graph dan Biner

Pemakaian struktur data yang tepat di dalam proses pemrograman akan menghasilkan algoritma yng lebih jelas dan tepat , sehimgga menjadikan program secara keseluruhan lebih efisien dan lebih sederhana.

Biasanya Struktur Data yang sering digunakan dalam dibidang informatika :
* List Linier 
*  Multilist 
* Queue
* Tree
* Graph

Array :
Sebuah struktur data yang terdiri atas banyak variable dengan type data yang sama dimana masing masing element variable memiliki nilai indeks
Setiap element array mampu untuk menyimpan satu jenis data ( variabel ) .


Cara Pendefinisian :
* cotoh type
A = Array [1....6] of integer ;
* Secara logika pendefinisian Array di atas merupakan sekumpulan otak , dimana tiap kotak mempunyai nilai indeks integer 1,2,3,....6 tiap elemen array di tandai dengan : A[1],A[2],A[3],A[4],A[5],A[6] untuk mengisi elemen array misal A[1];=;4 .Sifat Array merupakan struktur data yang statis, yaitu jumlah elemen yang ada harus di tentukan terlebih dahulu dan tak bisa di ubah saat program berjalan.Untuk menyatakan Array dalam PASCAL kita harus terlebih dahulu :
Mendefinisikan jumlah elemen array .



SINGLE LINK LIST

Linked List adalah salah satu bentuk struktur data , berisi kumpulan data (node)  yang tersusun secara sekuensial , saling sambung menyabung , dinamis , dan terbatas .

-Linked List juga di sebut dengan Senarai Berantai
-Linked List saling terhubung dengan bantuan variable pointer
-Masing - masing data dalam Linked list di sebut dengan node (simpul) yang menempati alokasi  memori secara dinamis dan biasany merupakan struct yang terdiri dari beberapa field .


Single Linked List adalah sebuah LINKED LIST yang menggunakan sebuah variable pointer saja untuk menyimpan banyak data dengan metode menggunakan LINKED LIST  , suatu daftar isi yang salinng berhubungan .


Single Linked List Circular

Single Linked Circular adalah Single Linked  List pointer nextnya menunjuk pada dirinya sendiri . Jika Single Lined List tersebut terdiri dari beberapa node maka pointer next pada beberapa node terakhir akan menunjuk ke node terdepanya .

Single Linked List Non Circular

Artinya field pointernya hanya satu buah saja dan satu arah .
setiap node pada Linked List mempunyai field yang berisi pointer ke node berikutnya dan juga memiliki field yang berisi data .
Pada akhir Linked List node terakhir akan menunjukan ke NULL yang akan digunakan sebagai kondidi berhenti pada saat pembacaan isi Linked List .


Double Linked List

Double artinya field pointernya dua buah dan dua  arah ke node sebelumnya dan sesudahnya . Jadi yang memiliki dua buah pointer yaitu pointer next dan freview . Pointer next menunjukan pada node setelahnya dan pointer freview menunjukan pada node sebelumnya .


STACK

Artinya (tumpukan) adalah kumpulan elemen elemen data yang di simpan dalam satu lajur linier . Konsep utamanya Stack adalah LIFO (Last In First Out) benda yang terakhir masuk dalam stack akan menjadi yang pertama yang di keluarkan tumpukan di sebut juga "Push Down Stack" yaitu penambahan elemen baru dan penghapusn elemen dari tumpukan contoh pada PDA (Push Down Automation) .
Macam macam Stack

1. Stack dengan Array
    Sesuai dengan sifat Stack , pengambilan atau penghapusan elemen dalam stack harus dimulai dari       elemen teratas

2. Double Stack dengan Array
    Metode ini adalah teknik khusus yang di kembangkan untuk menghemat pemakaian memori dalam     pembuatan dua Stack dengan Array intinya adalah penggunaan hanya sebuah array untuk  menampung dua Stack .



QUEUE


Artinya (Antrian) ini merupakan suatu struktur data linier konsepny hampir sama dengan Stack perbedaanya adalah operasi penambahan dan penghapusan pada ujung yang berbeda . Penghapusan dilakukan pada bagian depan (front) dan penambahan berlaku pada bagia belakang (rear) .
Elemen elemen dapat bertipe integer real dan record dalam bentuk sederhana atau tekstur .
Tumpukan disebut juga waiting Line sistem pengaksesan pada Queue menggunakan sistem FIFO (First In First Out) yang artinya elemen yang pertama masuk itu yang akan pertama di keluarkan dari Queue .

Operasi operasi pda Queue :

  1. Create Queue (Q) : membbuat antrian baru Q dengan jumlah elemen kosong
  2. Make  NullQ (Q) : Mengosongkan antrian Q jika ada elemen maka semua elemen di hapus .
  3. En Queue : berfungsi memasukan data dalam antrian .
  4. Deq Queue : Berfungsi mengeluaran data terdepan dari antrian .
  5. Clear : Menghapus seluruh antrian .
  6. Is Empty : memeriksa apakah Antrian kosong .
  7. Is Full  : memeriksa apakah antrian penuh


SORTING

Artinya (Pengurutan) adalah suatu proses menyusun kembali data yang sebelumnya telah di susun dengan suatu pola tertentu sehingga tersusun secara teratur menurut aturan tertentu .

Dua macam pengurutuan :

Ascending (urut naik) merupakan pengurutan dari angka yang nilainya lebih kecil kemudian menuju ke nilainya yang lebih besar . Contoh : 0 1 2  4 7 9

Descending (urut turun) adalah sebaliknya  yaitu pengurutan dari nilainya yang lebih besar kemudian menuju ke nilainya yang lebih kecil . Contoh : 9 7 4 2 1 0

Macam macam Sorting 

  1. Bubble Sort : memindahkan elemen sekarang dengan elemen berikutnya . Jika elemen sekarang itu lebih besar atau lebih kecil dari elemen berikutnya maka di tukar berpindah posisi .
  2. Exchange Sort : sangat mirip dengan Bubble Sort bedanya jika Bubble Sort proses pertukaranya harus sistematis , dari awal atau dari belakang . Sedangkan Exchange Sort nya proses pertukaran hanya akan di lakukan jika di perlukan saja .
  3. Selection sort : memindahkan elemen dengan cara membandingkan elemen sekarang dengan elemen yang berikutnya sampai dengan elemen terakhir . Jika di temukan elemen lain yang lebih kecil atau lebih besar dari elemen sekarang maka di catat posisinya dan kemudian di tukar dan begitu seterusnya .
  4. Insertion Sort : pengurutan yang di lakukan dengan cara membandingkan dengan data ke dua sampai data terakhir .Jika di temukan data yng lebih kecil atau lebih besar maka data tersebut di sisipkan ke depan sesuai posisi yang seharusnya .
  5. Shell Sort ; merupakan proses pengurutan data yang sebelunya acak menjadi data yang terurut dengan cara menentukan jarak antar elemen yang akan di bandingkan .
  6. Merge Sort : merupakan proses pengurutan data yang menggunakan Merging dua Vektor .
  7. Quick Sort : merupakan proses penyusunan elemen yang membandingka suatu elemen dengan elemen yang lain dan menyusunya dengan sedemikian rupa sehingga elemen elemen lain yang lebih kecil dari pivot terletak di sebelah kiri pivot dan elemen yang lebih besar dari pivot terletak di sebelah kanan pivot .



SEARCHING

Artinya pencarian merupakan proses yang fundamental dalam pemrograman guna menemukan data tertentu di dalam sekumpulan data yang bertipe sama . Fungsi pencarian itu sendiri adalah untuk memvalidasi atau mencocokan data .

Metode pencarian di bagindua macam : 
  1. Metode pencarian beruntun konsepyang di gunakan dalam metode ini adalah menbandingkan data data yang ada di dalam kumpulan tersebut mulai dari elemen pertama sampai elemen di temukan atau sampai elemen terakhir .
  2. Metode Pencarian bagi dua (Dinarry Search) metode ini di terapkan pada sekumpulan data yang sudah terurut (manaik atau menurun) metode ini lebih cepat di bandingkan metode pencarian beruntun . Data yang sudah terurut menjadi syarat mutlak untuk menggunakan metode ini .


TREE

Artinya merupakan salah ssatu bentuk struktur data tidak linier yang menggambarkan hubungan yang bersifat hierarkis (hubungan one to many) antar elemen elemen . di definisikan sebagai kumpulan simpul atau mode dalam satu elemen khusus yang di sebut root dan mode lainya terbagi menjadi himpunan himpunan yang saling tak berhubungan satu sama lainya (sutree) .


Rabu, 04 Februari 2015

Algoritma , flowchart dan Program C++

ALGORITMA 



Algoritma Merupakan fondasi yang harus dikuasai oleh setiap mahasiswa yang ingin menyelesaikan suatu masalah secara terstruktur, efektif dan efisien , teristimewa bagi mahasiswa yang ingin menyusun program komputer untuk menyelesaikan suatu persoalan.


Defisini Algoritma


  1. Teknik penyusunan langkah-langkah penyelesaian masalah dalam bentuk kalimat dengan jumlah kata terbatas tetapi tersusun secara logis dan sistematis.
  2. Suatu prosedur yang jelas untuk menyelesaikan suatu persoalan dengan menggunakan langkah-langkah tertentu dan terbatas jumlahnya
  3. Susunan Langkah yang pasti , yang bila diikuti maka akan mentransfortasi data input menjadi output yang berupa informasi
Ciri Algoritma

Donald E. Knuth, penulis beberapa buku algoritma Abad XX, menyatakan bahwa ada beberapa ciri algoritma yaitu :

  1. Algoritma mempunyai awal dan akhir , suatu algoritma harus berhenti setelah mengerjakan serangkaian tugas dengan kata lain suatu algoritma memiliki angka yang terbatas .
  2. Setiap langkah harus didefinisikan dengan tepat sehingga tidak memiliki arti ganda, tidak membingungkan 
  3. Memiliki masukan (input) atau kondisi awal 
  4. Memiliki keluaran (output) atau kondisi akhir
  5. Algoritma harus efektif , bila diikuti benar-benar maka akan menyelesaikan persoalan 

Contoh flowchart sederhana beserta penjelasannya lengkap Terbaru - Dalam perjumpaan kita dipagi ini, saya telah membuat sebuah artikel tentang beberapa contoh flowchart untuk anda yang mungkin memiliki tugas membuat sebuah flowchart yang diberikan oleh guru maupun dosen disekolah/dikampus tempat anda belajar, Berikut ini anda bisa membaca Contoh flowchart sederhana beserta penjelasannya lengkap Terbaru :



√ Flowchart  adalah  representasi  grafik  dari  langkah-langkah  yang  harus  diikuti  dalam menyelesaikan suatu permasalahan yang terdiri atas sekumpulan simbol, dimana masing-masing  simbol  merepresentasikan  suatu  kegiatan  tertentu.
 
√ Flowchart  diawali  dengan penerimaan input, pemrosesan input, dan diakhiri dengan penampilan output.
√ bagan yang menggambarkan urutan logika dari suatu prosedur pemecahan masalah.
√ suatu diagram yang menggambarkan susunan logika suatu program
Simbol-simbol yang digunakan adalah sebagai berikut:

Bentuk Flowchart seperti ini

Simbol Flowchart
Flowchart terdiri dari 3 struktur:
1. Struktur Sequence / Sederhana
Diagram yang alurnya mengalir secara berurutan dari atas ke bawah atau dengan kata lain tidak adanya percabangan atau pengulangan.
Bentuk flowchart tersebut seperti:
Flowchart Sequence
Contoh dari flowchart dengan struktur sequence ini seperti algoritma untuk menghitung luas segitiga, luas persegi panjang, luas lingkaran.
2. Struktur Branching / Percabangan
Diagram yg alurnya terjadi/terdapat alih kontrol berupa percabangan.
Flowchart dengan stuktur percabangan  digunakan untuk meyeleksi kondisi dan menentukan pilihan proses selanjutnya.


    Program KTP

Program c++ ini memiliki fungsi menambah data,hapus,edit dan tampil



#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#include<string.h>
typedef struct ktp
{
int no;
char nama[20];
char ttgl[20];
char jk[20];
char alamat[20];
char agama[20];
char pekerjaan[20];
int id;
}ktp;
int main()
{
float id;
FILE *fp,*ft;
char another, choice;
ktp stu;

long int recsize;
fp=fopen("master.DAT","rb+");
if(fp==NULL)
{
fp=fopen("master.DAT","wb+");
if(fp==NULL)
{
printf("File gagal diakses");
}
}
recsize=sizeof(stu);
while(!(choice=='5'))
{
printf("\n================");
printf("\nDAFTAR PILIHAN");
printf("\n================");
printf("\n1.TAMBAH DATA ");
printf("\n2.HAPUS DATA ");
printf("\n3.EDIT DATA ");
printf("\n4.TAMPIL DATA ");
printf("\n5.KELUAR ");
printf("\n===============================");
printf("\nPILIHLAH SALAH SATU [1/2/3/4/5]:");

fflush(stdin);
scanf("%c",&choice);
printf("\n===================");
switch(choice)
{
case'1':
fseek(fp,0,SEEK_END);
another='Y';
while(another=='Y'||another=='y')
{
clrscr();
printf("\n===================================");
printf("\nDATA KTP");
printf("\n===================================");
printf("\n Nomor KTP : ");scanf("%s",&stu.no);
printf("\n Nama : ");scanf("%s",&stu.nama);
printf("\n Tempat Dan Tgl Lahir : ");scanf("%d",&stu.ttgl);
printf("\n Jenis Kelamin : ");scanf("%s",&stu.jk);
printf("\n Alamat : ");scanf("%s",&stu.alamat);
printf("\n Agama : ");scanf("%s",&stu.agama);
printf("\n Pekerjaan : ");scanf("%d",&stu.pekerjaan);
fwrite(&stu,recsize,1,fp);
printf("\n===================================");
printf("\nMAU TAMBAH DATA LAGI[Y/T]? ");
fflush(stdin);
another=getchar();
}break;
case'2':
another='Y';
while(another=='Y'||another=='y')
{
clrscr();
printf("\n");

printf("\n===========================");
printf("\nDATA YANG AKAN DIHAPUS");
printf("\n===========================");
printf("\n Nomor KTP : ");scanf("%s",&stu.no);
printf("\n Nama : ");scanf("%s",&stu.nama);
printf("\n Tempat Dan Tgl Lahir : ");scanf("%d",&stu.ttgl);
printf("\n Jenis Kelamin : ");scanf("%s",&stu.jk);
printf("\n Alamat : ");scanf("%s",&stu.alamat);
printf("\n Agama : ");scanf("%s",&stu.agama);
printf("\n Pekerjaan : ");scanf("%d",&stu.pekerjaan);
printf("\n===========================");
ft=fopen("TEMP.DAT","wb");
rewind(fp);
while(fread(&stu,recsize,1,fp)==1)
{
if(stu.id!=0)
fwrite(&stu,recsize,1,ft);
}
fclose(fp);
fclose(ft);
remove("master.DAT");
rename("TEMP.DAT","master.DAT");
fp=fopen("master.DAT","wb+");
printf("\nMAU HAPUS DATA LAGI[Y/T]?");
fflush(stdin);
another=getchar();
}break;
case'3':
another='Y';
while(another=='Y'||another=='y')
{
clrscr();
printf("\n");
printf("\n===============================");
printf("\nDATA KTP ");
printf("\n===============================");
printf("\n Nomor KTP : ");scanf("%s",&stu.no);
printf("\n Nama : ");scanf("%s",&stu.nama);
printf("\n Tempat Dan Tgl Lahir : ");scanf("%d",&stu.ttgl);
printf("\n Jenis Kelamin : ");scanf("%s",&stu.jk);
printf("\n Alamat : ");scanf("%s",&stu.alamat);
printf("\n Agama : ");scanf("%s",&stu.agama);
printf("\n Pekerjaan : ");scanf("%d",&stu.pekerjaan);

printf("\n===============================");
printf("\nMAU EDIT DATA LAGI[Y/T]?");
fflush(stdin);
another=getchar();
}break;
case'4':
rewind(fp);
clrscr();
printf("\n=====================================");
printf("\n DAFTAR DATA ");
printf("\n=====================================");
while(fread(&stu,recsize,1,fp)==1)
{
printf("\n=====================================");
printf("\nDATA KTP ");
printf("\n=====================================");
cout<<"\nNo KTP : "<<stu.no;
cout<<"\nNama : "<<stu.nama;
cout<<"\nTempat Dan Tgl Lahir : "<<stu.ttgl;
cout<<"\nJenis Kelamin : "<<stu.jk;
cout<<"\nAlamat : "<<stu.alamat;
cout<<"\nAgama : "<<stu.agama;
cout<<"\nPekerjaan : "<<stu.pekerjaan;
printf("\n=====================================");
}break;
case'5':
{
clrscr();

}
break;
}//switch(choice)
}//while(!(choice=='5'))


Program Kalkulator 

Kalkulator Sederhana Dengan C++


#include <conio.h>
#include <iostream>
#include <math.h>


class kalkulator{

    public :

   void start();
   void pilih1();
   void pilih2();
    void hitung();
   void akar2();
   void kin();
   void kos();
   void kan();

   private :


    float a,b,c;
   int d;
    char e,proses;
    float hasil;

   };

   void kalkulator::start(){

      cout<<"---------------------------------------------------------\n";
      cout<<"-            PROGRAM  KALKULATOR B-IOZ v.1.0.1          -\n";
      cout<<"---------------------------------------------------------\n";
      cout<<"-                                                       -\n";
      cout<<"- Ada dua pilihan :                                     -\n";
      cout<<"-                                                       -\n";
      cout<<"- 1. Perhitungan biasa :                                -\n";
      cout<<"-          ( +, -, *, /, ^)                             -\n";
      cout<<"- 2. Perhitungan siencetific :                          -\n";
      cout<<"-          (akar, sin, cos, tan)                        -\n";
      cout<<"-                                                       -\n";
      cout<<"-                                                       -\n";
      cout<<"-         ***** BY EFA-ONE as REZZHAI ****              -\n";
      cout<<"---------------------------------------------------------\n";
      cout <<endl;

   }

   void kalkulator::pilih1(){
   int pilih;
    cout<<"Pilih biasa atau siencetific : ";
   cin>>pilih;
    switch(pilih)
   {
      case 1:
      hitung();
      break;

      case 2:
      pilih2();
      break;




   }
   }

   void kalkulator::pilih2(){
   int pilih;
   cout<<endl;
   cout<<"1. Perhitungan akar bilangan\n";
   cout<<"2. Perhitungan sin \n";
   cout<<"3. Perhitungan cos \n";
   cout<<"4. Perhitungan tan \n\n";
   cout<<"Masukkan Piihan Anda :  ";

   cin>>pilih;
    switch(pilih)
   {
      case 1:
      akar2();
      break;

      case 2:
      kin();
      break;

      case 3:
      kos();
      break;

      case 4:
      kan();
      break;



   }
   }

   void kalkulator::hitung(){

      cout<<endl;
      cout<<" Masukkan Dua buah bilagan saja        \n";
      cout<<" Fungsi Operator :                     \n";
      cout<<"            + = tambah     (ex= 5+5)     * = kali (ex= 5*5)    \n";
      cout<<"            - = kurang     (ex= 5-5)     / = bagi (ex= 5+5)   \n";
      cout<<"            ^ = pangkat  (ex= 5^5)                     \n";
      cout<<endl;

        while(cin>>a>>proses>>b) {



      switch(proses)
      {
            case '+':
                hasil=a+b;
                cout<<"Hasil "<<a<<" + " <<b<<" = "<<hasil<<endl;
                cout<<endl;
                break;

            case '-':
                hasil=a-b;
                cout<<"Hasil "<<a<<" - " <<b<<" = "<<hasil<<endl;
                cout<<endl;
                break;

           case '*':
                hasil=a*b;
                cout<<"Hasil "<<a<<" * " <<b<<" = "<<hasil<<endl;
                cout<<endl;
                break;

           case '/':
                hasil=a/b;
                cout<<"Hasil "<<a<<" / " <<b<<" = "<<hasil<<endl;
                cout<<endl;
                break;

           case '^':
                  int c;
                hasil=1;
                 for(c=1; c<=b; c++){
                 hasil=hasil*a;
                 }
                 cout<<"Hasil "<<a<<"^" <<b<<" = "<<hasil<<endl;
                 cout<<endl;
                break;


            default:
                break;
            }
            }
            }

      void kalkulator::akar2(){
         cout<<endl;
           cout<<"Masukkan nilai : ";
           cin>>a;
           hasil=sqrt(a);
         cout<<endl;
           cout<<"Nilai dari akar "<<a<<" = "<<hasil;
         getch;
         }

      void kalkulator::kin(){
         cout<<endl;
            cout<<"Masukkan nilai : ";
          cin>>d;
           hasil=sin(d);
          cout<<endl;
           cout<<"Nilai dari sin "<<d<<" = "<<hasil;
         getch;
         }

      void kalkulator::kos(){
         cout<<endl;
          cout<<"Masukkan nilai : ";
         cin>>d;
         hasil=cos(d);
         cout<<endl;
           cout<<"Nilai dari cos "<<d<<" = "<<hasil;
         getch;
         }

      void kalkulator::kan(){
         cout<<endl;
          cout<<"Masukkan nilai : ";
         cin>>d;
         hasil=tan(d);
         cout<<endl;
           cout<<"Nilai dari tan "<<d<<" = "<<hasil;
         getch;
         }



int main()
{
      kalkulator x;
      x.start();
      x:
      x.pilih1();
   char e;
    cout<<"\nAnda Ingin Mengulang?(Y/N) ";
   cin>>e;
   cout<<endl;
   if(e=='y'||e=='Y')goto x;
   else
   cout<<"Tekan X untuk keluar"<<endl;


      return 0;
} 
 

Aplikasi untuk menghitung Hasil IPk 






//Program penghitung IPk

#include
#include

void main(){
 struct{
 char MK[10];
 float SKS;
float nilai_akhir;
float scor;
      float NAS;
}nilai[10];

struct{
 float SKS;
float NAS;
float IP;
}total;

int i, n;

//jumlah matakuliah
printf("Masukan jumlah matakuliah : "); scanf("%d", &n);

//input atribut KHS sesuai dengan jumlah matakuliah
for(i=1; i<=n; i++){
 printf("Matakuliah ke-%d\n", i);
printf("Nama matakuliah : "); scanf("%s", nilai[i].MK);
       printf("Jumlah SKS      : "); scanf("%f", &nilai[i].SKS);
printf("Nilai akhir     : "); scanf("%f", &nilai[i].nilai_akhir);
      printf("\n");
}

//output KHS
   clrscr();
printf("\n");
   printf("                       KARTU HASIL STUDY\n");
printf("---------------------------------------------------------------\n");
   printf("No    Matakuliah      SKS     Nilai Akhir     Scor     SKS*Scor\n");
printf("---------------------------------------------------------------\n");

//mengolah nilai akhir untuk mendapatkan scor
   for(i=1; i<=n; i++){
 if(nilai[i].nilai_akhir>=86 && nilai[i].nilai_akhir<=100){
          nilai[i].scor = 4;
}
          else if(nilai[i].nilai_akhir>=76 && nilai[i].nilai_akhir<=85){
             nilai[i].scor = 3.5;
}
             else if(nilai[i].nilai_akhir>=69 && nilai[i].nilai_akhir<=75){
                nilai[i].scor = 3;
}
                else if(nilai[i].nilai_akhir>=61 && nilai[i].nilai_akhir<=68){
                   nilai[i].scor = 2.5;
}
                   else if(nilai[i].nilai_akhir>=56 && nilai[i].nilai_akhir<=60){
                      nilai[i].scor = 2;
}
                      else if(nilai[i].nilai_akhir>=41 && nilai[i].nilai_akhir<=55){
                         nilai[i].scor = 1;
}
                         else{
                            nilai[i].scor = 0;
}
      //meghitung sks * scor
      nilai[i].NAS = nilai[i].SKS*nilai[i].scor;
 printf("%2d %15s %5.0f %11.0f %12.1f %10.1f\n", i, nilai[i].MK, nilai[i].SKS, nilai[i].nilai_akhir, nilai[i].scor, nilai[i].NAS);

      //menjumlahkan sks dan hasil dari sks*scor
total.SKS = total.SKS+nilai[i].SKS;
      total.NAS = total.NAS+nilai[i].NAS;

}
   printf("---------------------------------------------------------------\n");
   printf("Total SKS  = %0.2f\n", total.SKS);
printf("Total Scor = %0.2f\n", total.NAS);

   //mengitung ip
   total.IP = total.NAS/total.SKS;
printf("IP         = %0.2f\n", total.IP);
   printf("---------------------------------------------------------------\n");

   getch();
}