ΒΟΗΘΕΙΑ !!! ΔΙΑΒΑΣΤΕ ΠΑΡΑΚΑΤΩ

Ξεκίνησε από ΠΕΤΡΟΣ, 27 Δεκ 2004, 07:26:55 ΜΜ

« προηγούμενο - επόμενο »

ΠΕΤΡΟΣ

ΕΧΩ ΜΙΑ ΕΡΓΑΣΙΑ ΝΑ ΚΑΝΩ, ΟΠΟΥ ΠΡΕΠΕΙ ΝΑ ΕΙΣΑΓΩ ΑΚΕΡΑΙΟΥΣ ΑΡΙΘΜΟΥΣ (ΔΙΑΦΟΡΕΤΙΚΟΥΣ ΜΕΤΑΞΥ ΤΟΥΣ) ΣΕ ΕΝΑΝ ΠΙΝΑΚΑ ΝΧΜ, ΜΕ ΧΡΗΣΗ "ΑΜΥΝΤΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ". ΓΝΩΡΙΖΕΙ ΚΑΝΕΙΣ ΤΗΝ ΕΝΝΟΙΑ ΑΥΤΗ???

gpapargi

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

Συνήθως όταν λέμε «αμυντικός προγραμματισμός» εννοούμε το να προγραμματίζουμε έτσι ώστε το πρόγραμμα  να συμπεριφέρεται με επιτυχία στα λάθη ( η πρώτη έννοια που αναφέρω παραπάνω).

Σε αυτό που λες μάλλον εννοείς να εισαχθούν οι αριθμοί στον πίνακα και ταυτόχρονα να γίνεται έλεγχος για το αν είναι διαφορετικοί μεταξύ τους , για το αν είναι ακέραιοι κλπ.

Βοήθησε μας λίγο να καταλάβουμε τι ζητάς ακριβώς για να μπορέσουμε να δούμε πως θα σου απαντήσουμε. Είσαι μαθητής; Μιλάμε για μάθημα της ανάπτυξης εφαρμογών;

P.Tsiotakis

#2
Μπορεί να μεταφέρει στον καθηγητή του ο αγαπητός μαθητής που σου έδωσε την άσκηση ή εσύ Πέτρο τις χριστουγιεννάτικες ευχές μου  :furious3:  :furious3:  :furious3:

Συμφωνώ με τον Γιώργο, αν και δεν έχω ξανακούσει την έκφραση

Επειδή στη ΓΛΩΣΣΑ δεν έχουμε εργαλείο για έλεγχο πχ αν μια μεταβλητή περιέχει ακέραιο, ουσιαστικά η άσκηση πρέπει κατά την εισαγωγή να ελέγχει αν υπάρχει ήδη το στοιχείο αυτό στον πίνακα και μόνο στην περίπτωση που δεν το βρει να το εισαγεί, μια πολύ ωραία άσκηση για υποπρογράμματα, αλλά και για πίνακες

Όσο για τη λύση μέσα σε διπλό Για (ΝxM) διαβάζεις τον νέο αριθμό, εφαρμόζεις σειριακή αναζήτηση σε δισδιάστατο πίνακα και αν δε βρεθεί στο στοιχείο το εισάγεις στον πίνακα

Καλή χρονιά

Με εκτίμηση,

gpapargi

Κάτσε να δούμε ρε Παναγιώτη αν είναι μαθητής το παιδί :-) Μπορεί να είναι φοιτητής και να μπήκε από σπόντα στη σελίδα. Αν είναι έτσι θα τα πούμε εκτός σελίδας.

Αν πρόκειται για μαθητή της Γ λυκείου θα μπορούσε η έννοια του «αμυντικού προγραμματισμού» να συνδεθεί με την έννοια της καθοριστικότητας του αλγορίθμου σύμφωνα με την οποία πρέπει να ελέγχουμε όλες τις περιπτώσεις που μπορεί να προκύψουν. Γενικά δε βλέπω το λόγο να παίζουμε με νέες έννοιες (δανεισμένες από τον προγραμματισμό) αν μπορούμε να κάνουμε τη δουλειά μας με τις υπάρχουσες έννοιες του βιβλίου.

Μπορείς να ελέγξεις αν ένας αριθμός είναι ακέραιος καταχωρώντας κατά την είσοδο σε πραγματικό και συγκρίνοντας τον με το ακέραιο μέρος του.
Αν ο χρήστης εισάγει χαρακτήρες πάει μακριά η βαλίτσα. Θα πρέπει να διαβάζουμε ψηφίο-ψηφίο σα χαρακτήρα (για να διαβάζονται τα πάντα) και μετά να ελέγχει αν τα ψηφία είναι νόμιμα. Μετά τα κάνει ακέραια ψηφία και μετά φτιάχνει τον αριθμό από τα ψηφία του. Φασαρία!!! Αλλά ας δούμε αν μιλάμε για γ λυκείου και μετά ποιους ελέγχους θέλει ο καθηγητής.
Αλήθεια δεν όρισε την έννοια στην τάξη;
Είπε ποιους ελέγχους θέλει;

Χρόνια πολλά σε όλους. Τα ξέχασα πριν :-)

ΠΕΤΡΟΣ

ΧΡΟΝΙΑ ΠΟΛΛΑ, ΚΑΙ ΣΑΣ ΕΥΧΑΡΙΣΤΩ ΓΙΑ ΤΙΣ ΑΠΑΝΤΗΣΕΙΣ. ΕΙΜΑΙ ΦΟΙΤΗΤΗΣ ΣΤΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΑΙ ΑΥΤΗ Η ΑΣΚΗΣΗ ΕΙΝΑΙ ΕΝΑ ΑΠΟ ΤΑ ΤΕΣΣΕΡΑ ΥΠΟΕΡΩΤΗΜΑΤΑ ΜΙΑΣ ΕΡΓΑΣΙΑΣ. ΣΑΝ ΥΠΟΔΕΙΞΗ ΕΧΕΙ: "ΠΡΕΠΕΙ ΝΑ ΓΙΝΕΙ ΧΡΗΣΗ ΑΜΥΝΤΙΚΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ ΓΙΑ ΝΑ ΘΕΩΡΗΘΕΙ Η ΑΠΑΝΤΗΣΗ ΣΩΣΤΗ ΚΑΙ ΠΛΗΡΗΣ. ΕΧΩ ΚΑΝΕΙ ΤΟΝ ΕΛΕΓΧΟ ΓΙΑ ΔΙΑΦΟΡΕΤΙΚΟΥΣ ΑΡΙΘΜΟΥΣ. ΜΗΠΩΣ ΠΡΕΠΕΙ ΝΑ ΕΛΕΓΧΕΙ ΚΑΙ ΑΝ ΕΙΝΑΙ ΓΡΑΜΜΑ Η ΣΥΜΒΟΛΟ ΑΝΤΙ ΓΙΑ ΨΗΦΙΟ? ΑΥΤΟ ΕΙΝΑΙ ΠΟΛΥ ΠΙΚΡΑ ΔΕ ΣΥΜΦΩΝΕΙΤΕ? ΑΝ ΕΧΕΤΕ ΤΕΤΟΙΟ ΚΩΔΙΚΑ ΕΤΟΙΜΟ ΠΑΡΑΚΑΛΩ ΣΤΕΙΛΤΕ ΤΟΝ.
ΚΑΛΑ ΝΑ ΠΕΡΝΑΤΕ.

gpapargi

Βασικά η κουβέντα εδώ είναι για το σχολικό μάθημα οπότε δεν μπορούμε να πλατιάσουμε εντός αυτής της σελίδας. Θα στα πω συνοπτικά και αν θέλεις διευκρινήσεις στείλε μου mail να το απαντήσω.

Κώδικα έτοιμο δεν έχω. Θα σου πρότεινα πάντως να μην αρχίσεις από τώρα να παίρνεις έτοιμες ασκήσεις γιατί θα το πληρώσεις πολύ ακριβά. Θα χάσεις την επαφή με το μάθημα και όταν δυσκολέψει δε θα μπορείς να κάνεις τίποτα μόνος σου. Ζήτα βοήθεια μόνο στα κρίσιμα σημεία και όχι στην υλοποίηση.

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

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

Γενικά αυτό με τον n X m πίνακα είναι λίγο περίεργο. Ο υπολογιστής τον αποθηκεύει σειριακά. Απλά εμείς τον φανταζόμαστε σαν πίνακα 2 διαστάσεων γιατί μας βολεύει. Όμως επειδή η αναζήτηση είναι πιο εύκολη σε πίνακα μιας διάστασης παρά σε πίνακα 2 διαστάσεων, θα έκανα το εξής:
Θα χρησιμοποιούσα πίνακα μιας διάστασης με δείκτη i. Θα υλοποιούσα την αναζήτηση και την καταχώρηση των στοιχείων σε αυτόν. Μέχρι εδώ όλα είναι απλά. Μετά θα έδινα τη δυνατότητα σε οποιονδήποτε να βλέπει τον πίνακα σαν να έχει 2 διαστάσεις. Αν x,y οι συνεταγμένες του πίνακα τότε με ένα σχήμα εύκολα βρίσκουμε ότι
i=(x-1)*m+y       (1)
Η σχέση (1) μπορεί να διαβαστεί σαν διαιρετέος (i)=διαιρέτης (m) επί πηλίκο (x-1) συν υπόλοιπο (y). Έτσι εύκολα καταλήγουμε στον μετασχηματισμό
x= i div m + 1     (2)
y=i mod m          (3)

Δηλαδή με τη σχέση (1) φαντάζεσαι ένα πίνακα σαν μονοδιάστατο αν τον έχεις σαν δισδιάστατο. Με τις σχέσεις (2),(3) τον φαντάζεσαι σα δισδιάστατο αν τον έχεις σα μονοδιάστατο. Ανάλογα με το τι θέλεις λειτουργείς. Εννοείτε ότι φτιάχνεις συνάρτηση που παίρνει σαν όρισματα τις 2d συνιστώσες και επιστρέφει την 1d.
Πάντως δε βλέπω το λόγο να μπλέξεις με 2 πίνακες. Θα έλεγα ένας είναι αρκετός και με τον κατάλληλο μετασχηματισμό τον φαντάζεσαι σα να έχει 1 ή 2 διαστάσεις.
Και ο υπολογιστής κάπως έτσι λειτουργεί.
Ελπίζω να σε καλύψαμε κάπως :-)

Καλή προσπάθεια