13 / 37
Oct 2015

Przy pisaniu kodu, unikaj jak ognia metody copy/paste. Gdybyś musiał wszystko pisać z klawiatury, może natychmiast poprawiłbyś/napisał kod,w poniższy sposób:

l1 = Convert.ToInt32(liczby[1]);
l2 = Convert.ToInt32(liczby[2]);
if (znak==...)
  wynik = l1 /[+-*%] l2;
  ...
lub
swich (znak){
   case '+' : wynik = l1 + l2; 
              break;
  ....

itd

znak = liczby[0];
Nazwa tablicy jest źle dobrana, nie uważasz?
Czy nie lepiej np tak:
operator = dane[0];
lub
op = linia[0]; //bufor[0];

Nie, jest bardzo dobry, ale na przykład dodaj na początku [w] pętli:
if (liczby.Length < minimum) continue; //minimum = znak + spacja+ l1 + spacja + l2 ~= 5
ale wystarczy pewnie minimum = 1;

Dobra jest AC. Już rozumiem o co chodzi. Dzięki jeszcze raz za wyjaśnienie.

12 days later

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