PROGRAM Code Breaker
PROGRAM Code Breaker
Perkins CS 65 Due: 12 December 1996} {This program accepts the name of a coded file, the number of possible key values in the polyalphabetic cypher used, and at least one "known" string within the coded text and decodes the encrypted file and displays it to the user} USES cs65; {Declarations Module} CONST MessMax = 255; CharRange = 95; TopCharCode = 126; KeySize = 10; TYPE Message = ARRAY[1..MessMax] OF CHAR; KeyCode = ARRAY[1..KeySize] OF INTEGER; VAR TestKey, i, Count, NumKeysNeeded, NumKeysFound : INTEGER; CharCycle, MessPointer, NumChecks : INTEGER; Found : BOOLEAN; FileName, SearchString : STRING; InFile : TEXT; Mess, MessAnswer : Message; Key : KeyCode; PROCEDURE Decrypt(Shift : INTEGER; VAR Code : CHAR); VAR NumCode : INTEGER; BEGIN NumCode := ORD(Code) + Shift; IF NumCode > TopCharCode THEN NumCode := NumCode - CharRange; Code := CHR(NumCode); END; BEGIN {program}
{Needed information prompt module} WRITE('Enter the name of the file you would like to read : '); READLN(FileName); WRITE('Enter the number of encryption keys searching for : '); READLN(NumKeysNeeded); WRITE('Enter a known "string" in the encrypted text : '); READLN(SearchString); {Read File Module} RESET(InFile, FileName); i := 0; WHILE NOT EOF(InFile) DO BEGIN i := i + 1; READ(Infile, Mess[i]); END; {while loop}
CLOSE(Infile); {Initialization module} TestKey := 1; {Current "key"/"offset" value used for decryption} NumKeysFound := 0; {Number of "keys" found so far} REPEAT {Status Display Module} WRITE('Testing Key Number : ', TestKey:1,'.'); WRITELN(' Found ', NumKeysFound:1, ' code keys.'); {Decrypt File Module} FOR Count := 1 TO i DO Decrypt(1, Mess[Count]); {Searching module} FOR CharCycle := 1 TO NumKeysNeeded DO BEGIN Found := FALSE; {"Found" is true when there is a possible answer found} MessPointer := 0; REPEAT {compare every char in message to char at CharCycle in SearchString} MessPointer := MessPointer + 1; {point to next char in the message} IF (Mess[MessPointer]) = (SearchString[CharCycle]) THEN BEGIN Found := TRUE; {set Found to true until proved otherwise} FOR NumChecks := 1 TO (((LENGTH(SearchString)) DIV NumKeysNeeded) - 1) DO IF (Mess[MessPointer + (NumKeysNeeded * NumChecks)] <> SearchString[CharCycle + (NumKeysNeeded * NumChecks)]) THEN Found := FALSE; {set Found to false if string values do not match} END; UNTIL ((Found) OR (MessPointer > i)); IF (MessPointer > i) THEN Found := FALSE; IF (Found) THEN BEGIN
FOR Count := 1 TO i DO IF ((((Count - 1) MOD NumKeysNeeded) + 1) = (((MessPointer - 1) MOD NumKeysNeeded) + 1)) THEN MessAnswer[Count] := Mess[Count]; Key[(((MessPointer - 1) MOD NumKeysNeeded) + 1)] := TestKey; {store current key in appropriate place in array} NumKeysFound := NumKeysFound + 1; {increment number of keys found} END; {if structure} END; {for loop - CharCycle}
TestKey := TestKey + 1;
UNTIL ((NumKeysFound = NumKeysNeeded) OR (TestKey > CharRange)); {Answer Key Display Module} WRITELN; WRITELN('The encryption key is : '); FOR Count := 1 TO NumKeysNeeded DO WRITE(Key[Count]:1, ' '); WRITELN; {Decoded Message Display Module} WRITELN; WRITELN('The message is : '); FOR Count := 1 TO i DO WRITE(MessAnswer[Count]); WRITELN; END. {of program}
Ada banyak algoritma yang bisa kita gunakan, antara lain Bubble Sort, Insertion Sort, Selection Sort, dan Quick Sort. Phii akan bahas pengurutan menggunakan Bubble Sort karena algoritma ini yang paling simple.
Ok, kita mulai membahas algoritma ini: 1. Siapkan deret angka yang akan diurutkan (beri batasan maksimal jumlah angka yang akan diurutkan) 2. Buat suatu kondisi yang akan menentukan urutan deret angka, denganmembandingkan tiap 2 angka yang posisinya berurutan, misal: jika angka[n] > angka[n-1], maka.. 3. Tukar posisi angka jika memenuhi kondisi di atas tampilkan hasil pengurutan Lihat Source Code
#include <stdio.h> #include <conio.h> main() {
1. #include <stdio.h> 2. #include <conio.h> 3. 4. main() { 5. /* angka[100] menentukan jumlah bilangan yang boleh dimasukan */ 6. int angka[100], tukar, b, n, i; 7. 8. /*bersikan layar keseluruhan */ 9. clrscr(); 10. 11. printf("Masukkan jumlah data ? "); 12. 13. /*input jumlah data di variable n*/ 14. scanf("%d",&n); 15. printf("\n"); 16. 17. for(i=1;i<=n;i++){ 18. printf("Masukkan data ke - %d = ",i); 19. 20. /* input data setiap variable bilangan */ 21. scanf("%d",&angka[i]); 22. } 23. 24. /* tampilkan deret bilangan yang di input */ 25. printf("\nDeret angka -->"); 26. 27. for (i=1;i<=n;i++){ 28. printf("%d ",angka[i]);
29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. }
} /* Mulai proses pengurutan bilangan */ /* tampilkan angka setelah di urut */ printf("\nAngka Setelah di Urut -->"); for (i=1;i<=n;i++){ for (b=1;b<n;b++){ if (angka[i]<angka[b]) { /* teknik menukar nilai bilangan */ tukar = angka[i]; angka[i]=angka[b]; angka[b]=tukar; } } } for (i=1;i<=n;i++) printf("%d ", angka[i]); /* agar prompt tidak langsung berakhir */ getch();
Silahkan jalankan program di atas, masukkan deret bilangan yang akan anda urutkan. Contoh hasil eksekusi program di atas adalah seperti gambar yang ada diatas.
Untuk detail logika / algoritma, serta contoh coding dalam C++ dan Java, silakan merujuk ke http://galih.eu/2009/06/24/algoritma-deret-bilangan-prima/ Berikut ini saya akan share, bagaimana menerapkannya dalam Visual Basic 6. 1. Siapkan desain awal program.
Komponen2:
Form1 Sebagai form utama. Beberapa properti yang diubah: - Caption : Deret Prima - Border Style : 1 - Fixed Single Label1 : Nilai Awal Label2 : Nilai Akhir Label4 Untuk media penampil banyak data, jumlah data, dan rata-ratanya. Caption dikosongkan saja.
Text1 Textbox untuk memasukkan nilai batas bawah. Properti yang diubah: Alignment : 1 - Right Justify Text : 2 (angka default yang dimasukin ke textbox)
Text2 Textbox untuk memasukkan nilai batas atas. Properti yang diubah: Alignment : 1 - Right Justify Text : 20 (angka default yang dimasukin ke textbox) Text3 Untuk menyimpan keluaran dari deret prima. Properti yang diubah: Locked : True (supaya read only) Multiline : True (supaya bisa menampung dalam banyak baris) ScrollBars : 2 - Vertical (jaga2 kalau datanya banyak) Command1 Button / Tombol untuk membangkitkan proses penghasil deret prima. Caption : Proses Command2 Button / Tombol untuk keluar dari program. Caption : Keluar
Dim prima As Boolean banyak = 0 jml = 0 For i = min To max prima = False If (i = 2) Then prima = True Else For j = 2 To (i - 1) If (i Mod j = 0) Then prima = False Exit For Else prima = True End If Next j End If If prima = True Then Text3.Text = Text3.Text & i & " " banyak = banyak + 1 jml = jml + i End If Next i rata = Round(jml / banyak, 2) Label4.Caption = "Banyak bilangan = " & banyak & vbCrLf & _ "Jumlah total = " & jml & vbCrLf & _ "Rata-rata = " & rata End Sub
Private Sub Form_Load() Label4.Caption = "Banyak bilangan = 0" & vbCrLf & _ "Jumlah total = 0" & vbCrLf & _ "Rata-rata = 0" End Sub
Pembahasan : 1. terdapat 2 input bilangan i = 0 dan j = 2 2. kemudian lakukan pengecekan apakah i < 5? 3. Jika ya maka lakukan proses j = i + j dimana pada saat : nilai nilai j i j total 0 1 2 3 4 2 2 3 5 8 2 3 5 8 12
4. Setelah cetak nilai j maka tambahkan nilai i nya. 5. Dan jika nilai i >=5 maka program akan berakhir...
DEKLARASI N : integer function FAKTORIAL(input N:integer):integer DEKLARASI { tidak ada } ALGORITMA: if N = 0 then return 1 else return n*FAKTORIAL(n-1) endif ALGORITMA : write(Masukkan angka) read(N)
write(Faktorial = ,FAKTORIAL(N))
PROGRAM HITUNG_FAKTORIAL; DEKLARASI N : integer procedure Faktorial DEKLARASI i,fak :integer ALGORITMA: Fak 1 for I 1 to N do Fak fak*i write (fak, ) endfor ALGORITMA : writeln (===== Program Hitung Faktorial =====); write(Masukkan nilai faktorial:) Read(N) write (hasil faktorial=) faktorial
label 10; var N : integer; function Faktorial(N: integer): integer; begin if N = 1 then Faktorial := 1 else Faktorial := N * Faktorial(N-1); end; begin 10: clrscr; writeln(==== PROGRAM MENGHITUNG BILANGAN FAKTORIAL ====); write(Masukkan bilangan faktorial = );{$I-} readln(N);{$I+} if (IOResult 0) then begin write(Input salah, silahkan ulangi !); readkey; goto 10; end; write(Hasil Faktorial = ,Faktorial(N));
end.
Program Hitung_Faktorial; uses wincrt; label 10; var N : integer; procedure Faktorial var i,fak:integer; begin fak:=1 ; for i:= 1 to N do Fak:=fak*i ; write (fak, ); end; begin 10: clrscr; writeln(==== PROGRAM MENGHITUNG BILANGAN FAKTORIAL ====); write(Masukkan bilangan faktorial = );{$I-} readln(N);{$I+} if (IOResult 0) then begin
write(Input salah, silahkan ulangi !); readkey; goto 10; end; write(Hasil Faktorial = ); Faktorial; end.
faktorial = 1 3. Misalkan kita masukan n = 5 maka nilai akan diulang sebanyak nilai n kali. 4. Masukan nilai n pada formula pemfaktorialan yaitu fak * i dimana i adalah angka sebelum n. 5. Makajika operasinya benar akan diperoleh hasil yang benar. 6. Finish.
Algoritma dan Program Menghitung Faktorial Sebuah Bilangan dengan C++ dan Java(Jeliot3)
Posted on 7 April 2011 by astriyatnasari Algoritma dan Program Menghitung Faktorial Sebuah Bilangan dengan C++ dan Java(Jeliot3) 1.Algoritma Deskripsi: int proses(); int n; int faktorial; Deskripsi: read(n); dibalik=0; for(int i=0; i<=n; i++) { if(n>0) { for(int i=1; i<=n; i++) { faktor*=i; }}} return faktor; end if; endfor; write(n);
2.Program a.Dengan bahasa c++ #include <iostream.h> #include <conio.h> class faktorial{public: int proses(); void keluaran();private: int n,faktor;}; int faktorial::proses(){ cout<<masukan angka yg akan di faktorialkan : ; cin>>n; faktor=1; if(n>0){ for(int i=1; i<=n; i++) { faktor*=i; }} else if(n=0){faktor=1;} else{cout<<nah nggak ngerti aku itungannya;} return faktor;} void faktorial::keluaran() {cout<<endl<<endl<<faktorial dari <<n<<! = <<faktor;} int main(){ faktorial bilangan; bilangan.proses(); bilangan.keluaran(); getch();} OUTPUT:
b.Dengan bahasa Java(jeliot3) import jeliot.io.*; class nilai { public nilai(){faktorial = 1;} public void masukan() {System.out.print(angka yang akan di faktorialkan : ); n = Input.readInt();} public void proses() { for( i=1; i<=n; i++) faktorial*=i;} public void keluaran() {System.out.print(faktorialnya :); System.out.print(faktorial);} private int i;private int n; // input private int faktorial; // output public static void main() { nilai X = new nilai(); X.masukan(); X.proses(); X.keluaran();}}
OUTPUT:
Partial Class Faktor 02 03 04 Private Function Faktorial(ByVal Angka As Integer) As Integer 05 If Angka = 0 Or Angka = 1 Then 06 Return 1 07 Else 08 Return Angka * Faktorial(Angka - 1) 09 End If 10 End Function 11 Protected Sub BtFaktorial_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BtFaktorial.Click 13 Dim hasil As Integer = 1 12 14 Dim Angka As Integer 15 Angka = CInt(Me.TbInputAngka.Text) 16 hasil = Faktorial(Angka) 17 Me.LbAngka.Text = CInt(Angka) 18 Me.LbFaktorial.Text = CStr(hasil) 19 End Sub 20 21 End Class Inherits System.Web.UI.Page
KONVERSI WAKTU 1.
//program c++ konversi detik untuk menampilkan jam menit dan detik //program c++ konversi detik untuk menampilkan jam menit dan detik #include <iostream.h> #include <conio.h> main() { long int jam,menit,detik,s,sisa; cout<<"Program Konversi Detik Ke Jam, Menit & Detik\n"; cout<<"============================================\n"; cout<<"masukkan Detik : "; cin>>detik; cout<<endl; jam=detik/3600; sisa=detik%3600; menit=sisa/60; s=sisa%60; cout<<detik ; cout<<" Detik = "; cout<<jam ; cout<<" Jam "; cout<<menit ; cout<<" Menit "; cout<<s ; cout<<" detik "; cout<<endl; return 0; }
Screenshot:
Program C++ dibawah ini kebalikan dari program diatas, dimana yang menjadi masukan adalah Jam,Menit,Detik kemudian dikonversikan kedalam detik:
//program C++ Konversi Dari Jam,menit,Detik Ke Detik #include <iostream.h> #include <conio.h> main() { long int j,m,s,jam,menit,hasil; cout<<"======================================";cout<<endl; cout<<"Konversi Dari Jam,menit,Detik Ke Detik";cout<<endl; cout<<"======================================";cout<<endl; cout<<"Masukan Jam : " ; cin>>j ; cout<<endl; cout<<"Masukan Menit: " ; cin>>m ; cout<<endl; cout<<"Masukan Detik: " ; cin>>s ; cout<<endl; jam=j*3600; menit=m*60; hasil=jam+menit+s; cout<<"Hasilnya : " ;cout<<hasil; cout<<" Detik";cout<<endl; cout<<"======================================";cout<<endl; }
Screenshot:
2.
#include #include
int konvertdetik(int totdetik); int konvertjam(int totdetik); int konvertmenit(int totdetik); int main(void){ int d; printf(Masukkan detik : ); scanf(%d,&d); konvertdetik(d); konvertmenit(d); konvertjam(d); printf(Hasil konversi [h:m:s]: %d : %d : %d,konvertjam(d),konvertmenit(d),konvertdetik(d)); getch(); return 0; } (lagi)
3.
Program Konversi_Waktu1; Uses WinCrt; var j,m,d,dm,sisa,sisa1:integer; begin Writeln('Program Konversi Waktu 1'); Writeln('========================'); Writeln; Write('Masukkan Jumlah Detik : ');readln(dm); if (dm/3600)>0 then begin j:=dm div 3600; sisa:=dm-(j*3600); end else begin j:=0; sisa:=dm; end; if (sisa/60)>0 then begin m:=sisa div 60; sisa1:=sisa-(m*60); end else begin m:=0;
sisa1:=sisa; end; d:=sisa1; Writeln; Writeln('Hasil => ',j,' jam ',m,' menit ',d,' detik'); end.
sisa1:=sisa; end; d:=sisa1; Writeln; Writeln('Hasil => ',j,' jam ',m,' menit ',d,' detik'); Readln; end. Nah, untuk compile dan run-nya udah pada bisa kan... tinggal CTRL+F9 aja..
5.
} cout<<["<<j<<" Jam] ["<<m<<" Menit] ["<<d<<" Detik] <<endl; return n; } main(){ int n; char lagi; lagi ==Y; do { cout<<Silahkan Masukkan Detik yang diinginkan :; cin>>n; cout<<Output :<<endl; konversi(n); cout<<ingin menghitung lagi? [Y/N] <<endl; lagi=getch(); } while (lagi == Y || lagi==y); cout<<endl<<selesai; system(Pause); return 0; }
6.
PROGRAM C++ KONVERSI DARI HARI KE TAHUN BULAN MINGGU DAN HARI
Posted by Adhitya Nugraha on November 23, 2010, filed in: C/C++
2
Berikut dibawah ini merupakan Program C++ untuk mengkonversi dari jumlah hari ke Tahun, Bulan, Minggu, Hari. Yang di inputkan berupa jumlah Hari, Source Code nya seperti dibawah ini:
//program c++: konversi dari Jumlah Hari ke Tahun,Bulan,Minggu dan Hari #include<iostream.h> #include<conio.h> main() { long int thn,bln,mgu,jum_hr,sisa_thn,hr,sisa_bln; cout<<"Program C++ Konversi Tahun,Bulan,Minggu dan Hari\n"; cout<<"================================================\n"; cout<<"Masukkan Jumlah Hari: "; cin>>jum_hr; cout<<endl; thn=jum_hr/365;
sisa_thn=jum_hr%365; bln=sisa_thn/30; sisa_bln=sisa_thn%30; mgu=sisa_bln/7; hr=sisa_bln%7; cout<<jum_hr; cout<<" Hari = "; cout<<thn; cout<<" Tahun, "; cout<<bln; cout<<" Bulan, "; cout<<mgu; cout<<" Minggu, "; cout<<hr; cout<<" Hari \n"; cout<<"================================================\n";
Screenshot:
Previous
PROGRAM C++ KONVERSI DARI DETIK KE JAM, MENIT DAN DETIK
Next
PROGRAM C++ SWITCH CASE DAFTAR HARGA BBM
7.
Konversi Perubahan Satuan Waktu : Detik, Menit, Jam, Hari, Minggu, Bulan, Tahun,
Konversi Durasi Waktu dari Detik ke Hari, Jam, Menit, Detik Halo agan-agan semua... saya punya source code program yang saya buat dengan menggunakan bahasa pemrograman C untuk melakukan konversi durasi waktu dari total jumlah detik kedalam hari, jam, menit, detik.. Berikut ini listing source code selengkapnya : Code: #include <stdio.h> #include <conio.h> #include <stdlib.h>
#define DETIK 999999 int main(int argc, char *argv[]) { long hari, jam, menit, detik, TotalDetik; do { system("CLS"); printf("Total Detik : "); scanf("%ld",&TotalDetik); fflush(stdin); } while((TotalDetik < 1) || (TotalDetik > DETIK)); printf("Hari : %ld\n",hari=TotalDetik/86400); printf("Jam : %ld\n",jam=(TotalDetik-(86400*hari))/3600); printf("Menit : %ld\n",menit=(TotalDetik-((86400*hari) +(3600*jam)))/60); printf("Detik : %ld\n",detik=(TotalDetik-((86400*hari) +(3600*jam)+(menit*60)))); printf("\nString : %ld hari, %ld jam, %ld menit, %ld detik\n",hari,jam,menit,detik); printf("Digital : %ld:%ld:%ld\n",jam,menit,detik); getch(); fflush(stdin); return(EXIT_SUCCESS); } Pertanyaan saya, ngomong-ngomong menurut agan-agan semua apakah sudah efisien/efektif source code saya diatas?? mohon koreksinya.. terima kasih... CMIIW Jum Jan 28, 2011 9:36 am ewyn32 newbie in training Sejak: 31 Desc 2009 Post: 64
Tambahan buat agan Cyber J.S. Code: #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int pembagi[3] = {86400,3600,60},Hasil[4]={0,0,0,0};
long int TD,sisa,i; printf("Input : "); scanf("%d",&TD);fflush(stdin); for(i=0,sisa = TD;i<3;i++){ while((sisa -= pembagi[i])>=0){ Hasil[i]++; }sisa += pembagi[i]; } Hasil[3] = sisa; printf("Hari : %ld\n",Hasil[0]); printf("Jam : %ld\n",Hasil[1]); printf("Menit : %ld\n",Hasil[2]); printf("Detik : %ld\n",Hasil[3]); system("PAUSE"); return EXIT_SUCCESS; } Jum Jan 28, 2011 9:17 pm script kiddie Sejak: 16 Desc 2009 Post: 235 Lokasi: Yogyakarta, Indonesia Cyber J.S.
Ohh.. oke gan terima kasih nih atas solusinya... Oya, btw itu juga hasil pemikiran sendiri gan?? Jum Jan 28, 2011 10:21 pm Cyber J.S. script kiddie Sejak: 16 Desc 2009 Post: 235 Lokasi: Yogyakarta, Indonesia
Oya gan, solusi dengan versi yang lain : Code: #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i, t, TotalDetik, pecahan[2] = {360,60}, hasil[2]; do { system("CLS");
scanf("%d",&t); fflush(stdin); } while((t < 1) || (t > 25)); while(t--) { do { scanf("%d",&TotalDetik); fflush(stdin); } while(TotalDetik < 1); for(i = 0; i < 2; ++i) { hasil[i] = TotalDetik/pecahan[i]; TotalDetik %= pecahan[i]; } printf("%d:%d:%d\n\n",hasil[0],hasil[1],TotalDetik); } return(EXIT_SUCCESS); }
8.
7.
8.
9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
Dim tempSecParam As Long lngSecParam = Sec lngSeconds = lngSecParam \ 86400 lngSecParam = lngSecParam - (lngSeconds * 86400) lngHours = lngSecParam \ 3600 lngSecParam = lngSecParam - (lngHours * 3600) lngMinutes = lngSecParam \ 60 lngSecParam = lngSecParam - (lngMinutes * 60) tempSecParam = lngSecParam SecondsToDateTimeSerial = _ IIf(Sec >= 86400, lngSeconds & " day(s), ", vbNullString) & _ IIf(Sec >= 0, Format(lngHours, "0#") & ":", vbNullString) & _ Format(lngMinutes, "0#") & ":" & Format(tempSecParam, "0#") End Function
9.
cin>>detik; cout<<endl; jam=detik/3600; sisa=detik%3600; menit=sisa/60; s=sisa%60; cout<<detik ; cout<<" Detik = "; cout<<jam ; cout<<" Jam "; cout<<menit ; cout<<" Menit "; cout<<s ; cout<<" detik "; cout<<endl; return 0; }