Mam do zrobienia program w języku c++, w którym definiujemy funkcję square(), która podnosi liczby do kwadratu. Utrudnienie jest takie, że w definiowanej funkcji nie mogę użyc operatora mnożenia.
Treść zadania jest taka:
zaimplementuj funkcję square(), nie uzywając operatora mnozenia. to znaczy operację x*x wykonaj za pomocą wielokrotnego dodawania (zacznij od zmiennej wartosci 0 i dodaj do niej
x x razy).
Zadanie to jest w ksiązce "Programowanie. Teoria i praktyka z wykorzystaniem C++." Bjarne Stroustrupa.
wszystko inne potrafię zrobić, jedynie nie wiem jak mogę zrobić funkcję podnoszącą liczbę do kwadratu nie używając mnożenia
0
5
Przecież masz napisane.
a * b
to a + a + a + ... + a
, b
razy.
0
@kq: tak, ale jak sam napisałes: "b razy". a ja nie mogę w ogole uzywac mnozenia, czyli razy nie wchodzi w grę.
(chyba ze cos zle zrozumialam z twojej odpowiedzi, co bardzo mozliwe, jestem mocno początkująca)
2
Żeby wykonać jakąś akcję x razy użyj pętli.
w pseudokodzie:
mult(a, b)
result ⟵ 0
for /b times/
result ⟵ result + a
0
Testowane. Dziala
int mySquare (int podstawa,int wykladnik)
{
int wynik = podstawa, licznik1 = 0;
do
{
int licznik2 = 1;
if (licznik1 > 1)
{
int temp = wynik;
do
{
wynik+=temp;
licznik2++;
//cout << "Potega " << licznik1 << " " << wynik << endl;
}while(licznik2 < podstawa);
}
licznik1++;
}while(licznik1 <= wykladnik);
return wynik;
}
3
A jak nie chcesz, żeby było aż tak wolno, to można mnożenie zrealizować tak:
int mult(int a, int b) {
int result = 0;
while (b > 0) {
if (b & 1) {
result += a;
}
a += a;
b >>= 1;
}
return result;
}