• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
November 04, 2025, 00:53:36 am

Login with username, password and session length
Links
  Thmmy.gr portal
   Forum
   Downloads
   Ενεργ. Λογαριασμού
   Επικοινωνία
  
  Χρήσιμα links
   Σελίδα τμήματος
   Βιβλιοθήκη Τμήματος
   Elearning
   Φοιτητικά fora
   Πρόγραμμα Λέσχης
   Πρακτική Άσκηση
   Ηλεκτρονική Εξυπηρέτηση Φοιτητών
   Διανομή Συγγραμμάτων
   Ψηφιακό Καταθετήριο Διπλωματικών
   Πληροφορίες Καθηγητών
   Instagram @thmmy.gr
   mTHMMY
  
  Φοιτητικές Ομάδες
   ACM
   Aristurtle
   ART
   ASAT
   BEAM
   BEST Thessaloniki
   EESTEC LC Thessaloniki
   EΜΒ Auth
   IAESTE Thessaloniki
   IEEE φοιτητικό παράρτημα ΑΠΘ
   SpaceDot
   VROOM
   Panther
  
Πίνακας Ελέγχου
Welcome, Guest. Please login or register.
November 04, 2025, 00:53:36 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[November 03, 2025, 20:22:53 pm]

[ΑΣΗΕ] Γενικές απορίες κα...
by DimStyl
[November 03, 2025, 15:00:14 pm]

[Λογική Σχεδίαση] Εργαστή...
by RivenT
[November 03, 2025, 08:06:35 am]

GEFORCE RTX 3080 Ti 12GB ...
by botrinis
[November 02, 2025, 12:34:04 pm]

Ταχυρρυθμα ιδιαιτερα Φυσι...
by kostisgialamas
[November 01, 2025, 23:48:04 pm]

Αρχείο Ανακοινώσεων [Arch...
by Nikos_313
[November 01, 2025, 16:57:52 pm]

Αποτυχία δήθεν "φοιτητικώ...
by Nikos_313
[November 01, 2025, 16:24:50 pm]

Ρυθμίσεις Θεμάτων της Ανώ...
by Nikos_313
[October 31, 2025, 21:46:32 pm]

[Σ.Φ. Ηλ-Μηχ] Κινητοποίησ...
by Nikos_313
[October 31, 2025, 21:41:48 pm]

Μόνο λάθος απαντήσεις
by Nikos_313
[October 31, 2025, 19:45:44 pm]

[ΣΦ ΗΛ-ΜΗΧ] Γενική Συνέλε...
by Aris★
[October 31, 2025, 17:44:39 pm]

[Λογική Σχεδίαση] Ύλη που...
by Orgianelis
[October 31, 2025, 02:04:50 am]

Ποιο τραγούδι ακούσατε 5+...
by pesto80
[October 31, 2025, 00:06:03 am]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by Διάλεξις
[October 30, 2025, 17:19:57 pm]

[Υψηλές Τάσεις Ι] Γενικές...
by chatzikys
[October 29, 2025, 14:50:41 pm]

[Πυρηνική Τεχνολογία] Γεν...
by chatzikys
[October 29, 2025, 14:49:30 pm]

Αποτελέσματα Εξεταστικής ...
by supersonic pepega
[October 29, 2025, 14:25:43 pm]

Ποιον θεωρείτε χειρότερο...
by Katarameno
[October 29, 2025, 12:49:59 pm]

[Τεχνικές Βελτιστοποίησης...
by ttsengel
[October 28, 2025, 09:30:42 am]

Των συνειρμών το παίγνιο....
by Nikos_313
[October 27, 2025, 14:27:19 pm]
Στατιστικά
Members
Total Members: 10156
Latest: drandic
Stats
Total Posts: 1428789
Total Topics: 31845
Online Today: 226
Online Ever: 2093
(April 17, 2025, 07:47:49 am)
Users Online
Users: 9
Guests: 174
Total: 183
Nicolas Thymiatis
_moschou
witchingHour
Tasos Bot
fivosfivos1
sosak
Captain
Εμφάνιση

Νέα για πρωτοετείς
Είσαι πρωτοετής;... Καλώς ήρθες! Μπορείς να βρεις πληροφορίες εδώ. Βοήθεια για τους καινούργιους μέσω χάρτη.
Κατεβάστε εδώ το Android Application για εύκολη πρόσβαση στο forum.
Ανεβάζετε τα θέματα των εξετάσεων στον τομέα Downloads με προσοχή στα ονόματα των αρχείων!

Νέα!
Συμβουλές καλής χρήσης του φόρουμ: Youtube embed code and links, Shoutbox, Notify, ...
Δείτε περισσότερα εδώ...
THMMY.gr > Forum > Μαθήματα Βασικού Κύκλου > 1ο Εξάμηνο > Δομημένος Προγραμματισμός (Moderators: Tasos Bot, tzortzis, Nekt) > [Δομημένος Προγραμματισμός]Εργασια Ε
0 Members and 1 Guest are viewing this topic.
Pages: [1] 2 3 ... 11 Go Down Print
Author Topic: [Δομημένος Προγραμματισμός]Εργασια Ε  (Read 16599 times)
timon
Guest
[Δομημένος Προγραμματισμός]Εργασια Ε
« on: May 19, 2009, 09:56:35 am »

Εργασία E

Ένα δίκτυο μετάδοσης εντολών, από ένα κεντρικό σταθμό προς έναν αριθμό υποσταθμών είναι, οργανωμένο με τη μορφή δυαδικού δένδρου. Για κάθε σταθμό υπάρχει ένας σταθμός από τον οποίο δέχεται εντολές και δύο σταθμοί προς τους οποίους διαβιβάζει εντολές. Όταν μια εντολή περνά από έναν ενδιάμεσο σταθμό si υφίσταται μια καθυστέρηση di. Όταν στον κεντρικό σταθμό s0 δοθεί μια εντολή η οποία πρέπει να διαβιβασθεί προς τον σταθμό sk ζητείται να βρεθεί ο χρόνος που θα χρειαστεί για να φτάσει η εντολή στον προορισμό της και οι σταθμοί από τους οποίους θα περάσει.

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

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

 Η μνήμη για την καταχώρηση των πινάκων που θα χρειαστούν στο πρόγραμμα να δεσμεύεται δυναμικά.

 

Βοηθητικές παρατηρήσεις

 

Για τη δημιουργία του δένδρου να ληφθεί υπ’ όψη ότι ο κάθε υποσταθμός λαμβάνει εντολές από έναν μόνο σταθμό και διαβιβάζει εντολές αποκλειστικά σε δύο μόνο υποσταθμούς (δυαδικό δένδρο)

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

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

Συμβουλευτείτε και το eThmmy για το Δένδρο και τον Πίνακα που είναι σε αρχείο word στο υλικό του μαθήματος
« Last Edit: May 19, 2009, 13:13:43 pm by Húrin » Logged
El Niño
Καταστραμμένος
********
Gender: Male
Posts: 5805



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #1 on: May 19, 2009, 10:17:23 am »

ΚΑΤΕΒΑΣΤΕ ΤΟ ΑΡΧΕΙΟ .doc.....εχει το δεντρο οπως πρεπει να ειναι!!!!

εδιτ...το αρχειο .doc (για οσους δεν το ξερουν) βρισκεται στην καρτελα υλικο μαθηματος--->εργασιες....

κατεβαστε την και απο δω αμα θελετε!
« Last Edit: May 19, 2009, 10:24:36 am by El Niño » Logged
El Niño
Καταστραμμένος
********
Gender: Male
Posts: 5805



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #2 on: May 19, 2009, 10:29:17 am »

παρακληση...μην αρχισετε παλι τα ακαταπαυστα ποστς...διαβαστε και λιγο την ασκηση πριν ρωτησετε κατι γιατι πραγματικα στο τοπικ για την προηγουμενη εργασια δεν βγαζεις ακρη...
Logged
Merlin
Μόνιμος κάτοικος ΤΗΜΜΥ.gr
******
Gender: Male
Posts: 1377


The Phantom Blot


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #3 on: May 19, 2009, 23:31:20 pm »

Πως κάνω malloc σε δισδιάστατο πίνακα?
Logged
ΡΕΣΑΛΤΟ
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 797


Ειμαστε μαζοχιστές.....


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #4 on: May 19, 2009, 23:44:24 pm »

Γενικά αν καποιος μπορεί να εξηγησει με απλά λογια τη διαδικασία δυναμικής δεσμευσης μνημης..... Cheesy
Logged

Όσες κι αν χτίζουν φυλακές
κι αν ο κλοιός στενεύει
ο νους μας είναι αληταριό
που όλο θα δραπετεύει
Γιώργος
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 3796



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #5 on: May 19, 2009, 23:47:30 pm »

Quote from: Merlin on May 19, 2009, 23:31:20 pm
Πως κάνω malloc σε δισδιάστατο πίνακα?

Code:
int **vlammeno;
vlammeno = (int **) malloc(2*sizeof(int *));
vlammeno[0] = (int *) malloc(N*sizeof(int));
vlammeno[1] = (int *) malloc(N*sizeof(int));

Ή και με for μπορείς να το κάνεις το β' σκέλος.
Αντίστοιχα προχωράς για 2-3-4.... διαστάσεις.

SOS - μην ξεχνάτε να ΕΛΕΓΧΕΤΕ μετά από κάθε malloc την περίπτωση OUT OF MEMORY (aka vlammeno == NULL, κοκ).


Ο Κορτέσης είναι ό,τι να 'ναι, έτσι;
Βασικά προβλήματα που εντόπισα:

  • Δεν διευκρινίζει ΠΟΥ θα αποθηκεύονται οι καθυστερήσεις. Υποθέτω extra πίνακας.
  • Δεν διευκρινίζει πώς θα διαβαστούν οι κόμβοι. Tongue Δηλαδή ο πρώτος θα είναι ο κεντρικός;
  • Δηλαδή βασικό "πρόβλημα" είναι πώς στο διάβολο ο χρήστης θα ξέρει ποιο είναι το head του δέντρου, ο κεντρικός-κεντρικός κόμβος. Μία σκέψη είναι να θεωρήσουμε τον κόμβο #1 σαν κεντρικό και να βγάλουμε μήνυμα λάθους αν ο χρήστης προσπαθήσει να λινκάρει άλλον κόμβο στον κόμβο #1.
  • Αφήνει flu την περίπτωση ο χρήστης να λινκάρει δύο αρχικούς κόμβους σε ένα κόμβο (δηλαδή να δέχεται πληροφορίες από 2+ κόμβους) κι αν θέλει έλεγχο ή όχι.
  • Και flu την περίπτωση με κόμβο ή κόμβους που παραμένουν ασύνδετοι. Εκεί οκ, βγάζεις μήνυμα "δεν υπάρχει σύνδεση".
« Last Edit: May 19, 2009, 23:52:10 pm by Γιώργος » Logged

class Windows extends Throwable implements Failure
Merlin
Μόνιμος κάτοικος ΤΗΜΜΥ.gr
******
Gender: Male
Posts: 1377


The Phantom Blot


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #6 on: May 19, 2009, 23:49:56 pm »

Μ' αρέσει που ήρθα σήμερα σπίτι με την νοοτροπία ότι θα ξεπετούσα την άσκηση στα γρήγορα και θα είχα αρκετό χρόνο και για την άσκηση στα ψηφιακά,χαχα έλεος είμαι ώρες-ώρες
Logged
Γιώργος
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 3796



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #7 on: May 19, 2009, 23:58:27 pm »

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

Από εδώ:

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


Μπορείτε να ρίξετε μια ματιά. (BFS or DFS I'd say)
Logged

class Windows extends Throwable implements Failure
ΡΕΣΑΛΤΟ
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 797


Ειμαστε μαζοχιστές.....


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #8 on: May 20, 2009, 00:00:49 am »

Φίλε Γιώργο επειδή σε κόβω αλάνι, αμα καποια στιγμη βρεις χρονο και εχεις διαθεση και δεν εχεις τιποτα χειροτερο να κανεις, μηπως σου ειναι ευκολο να εξηγησεις τη λογικη της δυναμικής δέσμευσης μνημης, τουλαχιστον τα πρακτικα που θα μας χρειαστουν για να λυσουμε την ασκηση. Θα σωσεις πολυ κοσμο... Grin
Logged

Όσες κι αν χτίζουν φυλακές
κι αν ο κλοιός στενεύει
ο νους μας είναι αληταριό
που όλο θα δραπετεύει
Γιώργος
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 3796



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #9 on: May 20, 2009, 00:11:34 am »

Κοίτα.... δες ένα απλό παράδειγμα να στο κάνω λιανά.

block #1:
Code:
int table[5];

block #2:
Code:
int *table;

table = (int *) malloc(5*sizeof(int));


Τα δύο blocks κάνουν ακριβώς το ίδιο, δεσμεύουν πέντε θέσεις "πίνακα" για ακέραιους.
Το πρώτο block είναι απλό, το καταλαβαίνεις. Smiley

Όσον αφορά το 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. Smiley

Δεν 'ναι τίποτα, κάποια μαλακία θα 'χει παιχτεί με την δέσμευση μνήμης ή με προσπέλαση σε μνήμη που δεν έχει δεσμευθεί.
« Last Edit: May 20, 2009, 00:21:40 am by Γιώργος » Logged

class Windows extends Throwable implements Failure
ΡΕΣΑΛΤΟ
Εθισμένος στο ΤΗΜΜΥ.gr
*****
Gender: Male
Posts: 797


Ειμαστε μαζοχιστές.....


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #10 on: May 20, 2009, 00:21:14 am »

παιδι γραφεις,,,, 8)
μπυρες και πουπουλα! Grin
Logged

Όσες κι αν χτίζουν φυλακές
κι αν ο κλοιός στενεύει
ο νους μας είναι αληταριό
που όλο θα δραπετεύει
El Niño
Καταστραμμένος
********
Gender: Male
Posts: 5805



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #11 on: May 20, 2009, 00:22:24 am »

ας κανει και τοπικ να εξηγει για να το δουνε περισσοτεροι!ολοι θα το χρειαστουν!
Logged
Γιώργος
Αbsolute ΤΗΜΜΥ.gr
*******
Gender: Male
Posts: 3796



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #12 on: May 20, 2009, 00:25:08 am »

Παιδιά, για ό,τι χρειαστείτε υπάρχει topic :: βοηθητικά links!

Πχ αν πάτε στο πρώτο link, έχει αυτό το άρθρο: malloc & free - διαβάστε το!
Είναι μεγαλούτσικο, μην τρομάξετε, αλλά άμα κάτσετε με υπομονή τα λέει άψογα.



Η μαγεία είναι να ψάχνεις μόνος σου. Tongue
Logged

class Windows extends Throwable implements Failure
El Niño
Καταστραμμένος
********
Gender: Male
Posts: 5805



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #13 on: May 20, 2009, 00:26:20 am »

νταξει δεν διαφωνω απλα δεν καταλαβαινω και πολυ αγγλικα !
Logged
Emfanever
Καταστραμμένος
********
Gender: Male
Posts: 5284


Πολίτης


View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #14 on: May 20, 2009, 00:26:57 am »

Quote from: Γιώργος on May 20, 2009, 00:11:34 am

[Σημείωση: η αλήθεια είναι ότι η C νομίζω το επιτρέπει να δηλώσεις int table[5]; στην μέση του προγράμματος, αλλά η C99 νομίζω δεν το επιτρέπει....]


νομίζω ισχυει το αντίστροφο...


και φυσικά μη ξεχνάτε να κάνετε στο τέλος του προγράμματος, ένα ωραίο, ανούσιο free!!!
Logged
Pages: [1] 2 3 ... 11 Go Up Print
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Scribbles2 | TinyPortal © Bloc | XHTML | CSS
Loading...