Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pozycyjne reprezentacje liczb

Ostatnio zmodyfikowano 2014-12-22 22:53
Autor Wiadomość
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.
C/C++
#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;
}
P-123251
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 ASCII
W 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".
P-123255
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ź.
P-123256
« 1 »
  Strona 1 z 1