Προς το περιεχόμενο

Aσκήσεις σε C++ / Δομές Δεδομένων


madks

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπορείτε να με βοηθήσετε σε C++ / Δομές Δεδομένων?

Ιδού οι ασκήσεις:

 

1. Υποθέτουμε ότι A, B, C είναι πίνακες με δείκτη 1..10 και τύπο στοιχείων «πραγματικούς αριθμούς». Να γραφεί μια διαδικασία C++ η οποία χρησιμοποιεί λειτουργίες retrieve και update για να υλοποιήσει την πρόσθεση πινάκων A := B + C.

 

2. Να υπολογιστεί η διεύθυνση κάθε στοιχείου ενός πίνακα Α(1:3,1:2,2:2,1:2). Θεωρείστε ότι ο πίνακας έχει βασική διεύθυνση b=100 και μήκος συνιστώσας L=8, ενώ τα άνω και κάτω όρια των δεικτών του είναι όπως παραπάνω.

 

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

 

Να γραφεί κώδικας C++ για την αναπαράσταση ενός εγγραφήματος φοιτητή.

Να γραφεί κώδικας C++ για την αναπαράσταση του συνόλου των φοιτητών χρησιμοποιώντας έναν πίνακα εγγραφημάτων.

Να χρησιμοποιηθεί μια δομή δείκτη για την πρόσβαση σε όλους τους φοιτητές που έχουν επιλέξει ένα συγκεκριμένο μάθημα.

 

4.) Να υλοποιηθεί μια στίβα LIFO με χρήση πίνακα και της γλώσσας C++.

 

5. Να υλοποιηθεί μια στίβα LIFO με χρήση συνδεδεμένης λίστας και της γλώσσας C++.

 

6. Χρησιμοποιείστε λειτουργίες push και pop σε στίβα τύπου LIFO για τον υπολογισμό της έκφρασης [(10+2) x (8-3)] + 2. Σε κάθε βήμα, να προσδιορίζετε το περιεχόμενο της στίβας.

 

===============================================================

 

Α)Να γράψετε ένα πρόγραμμα σε γλώσσα (C++ ) που να υλοποιεί το ακόλουθο παράδειγμα Ντετερμινιστικού Πεπερασμένου Αυτομάτου:

1)Έστω το ΠΑ

Μ1 = ( Κ, Σ, δ, S, F )

Όπου Κ = { Γ, Δ}

Σ = { x, y}

δ = { δ ( Γ, x ) = Γ, δ ( Γ, y) = Δ,

δ ( Δ, x) = Δ, δ ( Δ, y) = Γ }

S = Γ

F = {Γ}

Είναι ντετερμινιστικo;

 

 

ofzepl.jpg

 

 

 

Β) Χρησιμοποιώντας το αυτόματο που έχετε υλοποιήσει να εξετάσετε αν οι παρακάτω συμβολοσειρές αναγνωρίζονται επιτυχώς ή όχι:

 

i. y x x y x y -|

ii.x x xy yy -|

iii.x y xy -|

iv.x y x -|

 

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

 

Παραδείγματα εκφράσεων που πρέπει να παράγονται από την γραμματική:

 

1.Πρόσθεσε τον αριθμό 45 με τον αριθμό 213.

2.Αφαίρεσε τον αριθμό 10 από τον αριθμό 30.

3.Πολλαπλασίασε τον αριθμό 62 με τον αριθμό 4.

4.Διαίρεσε τον αριθμό 81 με τον αριθμό 9.

 

Τhanks in advance!

Δημοσ.

Μπράβο, έτσι πρέπει αράδιασε μας όλες τις ασκήσεις και περίμενε να τα απαντήσουμε όλα εσύ εν τωμεταξύ πήγαινε να πιείς κάνα καφεδάκι, να βγείς με την παρέα σου και να δεις και λίγο τηλεόραση radio αρβυλα... Μπορώ να έχω την θέση σου στην σχολη που είσαι? Γιατί εγώ δεν είμαι σε σχολη!

 

Φαντάσου ποσο αδικημένος μπορεί να νιώσει κάποιος από το κράτος όταν ατομακια σαν εσένα είναι μπροστά και άλλοι μείναν πίσω από γραφειοκρατικές διαδικασίες... Όπως και να έχει εγώ θα σε βοηθήσω με τις ασκήσεις αυτές, όχι από λύπηση αλλα για να σε ξεφτιλίσω λίγο παραπάνω, που δέχεσαι να πάρεις τις λύσεις από κάποιον που στα χώνει έτσι σε public forum.

 

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

 

1. a_i = b_i + c_i, 0 <= i < 10

Δεν υπάρχει κάτι πιο απλό, μια λούπα είναι το όλο θέμα.

lisp solution:

>
(let ((b #(7 3 2 5 3 9 1 3 0 6))
     (c #(3 9 2 7 4 0 5 9 0 0)))
 (map 'vector #'+ b c))

 

2. Αυτό δεν το έπιασα

 

3. Ένα struct με τα αντίστοιχα στοιχεια, μια συνάρτηση που θα διαβάζει τα στοιχεια και θα "γυρνάει" πίσω το struct που είπαμε, και επίσης θα κατοχυρώνει το κάθε struct στο A ενός array, μεγαλώνοντας ύστερα το index i κατά ένα. δεν βλέπω να υπάρχει upper-bound, κανονικά θα έπρεπε να ξεκαθαρίζει αν χρειάζεται δυναμική array η στατική, και πιο το μέγεθος αυτής. Για το τελευταίο ερώτημα μπορείς να υλοποιήσεις οποιαδήποτε λύση εσύ θέλεις, Ο(η) είναι αρεστή λύση, που υλοποιείται ψάχνοντας το array A για το κατάλληλο μάθημα (strcmp) και κρατώντας αυτά τα structs που είναι το σωστό μάθημα σε ένα καινούργιο array που θα φτιάχνεις δυναμικά.

 

4 & 5. Εύκολο πάλι, δυναμική array, αρχικού μεγέθους size = N με malloc, και στην συνεχεια κάθε φορα που N αντικείμενα έχουν προστεθεί στην lifo queue, realloc για size += N. Το push αντιστοιχεί σε A[i++] = item, i < size, και pop σε A[--i], i > 0.

http://www.iso-9899.info/wiki/Snippets#Stacks

 

Στην περίπτωση που είναι list χρειάζεται μονο ένα tail pointer και μια σωστή υλοποίηση linked list. http://en.wikipedia.org/wiki/Linked_list

 

6. Η έκφραση στην αντίστοιχη RPN:

2 10 2 + 8 3 - * +

Γράψε κατάλληλο reader που να διαβάζει αριθμούς και σύμβολα πράξις, κάθε αριθμό θα τον κατοχυρώνεις στο lifo με push, και κάθε πράξη θα την εκτελείς με δυο pop.

http://en.wikipedia.org/wiki/Reverse_Polish_notation

Δημοσ.
Μπράβο, έτσι πρέπει αράδιασε μας όλες τις ασκήσεις και περίμενε να τα απαντήσουμε όλα εσύ εν τωμεταξύ πήγαινε να πιείς κάνα καφεδάκι, να βγείς με την παρέα σου και να δεις και λίγο τηλεόραση radio αρβυλα... Μπορώ να έχω την θέση σου στην σχολη που είσαι? Γιατί εγώ δεν είμαι σε σχολη!

 

Φαντάσου ποσο αδικημένος μπορεί να νιώσει κάποιος από το κράτος όταν ατομακια σαν εσένα είναι μπροστά και άλλοι μείναν πίσω από γραφειοκρατικές διαδικασίες... Όπως και να έχει εγώ θα σε βοηθήσω με τις ασκήσεις αυτές, όχι από λύπηση αλλα για να σε ξεφτιλίσω λίγο παραπάνω, που δέχεσαι να πάρεις τις λύσεις από κάποιον που στα χώνει έτσι σε public forum.

 

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

 

1. a_i = b_i + c_i, 0 <= i < 10

Δεν υπάρχει κάτι πιο απλό, μια λούπα είναι το όλο θέμα.

lisp solution:

>
(let ((b #(7 3 2 5 3 9 1 3 0 6))
     (c #(3 9 2 7 4 0 5 9 0 0)))
 (map 'vector #'+ b c))

 

2. Αυτό δεν το έπιασα

 

3. Ένα struct με τα αντίστοιχα στοιχεια, μια συνάρτηση που θα διαβάζει τα στοιχεια και θα "γυρνάει" πίσω το struct που είπαμε, και επίσης θα κατοχυρώνει το κάθε struct στο A ενός array, μεγαλώνοντας ύστερα το index i κατά ένα. δεν βλέπω να υπάρχει upper-bound, κανονικά θα έπρεπε να ξεκαθαρίζει αν χρειάζεται δυναμική array η στατική, και πιο το μέγεθος αυτής. Για το τελευταίο ερώτημα μπορείς να υλοποιήσεις οποιαδήποτε λύση εσύ θέλεις, Ο(η) είναι αρεστή λύση, που υλοποιείται ψάχνοντας το array A για το κατάλληλο μάθημα (strcmp) και κρατώντας αυτά τα structs που είναι το σωστό μάθημα σε ένα καινούργιο array που θα φτιάχνεις δυναμικά.

 

4 & 5. Εύκολο πάλι, δυναμική array, αρχικού μεγέθους size = N με malloc, και στην συνεχεια κάθε φορα που N αντικείμενα έχουν προστεθεί στην lifo queue, realloc για size += N. Το push αντιστοιχεί σε A[i++] = item, i < size, και pop σε A[--i], i > 0.

http://www.iso-9899.info/wiki/Snippets#Stacks

 

Στην περίπτωση που είναι list χρειάζεται μονο ένα tail pointer και μια σωστή υλοποίηση linked list. http://en.wikipedia.org/wiki/Linked_list

 

6. Η έκφραση στην αντίστοιχη RPN:

2 10 2 + 8 3 - * +

Γράψε κατάλληλο reader που να διαβάζει αριθμούς και σύμβολα πράξις, κάθε αριθμό θα τον κατοχυρώνεις στο lifo με push, και κάθε πράξη θα την εκτελείς με δυο pop.

http://en.wikipedia.org/wiki/Reverse_Polish_notation

 

Οκ του έδωσες μια κατεύθυνση για να ξέρει πως θα τα υλοποιήσει!

 

C6WGMN μην ανησυχείς, στον ιδιωτικό τομέα δεν μετράνε τα πτυχία και τα Πανεπιστήμια!

Δημοσ.

Φίλτατοι μου, δεν περίμενα να μου λύσετε όλες τις ασκήσεις, αλίμονο, ενα guide line περίμενα... Και ευχαριστώ όσους βοήθησαν.

 

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

 

Το οτι έχουν κάποιοι απωθημένα απο προηγούμενες άτυχες εμπειρίες, τι να κάνουμε συμβαίνουν σε όλους μας αυτά τα πράγματα...

 

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

 

Ευχαριστώ και πάλι.

Δημοσ.
Φίλτατοι μου, δεν περίμενα να μου λύσετε όλες τις ασκήσεις, αλίμονο, ενα guide line περίμενα... Και ευχαριστώ όσους βοήθησαν.

 

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

 

Το οτι έχουν κάποιοι απωθημένα απο προηγούμενες άτυχες εμπειρίες, τι να κάνουμε συμβαίνουν σε όλους μας αυτά τα πράγματα...

 

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

 

Ευχαριστώ και πάλι.

 

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

Δημοσ.

[Μάρθα Βούρτση και Νίκος Ξανθόπυλος mode... εεε]

 

...

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

 

Ευχαριστώ και πάλι.

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

ασε που υπάρχουν και άτομα (και στο φορουμ αυτό) που δεν μπορεσαν να σπουδάσουν και απο μεράκι θέλουν να μάθουν και ασχολούνται...

 

υγ. παράλογος κόσμος; χμμμ πράγματι το αρχικό σου μήνυμα δείχνει να έχεις δίκιο:o

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...