indeks górny w konsoli

0

chciałbym napisać funkcje która wyswietla na ekranie liczbe podniesiona do danej potęgi

SetConsoleOutputCP( 437 );
std::cout << "x = 2\xfc" << std::endl;
SetConsoleOutputCP( 1250 ); //przywróć polskie litery

pod warunkeim, że czcionka w konsoli to Lucida Console

Poniższy kod wypisze 2n

http://pl.wikipedia.org/wiki/CP437

Szukałem na własną rękę odpowiedzi w dokumentacji strony kodowej 437, ale nadal nie wiem czy w jakis sposob moge zapisac potegi cyfr 0-9
znalazłem jedynie kod potęgi 2
xFD

1

Tu masz listę kodów dla indeksów górnych i dolnych: http://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts

cout << "\x\u2074" << endl

To co powyżej da ci np. x podniesione do 4 potęgi z wydrukowaniem cyfry na górnym indeksie.

0

hmm coś jeszcze chyba powinienem dodać
bo wyrzuca mi
\x used with no following hex digits|
a nawet gdy zmienię x na np. na 2 to wyrzuca mi krzaki ;)

1
cout << "x\u2074"  << endl;

Ot literówka wyrzuć "" przed x i będzie ok ewentualnie możesz dać wcout

2

pod warunkeim, że czcionka w konsoli to Lucida Console

Raczej pod warunkiem, że jest to czcionka TrueType, a nie rastrowa. Nie musi być konkretnie Lucida.

0

Lucida - wyskakują krzaki.
TrueType - niestety nie posiadam ale zastanawiam się czy jest możliwość ściągnięcia tej czcionki i podpięcia ją pod program, który w jakis sposób zmieniłby czcionkę w konsoli, tak abym na każdym komputerze mógł wyświetlić potęgi. Czy jedynie trzeba wgrać ją systemowo

1

podstawowy problem to kodowanie. Chcesz używać znaków z poza zakresu ASCII, ergo musisz użyć takiego samego kodowania w programie jaki jest używany na konsoli (albo zmieniać ustawienie konsoli, tak jak próbowałeś). W drugiej kolejności konsola/terminal musi wspierać odpowiedni zakres znaków, ale współcześnie rzadko to jest problem.
Zaproponowane rozwiązanie to użycie znaków Unicode nie obsługiwane przez kodowanie, które chcesz użyć CP437.
Najlepiej jeśli cały twój kod użyje jednego kodowania. Najlepiej UTF-8. Tego samego kodowania użyj do kodu źródłowego dzięki czemu nie będziesz miał problemów z polskimi znakami (kompilator też warto ustawić, ale chyba też domyślnie jest ustawione UTF-8).

http://ideone.com/HuN8HX

string superscriptNumber(int x) {
	static auto superscriptDic = map<char, string> {
		{'0', "\xE2\x81\xB0"},
		{'1',     "\xC2\xB9"},
		{'2',     "\xC2\xB2"},
		{'3',     "\xC2\xB3"},
		{'4', "\xE2\x81\xB4"},
		{'5', "\xE2\x81\xB5"},
		{'6', "\xE2\x81\xB6"},
		{'7', "\xE2\x81\xB7"},
		{'8', "\xE2\x81\xB8"},
		{'9', "\xE2\x81\xB9"}
	};
	string result;
	for (auto a : to_string(x)) {
		result.append(superscriptDic[a]);
	}
 
	return result;
}

Wynik nie jest zbyt ładny ale działa.
Wersja z jawnie wpisanymi znakami: http://ideone.com/h47tKc

0

Dziękuję, bardzo się napracowałeś przy swojej wypowiedzi doceniam to.

Aktualnie pracuję na:
System: Windows 7
Środowisko Code::Blocks 13.12.
W opcjach programu zmieniłem kodowanie z Windows-1250 na UTF-8.

Niestety mam błędy dla wersji z jawnie wpisanymi znakami:

 
||=== Build: Debug in vvvv (compiler: GNU GCC Compiler) ===|
D:\praca\C++\vvvv\main.cpp||In function 'std::string superscriptNumber(int)':|
D:\praca\C++\vvvv\main.cpp|8|warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]|
D:\praca\C++\vvvv\main.cpp|8|error: 'superscriptDic' does not name a type|
D:\praca\C++\vvvv\main.cpp|24|warning: 'auto' changes meaning in C++11; please remove it [-Wc++0x-compat]|
D:\praca\C++\vvvv\main.cpp|24|error: 'a' does not name a type|
D:\praca\C++\vvvv\main.cpp|28|error: expected ';' before 'return'|
D:\praca\C++\vvvv\main.cpp|28|error: expected primary-expression before 'return'|
D:\praca\C++\vvvv\main.cpp|28|error: expected ';' before 'return'|
D:\praca\C++\vvvv\main.cpp|28|error: expected primary-expression before 'return'|
D:\praca\C++\vvvv\main.cpp|28|error: expected ')' before 'return'|
D:\praca\C++\vvvv\main.cpp|29|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build failed: 7 error(s), 3 warning(s) (0 minute(s), 0 second(s)) ===|

Co powinienem zmienić ustawieniach programu ?

1

Mój kod wykorzystuje C++11! Albo sobie go włączysz, albo poprawisz kod kod by działał z C++03 (nie jest to trudne).

http://ideone.com/Jsw7YI

1 użytkowników online, w tym zalogowanych: 0, gości: 1