Potęgowanie liczby wprowadzonej z klawiatury

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

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;
}
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 :]

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

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;
}
0

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

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(;;)

0

Kumam to
co powinienem napisać na int main ()

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

0

czy możesz mi wyjaśnić kod?

0

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

0

A co kokretnie wymaga wyjaśnień?

0
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;
}

}
1

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

#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

0

@MasterBLB:
A nie musisz dodać

typedef unsigned int uint;

?

0

Dziękuję bardzo

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