Αλλα

Πίνακες Mac C++ και τυχαίοι αριθμοί

iBookG4user

Πρωτότυπη αφίσα
27 Ιουνίου 2006
Σιάτλ, Ουάσιγκτον
  • 20 Σεπτεμβρίου 2009
Βάζουν τους καθηγητές για C++ στις πιο άβολες στιγμές στο κολέγιό μου... Τέλος πάντων, ο εκπαιδευτής δημοσίευσε τις ακόλουθες οδηγίες:

«Γράψτε μια συνάρτηση που θα γεμίσει έναν πίνακα με 25 τυχαίους αριθμούς μεταξύ 1 και 10. Στη συνέχεια γράψτε μια συνάρτηση που θα εκτυπώσει τον πίνακα. Γράψτε κάποιο κώδικα στο main για να δοκιμάσετε τις λειτουργίες σας. Μερικές φορές αυτός ο κωδικός δοκιμής ονομάζεται *πρόγραμμα οδήγησης

Μην χρησιμοποιείτε καθολικές μεταβλητές εδώ. Περάστε τον πίνακα στη συνάρτηση μέσω της λίστας παραμέτρων'

Ο τρέχων κώδικας μου δεν οδηγεί σε σφάλματα στον εντοπισμό σφαλμάτων, αλλά δεν βγάζει τον πίνακα. Και δεν ξέρω τι εννοεί γράφοντας τον οδηγό, τι πρέπει να δοκιμάσω; Έχετε αποδειχτεί όλοι εξαιρετικά χρήσιμοι στο παρελθόν και είμαι σίγουρος ότι θα με βοηθήσετε να δείξω τη σωστή κατεύθυνση αυτή τη φορά

Κωδικός: |_+_|

lee1210

10 Ιανουαρίου 2005


Ντάλας, Τέξας
  • 20 Σεπτεμβρίου 2009
Μερικά πράγματα: Ο πίνακας σας πρέπει να είναι τύπου int[], όχι διπλός[]. Πρέπει να αποδεχτείτε έναν πίνακα int για παραγωγή και εκτύπωση. Πρέπει να δηλώσετε ένα int[] στο main, να το περάσετε για παραγωγή, να το συμπληρώσετε εκεί και μετά να το περάσετε για εκτύπωση. ο<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Επίσης, και είμαι σίγουρος ότι είναι ένα ειλικρινές λάθος, είμαι σίγουρος ότι εννοούσε ο καθηγητής σας ψευδής- τυχαίος.

Επίσης, κατά κύριο λόγο, δηλώνετε νέα διπλά() και δεν επικαλείτε παραγωγή και εκτύπωση. Αφαιρέστε το διπλό εκεί και περάστε σε ένα επιχείρημα όπως συζητήθηκε παραπάνω και αλλάξτε τον τύπο επιστροφής και των δύο σε void.

-Ανάγνωση

gnasher729

Ανασταλεί
25 Νοεμβρίου 2005
  • 20 Σεπτεμβρίου 2009
Πώς θα γράφατε ένα πρωτότυπο συνάρτησης για τη συνάρτηση «παραγωγή»;
Και πώς θα γράφατε μια κλήση στη συνάρτηση «παραγωγή»;

Και μέσα στην «κύρια» συνάρτησή σας, ποια από τις δύο έχετε γράψει, ένα πρωτότυπο συνάρτησης ή μια κλήση συνάρτησης;

iBookG4user

Πρωτότυπη αφίσα
27 Ιουνίου 2006
Σιάτλ, Ουάσιγκτον
  • 20 Σεπτεμβρίου 2009
lee1210 είπε: Μερικά πράγματα: Ο πίνακας σας πρέπει να είναι τύπου int[], όχι διπλός[]. Πρέπει να αποδεχτείτε έναν πίνακα int για παραγωγή και εκτύπωση. Πρέπει να δηλώσετε ένα int[] στο main, να το περάσετε για παραγωγή, να το συμπληρώσετε εκεί και μετά να το περάσετε για εκτύπωση. ο<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Επίσης, και είμαι σίγουρος ότι είναι ένα ειλικρινές λάθος, είμαι σίγουρος ότι εννοούσε ο καθηγητής σας ψευδής- τυχαίος.

Επίσης, κατά κύριο λόγο, δηλώνετε νέα διπλά() και δεν επικαλείτε παραγωγή και εκτύπωση. Αφαιρέστε το διπλό εκεί και περάστε σε ένα επιχείρημα όπως συζητήθηκε παραπάνω και αλλάξτε τον τύπο επιστροφής και των δύο σε void.

-Ανάγνωση

Εντάξει, έκανα τις αλλαγές που πρότεινες και ο κώδικας φαίνεται πιο λογικός. Αν και τώρα λαμβάνω τρία σφάλματα στους βρόχους for.

Κωδικός: |_+_|

Συνημμένα

  • Στιγμιότυπο οθόνης 20-09-2009 στις 5.42.31 μ.μ.png Στιγμιότυπο οθόνης 20-09-2009 στις 5.42.31 μ.μ..png'file-meta'> 178,1 KB · Προβολές: 1,941

lee1210

10 Ιανουαρίου 2005
Ντάλας, Τέξας
  • 20 Σεπτεμβρίου 2009
Αλλάξτε τον τύπο ορίσματος παραγωγής σε int[] ή int *. Αυτήν τη στιγμή είναι απλώς int, επομένως δεν μπορείτε να χρησιμοποιήσετε το [], κ.λπ. Το ίδιο ισχύει και για την εκτύπωση. Επίσης, δεν χρειάζεται να επιστρέψετε τίποτα από παραγωγή ή εκτύπωση. Αλλάξτε τον τύπο επιστροφής τους σε void.

Νομίζω ότι η πρόθεση είναι να καλέσετε την εκτύπωση πίσω στην κύρια, κάτι που θα ήταν εντάξει.

Επίσης, όταν περνάτε πίνακα για παραγωγή, απλώς χρησιμοποιήστε πίνακα και όχι * array.

-Ανάγνωση

iBookG4user

Πρωτότυπη αφίσα
27 Ιουνίου 2006
Σιάτλ, Ουάσιγκτον
  • 20 Σεπτεμβρίου 2009
lee1210 είπε: Αλλάξτε τον τύπο ορίσματος παραγωγής σε int[] ή int *. Αυτήν τη στιγμή είναι απλώς int, επομένως δεν μπορείτε να χρησιμοποιήσετε το [], κ.λπ. Το ίδιο ισχύει και για την εκτύπωση. Επίσης, δεν χρειάζεται να επιστρέψετε τίποτα από παραγωγή ή εκτύπωση. Αλλάξτε τον τύπο επιστροφής τους σε void.

Νομίζω ότι η πρόθεση είναι να καλέσετε την εκτύπωση πίσω στην κύρια, κάτι που θα ήταν εντάξει.

Επίσης, όταν περνάτε πίνακα για παραγωγή, απλώς χρησιμοποιήστε πίνακα και όχι * array.

-Ανάγνωση

Δούλεψε
Τώρα, ξέρετε τι εννοούσε γράφοντας τον κώδικα για να δοκιμάσετε τις συναρτήσεις; Τι εννοεί με αυτό; Και ευχαριστώ πολύ για τη βοήθειά σας μέχρι τώρα!

Κωδικός: |_+_|

chown33

Μεσολαβητής
Μέλος του προσωπικού
9 Αυγούστου 2009
το αβυσσαλέο αεροπλάνο
  • 20 Σεπτεμβρίου 2009
Το iBookG4user είπε: Τώρα, ξέρετε τι εννοούσε γράφοντας τον κώδικα για να δοκιμάσετε τις λειτουργίες; Τι εννοεί με αυτό;

Η προδιαγραφή έλεγε ότι οι αριθμοί στον πίνακα πρέπει να είναι μεταξύ 1 και 10. Θα μπορούσατε να γράψετε μια δοκιμή που να το επιβεβαιώνει.

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

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

Θα πρέπει επίσης να εξετάσετε το ενδεχόμενο προετοιμασίας του πίνακα με γνωστές μη έγκυρες τιμές, όπως -1 ή 0, πριν καλέσετε την product(). Διαφορετικά, ένας μη αρχικοποιημένος τοπικός πίνακας μπορεί να περιέχει ήδη απρόβλεπτες τιμές, τις οποίες ένα τεστ θα μπορούσε να ερμηνεύσει ως τυχαίες ακόμα κι αν η product() δεν κάνει απολύτως τίποτα.

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

iBookG4user

Πρωτότυπη αφίσα
27 Ιουνίου 2006
Σιάτλ, Ουάσιγκτον
  • 20 Σεπτεμβρίου 2009
Ήταν αρκετά απλό, ευχαριστώ!
Αυτό λειτούργησε καλά:
Κωδικός: |_+_| μικρό

Τριβείο

προς το
24 Απριλίου 2008
  • 21 Σεπτεμβρίου 2009
Το iBookG4user είπε: Ήταν αρκετά απλό, ευχαριστώ!
Αυτό λειτούργησε καλά:

Προσπαθήστε να βάλετε έναν «μη έγκυρο» αριθμό στον πίνακα σας (ας πούμε, 11) και δείτε εάν αυτή η συνάρτηση το εντοπίζει.

iBookG4user

Πρωτότυπη αφίσα
27 Ιουνίου 2006
Σιάτλ, Ουάσιγκτον
  • 21 Σεπτεμβρίου 2009
Ο Sander είπε: Προσπαθήστε να βάλετε έναν «μη έγκυρο» αριθμό στον πίνακα σας (ας πούμε, 11) και δείτε αν αυτή η συνάρτηση το εντοπίζει.

Ρύθμισα προσωρινά τον πίνακα ώστε να επιτρέπει αριθμούς μεγαλύτερους από 10 και τον εντόπισε, ευχαριστώ μικρό

Τριβείο

προς το
24 Απριλίου 2008
  • 22 Σεπτεμβρίου 2009
Το iBookG4user είπε: Ρύθμισα προσωρινά τον πίνακα ώστε να επιτρέπει αριθμούς μεγαλύτερους από 10 και τον εντόπισε, ευχαριστώ

Ακόμα κι αν δεν είναι το πρώτο στοιχείο στον πίνακα..;

Ο λόγος που ρωτάω είναι επειδή η συνάρτηση print() (τουλάχιστον η τελευταία έκδοση που εμφανίζεται σε αυτό το νήμα) επιστρέφει μόνο το πρώτο στοιχείο του πίνακα (μετατροπή σε διπλό).