Title: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: timon on May 19, 2009, 10:56:35 am Εργασία E Ένα δίκτυο μετάδοσης εντολών, από ένα κεντρικό σταθμό προς έναν αριθμό υποσταθμών είναι, οργανωμένο με τη μορφή δυαδικού δένδρου. Για κάθε σταθμό υπάρχει ένας σταθμός από τον οποίο δέχεται εντολές και δύο σταθμοί προς τους οποίους διαβιβάζει εντολές. Όταν μια εντολή περνά από έναν ενδιάμεσο σταθμό si υφίσταται μια καθυστέρηση di. Όταν στον κεντρικό σταθμό s0 δοθεί μια εντολή η οποία πρέπει να διαβιβασθεί προς τον σταθμό sk ζητείται να βρεθεί ο χρόνος που θα χρειαστεί για να φτάσει η εντολή στον προορισμό της και οι σταθμοί από τους οποίους θα περάσει. Να γραφεί το πρόγραμμα στο οποίο να ορίζεται η συνάρτηση recur η οποία να δέχεται, μέσα από τα ορίσματά της, την ταυτότητα του σταθμού προς τον οποίο θα διαβιβαστεί η εντολή και με μια recursion διαδικασία βρίσκει τη διαδρομή που θα ακολουθήσει η εντολή για να φτάσει στο σταθμό αυτόν. Η συνάρτηση main του προγράμματος να διαβάζει τον αριθμό των σταθμών και το χρόνο καθυστέρησης σε κάθε έναν από αυτούς, να διαβάζει τον σταθμό προορισμού και να καλεί τη συνάρτηση recur για να βρει τη διαδρομή που θα ακολουθήσει η εντολή για να φτάσει στον προορισμό της. Στη συνέχεια να υπολογίζει και να εκτυπώνει το χρόνο που θα χρειαστεί για να φτάσει η εντολή στον προορισμό της και τη διαδρομή που θα ακολουθήσει. Η μνήμη για την καταχώρηση των πινάκων που θα χρειαστούν στο πρόγραμμα να δεσμεύεται δυναμικά. Βοηθητικές παρατηρήσεις Για τη δημιουργία του δένδρου να ληφθεί υπ’ όψη ότι ο κάθε υποσταθμός λαμβάνει εντολές από έναν μόνο σταθμό και διαβιβάζει εντολές αποκλειστικά σε δύο μόνο υποσταθμούς (δυαδικό δένδρο) Η καταχώριση της δομής του δυαδικού δένδρου να γίνεται σε ένα πίνακα με δυο στήλες στον οποίο σε κάθε γραμμή να αντιστοιχεί ένας σταθμός και ως στοιχεία της γραμμής να καταχωρούνται οι ταυτότητες των σταθμών προς τους οποίους αυτός διαβιβάζει εντολές. Ως ταυτότητες στους σταθμούς να δοθούν οι αντίστοιχοι αριθμοί των γραμμών του πιο πάνω πίνακα. Στον πίνακα αυτόν για τους σταθμούς που βρίσκονται στα φύλλα του δένδρου και για τους οποίους δεν υπάρχουν σταθμοί προς τους οποίους θα διαβιβάσουν εντολές να καταχωρείται η τιμή -1 στις αντίστοιχες θέσεις. Συμβουλευτείτε και το eThmmy για το Δένδρο και τον Πίνακα που είναι σε αρχείο word στο υλικό του μαθήματος Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 19, 2009, 11:17:23 am ΚΑΤΕΒΑΣΤΕ ΤΟ ΑΡΧΕΙΟ .doc.....εχει το δεντρο οπως πρεπει να ειναι!!!!
εδιτ...το αρχειο .doc (για οσους δεν το ξερουν) βρισκεται στην καρτελα υλικο μαθηματος--->εργασιες.... κατεβαστε την και απο δω αμα θελετε! Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 19, 2009, 11:29:17 am παρακληση...μην αρχισετε παλι τα ακαταπαυστα ποστς...διαβαστε και λιγο την ασκηση πριν ρωτησετε κατι γιατι πραγματικα στο τοπικ για την προηγουμενη εργασια δεν βγαζεις ακρη...
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 20, 2009, 00:31:20 am Πως κάνω malloc σε δισδιάστατο πίνακα?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 00:44:24 am Γενικά αν καποιος μπορεί να εξηγησει με απλά λογια τη διαδικασία δυναμικής δεσμευσης μνημης..... :D
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 00:47:30 am Πως κάνω malloc σε δισδιάστατο πίνακα? Code: int **vlammeno; Ή και με for μπορείς να το κάνεις το β' σκέλος. Αντίστοιχα προχωράς για 2-3-4.... διαστάσεις. SOS - μην ξεχνάτε να ΕΛΕΓΧΕΤΕ μετά από κάθε malloc την περίπτωση OUT OF MEMORY (aka vlammeno == NULL, κοκ). Ο Κορτέσης είναι ό,τι να 'ναι, έτσι; Βασικά προβλήματα που εντόπισα:
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 20, 2009, 00:49:56 am Μ' αρέσει που ήρθα σήμερα σπίτι με την νοοτροπία ότι θα ξεπετούσα την άσκηση στα γρήγορα και θα είχα αρκετό χρόνο και για την άσκηση στα ψηφιακά,χαχα έλεος είμαι ώρες-ώρες
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 00:58:27 am Επίσης έχετε υπόψην ότι θα χρειαστείτε για την recur κάποιον αλγόριθμο διάσχισης γράφου ή έστω... γιαλαντζί γράφου εν προκειμένω, ούτε καν structs δεν έχουμε.
Από εδώ: http://en.wikipedia.org/wiki/Graph_traversal Μπορείτε να ρίξετε μια ματιά. (BFS or DFS I'd say) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 01:00:49 am Φίλε Γιώργο επειδή σε κόβω αλάνι, αμα καποια στιγμη βρεις χρονο και εχεις διαθεση και δεν εχεις τιποτα χειροτερο να κανεις, μηπως σου ειναι ευκολο να εξηγησεις τη λογικη της δυναμικής δέσμευσης μνημης, τουλαχιστον τα πρακτικα που θα μας χρειαστουν για να λυσουμε την ασκηση. Θα σωσεις πολυ κοσμο... ;D
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 01:11:34 am Κοίτα.... δες ένα απλό παράδειγμα να στο κάνω λιανά.
block #1: Code: int table[5]; block #2: Code: int *table; Τα δύο blocks κάνουν ακριβώς το ίδιο, δεσμεύουν πέντε θέσεις "πίνακα" για ακέραιους. Το πρώτο block είναι απλό, το καταλαβαίνεις. :) Όσον αφορά το 2ο block, εκεί όρισα την table σαν δείχτη σε Int. Γενικά, για την C, δείκτης και πίνακας είναι το ίδιο πράμα. Αυτό που σε ενδιαφέρει είναι ότι: με την malloc λέω στο λειτουργικό σύστημα να πάρει 5 (συνεχόμενες νομίζω) θέσεις μνήμης, να τις οργανώσει όπως αυτή ξέρει και να λινκάρει τον δείκτη table στο πρώτο στοιχείο της. Δηλαδή όταν γράφεις *table (δηλαδή εκεί που δείχνει ο δείκτης) είναι το ίδιο γράφοντας table[0]. Αντίστοιχα, το table[1] είναι επόμενη διεύθυνση μνήμης μετά το table[0]. Νομίζω είναι μετά 4 bytes, αλλά δεν σε ενδιαφέρει, καθώς η malloc έχει φροντίσει να "διαχωρίσει" τις θέσεις μνήμης κατάλληλα ώστε όταν γράφεις table[1] να ξέρει να πάει στην επόμενη θέση μνήμης. Το 5*sizeof(int) λέει στην malloc αυτό, να επιστρέψει 5 θέσεις μνήμης με μέγεθος όσο είναι το μέγεθος του τύπου για int. Το (int *) μπροστά απ' την malloc είναι απλά ένα casting που πρέπει να μπαίνει γιατί η malloc είναι void. Υποθέτω ότι μπαίνει ώστε να ξέρει ότι τα 30 bytes (5*4) να τα χωρίσει σε 5 blocks των int. Τώρα γιατί να το κάνεις αυτό; Γιατί έτσι μπορείς να δεσμεύσεις πίνακα σε οποιοδήποτε σημείο του προγράμματος, καθώς μπορεί να μην ξέρεις εξ' αρχής το μέγεθος. [Σημείωση: η αλήθεια είναι ότι η C νομίζω το επιτρέπει να δηλώσεις int table[5]; στην μέση του προγράμματος, αλλά η C99 νομίζω δεν το επιτρέπει....] Επίσης είναι ιδιαίτερα χρήσιμο όταν δεσμεύεις χώρο για δομές δεδομένων (structs) που μπορεί να θέλουν μπόλικη μνήμη. Εάν το λειτουργικό σύστημα δεν έχει την απαιτούμενη μνήμη που ζητάς, τότε η malloc επιστρέφει NULL. Γι' αυτό ελέγχουμε πάντα μετά από μια malloc αν το αποτέλεσμα είναι NULL και αν ναι, γράφουμε μήνυμα λάθους και τερματίζουμε επί τόπου το πρόγραμμα. ps: πιθανώς οι περισσότεροι να ξεπαρθενευτείτε σε αυτήν την άσκηση με το πρώτο σας segmentation fault (http://en.wikipedia.org/wiki/Segmentation_fault). :) Δεν 'ναι τίποτα, κάποια μαλακία θα 'χει παιχτεί με την δέσμευση μνήμης ή με προσπέλαση σε μνήμη που δεν έχει δεσμευθεί. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 01:21:14 am παιδι γραφεις,,,, 8)
μπυρες και πουπουλα! ;D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 20, 2009, 01:22:24 am ας κανει και τοπικ να εξηγει για να το δουνε περισσοτεροι!ολοι θα το χρειαστουν!
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 01:25:08 am Παιδιά, για ό,τι χρειαστείτε υπάρχει topic :: βοηθητικά links (http://www.thmmy.gr/smf/index.php?topic=24721.0)!
Πχ αν πάτε στο πρώτο link, έχει αυτό το άρθρο: malloc & free (http://computer.howstuffworks.com/c29.htm) - διαβάστε το! Είναι μεγαλούτσικο, μην τρομάξετε, αλλά άμα κάτσετε με υπομονή τα λέει άψογα. Η μαγεία είναι να ψάχνεις μόνος σου. :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 20, 2009, 01:26:20 am νταξει δεν διαφωνω απλα δεν καταλαβαινω και πολυ αγγλικα !
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 20, 2009, 01:26:57 am [Σημείωση: η αλήθεια είναι ότι η C νομίζω το επιτρέπει να δηλώσεις int table[5]; στην μέση του προγράμματος, αλλά η C99 νομίζω δεν το επιτρέπει....] νομίζω ισχυει το αντίστροφο... και φυσικά μη ξεχνάτε να κάνετε στο τέλος του προγράμματος, ένα ωραίο, ανούσιο free!!! Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 01:27:52 am νταξει δεν διαφωνω απλα δεν καταλαβαινω και πολυ αγγλικα ! Ορέστη, όλα είναι θέμα συνήθειας. Give it a try. :) Δεν διαβάζεις ντε και λογοτεχνικό κείμενο, :P είναι πράγματα που αν μη τι άλλο ΠΡΕΠΕΙ να τα γνωρίζεις στα Αγγλικά. :) Τι δεν καταλαβαίνεις, το memory allocation? :P νομίζω ισχυει το αντίστροφο... Whatever. ^moon^ :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 20, 2009, 01:31:09 am Τι δεν καταλαβαίνεις, το memory allocation? :P τι σημαινει? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 20, 2009, 01:33:16 am Google!!!
http://www.wordreference.com/engr/Allocate Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 20, 2009, 01:33:26 am http://translation.babylon.com/English/to-Greek
http://www.logografos.gr/log.aspx px why dont you play with your smurfs? Γιατι δεν παιζεις με τα στρουμφακια σου? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: El Niño on May 20, 2009, 01:34:58 am http://translation.babylon.com/English/to-Greek οκ ευχαριστω παιδια...http://www.logografos.gr/log.aspx px why dont you play with your smurfs? Γιατι δεν παιζεις με τα στρουμφακια σου? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 15:28:58 pm Με τις δηλωσεις δυναμικης μνημης ολα καλα...
απ'οτι καταλαβα παντως ο pointer οπως ο Γιωργος ειναι το ιδιο πραγμα με τον πινακα δλδ το σετ εντολων Code: int *table; φτιαχνει ενα πινακα 5 θεσεων. πως ομως εγω μπορω να γραψω ενα αριθμο για παραδειγμα στην 4η θεση του πινακα; με αλλα λογια, πως το χειριζομαι; :D :D :D :D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Wanderer on May 20, 2009, 15:59:12 pm Έχεις τον pointer table που δείχνει στην πρώτη θέση 5 θέσεων ακεραίων αριθμών
Για να πας στον pointer που δείχνει στη 2η θέση, απλά γράφεις table+1. Για να δεις/επεξεργαστείς/προσπελάσεις την τιμή του στοιχείου που βρίσκεται στη θέση table+1, γράφεις *(table+1). Έτσι για το 4ο στοιχείο αν θες να δώσεις τιμή π.χ. 100 γράφεις *(table+3)=100; Ετσι αν γράψεις printf("%d",*(table+3)); θα δεις στην οθόνη τον αριθμό 100. ... Επειδή είναι pointer, αν θες να δώσεις με scanf τιμή, προφανώς δεν χρησιμοποιείς το σύμβολο &, γράφεις κατευθείαν scanf("%d", (table+3) ); Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 16:01:11 pm οκ...να 'σαι καλα! :) :) :) :) :) :)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Wanderer on May 20, 2009, 16:07:34 pm Xm μακάρι να'μαστε όλοι καλά :D :)
Τώρα που βλέπω και το ποστ του Γιώργου, θυμήθηκα ότι μπορείς να γράψεις και table[3]=100;, δλδ να τους αντιμετωπίσεις όπως αντιμετώπιζες τους static πίνακες. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 16:08:49 pm αυτο ειναι πιο απλο....
αρα και εδω η αριθμηση του δεικτη ξεκινά απο το 0;;; Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Wanderer on May 20, 2009, 16:09:22 pm Ε ναι προφανώς ;)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 16:11:26 pm μπυρες και πουπουλα και σε σενα λοιπον... :P
επισης κατι σε σχεση με το συνολο της εργασιας: χρειαζεται πουθενα (υποχρεωτικα) να χρησιμοποιησουμε δομές κτλ;; ::) ::) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 16:15:56 pm πως ομως εγω μπορω να γραψω ενα αριθμο για παραδειγμα στην 4η θεση του πινακα; table[3] = 100; :)με αλλα λογια, πως το χειριζομαι; :D :D :D :D Κανονικότατα σαν πίνακας. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 20, 2009, 16:24:09 pm Η συνάρτηση recur δεν είναι απαραίτητα void έτσι?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 16:25:38 pm Επειδή είναι pointer, αν θες να δώσεις με scanf τιμή, προφανώς δεν χρησιμοποιείς το σύμβολο &, γράφεις κατευθείαν scanf("%d", (table+3) ); αν το χρησιμοποιω στη μορφη table, τοτε με το scanf θα ειναι scnaf("%d",&table) ή το ιδιο; διοτι πειραματιστηκα και κρασαρει το προγραμμα οταν δεν εχω το συμβολο & Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 20, 2009, 16:28:33 pm Επειδή είναι pointer, αν θες να δώσεις με scanf τιμή, προφανώς δεν χρησιμοποιείς το σύμβολο &, γράφεις κατευθείαν scanf("%d", (table+3) ); αν το χρησιμοποιω στη μορφη table, τοτε με το scanf θα ειναι scnaf("%d",&table) ή το ιδιο; διοτι πειραματιστηκα και κρασαρει το προγραμμα οταν δεν εχω το συμβολο & ε ναι σε αυτή την περίπτωση το table[ i ] δεν είναι pointer ,άρα πρέπει να βάλεις το & Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 16:29:48 pm Η συνάρτηση recur δεν είναι απαραίτητα void έτσι? Όχι. ;) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 16:40:32 pm χρησιμοποιώντας ενα ετοιμο αλγοριθμο για να βρουμε τη διαδρομη μεσω της recur που ειναι και το ζουμι της ασκησης
πως θα το επιστρεψουμε στη main; επισης στη main πως θα γινεται ο υπολογισμος του χρονου; πχ αν εχουμε μια εντολη που μεταβιβαζεται απο το 0 (απο που αραγε;γινεται να δωσουμε εντολη στο 3 και αυτο να την επιστρεψει στην 1;) στο 8 τοτε θα ακολουθησει τη διαδρομη 0-1-3-8 και ο χρονος ειναι t1+t3+t8... Σωστα; ::) ::) ::) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 16:49:41 pm Απ' αυτά που 'χω καταλάβει, στην main επιστρέφεις την συνολική καθυστέρηση. ;)
Την διαδρομή θα την τυπώνει η rec. Το πώς θα την τυπώνει .... το αφήνω προς το παρόν να το σκεφτείς. Hint: με την υλοποίηση που έχω στο νου μου η διαδρομή θα τυπωθεί ανάποδα. :) Δηλαδή από τον κόμβο-παραλήπτη προς τον κεντρικό. [Γιατί αυτό μου φαίνεται πιο εύκολο] Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 20, 2009, 17:06:50 pm υπαρχουν καμποσοι τροποι να τυπωθει η διαδρομη οπως το σκεφτομαι.
τωρα δεν ξερω ποιος υλοποιειται πιο ευκολα... μια ερωτηση: η αρχικη εντολη δινεται παντα στον κομβο που θεωρουμε κεντρικό;(εγώ πχ τον κομβο 0) παντως συμφωνα με τη συνταξη της εκφωνησης: η main υπολογιζει και τυπωνει την ολικη καθυστερηση η main τυπωνει τη διαδρομη ..... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 17:32:43 pm παντως συμφωνα με τη συνταξη της εκφωνησης: η main υπολογιζει και τυπωνει την ολικη καθυστερηση η main τυπωνει τη διαδρομη ..... ................................................. .. (Where's pacman when you need him?) Το μόνο που μπορώ να σκεφτώ είναι να φτιάξεις μία στοίβα και οι recursives να αρχίζουν να την γεμίζουν (από το τέλος προς την αρχή μάλιστα). Από εκεί και πέρα πράγματι, είναι απλό για την main. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ggpyr on May 20, 2009, 18:11:52 pm Code: int **vlammeno; Αυτός ο κώδικας δεν θα μας δημιουργήσει έναν πίνακα vlammeno[2][N]? και όχι [Ν][2]??? :-\ (ή μήπως αυτό θέλουμε??) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 20, 2009, 18:34:47 pm Ε, ναι, θα δημιουργήσει το vlammeno[2][N]. Αλλά μάλλον θέλουμε αυτό που 'πες εσύ, οπότε it's the other way around.
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 20, 2009, 21:53:44 pm Η αρχικοποίηση μιας static μεταβλητής γίνεται μόνο μία φορά,σωστά?Με την 1η κλήση της συνάρτησης ας πούμε?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: diutinus on May 21, 2009, 01:05:17 am Να ρωτήσω 2 πράγματα κι εγώ (πολύ χρήσιμα μέχρι στιγμής τα όσα είπατε, θνξ ;) ).
1. Ο χρόνος καθυστέρησης είναι ίδιος για κάθε σταθμός 2. Όταν λέμε recursion, πώς ακριβώς το εννοούμε;; Δλδ απλά γενική επανάληψη, ή η recur να καλεί τη recur να καλεί τη recur να καλεί τη recur να καλεί τη recur κλπ ;;; Κάτι δεν πολυέπιασα εδώ... Έχασα επεισόδια; :) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 21, 2009, 01:15:18 am 1. όχι, δεν είναι ίδιος
2. η recur καλεί τον εαυτό της 2 φορές μέχρι να βρει τον σταθμό ή να πέσει σε φύλλο. :) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 21, 2009, 11:13:00 am Δλδ οι κόμβοι είναι standard όπως το σχήμα?Τότε γιατί λέει να διαβάζει τον αριθμό των σταθμών?Κι αν διαβάζει τον αριθμό των σταθμών δεν θα προκύπτουν περισσότερα επίπεδα για ένα ενδεχόμενα μεγάλο αριθμό σταθμών?Δλδ παραπάνω από 2 κλήσεις της recur?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ggpyr on May 21, 2009, 11:21:25 am Για να πάει π.χ. στο 3 (δλδ θα αρχίσει απο το 0 θα περάσει από το 1 και θα καταλήξει στο 3) πόσες καθυστερήσεις θα έχει
edit:βασικά πείτε ότι καταλαβένεται γιατί εγώ δεν κατάλαβα πολλά... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 21, 2009, 11:32:49 am Το σχήμα είναι παράδειγμα. :) Μπορείς να ορίσεις και δικές σου τοπολογίες...
Απ' ό,τι έχω καταλάβει εγώ... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ggpyr on May 21, 2009, 11:38:57 am επειδή όμως η εκφώνηση λέει "Όταν μια εντολή περνά από έναν ενδιάμεσο σταθμό si υφίσταται μια καθυστέρηση di."
Άρα υπέθεσα οτι για να πάει μία εντολή απο τον 0 στον 3 θα έχει μόνο, ως καθυστέρηση, την d1 (και όχι d0+d1+d3) Αυτό εννοεί??? ^dontknow^ Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 21, 2009, 11:57:10 am Ναι, υφίσταται μία καθυστέρηση di. Αν περάσει από 3 κόμβους τότε θα έχει 3 καθυστερήσεις. :)
Δηλαδή και του d0 (καθυστέρηση αποστολής) και του d1 (καθυστέρηση μετάδοσης) και του d3 (καθυστέρηση λήψης). Disclaimer: όλα τα παραπάνω πάντα σύμφωνα με το όπως έχω καταλάβει εγώ την άσκηση, αν ο Κορτέσης ήθελε κάτι άλλο ας το διευκρίνιζε. :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 21, 2009, 21:05:16 pm Η εντολή return 0; τερματίζει όλο το πρόγραμμα?Αν θέλω απλά να επιστρέψω στην υπορουτίνα που κάλεσε ας πούμε την αναδρομική μου συνάρτηση τί κανω?Έχω μια recursive float συνάρτηση και θέλω να αρχίσει να επιστρέφει μια float τιμή αν μια συνθήκη είναι αληθής ή απλά να επιστρέφει χωρίς να τερματίζει το πρόγραμμα αν είναι ψευδής.
edit: η return 0.0; να υποθέσω? edit2: return 0.0 με το σκεπτικό να προσθέτει 0 aka να μην κάνει τπτ αν η συνθήκη είναι ψευδής? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 21, 2009, 21:29:53 pm αν είναι μέσα σε συνάρτηση δε τερματίζει το πρόγραμμα, απλά επιστρέφει 0
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 21, 2009, 21:49:25 pm Η return απλά τερματίζει την συνάρτηση στην οποία την γράφεις. Για να τερματίσεις όλο το πρόγραμμα από οποιοδήποτε σημείο:
exit(1) Θα την βρεις στην αγαπημένη μας stdlib.h <3 Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 21, 2009, 23:15:42 pm Ρε παιδιά,τι δεν καταλαβαίνω?Έχω δηλώσει έναν pointer σε int και θέλω να μην κάνει την if αν η τιμή αυτού που δείχνει είναι 0.Έχω τον παρακάτω κώδικα:
int *s....κτλ....; .... for(i=0;i<stathmoi;i++){ printf("\nDwse tautothta %dou stathmou : ",i+1); scanf("%d",s); if(*s=!0){ printf("\nDwse stathmo apo ton opoio lamvanei o %d stathmos : ",i+1); scanf("%d",&from[ i ]); } } και στην κονσόλα αν δώσω τιμή 0 όταν μου ζητάει ταυτότητα 1ου σταθμού μου ζητάει παρόλα αυτά την "Dwse stathmo apo ton opoio lamvanei o %d stathmos :"....why it failed is beyond me.... edit:τελικά άλλαξα την συνθήκη σε (!(*s==0)) και τώρα δουλεύει,τώρα γιατί το (!(*s==0)) είναι διαφορετικό από το (*s=!0) αν κατάλαβε κανείς ας πει και σε μένα. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 21, 2009, 23:33:53 pm είναι != , όχι =!, μάλλον αυτό φταίει
μπορείς να το γράψεις απλά if (*s) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 21, 2009, 23:36:31 pm lol δν το πρόσεξα,thx ρε emfa,το έκανα και με εξωτερική not anyways.
edit:υπάρχει τελεστής =! ?????Και πως τον ανακάλυψα εγώ πρώτος?(θα θελα) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 22, 2009, 14:58:22 pm Πολλές ασάφειες προκύπτουν και εδώ,κατ' αρχήν δεν πρέπει να κάνουμε έλεγχο αν οι σταθμοί στους οποίους στέλνει ο κάθε σταθμός όντως υπάρχουν και συνολικός αριθμός των σταθμών δεν υπερβαίνει τον αρχικό που ορίζουμε?Μπλέκει πολύ το πράγμα...
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ggpyr on May 22, 2009, 15:09:44 pm Πολλές ασάφειες προκύπτουν και εδώ,κατ' αρχήν δεν πρέπει να κάνουμε έλεγχο αν οι σταθμοί στους οποίους στέλνει ο κάθε σταθμός όντως υπάρχουν και συνολικός αριθμός των σταθμών δεν υπερβαίνει τον αρχικό που ορίζουμε?Μπλέκει πολύ το πράγμα... Τί εννοείς τον αρχικό που ορίζουμε...αφού κάνουμε δυναμική δέσμευση μνήμης και ο πίνακας Θα έχει Ν κελιά...όσα δώσαμε σαν είσοδο Πρώτα δίνεις το Ν μετά κάνεις malloc Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 22, 2009, 15:16:32 pm Ναι,λογικά δεν θα προκύπτει κάποιο σφάλμα αν εκεί που σου ζητάει να δώσεις τους σταθμούς στους οποίους αποστέλει ο κάθε σταθμός,βγαίνει συνολικά διαφορετικό νούμερο από το n?Π.χ λες εσύ στην αρχή ας πούμε n=5(το διαβάζει) και μετά για τους 5 σταθμούς σε ρωτάει σε ποιους αποστέλει ο καθένας.Μπάχαλο...
σωστός ο fel (στο επόμενο post),μαλλον πρέπει να διαβάζω προσεκτικότερα τις εκφωνήσεις :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ggpyr on May 22, 2009, 15:41:32 pm Code: k=0; (όπως στο παράδειγμα με τους 15 σταθμούς που έδωσε ο κορτέσης) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 23, 2009, 18:08:49 pm Ας ρωτήσω κι εγώ κάτι...
Έχω γράψει την recur έτσι ώστε να μου τυπώνει τους σταθμούς τους οποίους ακολουθεί το σήμα... Τί πρέπει να κάνω τώρα για να υπολογίζω τους χρόνους... (σ.σ. φαντάζομαι ότι ο υπολογισμός αυτός θα γίνεται στην main γιατί στην recur είναι αρκετά πιο εύκολο να γίνει.) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 23, 2009, 18:20:42 pm Ε, κοίτα, άμα ξέρεις από ποιους κόμβους περνάς, αυτόματα να γνωρίζεις και την καθυστέρηση που υφίσταται το σήμα σου σε κάθε έναν απ' αυτούς.
Ρίξε εκεί μια σούμα κι είσαι έτοιμος. :) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 23, 2009, 18:32:18 pm Παιδιά,εσείς τι ορίσματα βάλατε στην συνάρτηση?Τους pointers ή τους πίνακες?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 23, 2009, 18:41:16 pm Ε, κοίτα, άμα ξέρεις από ποιους κόμβους περνάς, αυτόματα να γνωρίζεις και την καθυστέρηση που υφίσταται το σήμα σου σε κάθε έναν απ' αυτούς. Ρίξε εκεί μια σούμα κι είσαι έτοιμος. :) Ξέρω από ποιούς κόμβους περνάω αλλά δεν πρέπει κάπου να τους αποθηκεύσω ώστε να προσθέσω μετά την καθηστέριση;;; Δεν έχω βρεί τρόπο να το κάνω αυτό ακόμα και ζητώ βοήθεια από τους πανμέγιστους βασιλιάδες μεγαλύτερους ηλεκτρολόγους!!!! Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 23, 2009, 18:54:35 pm Φτιάξε μία στοίβα. :)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΚΗΜΜΥ on May 23, 2009, 19:23:25 pm Τον πινακα που εχει στο σχημα, θα τον διαβαζει το προγραμμα από τον χρηστη ή θα τον γεμισουμε εμεις με πραξουλες?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 23, 2009, 19:28:41 pm Πραξούλες,με μόνη παράμετρο τον αριθμό των σταθμών(αρ.γραμμών).Επίσης έχω την εντύπωση ότι όταν διαβάζει τον αριθμό των σταθμών πρέπει να κάνεις κάπου έλεγχο αν ο αριθμός που εισάγεις είναι περιττός(επειδή έχεις δυαδικό δέντρο).Διορθώστε με αν κάνω λάθος.
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 23, 2009, 19:30:27 pm Φτιάξε μία στοίβα. :) Όταν λες στοίβα τι εννοείς... Κοίταξα στις σημειώσεις και δεν βρήκα κάτι... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΚΗΜΜΥ on May 23, 2009, 19:30:54 pm Επίσης έχω την εντύπωση ότι όταν διαβάζει τον αριθμό των σταθμών πρέπει να κάνεις κάπου έλεγχο αν ο αριθμός που εισάγεις είναι περιττός(επειδή έχεις δυαδικό δέντρο).Διορθώστε με αν κάνω λάθος. Noμιζω οτι εισαι σωστός αλλα ο Κορτεσης ειπε μεταξυ μας να τα αφησουμε αυτα...Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 23, 2009, 19:35:57 pm Όταν λες στοίβα τι εννοείς... Κοίταξα στις σημειώσεις και δεν βρήκα κάτι... http://en.wikipedia.org/wiki/Stack_(data_structure) (http://en.wikipedia.org/wiki/Stack_(data_structure)) :) Πρακτικά δηλαδή ένας εξτρά πίνακας (μπορείς και με λίστες, αλλά μάλλον δεν σας τα 'χουν πει :P) στον οποίο θα αποθηκεύεις (αναδρομικά) τους κόμβους από τους οποίους διέρχεται το σήμα σου. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 23, 2009, 19:38:06 pm Ε δεν είναι και τρομερή καταπόνηση να βάλεις την loop
do{ printf("Dwse arithmo stathmwn : "); scanf("%d",&stathmoi); }while(!(stathmoi%2)); :P edit:τώρα μοιάζει πιο σωστό,η κεκτημένη ταχύτητα καμιά φορά... edit2:πολύ σχολαστικός ο Γιώργος :o Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 23, 2009, 19:43:57 pm Δεν είναι απαραίτητο το δυαδικό δέντρο να είναι balanced. ;)
Οπότε και άρτιος αριθμός κόμβων νομίζω ότι στέκει. Ε δεν είναι και τρομερή καταπόνηση να βάλεις την loop do{ printf("...."); scanf("%d",stathmoi); }while(stathmoi%2); :P Ντάμπλιγιου-τι-εφ~! :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: MaGill on May 24, 2009, 13:08:59 pm Έχει κάποιος την καλοσύνη να δώσει μια ιδέα για τη μορφή της recur?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 13:10:46 pm Έχει κάποιος την καλοσύνη να δώσει μια ιδέα για τη μορφή της recur? Αμέ. :) Αν:
Τότε ........ παίξε μπάλα. Πρακτικά υλοποιείς αυτό >> http://en.wikipedia.org/wiki/Depth-first_search Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 13:13:25 pm Δεν ξέρω αν έχει ποσταριστεί αλλά δείτε εδ (http://en.wikipedia.org/wiki/Binary_tree#Methods_for_storing_binary_trees)
edit:με αυτή την wikipedia...μασημένη τροφή :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: MaGill on May 24, 2009, 13:30:38 pm Χωρίς να διαβάσω τα λινκς, μου ήρθε η εξής ιδέα:
Έχουμε έτοιμο τον πίνακα 2χ2. recur(s) for i 0-N for j 0-N if s(i,j)=s print pernaei apo ton *s(i,j) p=s(i,j) recur(p) else print Einai o protos komvos Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Andre on May 24, 2009, 13:35:48 pm Έχω το εξής πρόβλημα:
Έχω κατανείμει δυναμικά τη μνήμη για 2D πίνακα ως εξής: Code: int**pinakas; Στην αρχή λοιπόν, όταν εισάγω τον αριθμό των κόμβων, και αυτός είναι περιττός, σταματά το πρόγραμμα. Αυτό δε συμβαίνει για ζυγούς αριθμούς. Μπορεί κάποιος να βοηθήσει? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 13:42:09 pm Ναι, εκ πρώτης όψεως σωστή φαίνεται η δυναμική δέσμευση.
Σου βγάζει κάποιο μήνυμα λάθους; Επίσης γιατί να είναι ντε και καλά περιττός; Δεν λέει κάπου ότι το δέντρο θα είναι balanced. :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Andre on May 24, 2009, 13:57:03 pm Σου βγάζει κάποιο μήνυμα λάθους; Δεν βγάζει μήνυμα λάθους.Επίσης γιατί να είναι ντε και καλά περιττός; Δεν λέει κάπου ότι το δέντρο θα είναι balanced. :P Απλά όταν εισάγω περιττό αριθμό κόμβων, σταματά το πρόγραμμα. Δε θέλω οπωσδήποτε να είναι περιττός, αλλά θα έπρεπε να τρέχει ούτως ή άλλως! Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 14:06:39 pm Έχεις βάλει καμιά if όταν είναι περιττός ο N; :P
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: MPIGKAS on May 24, 2009, 14:12:31 pm to dentro mpori na exei kai afti ti morfi???
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 14:14:06 pm Γιατί όχι; Δεν το απαγορεύει η εκφώνηση νομίζω...
Εκτός αν πρέπει να μας έρθει η έμπνευση ότι ο Κορτέσης το θέλει όπως ακριβώς στο .doc και αυτό να μας έρθει έπειτα από 512 συνειρμούς. :D Το .doc νομίζω είναι παράδειγμα, δεν λέει ότι ντε και καλά θα 'ναι έτσι το δέντρο. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 14:26:57 pm Πάντως είναι αξιοπερίεργο πως ένα απλό & που δεν έβαλα κάπου μου έχει προκαλέσει άπειρα runtime errors και σπάσιμο νεύρων.Όπως λέει και ο Herbert Schield(ή όπως σκ@τ@ λέγεται) τίποτα δεν μπορεί να σου προκαλέσει περισσότερα προβλήματα από έναν... αδέσποτο pointer
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 24, 2009, 14:57:29 pm Έχω βρεί αυτόν (http://www.java2s.com/Code/C/Data-Structure-Algorithm/StackinC.htm) τον αλγόριθμο για την στοίβα...
Ειναι σωστός και αν ναι πως ξέρω πόσα στοιχεία έχει και πώς τα καλώ???????????????? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 14:58:51 pm Απίστευτο κι ' όμως αληθινό.Την έκανα!!!!!!!!!
^peace^ ^peace^ ^peace^ ^peace^ ^peace^ ^peace^ ^peace^ ^peace^ ^peace^ ^peace^ edit:(i should probably get a life now :o) edit2:(λέω να την γράψω και σε leet τώρα,ξέρω γω κάπως έτσι: if(d==NULL){ printf("M3m0ry f@1lur3..u rly 5cr3w3d up 7h15 71m3 :)"); exit(1); } Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: MaGill on May 24, 2009, 15:16:49 pm Φίλε για Πληροφορική ήσουν και τα μπέρδεψες...
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Captain Mixos on May 24, 2009, 15:58:08 pm να ρωτησω...πειραζει αν η recur δεν καλει τον εαυτο της αλλα την ξανακαλω εγω μεσα απο ενα loop???? ή η εννοια recursion περιλαμθανει αποκλειστικα κ μονο καλεσμα της συναρτησης απ τον εαυτο της???
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:04:48 pm to 2o me kapoia epifilaksi
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 16:06:06 pm Το 2ο χωρίς καμία επιφύλαξη...
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:13:28 pm και επιστρεφω με αποριες.... ;D
1. πως φτιαχνουμε τον πινακα συνδεσεων(που πρεπει να γινει υποθετω για να περασουμε στα υπολοιπα) 2. δεν εχω ξεκαθαρισει πως δουλευουμε με το δεντρο,δλδ πως βρισκουμε τον προορισμο 3, που(μεσα στη recur ή στη main) και πως αποθηκευουμε το χρονο καθυστερησης Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 16:20:57 pm 1)Όπως λέει ο κορτέσης(δηλ -1 για τα φύλλα και τα κανονικά νούμερα για τα άλλα).
2)http://en.wikipedia.org/wiki/Binary_tree#Methods_for_storing_binary_trees (http://en.wikipedia.org/wiki/Binary_tree#Methods_for_storing_binary_trees) 3)Στην main,τα διαβάζει. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:26:48 pm 1. θελω να πω οτι ρωταμε το χρηστη με ποια συνδεεται;
2. το εχω δει το link. το εχεις ξεκαθαρισει; μπορεις να το εξηγησεις απλουστερα; οι κομβοι απ'οπου περναει δε θα πρεπει να αποθηκευονται καπως και να επιστρεφονται στη main για να υπολογισθει ο χρονος; Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 16:28:50 pm οι κομβοι απ'οπου περναει δε θα πρεπει να αποθηκευονται καπως και να επιστρεφονται στη main για να υπολογισθει ο χρονος; Ναι χρειάζεται, γιατί δεν υπάρχει τρόπος να πας "προς τα πάνω", μόνο προς τα "κάτω". :) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:30:22 pm και το οποιο γινεται με καποιον τροπο...... ::)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 16:34:26 pm και το οποιο γινεται με καποιον τροπο...... ::) Ε προφανώς. ::) Πχ υλοποιείς μια στοίβα σε πίνακα. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:38:11 pm η στοιβα πως υλοποιεται;
με κλησεις συναρτησεων; η στοιβα εχει στανταρ μεγεθος; Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 16:42:21 pm Γιατί ρε παιδιά στοίβες?I dont get it...
Όχι δεν ρωτάμε τον χρήστη με ποια συνδέεται,η δομή του binary tree είναι κάτι standard,άλλωστε γιατί να μας δώσει το σχήμα ο Κορτέσης?Εξάλλου στο λινκ που παρέθεσα ο τύπος είναι κι' αυτός standard ,δεν ρωτάει κανέναν χρήστη Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Captain Mixos on May 24, 2009, 16:42:50 pm Όμως στοιβα δεν εχουμε μαθει...κ δεν νομιζω να μας εβαζε ασκηση που θα πρεπει να χρησιμοποιήσουμε κατι που δεν μαθαμε.....αρα λογικα θα υπαρχει κι αλλοσ τροπος.... :-\
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 16:43:57 pm δλδ Merlin εσυ πως το κανες;
το δεντρο του Κορτεση ειναι ενδεικτικο, αφου μπορεις πχ να εχεις 100 σταθμους.... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 16:55:50 pm E τα ίδια θα ισχύουν και εκεί απλά θα έχεις περισσότερους σταθμούς.Ρε παιδιά ο τύπος (i-1)/2 ισχύει για 15 αλλά και για 100 σταθμούς.Απλά κάνετε μια typecasting μπροστά:i=(int)((i-1)/2) για να ισχύει και για το αριστερό αλλά και για το δεξύ "παιδάκι" και μετά καλείται αναδρομικά την συνάρτηση με όρισμα i.
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 17:00:39 pm Όμως στοιβα δεν εχουμε μαθει... Στο πανεπιστήμιο θα μάθεις ότι αν θες μια δουλειά να γίνει σωστά πρέπει να την κάνεις μόνος σου. :PΠαιδιά, όταν λέω "στοίβα" σημαίνει απλά ότι αποθηκεύετε σε έναν ξεχωριστό πίνακα τα νούμερα των κόμβων απ' τα οποία θα περνάει το σήμα σας. Αυτή η κουζίνα στοίβα λέγεται :P Πχ στο παράδειγμα: (ΑΓΝΟΕΙΣΤΕ ότι ο 1 έχει 3 "παιδιά", απλά ξεχάστε ότι υπάρχει ο κόμβος 7). (http://upload.wikimedia.org/wikipedia/commons/thumb/1/1f/Depth-first-tree.svg/390px-Depth-first-tree.svg.png) Έστω ότι το σήμα πάει από τον 1 >> 5. Ξεκινάς από τον 1: δεν είναι ο 5, άρα κοιτάς αριστερά και αν χρειαστεί μετά δεξιά. Πας στον 2: δεν είναι ο 5, άρα κοιτάς αριστερά και αν χρειαστεί μετά δεξιά. Πας στον 3: δεν είναι ο 5, άρα κοιτάς αριστερά και αν χρειαστεί μετά δεξιά. Πας στον 4: δεν είναι ο 5, άρα κοιτάς αριστερά και αν χρειαστεί μετά δεξιά. ΟΜΩΣ ο 4 είναι φύλλο, οπότε κάνεις backtracking στον 3 και κοιτάς δεξιά. Είναι ο 5!!! Άρα σε έναν πίνακα αποθηκεύεις τους ενδιάμεσους κόμβους, κάνοντας τα backtrackings: 5 - 3 - 2 - 1 Κάπου πρέπει να τα αποθηκεύσεις αυτά, προφανώς σε πίνακα. Μετά θα τα εκτυπώσετε προφανώς ανάποδα, δηλαδή 1 >> 2 >> 3 >> 5. Απλά αυτή η λειτουργία λέγεται "στοίβα", γι' αυτό το λέω. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 17:01:31 pm Για το δέντρο ας πούμε :
0 / \ 1 2 / \ / \ 3 4 5 6 ο κόμβος 3 θα έχει προηγούμενο κόμβο τον (3-1)/2=1 αλλά και ο 4 θα έχει τον 1 επειδή (int)(4-1)/2=1 Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Captain Mixos on May 24, 2009, 17:06:25 pm ομως το μεγεθος του πινακα με τους ενδιαμεσους δεν το ξερουμε εξ αρχης...πως τον δηλωνουμε?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 17:06:49 pm τι εννοεις κοιτας δεξια-αριστερα...
αυτη η διαδικασια πως υλοποιηται; Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 24, 2009, 17:12:43 pm ομως το μεγεθος του πινακα με τους ενδιαμεσους δεν το ξερουμε εξ αρχης...πως τον δηλωνουμε? Κοίτα, εγώ θα τον έκανα με λίστες μάλλον. :PΑλλά όσον αφορά τον πίνακα, πράγματι δεν ξέρεις το μέγεθός του, οπότε θα δηλώσεις παραπάνω. Η καλύτερη περίπτωση μεγέθους είναι 1 -> 2 -> 3 -> 4 κοκ Και ο κόμβος-προορισμός είναι ο τελευταίος. Ε, εγώ θα δήλωνα μέγεθος N για να 'χω το κεφάλι μου ήσυχο. τι εννοεις κοιτας δεξια-αριστερα... Κάθε κόμβος δεν στέλνει μήνυμα σε άλλους δύο; :) Τους οποίους τους κρατάς σε ένα πίνακα Nx2... Επίσης να προσθέσω ότι δεν θα χρειαζόταν να κρατήσουμε κάπου την διαδρομή αν μπορούσαν οι recur να υπολογίσουν συνολικό χρόνο καθυστέρησης και να τυπώσουν την διαδρομή, αλλά αφού θέλει ο αρχιπρογραμματιστής Κορτέσης να τα κάνει η main(), θα πρέπει κάπου να τα αποθηκεύσουμε. :) Α, για να μην ξεχαστώ: DISCLAIMER: μετά την απομάκρυνση απ' το ταμείο ουδέν λάθος αναγνωρίζεται Ό,τι γράφω είναι πώς θα το υλοποιούσα εγώ, όποιος θέλει να ακολουθήσει αυτή τη λογική it's ok, but I do not guarantee anything :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 17:24:11 pm μου ρθε φλασια με το δεντρακι και μαλλον θα το βγαλω :P
ευχαριστω. μια αλλη απορια.... πως δηλωνουμε δυναμικα δυσδιαστατο πινακα με τη μια διασταση σταθερη και την αλλη μεταβλητη; κατι ειδα αλλα εχει pointers των pointers... αν καποιος μπορει να το πει με δυο λογια 8) και αλλη μια bonus ειπαμε το δεντρο δημιουργειται στη main και το φτιαχνω οπως θελω εγω; :-\ Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 17:58:36 pm Ναι για την δυναμική δέσμευση στην ansi C δουλεύεις με pointers των pointers ω pointers.Η διαδικασία έχει ως εξής:
int i,**table,stathmoi; table=(int **)malloc(stathmoi*sizeof(int)); for(i=0;i<stathmoi;i++){ table[ i ]=(int *)malloc(2*sizeof(int)); } Δες και προηγούμενες σελίδες βρε :P.Τα χουμε πει αυτά.Ναι,το δέντρο το φτιάχνεις εσύ αλλά όχι όπως θέλεις,είναι δυαδικό δέντρο και έχει standard δομή.For the shake of God δείτε λινκς και προηγούμενα ποστς. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jimant on May 24, 2009, 19:55:08 pm Συγνώμη που το ρωτάω αλλα διαβασα τα προηγούμενα σχόλια και δεν το κατάλαβα. Οι 2 σταθμοί που θα διαβιβάζει τις εντολές καποιοσ σταθμος ειναι συγκεκριμένοι ή θα τους δινει ο χρήστης?
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 24, 2009, 19:57:22 pm φαινονται στον πινακα στο ethmmy 8)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 24, 2009, 20:09:17 pm Βασικα νομιζω οτι το δεντρο ειναι δυαδικο απλης μορφης και οτι καθε γονεας εχει 2 παιδια εκτος κι αν ειναι ο τελευταιος γονεας. Δηλαδη θα συμπληρωνουμε με τη σειρα τα παιδια αρχιζοντας απο αριστερα προς τα δεξια. But thats just me.
Εξαλλου αν το θελε αλλιως θα επρεπε να το κανουμε μονοι μας δηλαδη να φτιαξουμε εμεις τον πινακα σαν χρηστες και να μην εισαγουμε απλα μονο τον αριθμο των σταθμων Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 20:26:58 pm Συγνώμη που το ρωτάω αλλα διαβασα τα προηγούμενα σχόλια και δεν το κατάλαβα. Οι 2 σταθμοί που θα διαβιβάζει τις εντολές καποιοσ σταθμος ειναι συγκεκριμένοι ή θα τους δινει ο χρήστης? Είναι συκεκριμένοι και προκύπτουν από την δομή του 2αδικού δέντρου.Το δέντρο το φτιάχνεις εσύ στην main σου,δεν περιμένεις να σου πει τίποτα ο χρήστης.Ο χρήστης σου λέει μόνο τις καθυστερήσεις di του κάθε σταθμού.Να ωραία τα είπε ο fel-os: Code: k=0; (όπως στο παράδειγμα με τους 15 σταθμούς που έδωσε ο κορτέσης) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 24, 2009, 21:08:34 pm H recur τι ορισματα εχει? recur(taut_proorismoy,n,**tree) to tree pos to pername
(argument...makes pointer from interger without a cast) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: kanele on May 24, 2009, 21:11:40 pm Παρεμπιπτόντως, υπάρxει και στην αλεξάνδρεια το βιβλίο C & data structures :) στο οποίο εξηγεί τα δέντρα και έχει και κώδικα σε C!!
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 24, 2009, 21:24:36 pm Ακυρο το βρηκα
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 24, 2009, 21:38:50 pm Για τον χρονο καθυστερησης τι κανατε? εκανα κληση με αναφορα αλλα εκτυπωνει οτι να ναι ασε που στο return recur() δε με αφηνει να βαλω ποιντερ ή και &. Καμια ιδεα?
Code: int recur(int si,float *Tt, float ti){ Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 24, 2009, 21:48:05 pm Για τον χρονο καθυστερησης τι κανατε? εκανα κληση με αναφορα αλλα εκτυπωνει οτι να ναι ασε που στο return recur() δε με αφηνει να βαλω ποιντερ ή και &. Καμια ιδεα? Μπορέις να χρησιμοποιήσεις γενικές μεταβλητές οπότε να μην χρειάζεται να κάνει κλήση με αναφορά και τέτοια. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 24, 2009, 21:49:40 pm Α μαλιστα δηλαδη δηλωνω πριν την main μεταβλητες και χρησιμοποιουνται οπως στις κλασεις στην c++ χωρις κληση??
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 24, 2009, 21:53:30 pm yes it is...
Βέβαια αυτό για την C++ και τις κλάσεις δεν το ξέρω...είμαι μικρός ακόμα. :'( :'( :'( Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 24, 2009, 21:58:54 pm H C σε οτι αφορα τις συναρτησεις αλλα και τροπο γραφης ειναι πονοκεφαλος
c++ φορεβα. Thanx παντως Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 22:45:12 pm εαν εχω ορισει ενα δυναμικό πινακα στη main και θελω να τον περασω σε μια συναρτηση ως ορισμα, τοτε θα πρεπει να τον δηλωσω ομοιοτροπως και στη συναρτηση που θα καλεσω; 8)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 23:15:10 pm Όχι,μιας και εδώ έχεις να κάνεις με δυναμική δέσμευση μνήμης(malloc),είναι σαν να σε παροτρύνει η άσκηση να χρησιμοποιήσεις τον pointer του πίνακα σαν όρισμα της συνάρτησης :)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 23:21:27 pm pointer=πινακας.
νομιζω καταλαβαινω τι εννοεις και οτι πρεπει να εχεις δικιο ;) θα το τεσταρω οταν γραψω το recursion Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 24, 2009, 23:25:27 pm εαν εχω ορισει ενα δυναμικό πινακα στη main και θελω να τον περασω σε μια συναρτηση ως ορισμα, τοτε θα πρεπει να τον δηλωσω ομοιοτροπως και στη συναρτηση που θα καλεσω; 8) H recur τι ορισματα εχει? recur(taut_proorismoy,n,**tree) to tree pos to pername φιλε αν εννοεις αυτο γινεται στην μαιν πρεπει να το δηλωσεις tree για να τρεξει στον ντεβ.... ετσι δηλαδη recur(taut_proorismoy,n,tree); (argument...makes pointer from interger without a cast) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 24, 2009, 23:34:36 pm εαν εχω ορισει ενα δυναμικό πινακα στη main και θελω να τον περασω σε μια συναρτηση ως ορισμα, τοτε θα πρεπει να τον δηλωσω ομοιοτροπως και στη συναρτηση που θα καλεσω; 8) H recur τι ορισματα εχει? recur(taut_proorismoy,n,**tree) to tree pos to pername φιλε αν εννοεις αυτο γινεται στην μαιν πρεπει να το δηλωσεις tree για να τρεξει στον ντεβ.... ετσι δηλαδη recur(taut_proorismoy,n,tree); (argument...makes pointer from interger without a cast) Code: recur(.....,*pointer); Code: recur(.....,pointer); με την προυπόθεση ότι έχεις δηλώσει και στην main τον pointer σαν ...pointer (σε αυτή την άσκηση ας πούμε): Code: int *pointer; Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 24, 2009, 23:41:19 pm +1 στο τελευταιο του Merlin
Μπορει καποιος να πει πως εκανε το recursion περιπου; με χει παιδεψει αρκετες ωρες... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: sarovios on May 24, 2009, 23:55:59 pm εγω ετσι το εκανα τελικα και μου δουλεψε
Quote int recur(int targetst , int **stations ,int *delay) { int i; if(targetst == 0) return 0; for(i=0 ; i<=targetst ; i++) { if(stations[0] == targetst || stations[1] == targetst) { printf("I entoli pernaei apo to stothmo %d me kathisterisi %d\n",i , delay); return delay + recur(i , stations , delay); } } } Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 24, 2009, 23:58:48 pm Εγω την εκφωνηθη την εχω κατανοηθει ωθ εξηθ:
Καθυστερηθη θτον 0 κομβο δν υπαρχει ουτε θε ενα φυλλο του δενδρου μονο θε ενδιαμεθουθ κομβουθ αρα τον πινακα d πωθ τον κανωμεν; :( Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 25, 2009, 00:01:03 am δηλωνεις recur(taut_proorismoy,n,**tree);
καλεις ετσι recur(taut_proorismoy,n,tree); αυτο που εννοω ειναι: συμφωνα με την θεωρια αν ειναι void η recur και θες να επιστρεψει το τρεε με αλλαγες στις τιμες του πρεπει να καλεσεις ετσι recur(taut_proorismoy,n,**tree); στον δικο μου ντεβ αυτο δεν γινεται Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: sarovios on May 25, 2009, 00:04:16 am Εγω την εκφωνηθη την εχω κατανοηθει ωθ εξηθ: Καθυστερηθη θτον 0 κομβο δν υπαρχει ουτε θε ενα φυλλο του δενδρου μονο θε ενδιαμεθουθ κομβουθ αρα τον πινακα d πωθ τον κανωμεν; :( αν εννοεις τον πινακα delay: κανονικα.βαλε delays για ολους τους σταθμους.Απλα δεν θα τους χρησιμοποιησεις ολουσ στο τελος.Aν θελεισ να εισαι πιο σωστος βαλε ενα ελεγχο αν βρει οτι το στοιχειο του πινακα ειναι -1 να σταματησει Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 25, 2009, 00:45:16 am δηλωνεις recur(taut_proorismoy,n,**tree); Γιατί να είναι void η recur?καλεις ετσι recur(taut_proorismoy,n,tree); αυτο που εννοω ειναι: συμφωνα με την θεωρια αν ειναι void η recur και θες να επιστρεψει το τρεε με αλλαγες στις τιμες του πρεπει να καλεσεις ετσι recur(taut_proorismoy,n,**tree); στον δικο μου ντεβ αυτο δεν γινεται edit:φυσικά και δεν γίνεται να την καλέσεις με διπλό αστεράκι η έστω και απλό,αυτά είναι μόνο για να δηλώσεις αν είναι pointer,αλλιώς σημαίνει την τιμή στην οποία δείχνει ο pointer,γι αυτό σου βγάζει cannot convert from pointer to integer,επειδή ενώ περιμένει pointer(απλό tree) εσύ του βάζεις την τιμή στην οποία δείχνει (**tree) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 25, 2009, 01:10:28 am δηλωνεις recur(taut_proorismoy,n,**tree); Γιατί να είναι void η recur?καλεις ετσι recur(taut_proorismoy,n,tree); αυτο που εννοω ειναι: συμφωνα με την θεωρια αν ειναι void η recur και θες να επιστρεψει το τρεε με αλλαγες στις τιμες του πρεπει να καλεσεις ετσι recur(taut_proorismoy,n,**tree); στον δικο μου ντεβ αυτο δεν γινεται edit:φυσικά και δεν γίνεται να την καλέσεις με διπλό αστεράκι η έστω και απλό,αυτά είναι μόνο για να δηλώσεις αν είναι pointer,αλλιώς σημαίνει την τιμή στην οποία δείχνει ο pointer,γι αυτό σου βγάζει cannot convert from pointer to integer,επειδή ενώ περιμένει pointer(απλό tree) εσύ του βάζεις την τιμή στην οποία δείχνει (**tree) επιστροφη τιμης θελει ποιντερ επειδη && δεν γινεται δοκιμασα ** :P Το εκανα διαφορετικα να επιστρεφει την διαδρομη αλλαγμενη μπλα μπλα... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Merlin on May 25, 2009, 01:53:19 am Δεν σε πιάνω,δεν πειράζει....πες ακριβώς τι θέλεις να κάνεις και πως σκοπεύεις να το υλοποιήσεις μπας και συνεννοηθούμε :)
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Grecs on May 25, 2009, 02:26:26 am Eγω αν και εκανα τον πινακα δεν τον χρησιμοποιησα καθολου
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 25, 2009, 02:53:52 am Δεν σε πιάνω,δεν πειράζει....πες ακριβώς τι θέλεις να κάνεις και πως σκοπεύεις να το υλοποιήσεις μπας και συνεννοηθούμε :) το εκανα βασικα..το μονο προβλημα ηταν αυτο που ειπα πριν...δηλωσα την recur void ως ορισματα εβαλα ταυτοτητα n και tree.. σαρωσα τον πινακα tree μεχρι να βρεθει η ταυτοτητα που ψαχνουμε και ξανα κληση της recur για την επομενη 'ταυτοτητα' (τον πιο πανω υποσταθμο).καθε θεση οπου υπαρχει ταυτοτητα παιρνει την ιδια συγκεκριμενη τιμη πχ -2...επιστρεφεται το τρεε αλλαγμενο και ξεχωριζω στην μαιν ποιες ειναι οι θεσεις με τιμη -2 συγκρινοντας το με το τρεε οπως ηταν,ετσι βγαινει η διαδρομη που την αποθηκευω σε εναν nx1 ιντ πινακα... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jason_ on May 25, 2009, 14:16:54 pm Ναι, εκ πρώτης όψεως σωστή φαίνεται η δυναμική δέσμευση. E; Για δώσε ένα παράδειγμα με ζυγό αριθμό σταθμών. Από τις προϋποθέσεις που δινει ο κορτέσης μόνο περιττος αριθμός σταθμών επιτρέπεται.Σου βγάζει κάποιο μήνυμα λάθους; Επίσης γιατί να είναι ντε και καλά περιττός; Δεν λέει κάπου ότι το δέντρο θα είναι balanced. :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jason_ on May 25, 2009, 15:14:35 pm Βασικά εννοούσα σχηματικό παράδειγμα...
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 25, 2009, 15:23:11 pm Αμα ειχες 16 σταθμους, θα ηθελες και ενα κυκλακι με το 15αρι μεσα
Αυτο θα συνδεοταν με τον κομβο (int)((15-1)/2), δηλαδη (int)(7) δηλαδη 7 8) Ισχυει και για μονα και για ζυγα αυτο που λεω, ειναι μονοζυγο :P :P :P :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 25, 2009, 15:24:02 pm Ακυρο το προηγουμενο...
Για πειτε... το recursion πως το κανατε; :D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jason_ on May 25, 2009, 15:35:44 pm Quote from: Δρ Κορτέσης Για τη δημιουργία του δένδρου να ληφθεί υπ’ όψη ότι ο κάθε υποσταθμός λαμβάνει εντολές από έναν μόνο σταθμό και διαβιβάζει εντολές αποκλειστικά σε δύο μόνο υποσταθμούς (δυαδικό δένδρο) Σε αυτό που λες ο 7 θα διαβίβαζε εντολές μόνο σε έναν, στον 15, και όχι σε δύο, όπως θέλει ο Δρ. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jason_ on May 25, 2009, 15:37:28 pm Ακυρο το προηγουμενο... Για πειτε... το recursion πως το κανατε; :D Δεν το κάναμε :P Προφανώς στον αλγόριθμο που θα χρησιμοποιησεις θα σε βοηθησει ο δισδιάστατος πίνακας που εχεις δημιουργήσει. Εγώ δεν έχω σκεφτεί κάτι λειτουργικό πάντως... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 25, 2009, 15:52:54 pm μαζι σου Jasonz.... προφανως τον πινακα χρησιμοποιεις...
αλλα δεν εχω καταφερει να ενοποιησω τις σχεσεις για να επισκευτει δεξιο αριστερο παιδι, να γυρισει πισω κτλ... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: jason_ on May 25, 2009, 16:11:41 pm μαζι σου Jasonz.... προφανως τον πινακα χρησιμοποιεις... αλλα δεν εχω καταφερει να ενοποιησω τις σχεσεις για να επισκευτει δεξιο αριστερο παιδι, να γυρισει πισω κτλ... Κοίτα πως το σκέφτηκα εγώ. Πάμε στο παράδειγμα του Κορτέση. Είπα να πάω αντίστροφα. Θες ας πούμε να πας στον σταθμό 11. Το πρόγραμμα (με κάποιον τρόπο) θα βρίσκει στον πίνακα το 11. Με βάση τον πίνακα το 11 παίρνει πληροφορίες από τον 5. Το πρόγραμμα κρατάει το 5, και αρχίζει να το ψαχνει στον πίνακα. Με βάση τον πίνακα αυτος παίρνει πληροφορίες από τον 2. Με την ίδια διαδικασία βρίσκει ότι το δύο παίρνει πληροφορίες από το 0. Άρα η διαδρομή είναι 0->2->5->11. Τώρα όλα αυτά με κάποιον τρόπο :D . Αυτό να το υλοποιήσω σε λειτουργικό μπλοκ στη C, πάντως, δεν παίζει :D ;D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: ΡΕΣΑΛΤΟ on May 25, 2009, 16:20:53 pm ναι αυτο εχω και γω στο μυαλο μου. συμφωνουμε απολυτα....
ο γονεας ενος κομβου παντως δινεται απο τον τυπο (i-1)/2 θα αποθηκευεται αναποδα η διαδρομη, αρα τη δομη που αποθηκευεις θα τη διατρεξεις αναποδα και θα την τυπωσεις... νομιζω οτι κατι βρηκα... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: stergiosjo on May 25, 2009, 16:23:58 pm ρε παιδια ο κωδικας που εγραψε ο sarovios για την recur τελικα δεν ειναι σωστος????
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: erotokritos on May 25, 2009, 21:28:45 pm domidiktyou=(float **)malloc(n*sizeof(float *));
θελω να κανω δεσμευση μνημησ σε δυσδιαστατο πινακα !! ειναι σωστη η εντολη? Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 25, 2009, 21:33:07 pm Σου δουλεύει; :P Αν ναι, ε, είναι σωστή. :P
(Δες την 1η σελίδαααααααααααααααααααααααααααα) Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: erotokritos on May 25, 2009, 21:37:16 pm λιγο ακομα θελει για να δουλεψει!!
μου βγαζει αυτο το προβλημα στην προτελευταια σειρα!μπορεισ να δεισ το κωδικα μου να μου πεισ τι προτεινεισ 70 C:\Documents and Settings\Administrator\Desktop\Untitled3.cpp cannot convert `float**' to `float***' for argument `2' to `int recur(float, float***, float**)' Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 25, 2009, 21:39:35 pm Επίσης έχεις βάλει την stdlib, έτσι; [edit] Σε κάποια συνάρτηση έχεις βάλει για όρισμα float ***domidiktyou αντί για float **domidiktyou, μάλλον. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: erotokritos on May 25, 2009, 21:40:54 pm ειναι ο δυσδιαστατοσ πινακασ
εχω βαλει και την stdlib Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Γιώργος on May 25, 2009, 21:41:46 pm Δες και το edit μου. Απ' ό,τι κατάλαβα το πρόβλημα παίζει στο ότι έχεις δηλώσει λάθος τα ορίσματα της recur.
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 25, 2009, 21:53:20 pm εγω εσβησα το ποστ μου με την recur
την διορθωσα πολυυυυυυυυυ.... ισως την ανεβασω αν προκοψει! :D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Θάνος on May 25, 2009, 22:11:59 pm άσχετο, μπορείτε να μπείτε στο ιτιμι ή μόνο εγώ έχω πρόβλημα??
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: il capitano on May 25, 2009, 22:12:54 pm Άσχετο αλλά μπαίνω κανονικά ;D ;D ;D
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: sarovios on May 25, 2009, 22:44:34 pm kaι εγω
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Sonic on May 25, 2009, 22:52:40 pm Αυτό να το υλοποιήσω σε λειτουργικό μπλοκ στη C, πάντως, δεν παίζει :D ;D Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: babis2 on May 25, 2009, 22:55:20 pm χμμ...βλέπω να στέλνω ένα απλό
Code: printf("Den katalabaino....") δεν καταλαβαίνω τπτ....τι θέλει τι μου ζητάει..... ούτε από τα ποστς βγάζω άκρη..... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Emfanever on May 25, 2009, 23:36:44 pm ξέχασες το ;
:P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: babis2 on May 25, 2009, 23:38:21 pm χαχαχαχα μα σκόπιμα το έκανα.... το γεγόνος ότι λείπει κάποιο main δεν το είδες ? :PPP
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: nasia!! on May 25, 2009, 23:40:18 pm To γεγονός πως στις 11.30 το βράδυ δεν την παλεύετε το έχετε προσέξει?Σόρρυ για το οφφ,αλλά θα σκαγα! :D
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: gate4 on May 25, 2009, 23:43:34 pm ston epomeno tono o xronos pou menei einai 16 lepta kai 26 deuterolepta :o
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: babis2 on May 25, 2009, 23:47:26 pm χμμ...ας αρχίσω τότε να γράφω αυτό π είπα πριν...να δω τι θα μ πεί αύριο όταν δεί το μήνυμα στην οθόνη...
Δεν καταλαβαινω....... δεν θα χρειαστεί κάν να κάτσει δίπλα μου να την δεί :P Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: pandora on May 26, 2009, 01:14:37 am Έχω το εξής πρόβλημα: Έχω κατανείμει δυναμικά τη μνήμη για 2D πίνακα ως εξής: Code: int**pinakas; Στην αρχή λοιπόν, όταν εισάγω τον αριθμό των κόμβων, και αυτός είναι περιττός, σταματά το πρόγραμμα. Αυτό δε συμβαίνει για ζυγούς αριθμούς. Μπορεί κάποιος να βοηθήσει? Να ρωτησω κατι? Αυτά σας τα κάνει στην τάξη? ΓΙατί τέτοια δεν υπάρχουν στις σημειώσεις του... Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: babis2 on May 26, 2009, 02:00:40 am στο 6.5 στις σημειώσεις του υπάρχει... δυναμική κατανομή μνήμης...σελ 48 για την ακρίβεια.... στις σημειώσεις που διανεμήθηκαν....
Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 26, 2009, 02:09:14 am παπάρια υπαρχουνε!!!!!!!!
σε 2-διαστατο πινακα δε λεει πως κανουμε, και το παραδειγμα του ειναι για τον πουτσο >:( >:( >:( >:( Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Wanderer on May 26, 2009, 02:28:15 am Εύκολο είναι, αν έχεις καταλάβει την έννοια του διπλού pointer. Ο Andre το υλοποιεί.
Διπλός pointer δείχνει τη θέση μνήμης ενός pointer, ο οποίος δείχνει τη θέση μνήμης μιας μεταβλητής. Άρα αν έχω int **pinakas; pinakas->δείχνει τη θέση μνήμης ενός pointer. *pinakas->Δείχνει την τιμή του pointer -δλδ τη θέση μνήμης μιας μεταβλητής int- και τέλος **pinakas->δείχνει την τιμή της μεταβλητής. Άρα αν θες να κάνεις δυναμικό πίνακα μεγέθους έστω M x N: pinakas[ ι ] = (int**) malloc(N * sizeof(int*)); //πρόσεξε τα αστεράκια Του λες δλδ ο pinakas να δείχνει στη θέση μνήμης του πρώτου από τους Ν pointers που έχεις δημιουργήσει. Οι οποίοι με τη σειρά τους, ο κάθε ένας από αυτούς θα πρέπει να δείχνει τη θέση μνήμης του πρώτου στοιχείου ενός μονοδιάστατου πίνακα Μ θέσεων. Επομένως κάνεις N δυναμικές δεσμεύσεις: for(int i=0;i<N;i++) { pinakas[ i ]=(int *) malloc(M * sizeof(int)); } Υπόψη για να μη μπλέκεσαι με αστεράκια (αν και έχουν πλάκα :P ), μπορείς να χρησιμοποιήσεις κανονικά συμβολισμούς στατικού δυσδιάστατου (p.x. pinakas[2][3] δείχνει την τιμή του στοιχείου στη θέση 2,3) /// Αν κάπου λέω βλακείες ας με διορθώσει κάποιος. Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Αιμιλία η φτερωτή χελώνα on May 26, 2009, 02:31:20 am Σε ευχαριστω! ^shy^
Ετσι ειναι οντως (νομιζω και εγω :D ) Βασικα με επιβεβαιωσες γιατι ετσι το ειχα μετα απο ψαξιμο στο τοπικ και γενικα στο γουγλη Title: Re: [Δομημένος Προγραμματισμός]Εργασια Ε Post by: Wanderer on May 26, 2009, 02:39:38 am Ε τότε μάλλον έτσι θα είναι, δεν μπορεί να κάνουμε και οι δυο λάθος (και καλά :P )
|