1 / 11
Oct 2009

Owe zadanie polega na wczytaniu n wierszy, w każdym wierszu są trzy zmienne. Prosty IF poda "yes" lub "no" dla każdej linii inputu. Pod linkiem jest pełen opis. pl.spoj.pl/problems/DOUGHNUT/1

Oto program który wysłałem, a mimo to spoj zwraca błąd wykonania NZEC. Proszę o jakąkolwiek pomoc. Dodałem wybiórcze New_Line ponieważ mój wykładowca zasugerował że po ostatniej linii być może nie powinno być entera. Ale ostatni New Line i tak jest a zadanie i tak nie zaliczone. frowning

WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
PROCEDURE Program4138_Doughnut IS
   N,Many_Lines : Integer;
   C,K,W          : Integer;
BEGIN
   Get(Many_Lines);
   FOR N IN 1..Many_Lines LOOP
      Get(C); Get(K); Get(W);
      IF (K >= C*W) THEN
         Put("yes");
      ELSE
         Put("no");
      END IF;
      IF N < Many_Lines THEN
         New_Line;
      END IF;
   END LOOP;
END;
  • created

    Oct '09
  • last reply

    Jan '10
  • 10

    replies

  • 520

    views

  • 3

    users

  • 1

    link

Ciekawy update. Udało mi się zrobić to zadanie w C# ale w Ada nadal nie działa. Czy ktoś może dostrzec różnicę w kodzie?

-- kod usunięty --

NZEC oznacza, że twój program nie zwrócił kodu 0 po swoim zakończeniu. Języka ADA nie znam, ale w np. w C taki błąd jest równoznaczny opuszczeniu instrukcji return 0; na końcu programu. Oczywiście niektóre języki nawet po pominięciu tego typu instrukcji zwracają 0 np. C++. Jak jest w języku ADA niestety nie wiem.

Dzięki macbon. Wypróbowałem poniższy kod ale spoj nadal zwraca błąd wykonania NZEC. Używam Ada tylko tyle co chodzę na uniwerek, czyli od 3 tygodni. Z moich doświadczeń wynika że Ada sama zwraca kod 0, tak jak by to było w C++.

WITH Ada.Text_IO, Ada.Integer_Text_IO;
USE Ada.Text_IO, Ada.Integer_Text_IO;
FUNCTION Program4138_Doughnut RETURN Integer IS
   N,Many_Lines : Integer;
   C,K,W          : Integer;
BEGIN
   Get(Many_Lines);
   FOR N IN 1..Many_Lines LOOP
      Get(C); Get(K); Get(W); Skip_Line;
      IF (K >= C*W) THEN
         Put_Line("yes");
      ELSE
         Put_Line("no");
      END IF;
   END LOOP;
   return 0; 
END;
2 months later

Podnoszę temat, bo mam ten sam problem co autor poprzednio, ale tym razem Python 2.6.2. Próbowałem już wielu wersji, ale każda zwraca NZEC.

Jedna z nich:

def test(t):
    while t:
        try:
            f = raw_input().split()
            c, k, w = int(f[0]), int(f[1]), int(f[2])
            if c*w<=k:
            print "yes"
        else:
            print "no"
        t-=1

    except EOFError:
        break
return 0
t = input()
test(t)

Mój wykładowca znalazł rozwiązanie tego problemu. 8)

W kodzie Ada to ostatnie wywołanie Skip_line podnosi wyjątek ponieważ ostatni wiersz na wejściu nie ma LN (końca linii). Wystarczy Skip_line wstawić w instrukcję warunkową. W kodzie Python ostatnie wywołanie raw_input() podnosi wyjątek z tego samego powodu. Wystarczy ubrać ten kod w try/error: EOFError. Wyjątek zostanie stłamszony i program się wykona.

Pozdrowienia.

Tak na marginesie to raczej spróbowałbym użyć pętli for, ponieważ liczba testów jest podana na początku wejścia. unamused

Nadal bez powodzenia, tym razem forsowałem taką wersję:

t = input()
for x in range(0,t):
    try:
        z = raw_input().split()
        c, k, w = int(z[0]), int(z[1]), int(z[2])
        if c*w<=k:
            print "yes"
        else:
            print "no"
    except EOFError:
        break

No to jest zadziwiające. Sam znam Pythona tylko odrobinę więc mogę dodać co najwyżej coś takiego:

Być może należałoby konwertować wczytaną liczbę t (ilość testów) do Integera? W moich kodach używałem takiej instrukcji i działało. Wiem że są równoważne, to po prostu dziki strzał.

t = int(raw_input())

Metoda na rozwiązywanie zadań jest prosta... korzystaj z metod które wcześniej Ci działały. wink