• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego program nie liczy potęgi liczby 2 z liczb ujemnych

0 głosów
823 wizyt
pytanie zadane 30 grudnia 2017 w C i C++ przez Albert Holly Nowicjusz (140 p.)
edycja 30 grudnia 2017 przez Arkadiusz Waluk
#include <iostream>

using namespace std;

float potegowanie(float n)
{
     float potega=1;

     if(n<0)
     {
        n==n*(-1);

    for(int i=n+1; i>1; i--)
    {
      potega*=2;

    }
     return (1 / (potega-1));
     }
     else
     {
         for(int i=n+1; i>1; i--)
    {
      potega*=2;

    }
     }
    return potega;
}
int main()
{
    float n, m;

    cout <<"Podaj wykladni potegi "<<endl;
    cin>>n;
    cout<<"Wynik wynosi: "<<potegowanie(n)<<endl;
    m==1/32;
    cout<<m<<endl;

    return 0;
}
komentarz 30 grudnia 2017 przez Arkadiusz Waluk Ekspert (290,910 p.)

Pamiętaj proszę na przyszłość, że kod na forum wstawiamy w przeznaczony do tego bloczek.

2 odpowiedzi

0 głosów
odpowiedź 30 grudnia 2017 przez marcin99b Szeryf (85,270 p.)

Po podstawowym dodaniu normalnych wcięć i znalezieniu błędu w składni 

float potegowanie(float n)
{
  float potega = 1;

  if(n < 0)
  {
    n==n*(-1); //Co to ma robić? dlaczego dwa == a nie jedno?
    for(int i = n + 1; i > 1; i--)
    {
    	potega *= 2;
    }
    return (1 / (potega-1));
  }
  else
  {
    for(int i=n+1; i>1; i--)
    {
    	potega *= 2;
    }
  }
  return potega;
}

+na końcu kodu masz ten sam błąd, jeśli w c++ jest taki operator to ok, nie pisałem w c++ dużo, jednak w innych językach służy on jedynie do porównywania zmiennych

+nie myślałem dużo i nie kombinowałem czy to ma prawo działać, po prostu dodałem wcięcia bo było strasznie nieczytelne i usunąłem według mnie niezbyt ważną część bo wyświetlanie i biblioteki 

po drodze wpadł mi w oko taki szczegół 

komentarz 30 grudnia 2017 przez Albert Holly Nowicjusz (140 p.)
Tamto n==n*(-1) miało zamienić lizcbę na dodatnią żeby for wykonał się poprawnie
komentarz 30 grudnia 2017 przez marcin99b Szeryf (85,270 p.)
a czy w c++ jest taki operator jak == i co on robi, bo to mnie ciekawi

w innych językach służy on jedynie do sprawdzenia czy zmienne są równe, np w if albo tworząc typ bool
0 głosów
odpowiedź 30 grudnia 2017 przez niezalogowany
#include <iostream>

float potegowanie(int n)
{
	float potega = 1;

	if (n < 0)
	{
		for (int i = -n; i > 0; i--)
		{
			potega /= 2;
		}
	}
	else
	{
		for (int i = n; i > 0; i--)
		{
			potega *= 2;
		}
	}
	return potega;
}

int main()
{
	int n;
	std::cout << "Podaj wykladni potegi \n";
	std::cin >> n;
	std::cout << "Wynik wynosi: " << potegowanie(n) << "\n";
	std::cout << 1.f / 32.f << "\n"; // 1 to int, 1.f to float, dzielenie intow daloby 0
}

Nie ma sensu wysyłać funkcji float skoro i tak nie poda dobrego wyniki dla np wykładnika 3,4. Operator == służy do porównywania zmiennych, a nie przypisania wartości.

Podobne pytania

0 głosów
1 odpowiedź 2,695 wizyt
0 głosów
1 odpowiedź 2,309 wizyt
pytanie zadane 28 listopada 2016 w C i C++ przez unbearable Początkujący (450 p.)
0 głosów
1 odpowiedź 507 wizyt
pytanie zadane 29 października 2016 w C i C++ przez thekibi27 Bywalec (2,110 p.)

93,600 zapytań

142,524 odpowiedzi

322,993 komentarzy

63,085 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...