Έβγαλα ένα θεματάκι για ένα διαγώνισμα, κλασικότατο το 1ο ερώτημα , Δυαδική με κένά. Και έπειτα εύρεση όλων των θέσεων εμφάνισης του στοιχείου χωρίς τη χρήση δομής επιλογής. Κάτι είχα στο μυαλό μου σαν απάντηση για το 2ο ερώτημα, να κάνει σεριακή αριστερά και έπειτα δεξιά του στοιχείου αλλά μπορεί να είναι και ακριανό οπότε πάλι θέλει έλεγχο με επιλογή (το βαλα μια μονάδα έτσι για την τιμή). Να το βγάλω ή υπάρχει τρόπος;
Β2. 1. Ο πίνακας Α[Ν] περιέχει ακέραια στοιχεία ταξινομημένα σε αύξουσα σειρά και μπορεί να περιέχει και ίδιες τιμές (διπλότυπα). Να συμπληρώσετε τα κενά στο παρακάτω τμήμα προγράμματος ώστε αυτό να βρίσκει και να εμφανίζει τη θέση εμφάνισης του στοιχείου key που αναζητείται ή το μήνυμα «ΔΕΝ ΒΡΕΘΗΚΕ» σε αντίστοιχη περίπτωση, εφαρμόζοντας τον αλγόριθμο της Δυαδικής Αναζήτησης. flag ß ...(1)... θ ß 0
left ß 1
right ß N
ΟΣΟ ...(2)... ΚΑΙ (left <= right) ΕΠΑΝΑΛΑΒΕ
mid ß ...(3)... ΑΝ A[mid] = key ΤΟΤΕ
flag <- ΑΛΗΘΗΣ θ ß mid
ΑΛΛΙΩΣ_ΑΝ A[mid] > key ΤΟΤΕ
right ß ...(4)... ΑΛΛΙΩΣ left ß ...(5)... ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣΑΝ ...(6)... ΤΟΤΕ ΓΡΑΨΕ θ
ΑΛΛΙΩΣ ΓΡΑΨΕ "ΔΕΝ ΒΡΕΘΗΚΕ"ΤΕΛΟΣ_ΑΝ2. Αφήνοντας το παραπάνω τμήμα προγράμματος ως έχει, συμπληρώστε με τον κατάλληλο κώδικα ώστε να υπολογίζει και να εμφανίζει όλες τις θέσεις που υπάρχει το στοιχείο key στον πίνακα Α[Ν], χωρίς τη χρήση δομής επιλογής.
Μονάδες 1
Με δομή επιλογής δεν βλέπω κάτι, αλλά αν κάποιος χρησιμοποιήσει ΌΣΟ δεν είναι το ίδιο πράγμα; με την έννοια ότι το ΌΣΟ είναι ένα επαναλαμβανόμενο ΑΝ).
Σκεφτόμουν οτι μπορεί να βγεί εκτός πίνακα. Έχεις κάτι στο μυαλό σου Παναγιώτη;
Χωρίς όμως να μπλέξουμε με πλήρεις απτιμήσεις λογικών τελεστών και τα ρέστα.
Μπορούμε απλώς να μιμηθούμε την ΑΝ με την ΟΣΟ. Δεν ξέρω αν είναι αυτό που θέλεις εμένα όμως δεν μου πολυαρέσει σαν λογική θέματος.
i <- θ
ΟΣΟ i > 1 ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Flag <- ΨΕΥΔΗΣ
ΟΣΟ Flag = ΨΕΥΔΗΣ ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
Flag <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <- θ + 1
ΟΣΟ i < Ν ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Flag <- ΨΕΥΔΗΣ
ΟΣΟ Flag = ΨΕΥΔΗΣ ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
Flag <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Παράθεση από: ssimaiof στις 14 Δεκ 2025, 08:23:25 ΜΜΜπορούμε απλώς να μιμηθούμε την ΑΝ με την ΟΣΟ. Δεν ξέρω αν είναι αυτό που θέλεις εμένα όμως δεν μου πολυαρέσει σαν λογική θέματος.
i <- θ
ΟΣΟ i > 1 ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i - 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Flag <- ΨΕΥΔΗΣ
ΟΣΟ Flag = ΨΕΥΔΗΣ ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
Flag <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
i <- θ + 1
ΟΣΟ i < Ν ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
i <- i + 1
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Flag <- ΨΕΥΔΗΣ
ΟΣΟ Flag = ΨΕΥΔΗΣ ΚΑΙ Α[i] = key ΕΠΑΝΑΛΑΒΕ
ΓΡΑΨΕ i
Flag <- ΑΛΗΘΗΣ
ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ
Πολύ καλό. Πάρα πολύ καλό Στάυρο. :D Με τη φλαγκ αναγκάζεις μια εκτέλεση και κλειδώνεις και αριστερά και δεξιά. Δεν θα το σκεφτόμουν ποτέ. Ευχαριστώ.
Βλακεία λοιπόν.
Αλλάζω την εκφώνηση.
Νεα εκφώνηση στο Β2.
Β2. Ο πίνακας A[Ν] περιέχει ακέραια στοιχεία ταξινομημένα σε αύξουσα σειρά και μπορεί να περιέχει και ίδιες τιμές (διπλότυπα). Να συμπληρώσετε τα κενά στο παρακάτω τμήμα προγράμματος ώστε:· να εφαρμόζει τον αλγόριθμο της Δυαδικής Αναζήτησης και να εντοπίζει τη θέση της πρώτης (αριστερότερης) εμφάνισης του στοιχείου key,· και εφόσον το στοιχείο βρεθεί, να εφαρμόζει δεύτερη Δυαδική Αναζήτηση στο κατάλληλο τμήμα του πίνακα ώστε να εντοπίζει τη θέση της τελευταίας (δεξιότερης) εμφάνισης του key.Στη συνέχεια να εμφανίζει:· τη θέση της πρώτης εμφάνισης,· τη θέση της τελευταίας εμφάνισης,· και το πλήθος εμφανίσεων του key.Αν το στοιχείο δεν υπάρχει στον πίνακα, να εμφανίζει «ΔΕΝ ΒΡΕΘΗΚΕ».flag ß ...(1)...
θ_αριστερά ß 0left ß 1right ß N! 1η Δυαδική Αναζήτηση: βρίσκει την πρώτη (αριστερότερη) εμφάνισηΟΣΟ left <= right ΕΠΑΝΑΛΑΒΕmid ß ...(2)...
ΑΝ A[mid] = key ΤΟΤΕflag ß ΑΛΗΘΗΣθ_αριστερά ß midright ß ...(3)...
ΑΛΛΙΩΣ_ΑΝ A[mid] < key ΤΟΤΕleft ß ...(4)...ΑΛΛΙΩΣright ß ...(5)...ΤΕΛΟΣ_ΑΝΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣΑΝ ...(6)... ΤΟΤΕ! 2η Δυαδική Αναζήτηση: βρίσκει την τελευταία (δεξιότερη) εμφάνισηleft ß ...(7)... right ß NΟΣΟ left <= right ΕΠΑΝΑΛΑΒΕmid ß ...( 8 )... ΑΝ A[mid] = key ΤΟΤΕ...(9)... left ß mid + 1ΑΛΛΙΩΣ_ΑΝ ...(10)... ΤΟΤΕ
right ß mid - 1 ΑΛΛΙΩΣ ...(11)... ΤΕΛΟΣ_ΑΝ ΤΕΛΟΣ_ΕΠΑΝΑΛΗΨΗΣ πλήθος ß ...(12)... ΓΡΑΨΕ θ_αριστερά
ΓΡΑΨΕ θ_δεξιά
ΓΡΑΨΕ πλήθοςΑΛΛΙΩΣΓΡΑΨΕ "ΔΕΝ ΒΡΕΘΗΚΕ"ΤΕΛΟΣ_ΑΝΕΔΩ (https://alkisg.mysch.gr/steki/index.php?topic=9779.0) όλο το διαγώνισμα.
Παράθεση από: nikolasmer στις 14 Δεκ 2025, 07:19:27 ΜΜΣκεφτόμουν οτι μπορεί να βγεί εκτός πίνακα. Έχεις κάτι στο μυαλό σου Παναγιώτη;
Χωρίς όμως να μπλέξουμε με πλήρεις απτιμήσεις λογικών τελεστών και τα ρέστα.
Σκεφτόμουν πάνω κάτω αυτό που προτάθηκε, με τη διαφορά ότι θα έβαζα την συνθήκη Α[ι] = key σε εμφωλευμένη όσο αντί για το ΑΝ.