indeks górny w konsoli

indeks górny w konsoli
darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
0

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

Kopiuj
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

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
1

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

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

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

darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
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 ;)

MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 48
1
Kopiuj
cout << "x\u2074"  << endl;

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

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
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.

darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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

Kopiuj
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

darthachill
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 94
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:

Kopiuj
 
||=== 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 ?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.