matematykaszkolna.pl
Programowanie C++ Olunia: Bardzo proszę o pomoc .Mam do napisania program rekurencyjnego podoszenia do potęgi , a dopiero zaczynam nauke programowania . Jak w oparciu o schemat zbudowac program ? if (n = 1) then return a if (n mod 2 = 0) then p =Potega(a, n/2) return p · p else p =Potega(a,(n − 1)/2) return p · p · a undefined
29 maj 19:43
52: A już coś zrobiłaś ? Masz już jakiś kod ?
29 maj 19:45
Olunia: #include <iostream> using namespace std; int main () { int n ; cin>> n; if { n=1 then cout << "Twoja liczba to :" <<endl; } undefined
29 maj 19:52
52: Ok, zacznijmy od początku piszemy w C++? Jeśli tak, to nie ma czegoś takiego jak 'then' i 'undefined'. W jakim środowisku piszesz ?
29 maj 19:55
Olunia: Piszę w C++ undefined
29 maj 19:59
Olunia: Zaczynam od : #include <iostream> #include <cstdlib> #include <ctime> int main() To 'undefined' dodaje się samo na końcu mojej wypowiedzi undefined
29 maj 20:07
52: #include <iostream> using namespace std; int a=2,n; int p(int n) { if(n==1) { return a; } else { return p(n−1)*a; } } int main () { cin >> n; cout <<p(n); return 0; }
29 maj 20:12
29 maj 20:12
Olunia: Tylko miałam korzystac z podwujnej funkcji if i modulo
29 maj 20:27
jc: To jest dosłowne przepisanie Twojej funkcji int Potega(int a, int n)} if (n == 1) return a; if (n % 2 == 0){ p == Potega(a, n/2); return p * p; } else { p = Potega(a,(n − 1)/2); return p * p * a; } } Ja bym napisał tak: int pot(pot a, int n){ int w; if( !n ) return 1; w=pot(a,n/2); if ( n&1 ) return w*w*a; else return w*w; }
29 maj 20:46
jc: Włącz podkreślanie błędów emotka
29 maj 20:48
Olunia: Co mam poprawic , żeby zadziałał program ? proszę o pomoc ... #include <iostream> #include <cstdlib> #include <ctime> int main() { int Potega(int a, int n)} if (n == 1) return a; if (n % 2 == 0){ p == Potega(a, n/2); return p * p; } else { p = Potega(a,(n − 1)/2); return p * p * a; } return 0; }
29 maj 20:54
jc: Dużo by pisać... Czy w ogóle napisałaś jakiś działający program? Zacznij od czegoś prostszego.
29 maj 20:59
Olunia: Tak ale ten musze miec na jutro ...
29 maj 21:05
Olunia: mógłby mi go ktoś napisac ? byłabym bardzo wdzięczna
29 maj 21:09
jc: Tyko to nie ma sensu. Nawet nie poprawiłaś odwróconego nawiasu w pierwszej linii, #include <iostream> using namespace std; int pot(int a, int n){ int w; if( !n ) return 1; w=pot(a,n/2); if ( n&1 ) return w*w*a; else return w*w; } int main () { cout <<pot(3,7) << endl; return 0; }
29 maj 21:14
Dziadek Mróz: Po kolei. Czym jest potęga? a0 = 1 a1 = a an = a*an−1 = a*a*an−2 = a*a*...*a0 Jak działa rekurencja? Do każdej iteracji zwracany jest wynik z poprzedniego wywołania funkcji, a wynik końcowy jest obliczany na końcu każdej z iteracji: krok wynik 1) 24 = 2) 2*23 = 3) 2*2*22 = 4) 2*2*2*21 = 5) 2*2*2*2*20 = 5) 2*2*2*2*1 4) 2*2*2*2 3) 2*2*4 2) 2*8 1) 16 Zauważ że przy 5−tym kroku wykonaliśmy nawrót, bo wynik się zwraca aż do kroku 1−szego. Twój 1−szy algorytm jest poprawny, bo to jest pseudokod: Potega(a, n): if (n = 1) then return a # bo a1 = a if (n mod 2 = 0) then # gdy n parzysta p = Potega(a, n/2) return p · p else # gdy n nieparzysta p = Potega(a, (n − 1)/2) return p · p · a Wykonajmy eksperyment myślowy dla Twojego algorytmu: dla a = 2 i n = 4 1) Potega(2, 4): 4 = 1 N 4%2 = 0 T 2) p = Potega(2, 4/2) = Potega(2, 2): 2 = 1 N 2%2 = 0 T 3) p = Potega(2, 2/2) = Potega(2, 1): 1 = 1 T 3) return a = 2 2) return p * p = 2 * 2 = 4 1) return p * p = 4 * 4 = 16 dla a = 2 i n = 5 1) Potega(2, 5): 5 = 1 N 5%2 = 0 N 2) p = Potega(2, (5−1)/2) = Potega(2, 2): 2 = 1 N 2%2 = 0 T 3) p = Potega(2, 2/2) = Potega(2, 1): 1 = 1 T 3) return a = 2 2) return p * p = 2 * 2 = 4 1) return p * p * a = 4 * 4 * 2 = 16 * 2 = 32 Teraz zapiszmy algorytm w Twoim języku programowania, czyli c++: −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− #include <iostream> int Potega(int a, int n) { std::cout << "Potega(" << a << ", " << n << ")\n"; if (n == 1) { return a; } if (n%2 == 0) { int p = Potega(a, n/2); return p*p; } else { int p = Potega(a, (n−1)/2); return p*p*a; } } int main(int argc, char **argv) { std::cout << "Potega(2, 4) = " << Potega(2, 4) << "\n"; std::cout << "Potega(2, 5) = " << Potega(2, 5) << "\n"; return 0; } −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− https://pastebin.com/eKYTurja
30 maj 16:44