Advertisement
ed_edwardaj

Unit Load (Baru 2)

Apr 7th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 12.01 KB | None | 0 0
  1. unit uf1load;
  2. interface
  3.  
  4.     const mark : char = '|';
  5.     { Definisi ABSTRACT DATA TYPE FileEksternal }
  6.     type FileEksternal = record
  7.         fin : text; {File masuk}
  8.         fout : text; {File keluar}
  9.     end;
  10.  
  11.     { Definisi ABSTRACT DATA TYPE TypeBahanMentah }
  12.     type TypeBahanMentah = record
  13.         Nama : Array [1..100] of string;
  14.         HargaStr : Array [1..100] of string; {Harga dalam tipe string}
  15.         DurasiStr : Array [1..100] of string ; {Durasi dalam tipe string}
  16.         Harga : Array [1..100] of longint; {Harga yang sudah dikonversi ke tipe longint}
  17.         Durasi : Array [1..100] of integer; {Durasi yang sudah dikonversi ke tipe integer}
  18.         BarisText : string; {membantu dalam membaca 1 baris di file eksternal}
  19.     end;
  20.    
  21.     { Definisi ABSTRACT DATA TYPE TypeBahanOlahan }
  22.     type TypeBahanOlahan = record
  23.         Nama : Array [1..100] of string;
  24.         HargaStr : Array [1..100] of string; {Harga dalam tipe string}
  25.         Harga : Array [1..100] of longint;   {Harga yang sudah dikonversi ke tipe longint}
  26.         BanyakStr : Array [1..100] of string ; {Banyak dalam tipe string}
  27.         Banyak : Array [1..100] of longint ; {Banyak yang sudah dikonversi ke tipe longint}
  28.         Bahan : Array [1..100, 1..100] of string; {Bahan ke-N}
  29.         BarisText : string; {membantu dalam membaca 1 baris di file eksternal}
  30.         PanjangN : array [1..100] of longint;
  31.     end;
  32.     { Definisi ABSTRACT DATA TYPE LokasiMark }
  33.     type LokasiMark= record
  34.          Guard : Array [1..1000] of longint;
  35.     end;
  36.    
  37.     {*** KELOMPOK Interaksi dengan I/O device, BACA/TULIS ***}
  38.     procedure LoadBahanMentah ( var FileBahanMentahLoad : FileEksternal ; var BahanMentahLoad : TypeBahanMentah );
  39.     {I.S. : File Eksternal untuk Bahan Mentah terdefinisi sebagai input. }
  40.     {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanMentah, yang artinya sudah terload ke dalam array}
  41.  
  42.     procedure LoadBahanOlahan ( var FileBahanOlahanLoad : FileEksternal ; var BahanOlahanLoad : TypeBahanOlahan );
  43.     {I.S. : File Eksternal untuk Bahan Olahan terdefinisi sebagai input. }
  44.     {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanOlahan, yang artinya sudah terload ke dalam array}
  45.  
  46. implementation
  47.     procedure LoadBahanMentah ( var FileBahanMentahLoad : FileEksternal ; var BahanMentahLoad : TypeBahanMentah );
  48.     {I.S. : File Eksternal untuk Bahan Mentah terdefinisi sebagai input. }
  49.     {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanMentah, yang artinya sudah terload ke dalam array}
  50.     var
  51.        i,iGuard,baris : integer; { i untuk indeks, iGuard untuk indeks dimana "|" ditemukan, baris untuk baris pada file eksternal}
  52.        lokGuard : LokasiMark; {array berisi lokasi / indeks yang terdapat "|" }
  53.        lanjut : string;
  54.     begin
  55.          if (EOF ( FileBahanMentahLoad.fin )) then begin {Penanganan File kosong}
  56.              writeln ('File kosong!');
  57.          end else begin {Penanganan file tidak kosong}
  58.              baris := 1;
  59.              while not ( EOF (FileBahanMentahLoad.fin ) ) do begin
  60.                  readln ( FileBahanMentahLoad.fin , BahanMentahLoad.BarisText);      
  61.                  iGuard := 1;
  62.                  for i := 1 to length (BahanMentahLoad.BarisText) do begin
  63.                       if ( BahanMentahLoad.BarisText[i] = mark ) then begin
  64.                          lokGuard.Guard[iGuard] := i; {memasukkan indeks yang terdapat "|" ke dalam array }
  65.                          iGuard := iGuard + 1;
  66.                       end;
  67.                  end;  
  68.                  iGuard := 1;
  69.                  BahanMentahLoad.Nama [baris] := copy(BahanMentahLoad.BarisText,1,lokGuard.Guard[iGuard]-2);
  70.                  {Mengambil substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama dikurangi 2 (untuk menghilangkan spasi.}
  71.                  
  72.                  delete(BahanMentahLoad.BarisText,1,length(BahanMentahLoad.Nama [baris])+3);
  73.                  {Menghapus substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama ditambah 3 (untuk menghilangkan spasi.)}
  74.                  
  75.                  BahanMentahLoad.HargaStr [baris] := copy(BahanMentahLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-length(BahanMentahLoad.Nama[baris])-3)-2);
  76.                  {Mengambil substring pada string satu baris di file eksternal, dari awal string (posisi "|" dikurangi panjang string sebelum posisi tersebut),
  77.                  sampai ditemukan lokasi "|" pertama dikurangi 5 (untuk menghilangkan spasi.}
  78.                  
  79.                  val(BahanMentahLoad.HargaStr[baris],BahanMentahLoad.Harga[baris]); {Mengonversi string ke integer}
  80.                  delete (BahanMentahLoad.BarisText,1,length (BahanMentahLoad.HargaStr[baris]) + 3 );
  81.                  BahanMentahLoad.DurasiStr[baris] := BahanMentahLoad.BarisText; {Karena string yang tersisa hanya durasi -> sisanya dihapus oleh fungsi delete}
  82.                  val(BahanMentahLoad.DurasiStr[baris],BahanMentahLoad.Durasi[baris]);
  83.                  baris := baris+1;
  84.             end;
  85.             {MENGOUTPUT HASIL PADA PROGRAM}
  86.             for i := 1 to baris-1 do begin
  87.              writeln ('Bahan mentah ke- ' , i , ' : ');
  88.              writeln ('Nama  : ', BahanMentahLoad.Nama[i]);
  89.              writeln ('Harga : ', BahanMentahLoad.Harga[i]);
  90.              writeln ('Durasi Kadaluarsa : ', BahanMentahLoad.Durasi[i], ' hari');
  91.              writeln ('----------------------------------------------------------------------------');
  92.              writeln();
  93.              repeat
  94.                  writeln ('Ketik angka "1" untuk melanjutkan!');
  95.                  readln (lanjut); {Penguna harus mengetikan angka 1 untuk melanjutkan output pada program}
  96.              until (lanjut = '1');
  97.              writeln();
  98.              writeln ('----------------------------------------------------------------------------');
  99.             end;
  100.         end;
  101.     end;
  102.    
  103.     procedure LoadBahanOlahan ( var FileBahanOlahanLoad : FileEksternal ; var BahanOlahanLoad : TypeBahanOlahan );
  104.     {I.S. : File Eksternal untuk Bahan Olahan terdefinisi sebagai input. }
  105.     {F.S. : Mengeluarkan output berupa variabel BahanMentahLoad yang bertipe TypeBahanOlahan, yang artinya sudah terload ke dalam array}
  106.     var
  107.         i, j, iGuard, baris, jumlahGuard ,panjangsebelum, temp : integer;
  108.         { i untuk indeks matriks 1 dimensi , i dan j untuk indeks matriks 2 dimensi, iGuard untuk indeks dimana "|" ditemukan,
  109.           baris untuk baris pada file eksternal, jumlahGuard untuk menghitung jumlah "|" yang muncul pada file eksternal , panjangsebelum untuk
  110.           menghitung panjang string sebelum "|" ada, temp untuk menyimpan variabel sementara}
  111.        
  112.         bahankeN : TypeBahanOlahan; {Banyak bahan sejumlah N, dibuat array karena tiap baris pada file eksternal berbeda jumlah N}
  113.         lokGuard : LokasiMark;
  114.         lanjut : string;
  115.     begin
  116.         if (EOF ( FileBahanOlahanLoad.fin )) then begin {Penanganan File kosong}
  117.              writeln ('File kosong!');
  118.         end else begin {File Tidak Kosong}
  119.              baris := 1;
  120.              while not ( EOF (FileBahanOlahanLoad.fin ) ) do begin
  121.                  readln ( FileBahanOlahanLoad.fin , BahanOlahanLoad.BarisText);      
  122.                  iGuard := 1;
  123.                  for i := 1 to length (BahanOlahanLoad.BarisText) do begin
  124.                       if ( BahanOlahanLoad.BarisText[i] = mark ) then begin
  125.                          lokGuard.Guard[iGuard] := i; {memasukkan indeks yang terdapat "|" ke dalam array }
  126.                          iGuard := iGuard + 1;
  127.                       end;
  128.                  end;  
  129.                      JumlahGuard := iGuard - 1;
  130.                      iGuard := 1; {Inisiasi awal}
  131.                      panjangsebelum := 0; {Inisiasi awal}
  132.                      BahanOlahanLoad.Nama [baris] := copy(BahanOlahanLoad.BarisText,1,lokGuard.Guard[iGuard]-2);
  133.                      {Mengambil substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama dikurangi 2 (untuk menghilangkan spasi.}
  134.                      
  135.                      delete(BahanOlahanLoad.BarisText,1,length(BahanOlahanLoad.Nama [baris])+3);
  136.                      {Menghapus substring pada string satu baris di file eksternal, dari awal string sampai ditemukan lokasi "|" pertama ditambah 3 (untuk menghilangkan spasi.)}
  137.                      
  138.                      panjangsebelum := length(BahanOlahanLoad.Nama [baris])+3; {panjang string sebelum "|" ditemukan atau panjang string nama bahan ditambah 3}
  139.                  
  140.                      BahanOlahanLoad.HargaStr [baris] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-panjangsebelum)-2);
  141.                      val(BahanOlahanLoad.HargaStr[baris],BahanOlahanLoad.Harga[baris]); {Mengonversi string ke integer}
  142.                      delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.HargaStr[baris]) + 3 );
  143.                      panjangsebelum := panjangsebelum + (length (BahanOlahanLoad.HargaStr[baris]) + 3 );
  144.                  
  145.                      BahanOlahanLoad.BanyakStr[baris] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+2]-panjangsebelum)-2);
  146.                      val(BahanOlahanLoad.BanyakStr[baris],BahanOlahanLoad.Banyak[baris]);
  147.                      delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.BanyakStr[baris]) + 3 );
  148.                      panjangsebelum := panjangsebelum + (length (BahanOlahanLoad.BanyakStr[baris]) + 3 );
  149.                  
  150.                      iGuard := 3; {Menandakan jumlah "|" yang sudah lebih dari 2.}
  151.                      bahankeN.PanjangN [baris] := 1;
  152.                      while ( bahankeN.PanjangN [baris] <= (JumlahGuard-2) ) do begin
  153.                          if ( bahankeN.PanjangN[baris] <> JumlahGuard-2) then begin
  154.                              BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] := copy(BahanOlahanLoad.BarisText,1,(lokGuard.Guard[iGuard+1]-panjangsebelum)-2);
  155.                              {Bahan ke-N adalah substring dari string asal}
  156.                              delete (BahanOlahanLoad.BarisText,1,length (BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] ) + 3 );
  157.                              iGuard := iGuard + 1;
  158.                              panjangsebelum := panjangsebelum + length (BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] ) + 3 ;
  159.                          end else begin {Jika hanya tersisa string berupa Bahan Ke-N (terakhir karena sebelumnya sudah didelete semua)}
  160.                              BahanOlahanLoad.Bahan[baris][bahankeN.PanjangN[baris]] := BahanOlahanLoad.BarisText;
  161.                          end;
  162.                          bahankeN.PanjangN [baris] := bahankeN.PanjangN[baris] + 1;
  163.                      end;
  164.                      baris := baris+1;
  165.             end;
  166.         end;
  167.         {MENGOUTPUT HASIL PADA PROGRAM }
  168.         temp := baris- 1;
  169.         baris := 1; {Reset kembali}
  170.         for i := 1 to temp do begin
  171.              writeln ('Bahan olahan ke- ' , i , ' : ');
  172.              writeln ('Nama  : ', BahanOlahanLoad.Nama[i]);
  173.              writeln ('Harga Jual : ', BahanOlahanLoad.Harga[i]);
  174.              writeln ('Banyak : ', BahanOlahanLoad.Banyak[i]);
  175.              write ('Bahan yang dibutuhkan : ');
  176.              for j := 1 to bahankeN.PanjangN[baris]-1 do begin {Karena jumlah N berbeda tiap baris}
  177.                  if ( j <> bahankeN.PanjangN[baris]-1 ) then begin
  178.                      write (BahanOlahanLoad.Bahan[i][j],', ');
  179.                  end else begin
  180.                      write (BahanOlahanLoad.Bahan[i][j]); {Dipisah dengan kondisional atas agar tidak kelebihan koma}
  181.                  end;
  182.              end;
  183.              writeln();
  184.              baris := baris + 1;
  185.              writeln ('----------------------------------------------------------------------------');
  186.              writeln();
  187.              repeat
  188.                 writeln ('Ketik angka "2" untuk melanjutkan!');
  189.                 readln (lanjut); {Penguna harus mengetikan angka 2 untuk melanjutkan output pada program}
  190.              until (lanjut = '2');
  191.              writeln ();
  192.              writeln ('----------------------------------------------------------------------------');
  193.        end;
  194.     end;
  195. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement