Potęgowanie liczby wprowadzonej z klawiatury

Potęgowanie liczby wprowadzonej z klawiatury
A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Za pomoc będę bardzo wdzięczny

Napisz funkcję, która dostaje jako argumenty nieujemne liczby całkowite n i m, z których co najmniej jedna jest różna od zera, i zwraca jako wartość n^m. Jeżeli drugi z argumentów nie zostanie podany, funkcja powinna zwrócić wartość n^2

Kopiuj
int power(int m, int n = 2) 
{
	if ((m > 0 && n > 0 ) && (m != 0 || n !=0))
	{
		return pow(n, m);
    }
}
int main(void)
{
	int n,m,wynik;
	cout<<"Napisać n:";
	cin>>n;
	cout<<"Napisać m:";
	cin>>m;
	wynik=power(n,m);
    cout<<"wynik:"<<wynik;
}
MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

1.W definicji parametrów funkcji oraz dla m i n użyj uint zamiast int, wówczas w power() wystarczy ci warunek na != 0
2.W mainie wywołując power() chyba pomyliłeś kolejność argumentów.
3.W przypadku kiedy oba parametry power są zerami funkcja mimo wsio powinna coś zwrócić, albo cisnąć wyjątkiem.
4.Popraw formatowanie nim twój post dorwie @furious programming :]

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

zrobiłem, ale to nie działa. czy możesz mi w tym pomóc? Jeżeli drugi z argumentów nie zostanie podany, funkcja powinna zwrócić wartość n^2

Kopiuj
unsigned int pot(int n, int m = 2) 
{
	int p=1;
	if(n==0)
	return 0;
	for(int i=1;i<=m;i++)
	p*=n;
	return p;
}
int main(void)
{
	int n,m,wynik;
	cout<<"Napisać n:";
	cin>>n;
	cout<<"Napisać m:";
	cin>>m;
	wynik=pot(n,m);
    cout<<"wynik:"<<wynik;
}
MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

Wstępna wersja była całkiem OK, wymagała tylko drobnych przeróbek

Kopiuj
int power(uint n, uint m = 2) 
{
    if (m != 0 || n !=0) // dzięki użyciu uint a nie int liczby te są traktowane zawsze jako dodatnie, więc warunek można uprościć
    {
        return pow(n, m);// to jest całkiem dobra funkcja biblioteczna robiąca potęgowanie. Użycie domyślnej wartości dla parametru m funkcji power powoduje, że w przypadku wywołania power(3) dostaniesz to, co chcesz.
    }
    //coś wypada zwrócić jak oba parametry są zerami, np -1 aby oznaczyć błąd
    return -1;
}

jeśli jednak nie możesz skorzystać z gotowego pow() to czeka się nauka działania pętli for(;;)

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Kumam to
co powinienem napisać na int main ()

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

Generalnie wywołać power(parametr1, parametr2). Ten szkielet main() co masz jest znośny, ale jako ćwiczenie się zmodyfikuj go tak, aby po podaniu podstawy wpierw się pytał, czy chcesz podać wykładnik, czy ma użyć domyślnie kwadratu. Jeśli użytkownik odpowie że chce, to wywołujesz power(m, n); i wypisujesz wynik, jeśli nie to dajesz power(m); a n samo się przerobi na 2

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

czy możesz mi wyjaśnić kod?

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Zrobiłem to wcześniej, ale to nie działa

MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
0

A co kokretnie wymaga wyjaśnień?

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0
Kopiuj
int main(void)
{
    int n,m,wynik;
    cout<<"Napisać n:";
    cin>>n;
    cout<<"Napisać m:";
    cin>>m;
if(m!=''CR"){
    wynik=power(n);
    cout<<"wynik:"<<wynik;
}else {
 wynik=power(n,m);
    cout<<"wynik:"<<wynik;
}

}
MasterBLB
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
  • Postów: 1454
1

No już prawie. Po lekkiej korekcie będzie:

Kopiuj
#include <iostream>
#include <cmath>
 
using namespace std;
 
int power(unsigned int n, unsigned int m = 2) 
{
    if (m != 0 || n !=0) // dzięki użyciu unsigned int a nie int liczby te są traktowane zawsze jako dodatnie, więc warunek można uprościć
    {
        return pow(n, m);// to jest całkiem dobra funkcja biblioteczna robiąca potęgowanie. Użycie domyślnej wartości dla parametru m funkcji power powoduje, że w przypadku wywołania power(3) dostaniesz to, co chcesz.
    }
    //coś wypada zwrócić jak oba parametry są zerami, np -1 aby oznaczyć błąd
    return -1;
}
 
int main()
{

    int n,m,wynik;
    
    cout<<"Podaj podstawę potęgi:";
    cin>>n;
    
    char addExp;
    cout<<"Czy chcesz podać wykładnik?(t/n):";
    cin >> addExp;
    if(addExp = 'n')
    {
        wynik=power(n);
    }
    else
    {
        cout << "Podaj wykładnik potęgi:";
        cin>>m;
        wynik=power(n,m);
    }
    
    cout<<"Wynik:"<< wynik;
    
    return 0;
}

https://onlinegdb.com/SJTjPVzam

CO
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 73
0

@MasterBLB:
A nie musisz dodać

Kopiuj
typedef unsigned int uint;

?

A0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10
0

Dziękuję bardzo

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.