Algorytm Euklidesa w C++


(Alphaomega666) #1

Witam.

Jestem początkujący w C++ więc od razu przejdę do rzeczy w czym problem. Otóż mam do wykonania algorytm Euklidesa jednak ma on zapisywać każdy krok. Najlepiej będzie to widać na przykładzie więc:

a b c (reszta)

1755 = 51 x 34 + 21

51 = 21 x 2 + 9

21 = 9 x 2 + 3

9 = 3 x 3 + 0

NWD (1755, 51) = 3

Tak ma to wyglądać. Napisałem sam cały program jednak muszę użyć jedynie biblioteki , a ja mam użytą jeszcze .

http://wklej.org/id/411968/

Tak wyglądają moje wypociny. Proszę o poradę jak mam pozbyć się biblioteki . Dodam jeszcze, że używam Dev-c++.

Z góry dziękuję za odpowiedź.

Pozdrawiam.


(Ob Serwator) #2

Witam.

Myślę, że można to zrobić prościej. Bez użycia się nie obejdzie, a przynajmniej ja nie znam innego sposobu wyrównania tekstu wpisywanego przez cout.

#include 

#include 

#include 

using namespace std;



int main()

{

	int a1, b1, a, b, c, d, aa = 5, bb = 5, cc = 5, dd = 5;

	cout << "Podaj wartosc a: "; cin >> a1;

	cout << "Podaj wartosc b: "; cin >> b1;


	a = a1; // w a1 i b1 zapamiętamy wartości początkowe

	b = b1;


	cout << "\n\n\n"; // trzy nowe linie

	cout << setw(aa) << 'a' << setw(bb+3) << 'b' << setw(cc+19) << "c (reszta)" << "\n";

	cout << "-----------------------------------------------\n";


	while (b != 0)

	{

	  d = a/b;

	  c = a - d*b;


	  cout << setw(aa) << a << " = " << setw(bb) << b << " x " << setw(dd) << d << " + " << setw(cc) << c << "\n\n";


	  a = b;

	  b = c;

	}


	cout << "\n\n" << "NWD(" << a1 << ", " << b1 << ") = " << a << "\n\n\n\n";



	return 0;

}

Pozdrawiam.


(Alphaomega666) #3

Dzięki za odpowiedź. Rzeczywiście jest prościej, ale w szkole dostaliśmy zadanie żeby zrobić to tylko przy użyciu , więc chyba się da bez użycia . W każdym bądź razie dzięki.

Pozdrawiam.


(Drobok) #4

Zawsze możesz dodawać spacje w zależności ile znaków więcej jest w jednej z liczb ;]

Btw wywalając wszystkie setw i bibliotekę nie wygląda to tak źle, troszkę się rozjeżdża w wypadku bardzo dużych różnicy w ilości cyfr w liczbach ;]

ew każdy z wyświetlanych ciągów mógłbyś zapisać w tablicy i w zależności od tablicy pierwotnej byłyby dodawane spacje do kolejnych ciągów, żeby się wyrównało (ale to nupski pomysł xD)


(misza_88) #5

da się to spokojnie zrobić tylko z iostream

potrzebne są trzy zmienne typu int i jedna pętla do ... while

edit:

nie przeczytałem całego wątku i dlatego napisałem najpierw jak to zrobić ale widzę, że Ob.Serwator już wyjaśnij co trzeba zrobić żeby program wszystko ładnie liczył :wink: a wypisać to można za pomocą cout w bardzo prosty sposób np:

cout << a << " = " << b << " * " << d << " + " << c << endl;