pozycyjne reprezentacje liczb
Ostatnio zmodyfikowano 2014-12-22 22:53
do_matury Temat założony przez niniejszego użytkownika |
pozycyjne reprezentacje liczb » 2014-12-22 21:50:02 Siema, jestem tu nowy więc z góry przepraszam za moje naganne zachowanie. W tym roku mam zamiar zdawać maturę z informatyki, na jednej z stron znalazłem wykaz potrzebnych algorytmów. Mój problem dotyczy zagadnienia przedstawionego w temacie, mianowicie algorytm polegający na przedstawieniu liczby w dowolnym systemie pozycyjnym o podstawie p. Napisałem taki o to kod i moje pytanie brzmi czy da się go ulepszyć, oczywiście w miarę możliwości jak na ucznia liceum, bez zbędnych fajerwerków. #include <iostream> #include <string> using namespace std; char zamiana( int l ) { if( l < 10 ) return l + 48; else { char tab[ 25 ] = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'W', 'X', 'Y', 'Z' }; return tab[ l - 10 ]; } } int main() { int a, p; string l; cout << "Podaj liczbe: "; cin >> a; cout << "Podaj podstawe systemu: "; cin >> p; do { l = zamiana( a % p ) + l; a = a / p; } while( a != 0 ); cout << l; }
|
|
Admixior |
» 2014-12-22 22:28:53 Pierwsza rzecz: p - nigdy nie będzie dowolne. Aktualnie jak wstawisz dużą liczbę (powiedzmy 100) to wyjdzie po za tablice i program prawdopodobnie się wykrzaczy. Można dodać jakiegoś if'a. Druga rzecz (optymalizacja kodu): Tabela znaków ASCIIW tej tabeli masz umieszczone wszystkie znaki (liczby, małe i wielkie litery). Wynika z tego, że identycznie jak zrobiłeś to w przypadku liczb od 0 do 9 dodając 48, możesz zrobić z wielkimi literami: "l+65-10". |
|
do_matury Temat założony przez niniejszego użytkownika |
» 2014-12-22 22:53:43 Ok, z tą tablicą to nie pomyślałem. Dzięki za szybką odpowiedź. |
|
« 1 » |