Περί αρχείων και υποβολής λύσης

Γενικά θέματα για το διαγωνισμό. Ερωτήσεις, προτάσεις και ό,τι άλλο ταιριάζει.
Απάντηση
George
Δημοσιεύσεις: 7
Εγγραφή: Παρ Οκτ 12, 2018 6:20 pm

Περί αρχείων και υποβολής λύσης

Δημοσίευση από George »

Αυτό το thread είναι follow-up στο άλλο που είχα κάνει ("Αξίζει η C?"). Έχω συνεχίσει το διάβασμα στη c++ και έχω επιτέλους βρεθεί πρόσωπο με πρόσωπο με file I/O, τα οποία είναι, απ' όσο έχω δει, απαράιτητα για τη λύση οποιουδήποτε θέματος διαγωνισμού. Το κύριό μου πρόβλημα είναι το εξής : Στις ασκήσεις που έχω δει (στο hellenico.gr) πρέπει να διαβάσω κάποιες έτοιμες τιμές από ένα αρχείο εισόδου. Το θέμα μου είναι, πώς γράφω τις τιμές στο αρχείο ώστε να είναι extractable? Πριν από λίγο δοκίμασα ένα τέτοιο project και, αφού στο κύριο .cpp file έγραψα τον ακόλουθο τυπικό file stream reading κώδικα:

std::ifstream input_file("TextFile4.txt");
input_file.open("TextFile4.txt");
std::string sentence;

while(std::getline(input_file, sentence))
std::cout << sentence << '\n';
input_file.close();

, δοκίμασα να γράψω το εν λόγω string στο .txt file και συνειδητοποίησα ότι δεν έχω ιδέα πώς. Δοκίμασα απλά να γράψω κατευθέιαν το string ("Hello, my name is George") και όταν έτρεξα το πρόγραμμα, πράγματι δεν είχε καθόλου output.
Το παραπάνω όμως δεν είναι το μόνο μου πρόβλημα. Μερικές περαιτέρω απορίες μου είναι οι εξής:
1. Στις εκφωνήσεις, οι τιμές των αρχείων εισόδου παρουσιάζονται με μορφή μεταβλητών που θυμίζει άλγεβρα (π.χ. "Το πρόγραμμα θα δέχεται τιμές χ, ψ, με χ<=1000 και ψ<=100"). Ωστόσο, στα παραδείγματα εισόδου και εξόδου δίνονται συγκεκριμένοι αριθμοί, όποτε σίγουρα οι μεταβλητές στην εκφώνηση δεν εξυπηρετούν κανένα σκοπό πέρα από το να δώσουν μία ιδέα για την μορφή των αριθμών που θα δέχεται το πρόγραμμά μου, σωστά; Αν ναι, τότε πράγματι τις συγκεκριμένες τιμές που δέχεται το πρόγραμμά μου τις αποφασίζω απλά εγώ, φροντίζοντας μόνο να πληρούν τους περιορισμούς που δίνονται στην εκφώνηση; Ή μήπως κατά τη διάρκεια του διαγωνισμού μου στέλνεται έτοιμο (με κάποιον τρόπο) ένα αρχείο εισοδου, το οποίο θα χρησιμοποιήσω στη λύση;
2. Οπότε, απ όσο έχω καταλάβει, η τελική λύση μου σε οποιοδήμποτε πρόβλημα θα είναι τουλάχιστον 3 αρχεία ( εισόδου, 1 εξόδου, 1 αυτό που περιέχει τον κώδικά μου). Όταν θέλω να υποβάλλω μία λύση στο hellenico.gr, θα πρέπει να υποβάλλω 1 project στο οποίο βρίσκονται τα 3 αρεία, 1 solution στο οποίο βρίσκονται τα 3 αρχεία μέσα σε ένα project, 1 solution στο οποίο βρίσκονται τα 3 αρχεία μέσα σε παραπάνω από ένα project, τα 3 αρχεία ξεχωριστά, ή τι τέλος πάντων; Γενικά δεν έχω καταλάβει πώς λειτουργεί η υποβολή λύσης, και ούτε πώς θα γίνει στον ίδιο τον διαγωνισμό.

Ευχαριστώ εκ των προτέρων όποιον πάρει τον χρόνο να λύσει τις απορίες μου.
George
Δημοσιεύσεις: 7
Εγγραφή: Παρ Οκτ 12, 2018 6:20 pm

Re: Περί αρχείων και υποβολής λύσης

Δημοσίευση από George »

Α, και κάτι που ξέχασα. Δεν ξέρω πότε λήγει η προθεσμία εγγραφής στον διαγωνισμό και, ύστερα, πότε λήγει η προθεσμία υποβολής της λύσης μου. Θα το εκτιμούσα αν μου έδινε κάποιος απάντηση και σε αυτό. Ευχαριστώ!
Άβαταρ μέλους
Κηπουρίδης
Δημοσιεύσεις: 397
Εγγραφή: Παρ Φεβ 05, 2010 5:05 pm

Re: Περί αρχείων και υποβολής λύσης

Δημοσίευση από Κηπουρίδης »

Καλησπέρα Γιώργο,

1) Τι υποβάλλεις:
Εσύ το μόνο που θα στείλεις θα είναι ο κώδικάς σου (αφού γράφεις C++ θα στείλεις ένα .cpp αρχείο). Τίποτα άλλο. Στην ουσία το αρχείο .in το έχει το hellenico. Αυτό μόνο του θα μεταγλωττίσει τον κώδικά σου, και θα τρέξει το πρόγραμμα. Το πρόγραμμά σου (διαβάζοντας το αρχείο .in που βρίσκεται εκεί, παρότι εσύ δε το είχες τοπικά στον υπολογιστή σου) θα τρέξει και θα παράξει κάποιο αρχείο .out. Αν ήταν το επιθυμητό, κερδίζεις τους πόντους σου, αλλιώς όχι.
Μάλιστα την παραπάνω διαδικασία θα την τρέξει πολλές φορές το hellenico, με δέκα διαφορετικά αρχεία συνήθως. Μην ανησυχείς για την ονομασία των αρχείων, έχουν όλα το ίδιο όνομα, αυτό το .in που αναφέρει η εκφώνηση.
Εν κατακλείδι: Εσύ στέλνεις τον κώδικα, και το hellenico αναλαμβάνει να τον κρίνει. Εσύ στο πισί σου δε θα δεις ποτέ τα αρχεία με βάση τα οποία θα γίνει η αξιολόγηση.

2) Πώς γράφεις σε αρχείο:
Συνδέσου στο hellenico και κατόπιν μπες σε αυτή τη σελίδα: http://hellenico.gr/index.php?page=theory&id=13

3) Περί μεταβλητών:
Σκέψου το εξής: "Στην πρώτη γραμμή βρίσκεται ένας ακέραιος Ν. Στην επόμενη γραμμή ακολουθούν Ν ακέραιοι."
Ένα πιθανό αρχείο είναι αυτό:
3
10 40 2
κι ένα εξίσου πιθανό είναι το
2
1 3

Δηλαδή συνήθως η πρώτη γραμμή δίνει στο πρόγραμμά σου να καταλάβει τι ακολουθεί.
Ένας τυπικός τρόπος να τα διαβάσεις αυτά είναι ο εξής:

Διάβασε(Ν);
for(int i=1; i<=N; ++i) {
Διάβασε(αριθμό);
Κάνε_και_κάτι();
}

Οπότε η απάντηση μοιάζει λίγο με αυτό που διατύπωσες, αν θα παίρνεις τα αρχεία εισόδου/εξόδου στο διαγωνισμό. Όχι, δε θα τα παίρνεις, αλλά με βάση αυτά θα γίνει η αξιολόγηση. Τα έχει ήδη το hellenico, δε χρειάζεται να τα μάθεις εσύ.

4) Ημερομηνίες:
Δες πάνω αριστερά στο pdp.gr εκεί που λέει Ενδεικτικός Προγραμματισμός. Δίνει ό,τι χρειάζεσαι.

Είσαι πολύ ενεργός, συνέχισε έτσι!
Λύσεις θεμάτων ΠΔΠ: https://pdp-archive.github.io/
Μπούσουλας διαβάσματος ΠΔΠ: http://snf-800715.vm.okeanos.grnet.gr/PDP/
Tutorials: https://kallinikos.github.io/
Επίσημο forum ΠΔΠ: https://www.pdpforum.eu.org/forum/
George
Δημοσιεύσεις: 7
Εγγραφή: Παρ Οκτ 12, 2018 6:20 pm

Re: Περί αρχείων και υποβολής λύσης

Δημοσίευση από George »

Κηπουρίδης έγραψε:Καλησπέρα Γιώργο,

1) Τι υποβάλλεις:
Εσύ το μόνο που θα στείλεις θα είναι ο κώδικάς σου (αφού γράφεις C++ θα στείλεις ένα .cpp αρχείο). Τίποτα άλλο. Στην ουσία το αρχείο .in το έχει το hellenico. Αυτό μόνο του θα μεταγλωττίσει τον κώδικά σου, και θα τρέξει το πρόγραμμα. Το πρόγραμμά σου (διαβάζοντας το αρχείο .in που βρίσκεται εκεί, παρότι εσύ δε το είχες τοπικά στον υπολογιστή σου) θα τρέξει και θα παράξει κάποιο αρχείο .out. Αν ήταν το επιθυμητό, κερδίζεις τους πόντους σου, αλλιώς όχι.
Μάλιστα την παραπάνω διαδικασία θα την τρέξει πολλές φορές το hellenico, με δέκα διαφορετικά αρχεία συνήθως. Μην ανησυχείς για την ονομασία των αρχείων, έχουν όλα το ίδιο όνομα, αυτό το .in που αναφέρει η εκφώνηση.
Εν κατακλείδι: Εσύ στέλνεις τον κώδικα, και το hellenico αναλαμβάνει να τον κρίνει. Εσύ στο πισί σου δε θα δεις ποτέ τα αρχεία με βάση τα οποία θα γίνει η αξιολόγηση.

2) Πώς γράφεις σε αρχείο:
Συνδέσου στο hellenico και κατόπιν μπες σε αυτή τη σελίδα: http://hellenico.gr/index.php?page=theory&id=13

3) Περί μεταβλητών:
Σκέψου το εξής: "Στην πρώτη γραμμή βρίσκεται ένας ακέραιος Ν. Στην επόμενη γραμμή ακολουθούν Ν ακέραιοι."
Ένα πιθανό αρχείο είναι αυτό:
3
10 40 2
κι ένα εξίσου πιθανό είναι το
2
1 3

Δηλαδή συνήθως η πρώτη γραμμή δίνει στο πρόγραμμά σου να καταλάβει τι ακολουθεί.
Ένας τυπικός τρόπος να τα διαβάσεις αυτά είναι ο εξής:

Διάβασε(Ν);
for(int i=1; i<=N; ++i) {
Διάβασε(αριθμό);
Κάνε_και_κάτι();
}

Οπότε η απάντηση μοιάζει λίγο με αυτό που διατύπωσες, αν θα παίρνεις τα αρχεία εισόδου/εξόδου στο διαγωνισμό. Όχι, δε θα τα παίρνεις, αλλά με βάση αυτά θα γίνει η αξιολόγηση. Τα έχει ήδη το hellenico, δε χρειάζεται να τα μάθεις εσύ.

4) Ημερομηνίες:
Δες πάνω αριστερά στο pdp.gr εκεί που λέει Ενδεικτικός Προγραμματισμός. Δίνει ό,τι χρειάζεσαι.

Είσαι πολύ ενεργός, συνέχισε έτσι!

Ευχαριστω για την απαντηση σας, κε.Κηπουριδη (με συγχωρειτε για την ελλειψη τονων, γραφω απο mobile). Η αληθεια ειναι οτι δεν εχω προσβαση στη σελιδα του hellenico που μου κανατε λινκ, αφου δεν εχω λυσει αρκετες ασκησεις. Ο λογος που ηθελα να γνωριζω πως να γραφω το δικο μου αρχειο ειναι για να κανω testing της καθε λυσης μου στο δικο μου IDE, ωστε να ξερω οτι λειτουργει πριν την υποβαλλω. Επισης, με συγχωρειτε αν ειναι ανοητη ερωτηση, αλλα δεν καταλαβαινω πως μπορει να λειτουργησει μια εντολη τυπου ''Διαβασε(Ν)''. Το Ν σε αυτο το σημειο ειναι μια uninitialized variable, δεν καταλαβαινω πως σημαινει οτιδηποτε στο προγραμμα μου. Ευχαριστω!
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Περί αρχείων και υποβολής λύσης

Δημοσίευση από switch »

Γεια σου Γιώργο. Αρχεία εισόδου μπορείς να φτιάξεις και δικά σου για να δοκιμάσεις, αλλά φυσικά ξεκινάς με το ενδεικτικό input που σου δίνει η εκφώνηση και το πρόγραμμα σου θα πρέπει να παράγει μετά από επεξεργασία, το output.
Τα κρυφά test cases που θα δοκιμαστεί το πρόγραμμα σου θα είναι στοχευμένα ώστε να εντοπίζουν συνηθισμένες ατέλειες που πιθανώς να έχει ο κώδικας των διαγωνιζομένων. Αυτό όμως δεν θα πρέπει να σε ανησυχεί, σκοπός είναι να μάθεις να γράφεις κώδικα χωρίς λογικά λάθη (bugs) και ταυτόχρονα αποδοτικό.

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

Για την uninitialized μεταβλητή Ν: μόλις αποθηκεύσεις αυτό που διάβασες απο το αρχείο δεν θα είναι uninitialized! Τις uninitialized δεν πρέπει να τις χρησιμοποιήσεις υποθέτοντας ότι έχουν συγκεκριμένο περιεχόμενο πριν τους αποδόσεις εσύ περιεχόμενο πρώτα, γιατί θα σου βγάλουν χαζά αποτελέσματα/λάθη.
(Στις c/c++ κάποιες μεταβλητές γίνονται initialized σε 0 υπό προϋποθέσεις, αλλά όταν ξεκινάς δεν είναι κακό να θεωρείς ότι όλες είναι uninitialized μέχρι να τους αποδόσεις εσύ τιμή με κάποια εντολή)
Άβαταρ μέλους
switch
Δημοσιεύσεις: 90
Εγγραφή: Σάβ Δεκ 05, 2015 11:46 am
Τοποθεσία: 127.0.0.1

Re: Περί αρχείων και υποβολής λύσης

Δημοσίευση από switch »

Γιώργο, όπως με ενημέρωσε ο κ Κηπουρίδης για τεχνικούς λόγους δεν μπόρεσε να σου απαντήσει μέχρι τώρα και μου έστειλε μερικές πληροφορίες ακόμα να σου γράψω:

Τη θεωρεία στο hellenico για το πως να κάνεις υποβολές μπορείς να τη δεις (δεν χρειάζεται να έχεις λύσει προβλήματα):
είναι στην καρτέλα θεωρία αυτό που λέει Οδηγίες Υποβολής

Η εντολή "Διαβασε(Ν)" είναι η

Κώδικας: Επιλογή όλων

in >> N;
της C++ (αλλά εκφρασμένη σε ψευδοκώδικα)
Διαβάζει έναν αριθμό από το αρχείο και το αποδίδει στην ακέραια μεταβλητή Ν

Τώρα τα αρχεία .in:
αυτά είναι φτιαγμένα με ένα πρόγραμμα σαν το NOTEPAD (Σημειωματάριο) των Windows η άλλον text editor. Το NOTEPAD (ή το notepad++) είναι βολικό γιατί αποθηκεύει το text σε απλή ascii μορφή χωρίς φρου φρου καισαρώματα.
Το αρχείο .in πρέπει να βρίσκεται στον ίδιο φάκελο με το αρχείο .EXE που θα δημιουργήσει ο μεταφραστής/συνδέτης της C++.
Αν για οποιοδήποτε λόγο δεν μπορείς να το ανοίξεις από το πρόγραμμα σου, πιθανά έχεις κριμένες τις καταλήξεις των γνωστών αρχείων και αντί να σου φτιάξει αρχείο π.χ. test.in σου έχει φτιάξει ένα test.in.txt και η κατάληξη .txt είναι κριμένη.
(https://www.techster.gr/how-to-hide-or- ... ile-types/)

Και συμπληρώνω και εγώ:
Αν πάλι σε δυσκολεύει κάτι, κάνε ένα συμπιεσμένο αρχείο (πχ 7zip.org) με το project σου (όλο το φάκελο) και επισύναψε το σε ένα μήνυμα σου να το δούμε και να σου πούμε που είναι το πρόβλημα.

Μπράβο για την όρεξη σου και μην αφήσεις οποιαδήποτε μικρή αναποδιά να σε αποθαρρύνει. Γνωρίζω ότι η c/c++ δεν διδάσκονται στη δευτεροβάθμια εκπαίδευση (γυμνάσια/λύκεια) και χρειάζεται τουλάχιστο θάρρος για να ασχοληθείς από μόνος σου.

Σου επισυνάπτω ένα αρχείο 333.7z με ένα αρχείο εισόδου test.in και ένα test.cpp που το διαβάζει.
Συνημμένα
333.7z
(375 Ψηφιολέξεις) Μεταφορτώθηκε 179 φορές
Απάντηση