Krisstoof Posted January 28, 2014 Report Share Posted January 28, 2014 (edited) Mam problem z programem, gdyż przy niektórych danych się zawiesza. Nie wiem co powoduje ten problem. A także czy ma ktoś pomysł jak skrócić program, bo szyfr i deszyfr zawierają to samo, a nie wiem jak dać drugą funkcję pod to samo.#include <iostream>#include <string>#include <cstdlib>using namespace std;// definicje elementów Enigmyvoid nap(){cout << "Wybierz opcje: " << endl;cout << "[1] Szyfrowanie" << endl;cout << "[2] Deszyfrowanie" << endl;cout << "[3] Wyczysc ekran" << endl;}string szyfr(){string rotory[3] = {"CKMELGDJVZNTOWYHXUSPAIBRFQ", "YDFWJLUBRTXVZNPEIHGAKMCSQO", "NKAFMTDQPXEGOWYHZUSVLIJRCB"};string pe = "SZYFR";// przestawieniestring refl = "YRUHQSLDPXNGOKMIEBFZCWVJAT";// odwroceniestring la = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";int rtr[3],i,j,k,n,c;bool ruch;string sr,sl;cout << "Podaj kolejnosc ustawienia 3 rotorow(od 1-3): ";// odczytujemy konfigurację rotorówcin >> n;for(i = 2; i >= 0; i--){ rtr[i] = (n % 10) - 1; // numer pierścienia na i-tej pozycji n /= 10;}cout << "Podaj pierwsze 3 litery rotorow: ";// odczytujemy położenia początkowe rotorówcin >> sr;for(i = 0; i < sr.length(); i++) sr[i] = toupper(sr[i]);cout << "Podaj pary liter ktore chcesz ze soba zamienic: ";cin >> sl;// odczytujemy stan łącznicy wtyczkowejfor(i = 0; i < sl.length(); i++) sl[i] = toupper(sl[i]);for(i = 0; i < sl.length() - 1; i += 2) { la[sl[i] - 65] = sl[i + 1]; la[sl[i + 1] - 65] = sl[i]; }cout << "Wpisz slowo ktore chcesz zaszyfrowac/deszyfrowac: ";cin.ignore(256,'\n');// odczytujemy szyfrogramgetline(cin,sl);for(i = 0; i < sl.length(); i++) sl[i] = toupper(sl[i]);for(i = 0; i < sl.length(); i++)// szyfrujemy/rozszyfrowujemy szyfrogram {for(ruch = true, j = 2; ruch && (j >= 0); j--)// najpierw ruch rotorów { ruch = (sr[j] == pe[rtr[j]]); sr[j] = 65 + (sr[j] - 64) % 26; }c = sl[i];// pobieramy znak szyfrogramuc = la[c - 65];// przechodzimy przez łącznicę wtyczkową for(j = 2; j >= 0; j--)// przechodzimy przez rotory w kierunku do bębna odwracającego { k = sr[j] - 65; c = rotory[rtr[j]][(c - 65 + k) % 26]; c = 65 + (c - 39 - k) % 26; } c = refl[c - 65];// przechodzimy przez bęben odwracający for(j = 0; j < 3; j++)// wracamy ścieżką powrotną { k = sr[j] - 65; c = 65 + (c - 65 + k) % 26; for(n = 0; rotory[rtr[j]][n] != c; n++); c = 65 + (26 + n - k) % 26; } c = la[c - 65];// przechodzimy przez łącznicę wtyczkową sl[i] = c;// uaktualniamy szyfrogram }cout << sl << endl << endl;// wyświetlamy szyfrogram}int main(){nap();int opcja;do{cin >> opcja;switch(opcja){case 1:szyfr();cout << "A teraz wybierz [2] by deszyfrowac tekst: " ;break;case 2:szyfr();break;case 3:system("cls");nap();} } while (opcja<4 && opcja!=0);cout << ",, System shutting down ''" << endl;system("pause");return EXIT_SUCCESS;} Edited January 28, 2014 by packman88 Quote Link to comment Share on other sites More sharing options...
wies.niak Posted January 28, 2014 Report Share Posted January 28, 2014 Podaj przykład danych, przy jakich aplikacja się zawiesza.Próbowałeś użyć debuggera, żeby odkryć, w którym miejscu i z jakiego powodu jest problem? 1 Quote Link to comment Share on other sites More sharing options...
Krisstoof Posted January 28, 2014 Author Report Share Posted January 28, 2014 Problem zawieszania rozwiązany. Usunąłem rotory i zapomniałem o tym, a potem próbowałem wczytać brakujące rotory i przez to program się wieszał. Jest jeszcze kwestia optymalizacji. Quote Link to comment Share on other sites More sharing options...
Krisstoof Posted January 28, 2014 Author Report Share Posted January 28, 2014 Skróciłem o 50% kod źródłowy mojego programu. Quote Link to comment Share on other sites More sharing options...
nozyck Posted January 29, 2014 Report Share Posted January 29, 2014 Wypadałoby pomyśleć o formatowaniu kodu - to, co wrzuciłeś, wygląda paskudnie. Raz robisz za dużo wcięć, innym razem wcale. Z nawiasami klamrowymi jest jeszcze gorzej - niestosowanie ich w przypadku, gdy w pętli czy instrukcji warunkowej mamy tylko jedną linię kodu to strzelanie sobie w łeb. Zakładając, że posprzątałeś w swojej implementacji, masz już dziurkę w głowie. Zrób ładnie a zobaczysz. Quote Link to comment Share on other sites More sharing options...