Dlaczego błąd i jak go naprawić?

0

Cześć!
Tak to znowu ja😅.
Dzisiaj mam problem z jednym, ale bardzo interesującym mnie błędem. Napisałam następujący kod:

#include <iostream>

using namespace std;

int main ()
{
    int x;
    cin>>x;
    {
    if(x>12)
    cout<<47x^3-4x(x-1)-5;
    }
    {
    if(12>=x>7)
    cout<<"wartosc x wynosi "<<x;
    }
    {
    if(x<=7)
    {
    int a=x+7, b=x*x-5;
    
            if(a<b)
            cout<<a;
            
            else if(a>b)
            cout<<b;
            
            else
            cout<<" ";
            
            
        }
    } return 0;
}

Niby wszystko dobrze, ale jednak po puszczeniu programu wyskakuje mi taki bład:

main.cpp: In function ‘int main()’:
main.cpp:11:29: error: ‘x’ cannot be used as a function
11 | cout<<47x^3-4x(x-1)-5;
   | ^

Nie wiem dlaczego taki błąd się pojawił ani jak go usunąć... Mam nadzieję że mi pomożecie :)
Z góry dziękuję.

6

chyba zgubiłeś *. Masz x(x-1). To jest wywołanie funkcji x z parametrem x-1, co zasadniczo nie ma sensu.

6

^ nie jest operatorem potęgowania. To się zaraz przyda.

0
elwis napisał(a):

chyba zgubiłeś *. Masz x(x-1). To jest wywołanie funkcji x z parametrem x-1, co zasadniczo nie ma sensu.

Niestety nie w tym rzecz. Sprawdzałam kilka razy to działanie (jest to działanie z pewnego zadania) i wszystko jest dobrze przepisane

kq napisał(a):

^ nie jest operatorem potęgowania. To się zaraz przyda.

Nie jest??Mój nauczyciel mówił że jest :/ . Chyba coś ci się pomyliło, albo po prostu źle zrozumiałam 😅

1

W C++ nie jest.

Popraw ten pierwszy post.

0

@daniel1302 Nie mogę się nie zgodzić że z tym działaniem jest coś nie tak. Nie jestem specjalistą, ale błędu nie dostrzegam... Może to tylko kwestia mojego poglądu? Z resztą, sam możesz
Screenshot 2022-12-27 at 17.48.40.png

10

Zapis matematyczny nie może być bezrefleksyjnie przełożony do języka programowania, bo składnia jest trochę inna.

0
kq napisał(a):

Zapis matematyczny nie może być bezmyślnie przełożony do języka programowania, bo składnia jest trochę inna.

Okej, no to w jaki sposób mam go poprawić?

PS
Nie robiłam tego bezmyślnie tylko na poziomie swoich możliwości.

0

@kq Ok, rozumiem :)
To jak mogę to inaczej zapisać?

6

Po kolei:

  • to co napisał @elwis: w zapisie matematycznym a(b+c) i a·(b+c) to to samo. W C++ (i większości innych języków programowania) - nie. Musi być a*(b+c), gwiazdka oznaczająca mnożenie obowiązkowa.
  • podobnie z ^. Przyjęło się, że w zapisie pozbawionym formuł matematycznych ^ oznacza potęgowanie, ale we wszystkich językach, o których jestem w stanie teraz pomyśleć oznacza operację bitową xor. Jeśli chcesz potęgowania to ab zapisz jako pow(a, b), a nie a^b. W niektórych językach, jak np. Python czy Ruby możesz napisać a**b, gdzie ** jest operatorem potęgowania, ale nie w C++.

Ogółem widać, że brakuje Ci podstaw - weź do ręki jakiś dobry kurs albo książkę i zacznij z nią, bo inaczej będzie Ci ciężko.

AHA: I serio, nie wrzucaj kodu jako obrazków!

0
kq napisał(a):

Po kolei:

  • to co napisał @elwis: w zapisie matematycznym a(b+c) i a·(b+c) to to samo. W C++ (i większości innych języków programowania) - nie. Musi być a*(b+c), gwiazdka oznaczająca mnożenie obowiązkowa.
  • podobnie z ^. Przyjęło się, że w zapisie pozbawionym formuł matematycznych ^ oznacza potęgowanie, ale we wszystkich językach, o których jestem w stanie teraz pomyśleć oznacza operację bitową xor. Jeśli chcesz potęgowania to ab zapisz jako pow(a, b), a nie a^b. W niektórych językach, jak np. Python czy Ruby możesz napisać a**b, gdzie ** jest operatorem potęgowania, ale nie w C++.

Ogółem widać, że brakuje Ci podstaw - weź do ręki jakiś dobry kurs albo książkę i zacznij z nią, bo inaczej będzie Ci ciężko.

Okej dziękuję, zaraz spróbuję to naprawić:)
Uczę się języka c++ na zajęciach przygotowawczych do MWOI, i tak, co do książki, chciałam sobie jakąś załatwić ale jeszcze nie wybrałam tej jedynej...

I postaram się nie wrzucać kodu jako obrazku

0

klamry powinny byc tak

if (x>5) { cout << "brawo"; }

if (1<x<8) powinno byc tak if (x>1 && x<8) { cout << "brawo"; }
0

poprawiłam, tyle że tym razem jeszcze inne te błędy....🫣

#include <iostream>

using namespace std;

int main ()
{
    int x;
    cin>>x;
    {
        if(x>12)
        cout<<47*pow(x, 3)-4*x*(x-1)-5;
    }
    {
        if(12>=x>7)
        cout<<"wartosc x wynosi "<<x;
    }
    {
        if(x<=7)
        {
            int a=x+7, b=x*x-5;
            
            if(a<b)
            cout<<a;
            
            else if(a>b)
            cout<<b;
            
            else
            cout<<" ";
        }
    } return 0;
}

pow mi się podświetla na czerwono. poza tym jeszcze kilka innych błędów mi wyświetlił :/

main.cpp: In function ‘int main()’:
main.cpp:11:18: error: ‘pow’ was not declared in this scope
   11 |         cout<<47*pow(x, 3)-4*x*(x-1)-5;
      |                          ^~~
2
kq napisał(a):

Po kolei:

  • to co napisał @elwis: w zapisie matematycznym a(b+c) i a·(b+c) to to samo. W C++ (i większości innych języków programowania) - nie. Musi być a*(b+c), gwiazdka oznaczająca mnożenie obowiązkowa.
  • podobnie z ^. Przyjęło się, że w zapisie pozbawionym formuł matematycznych ^ oznacza potęgowanie, ale we wszystkich językach, o których jestem w stanie teraz pomyśleć oznacza operację bitową xor. Jeśli chcesz potęgowania to ab zapisz jako pow(a, b), a nie a^b. W niektórych językach, jak np. Python czy Ruby możesz napisać a**b, gdzie ** jest operatorem potęgowania, ale nie w C++.

Czasem ^ oznacza potęgowanie: Haskell (ma zarówno ^ jak i ** czy ^^: https://wiki.haskell.org/Power_function ). W Julii też jest ^ do potęgowania. W Wolfram też https://www.wolfram.com/language/#playground

czyli widać, że jak język naukowy, to ma takie tendencje, żeby daszek oznaczał potęgowanie.

A taki Pascal co zrobił? Używa daszka do wskaźników, że to taka strzałka ma być. https://stackoverflow.com/questions/1814922/what-does-caret-dot-mean

4
LubieMatme321100 napisał(a):

pow mi się podświetla na czerwono. poza tym jeszcze kilka innych błędów mi wyświetlił :/

main.cpp: In function ‘int main()’:
main.cpp:11:18: error: ‘pow’ was not declared in this scope
   11 |         cout<<47*pow(x, 3)-4*x*(x-1)-5;
      |                          ^~~

#include <cmath>

if(12>=x>7) - znowu, w C++ musisz to rozbić na dwa osobne porównania: if(12 >= x && x > 7), chociaż bardziej "po ceplusplusowemu" by było if (x < 12 && x > 7)

PS: kod wrzucaj między ```cpp i ```, na przykład:

```cpp
int main()
{
    return 0;
}
```

Zostanie zamienione na

int main()
{
    return 0;
}
0

powinno byc

if (a>b) { cout << "brawo"; } else { cout << "bad"; }
0

Tu masz odpowiedź: http://forum.4programmers.net/998482

0

Wasze podpowiedzi są pomocne i bardzo dziękuję wam za nie :)
Ale niestety nie wszystkie z nich rozwiązują mój problem. W tym momencie mówię o

{
        if(x>12)
        cout<<47*pow(x, 3)-4*x*(x-1)-5;
}

(11 linijka kodu)
błąd w działaniu arytmetycznym, przez który nie mogę puścić programu i sprawdzić czy w ogóle dobrze zadziała :/

PS
dziękuję @kq za radę w zapisywaniu kodów na tej stronie :)

0
#include <iostream>
using namespace std;

int main ()
{
    int x;
    cin>>x;
    if(x>12) cout<<x*(47*x*x-4*x+4)-5;
    else if(x>7) cout<<"wartosc x wynosi "<<x;
    else
    {
        int a=x+7,b=x*x-5;
        if(a<b) cout<<a;
        else if(a>b) cout<<b;
        else cout<<" ";
    }
    return 0;
}

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