17 / 37
Nov 2016

W tym zadaniu nie ma podanej liczby zestawów, jak wczytywać w takim przypadku poczytaj tutaj108 A kod umieszczaj w znacznikach dostępnych pod ctrl +k, będzie sformatowany

2 months later

Witam, już nie wiem gdzie może leżeć błąd, na pierwszy rzut oka wszystko wygląda ok...
rozwiązanie w C:
//tu był kod

Oprócz rzucania okiem warto też testować, np chociażby na ideone wkleić test: https://ideone.com/LyDEsM56 i już na drugi rzut oka widać, że wygląda ok, ale tak nie jest [na wyjściu brak -4].

Powodem jest brak jednego małego [dwóch] znaczków: \n
Warunek mógłby wyglądać np tak:
while (scanf ("%c %d %d\n", &wybor, &a, &b) != EOF)

10 months later

Może ktoś powiedzieć gdzie mam błąd:

include

include

using namespace std;

int main()
{
char znak;
int a=0, b=0, i=1;
while(i)
{
cin >> znak;
cin >> a;
cin >> b;
switch(znak)
{
case '+':
cout << a+b;
break;

    case '-':
         cout << a-b;
    break;

    case '*':
        cout << a*+b;
    break;

    case '/':
        cout << a/b;
    break;
    case '%':
        cout << a%b;
    break;
    default: exit(0);
}
cout << endl;
}

return 0;

}

15 days later

Witam wszystkich, to mój pierwszy post na forum, poprawcie mnie jak piszę w złym miejscu
Otóż mimo, że mój kod zdaje się działać poprawnie, SPOJ wyrzuca mi błąd o przekroczeniu limitu czasu. Jestem bardzo początkujący i nie mam pomysłu na optymalizację. Czy ktoś byłby w stanie mi pokazać, co mógłbym zrobić lepiej?Kod pod spodem, ponieważ nie wiem gdzie powinno się go wkleić :slight_smile:

include

using namespace std;
int a,b;
char znak;
int main()
{
while(true)
{
cin>>znak>>a>>b;
switch(znak)
{
case '/':
cout<<a/b<<endl;
break;
case '*':
cout<<a*b<<endl;
break;
case '+':
cout<<a+b<<endl;
break;
case '-':
cout<<a-b<<endl;
break;
case '%':
cout<<a%b<<endl;
break;

    }
}
return 0;

}

Okej, problem rozwiązany :slight_smile: wystarczyło zmienić warunek pętli, dziękuję

8 months later

Polecam na początek umieścić kod na ideone nie zapominając o danych na wejściu. Obecna forma prezentacji kodu, delikatnie rzecz ujmując, jest odpychająca dla potencjalnych osób chcących udzielić pomocy.

P.S. umieszczenie tam kodu wraz z danymi na wejściu powinno od razu pokazać w czym jest problem.

nie chodziło o pokazanie twojego ekranu, ale o wstawienie danych na ideone i uruchomienie - zobaczysz wtedy inny wynik

i mógłbyś w końcu dokładnie przeczytać treść zadania, albo całą dyskusję w tym wątku - to dowiesz się, gdzie robisz błąd

2 months later

Siema.
Otóż wcześniej klepałem sobie kod w C++, ale poszedłem na studia i chcą abym umiał zwykłe C.

W związku z tym chcąc napisać kalkulator wyklepałem taki kod:

Z wierzchu wydaje się ok, ale jeszcze słabo znam C, więc nie mogę się doszukać błędu. Ktoś nakieruje?

instrukcje:

cin >> znak;

scanf("%c", &znak);

nie są tożsame, ich działanie w istotny sposób się różni - ponieważ ja nie zajmuję się nauczaniem C/C++, więc tę różnicę sprawdź w dokumentacji

Właśnie z tego co sprawdzałem cin i scanf działa tak samo.
Ogólnie program wykonuje prawidłowe obliczenia, ale problem polega na tym, że za każdym razem (nie liczać pierwszego testu) gdy wypisuje wynik, wypisuje też wynik poprzedniego działania jak zresztą widac na ideone.

EDIT: Już wiem, scanf odczytuje potwierdzenie (klikniecie ENTER) jako znak \n przez co switch wyłapuje \n jako polecenie dla niego. Kod poprawilem i działa prawidlowo, ale przekracza limit czasu. Tylko jak go zoptymalizować na prostszy to już nie mam pojęcia. Chyba, że na if’ach będzie szybciej :slight_smile:

1 year later

Dzień dobry,
czy mogłabym prosić Was o pomoc w tym zadaniu. Zrobiłam już program używając switch i sędzia mi go zaakceptował, ale zastanawiam się nad użyciem własnych funkcji w programie. Oto mój kod, po wpisaniu przykładowych danych program działa poprawnie jednak sędzia mi go odrzuca, Nie daje mi spokoju to, co poszło nie tak.

[cpp]

#include

using namespace std;

int dodawanie()
{
int x, y;
cin >> x;
cin >> y;
return x + y;
}

int odejmowanie()
{
int x, y;
cin >> x;
cin >> y;
return x - y;
}

int mnozenie()
{
int x, y;
cin >> x;
cin >> y;
return x * y;
}

int dzielenie()
{
int x, y;
cin >> x;
cin >> y;
return x / y;
}

int resztaZDzielenia()
{
int x, y;
cin >> x;
cin >> y;
return x % y;
}

int main()
{
int a, b;
char znak;
int wynik;

while (cin >> znak)
{
    switch(znak)
    {
    case '+':
        wynik = dodawanie();
        cout << wynik<<endl;
        break;
    case '-':
        wynik = odejmowanie();
        cout << wynik<<endl;
        break;
    case '*':
        wynik = mnozenie();
        cout << wynik<<endl;
        break;
    case '/':
        {
        if (b!=0)
        wynik = dzielenie();
        cout << wynik<<endl;
        break;
        }

    case '%':
        wynik = resztaZDzielenia();
        cout << wynik <<endl;
        break;
    default:
        wynik = 0;
        cout << wynik<<endl;
        break;
    }
}

return 0;

}

[/cpp]

Będę wdzięczna za wszelkie wskazówki.
Pozdrawiam
Agnieszka Gołąb