Program wskazuję błąd?


(Moore96) #1
#include 

#include 

#include 


using namespace std;




int main ()

{

   for (int i=1;i<=10;i++)

   {

   int a;

   a=1;

   double fx;

   fx=pow (2, a);

   cout<
   a++ 

}    


  getch();

  return 0;   

}

Kompiluje w Dev C++ 5.Przeskanowałem cały kod i nie wiem dlaczego pokazuję się taki błąd przy fx=pow (2, a); :

call overloaded 'pow(int, int&)' is ambiguos

O co chodzi?


(Sawyer47) #2

Pomijając jakość kodu, tragiczne formatowanie, ilość zbędnych zmiennych i operacji właściwie nie ma się do czego przyczepić.

Wystarczyło było wpisać otrzymany błąd w wyszukiwarce, pierwszy link: http://bytes.com/topic/c/answers/727736 ... s-call-pow


(Somekindsoftware) #3

A mawiają, że to ja jestem sarkastyczny :slight_smile:

Myślę, że jest się do czego jeszcze przyczepić - na mój gust brakuje jeszcze średnika i operatora <<, oraz dwóch zwykłych nawiasów.

A jeśli program ma wyświetlić dziesięć kolejnych potęg dwójki (bo zgaduję, że o to chodziło autorowi), to ten kod i tak tego przecież nie zrobi.

I nie czepiaj się tragicznego formatowania - przecież w tak krótkim kodzie i tak wszystko widać :smiley:


(Moore96) #4

Nareście ktoś myśli tak jak ja :slight_smile:

Acha i jak jeszcze byście mogli mi powiedzieć jak zrobić by ten program działał tak jak trzeba czyli wypisywał potęgi 2?Było by bardzo fajnie :slight_smile:


(Somekindsoftware) #5

Przyjrzyjmy się Twojej pętli:

for (int i=1;i<=10;i++) //dla i od 1 do 10 za każdym krokiem zwiększaj i - to akurat jest dobrze

   {

   int a; //zadeklaruj zmienną całkowitą a - nową w każdym kroku pętli

   a=1; //przypisz jej wartość 1 - czyli a w każdym kroku pętli będzie wynosiło 1 - o to chodzi? Poza tym deklaracje i przypisanie można zrobić w jednej linii.

   double fx; //zadeklaruj zmienną zmiennoprzecinkową fx - nową w każdym kroku pętli

   fx=pow (2, a); //przypisanie do fx wyniku działania, które nie działa, a nawet gdyby działało, to zawsze dawałoby w wyniku 2 (bo 2^1 = 2, a a w każdym kroku wynosi 1)

   cout<
   a++ //inkrementacja zmiennej a (i przy okazji brak średnika). Szkoda tyko, że ta zmienna zaraz zginie, a w następnym kroku pętli zostanie stworzona na nowo

}

A jak to powinno wyglądać?

for (int i = 0; i < 10; i++)

    cout << pow(2.0, i) << endl;

(Moore96) #6

Dzięki za pomoc.

A mógłbyś jeszcze wskazać co tu jest źle?

#include 

#include 

#include 


using namespace std;




int main ()

{

   for (int i=1;i<=100;i++)

   {

   cout<
}    


  getch();

  return 0;   

}

Chodzi o to,że jak włączam to po 19 pisze takie jakiś dziwne znaczki :smiley:


(B Brachaczek) #7

Nic nie jest źle. Dla sporych liczb wyniki wypisuje w notacji wykładniczej (mam nadzieję, że wiesz, co to jest). Oczywiście możesz to zmienić.

Na przykład:

cout.precision(0); //zero miejsc po przecinku, bo i po co one

  for (int i = 1; i <= 100; ++i)

    cout << fixed << pow(2.0,i) << endl; //fixed - notacja zwykła

Pierwszy wynik z Google po wpisaniu: "cout formatowanie".


(Somekindsoftware) #8

Gwoli ścisłości - to się raczej"notacja naukowa" nazywa. Postać wykładnicza jest używana na fizyce w liceum :slight_smile:


(B Brachaczek) #9

Właściwie to prawie to samo, ale masz rację, rzeczywiście to się nazywa dokładnie notacja naukowa. Na swoją obronę mam tylko fakt, że autor artykułu na Wikipedii twierdzi, że inna nazwa to postać wykładnicza. :wink: Dzięki za zwrócenie uwagi.