[C++] Spacja, odstęp

0

Witam

Postanowiłam napisać prosty program liczący układ równań o trzech niewiadomych x,y,z za pomocą wzorów Cramera.

Problem pojawił się w momencie konstruowania "układu równań".
Miał on wyglądać tak w konsoli:

|w1k1 x w1k2 y w1k3 z = b1
{w2k1 x w2k2 y w2k3 z = b2
|w3k1 x w3k2 y w3k3 z = b3

gdzie w1k1 oznacza wprowadzaną liczbę w pierwszym wierszu i w pierwszej kolumnie, czyli współczynnik przy niewiadomej x pierwszego równania itd., a b1, b2, b3 to wyniki równań.

Przykład po wprowadzeniu liczb:
|+1x+2y-2z=1
{+1x+3y+1z=8
|+1x-3y+4z=8

Jak się domyśleć można, w_k_ oraz b_ były przy cin'ie, a |,{,x,y,z= były przy cout, przez co kod wyglądał:

//pierwsze rownanie
	cout<<"|"<<;
	cin>>w1k1;
	cout<<"x"<<;
	cin>>w1k2;
	cout<<"y"<<;
	cin>>w1k3;
	cout<<"z ="<<;
	cin>>b1;
	
	//drugie rownanie
	cout<<"{"<<;
	cin>>w2k1;
	cout<<"x"<<;
	cin>>w2k2;
	cout<<"y"<<;
	cin>>w2k3;
	cout<<"z ="<<;
	cin>>b2;
	
	//trzecie rownanie
	cout<<"|"<<;
	cin>>w3k1;
	cout<<"x"<<;
	cin>>w3k2;
	cout<<"y"<<;
	cin>>w3k3;
	cout<<"z ="<<;
	cin>>b3;

I przy kompilacji wyświetliło błąd że tak nie może być. Okej, próbowałam z zwykłą spacją, \t, #32, dupa, nic nie działało.
Dopiero po dodaniu endl wszędzie jakoś to grało:

//pierwsze rownanie
	cout<<"|"<< endl;
	cin>>w1k1;
	cout<<"x"<< endl;
	cin>>w1k2;
	cout<<"y"<< endl;
	cin>>w1k3;
	cout<<"z ="<< endl;
	cin>>b1;
	
	//drugie rownanie
	cout<<"{"<< endl;
	cin>>w2k1;
	cout<<"x"<< endl;
	cin>>w2k2;
	cout<<"y"<< endl;
	cin>>w2k3;
	cout<<"z ="<< endl;
	cin>>b2;
	
	//trzecie rownanie
	cout<<"|"<< endl;
	cin>>w3k1;
	cout<<"x"<< endl;
	cin>>w3k2;
	cout<<"y"<< endl;
	cin>>w3k3;
	cout<<"z ="<< endl;
	cin>>b3;

Jednakże efekt nie powala:
http://iv.pl/images/01540435644970913152.jpg

A chodzi mi o:
http://iv.pl/images/58445516135670021908.jpg

I teraz pytanie za 100 punktów, jak to zrobić, aby parę coutów i cinów mieć w jednej lini?

Od razu zaznaczam, że nie interesuje mnie taki sposób, że pierw podaje się wszystkie współczynniki w_k_ oraz wyniki równań, a potem całość wypisuje się w1k1 x w1k2 i tak dalej.

Czy istnieje sposób w jaki można to wykonać? Czy może za bardzo zapędziłam się w róg? :) Jeśli jest jakiś sposób, byłabym niezmiernie wdzięczna, gdyby ktoś go ukazał i wytłumaczył (program pisany na zaliczenie, więc muszę wiedzieć co za co odpowiada).

Z pozdrowieniami, Iwona.

0

cout<<"|"<<; - WTF?
cout<<"|";

0
_13th_Dragon napisał(a):

cout<<"|"<<; - WTF?
cout<<"|";

Znaki |, { i | mają spełniać rolę klamry układu:
|
{
|

Jeżeli o to pytasz.

Zdaję sobie sprawę że moje pytanie jest nieco zagmatwane, lecz mam nadzieję, że ktoś zna na nie odpowiedź ;)

2

taka natura konsoli na standardowym wejściu.
standardowe wejście i wyjcie są niezależne.
czytając ze sztandarowego wejścia, jeśli dane nie są dostępne, program jest blokowany do momentu naciśnięcia enter. Efekt jest taki, że w jednej linii albo piszesz dane bieżące, albo te na przyszłość, które wczytasz potem.
Chodzi o to by z jednej strony zachować strumieniowość danych (standardowe strumienie można przekierowywać do pliku lub innych obiektów pełniących rolę strumieni) i równocześnie użytkownik miał jakiś zakres możliwości edycji tego co piszę.

Masz następujące wyjścia:

  • olać dekoracje i czytać współczynniki linia po linii, a potem wydrukować całość by uzyskać wizualny efekt
  • zmusić użytkownika do pisania dekoracji - wtedy sam musiałbyś parsować całą linię informując o błędach
  • zrezygnować ze standardowego strumienia danych i operować na konsoli bezpośrednio (np biblioteka curses) lub zrobić to graficznie (np Qt).
0

No nic, wygląda na to że za bardzo się zagalapowałam :) TMam pomysł jak to zrobić by zastosować rozwiązanie pierwsze MarkaR22 i przy okazji zrobić to czytelnie i w miarę ładnie. Dziękuję za poświęcony czas.

0

Używając ncurses da się coś takiego robić.

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