• Downloads
  • ! Read Me !
  • Μαθήματα
  • Φοιτητικά
  • Τεχνικά Θέματα
  • Συζητήσεις
  • Happy Hour!
  • About THMMY.gr
 V  < 
Search:  
Welcome, Guest. Please login or register.
June 18, 2025, 10:09:14 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.
June 18, 2025, 10:09:14 am

Login with username, password and session length

Αναζήτηση

Google

THMMY.gr Web
Πρόσφατα
H Στοά των Off Topic
by Nikos_313
[Today at 08:53:31]

[Μεταφορά και Διανομή ΗΕ]...
by tzortzis
[Today at 07:55:05]

Πρακτική Άσκηση ΤΗΜΜΥ 201...
by chris_p30
[Today at 00:45:33]

Ισραήλ - Ιράν: Πόλεμος στ...
by Katarameno
[June 17, 2025, 21:32:50 pm]

[Ψηφιακά Ολοκληρωμένα Κυκ...
by tzortzis
[June 17, 2025, 21:25:42 pm]

[Εφ.Θερμοδυναμική] Γενικέ...
by PAPARI69
[June 17, 2025, 20:59:13 pm]

[Γραφική] Λυμένα θέματα
by okanpala
[June 17, 2025, 18:56:22 pm]

Τι ακούτε αυτήν τη στιγμή...
by Katarameno
[June 17, 2025, 14:25:00 pm]

Αντικατάστασης πυκνωτή σε...
by george14
[June 17, 2025, 13:58:20 pm]

Πότε θα βγει το μάθημα; -...
by tzortzis
[June 17, 2025, 13:19:53 pm]

Αποτελέσματα Εξεταστικής ...
by george14
[June 17, 2025, 12:08:25 pm]

[ΨEE] Γενικές απορίες και...
by Juror8
[June 17, 2025, 12:06:57 pm]

[Οργάνωση Υπολογιστών] Γε...
by RAFI
[June 16, 2025, 22:46:54 pm]

[Σ.Π.Η.Ε.] Γενικές απορίε...
by Nikos_313
[June 16, 2025, 19:49:00 pm]

[ΘΤΠΑ] Γενικές απορίες κα...
by Nikos_313
[June 16, 2025, 16:56:56 pm]

[Αρχές Οικονομίας] Να επι...
by _Trob
[June 16, 2025, 13:28:21 pm]

[Σ.Α.Π.Γ.] Εργασία 2025
by Nikos_313
[June 16, 2025, 12:13:45 pm]

[Διανεμημένη Παραγωγή] Γε...
by Διάλεξις
[June 16, 2025, 01:56:37 am]

[Σ.Π.Η.Ε.] Παλιά θέματα -...
by nmpampal
[June 15, 2025, 06:43:15 am]

Το thmmy.gr στο instagram...
by Mr Watson
[June 15, 2025, 00:50:23 am]
Στατιστικά
Members
Total Members: 9961
Latest: Poli
Stats
Total Posts: 1426707
Total Topics: 31710
Online Today: 215
Online Ever: 2093
(April 17, 2025, 08:47:49 am)
Users Online
Users: 27
Guests: 92
Total: 119
nikpapoutsi
mimaki
chidi anagonye
vajim
themis01
grammaths
iJasonOP
rafa98p
fkacori
george14
elizabeth
Saint_GR
samamidou
Kont
hoo2
Amalia
apob
st3.kt
tzortzis
anastasis_sid
sherlock
s
tzesi
spoun
Εμφάνιση

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

Νέα!
Για οποιοδήποτε πρόβλημα με register/login, στείλτε email στο contact@thmmy.gr.
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 14202 times)
timon
Guest
[Δομημένος Προγραμματισμός]Εργασια Ε
« on: May 19, 2009, 10:56:35 am »

Εργασία E

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

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

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

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

 

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

 

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

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

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

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



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

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

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

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



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

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


The Phantom Blot


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

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


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


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

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

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



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

Quote from: Merlin on May 20, 2009, 00:31:20 am
Πως κάνω 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 20, 2009, 00:52:10 am by Γιώργος » Logged

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


The Phantom Blot


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

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



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

Επίσης έχετε υπόψην ότι θα χρειαστείτε για την 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, 01:00:49 am »

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

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



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #9 on: May 20, 2009, 01: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, 01: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, 01:21:14 am »

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

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



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

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



View Profile
Re: [Δομημένος Προγραμματισμός]Εργασια Ε
« Reply #12 on: May 20, 2009, 01: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, 01:26:20 am »

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


Πολίτης


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

Quote from: Γιώργος on May 20, 2009, 01: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...