Εργαστήριο Τεχνολογίας Λογισμικού
+1 vote
321 views

Η υποβολή μου στο πρόβλημα της 3ης σειράς, στο testcase 5 στη γραμμή 70, βγάζει διαφορετικό αποτέλεσμα στο novice και στον grader. Ενώ στον πρώτο έχει πρόβλημα μόνο στα πρόσημα, στο δεύτερο εμφανίζει και διαφορετικά νούμερα.

[Ο αριθμός υποβολής στον grader είναι 519462.]

in progintro by (230 points)
edited by | 321 views

1 Answer

+1 vote

Απαντώ ως προς το πώς χειριζόμαστε γενικά κάτι τέτοιο γιατί θα είναι χρήσιμο σε πολλούς, παρότι βλέπω ότι ο ερωτών τελικά βρήκε τι έφταιγε και το διόρθωσε.


Ένα πρόγραμμα που βγάζει διαφορετικό αποτέλεσμα σε δύο διαφορετικούς υπολογιστές κατά 99% έχει κάποιο (σημασιολογικό) λάθος. Συνηθέστερα, το λάθος αυτό είναι είτε ότι βγήκαμε έξω από τα όρια κάποιου πίνακα, π.χ.

int a[10];
...
WRITELN(a[17]);

είτε ότι χρησιμοποιήσαμε μία μεταβλητή που δεν έχει λάβει τιμή, π.χ.

int a;
WRITELN(a);

Δεν έχω λόγο να πιστεύω ότι η υποβολή που συζητάμε έχει κάποιο τέτοιο πρόβλημα. Βλέποντας το αποτέλεσμα της υποβολής στον grader, παρατηρώ στο test case της εκφώνησης:

Grader output 1

Αυτό σημαίνει (το βελάκι στην τελευταία γραμμή) ότι η τελευταία γραμμή δεν τελειώνει με new line (\n). Ίσως την τυπώσαμε με WRITE, αντί για WRITELN.

Βλέποντας ένα άλλο test case διαπιστώνω ότι, ξεκινώντας από τη γραμμή 14, το πρόγραμμά μας "πήδηξε" μία απάντηση. Δηλαδή, δεν εκτυπώθηκε το 0 0 1 που είναι το αποτέλεσμα της 14ης πράξης. Το 3 3 5 που εκτυπώθηκε εκεί είναι το αποτέλεσμα της επόμενης πράξης που περιμένει ο grader, όπως βλέπουμε παρακάτω. Και φυσικά, όλες οι υπόλοιπες γραμμές θεωρούνται λάθος γιατί υπάρχει αναντιστοιχία με τις γραμμές του input.

Grader output 2

Βλέποντας λοιπόν αυτό, ο ερωτών θα έπρεπε να επιστρέψει για να δει γιατί στην περίπτωση της 14ης πράξης το πρόγραμμά του δεν εκτυπώνει αποτέλεσμα. Δυστυχώς εγώ εκεί συνάντησα ένα πρόγραμμα που δεν πρόκειται να καθήσω να διαβάσω, όσες μπύρες κι αν μου τάξετε. Κάτι σαν αυτό:

Part of submission source code

Ένα τέτοιο πρόγραμμα είναι πολύ δύσκολο να το κάνετε debug ακόμα και εσείς οι ίδιοι που το γράψατε. Πολύ περισσότερο, οι βοηθοί στο εργαστήριο. Αν κάποια στιγμή διαπιστώσετε ότι γράψατε κάτι σαν αυτό, η συμβουλή μου είναι να σταματήσετε, να ξανακοιτάξετε τον κώδικά σας, να ξανασκεφτείτε το πρόβλημα και να το ξαναγράψετε από την αρχή.

by (9.5k points)

301 questions

289 answers

288 comments

903 users