THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: verisign on April 18, 2013, 18:31:56 pm



Title: [Δομημένος Πρ.]Εργασία D
Post by: verisign on April 18, 2013, 18:31:56 pm
    

Άσκηση D
(Hμ/νία λήξης δηλώσεων: 12/05/2013)

Σε ένα ηλεκτρονικό παιχνίδι ένα βλήμα εκτοξεύεται εναντίον ενός στόχου. Οι θέσεις του στόχου και του βλήματος ορίζονται ως προς ένα σύστημα συντεταγμένων που έχει οριστεί στην οθόνη του υπολογιστή. Το βλήμα αλλάζει θέση προσθέτοντας ή αφαιρώντας από έναν τυχαίο αριθμό στις συντεταγμένες της θέσης του έτσι ώστε η νέα θέση που θα προκύψει να είναι πιο κοντά στον στόχο από την προηγούμενη. Ο στόχος καταστρέφεται όταν το βλήμα βρεθεί σε απόσταση sd από τον στόχο. Ο στόχος αλλάζει και αυτός θέση προσθέτοντας ή αφαιρώντας από έναν τυχαίο αριθμό στις συντεταγμένες της θέσης του. Στην οθόνη του υπολογιστή εμφανίζονται οι συντεταγμένες της θέσης του βλήματος πριν γίνει η αλλαγή τους και ο παίκτης προσπαθεί να μαντέψει τις συντεταγμένες της νέας του θέσης ώστε να καταρρίψει το βλήμα πριν αυτό χτυπήσει το στόχο.

Στο πρόγραμμα που υλοποιεί το παιχνίδι να οριστούν  οι συναρτήσεις void nbco_or(…) και void ntco_or(…)  από τις οποίες, η πρώτη να δέχεται τις συντεταγμένες της θέσεις του βλήματος και να επιστρέφει τις συντεταγμένες της νέας του θέσης ενώ η δεύτερη να δέχεται τις συντεταγμένες της θέσης του στόχου και να επιστρέφει τις συντεταγμένες της νέας του θέσης.

Το πρόγραμμα να διαβάζει τις αρχικές συντεταγμένες των θέσεων του στόχου και του βλήματος, την απόσταση sd και την τιμή me. Η τιμή me είναι η μέγιστη τιμή την οποία μπορεί να έχει η απόλυτη τιμή των τυχαίων αριθμών που θα αλλάξουν τη θέση του βλήματος. Η αντίστοιχη τιμή για τη θέση του στόχου ορίζεται στο ¼ της τιμής της me.

Στη συνέχεια,  μέσα σε μια ατέρμονα επανάληψη, να εμφανίζονται στην οθόνη οι συντεταγμένες της θέσης του βλήματος πριν γίνει η αλλαγή της θέσης του και να καλούνται οι συναρτήσεις nbco_or() και ntco_or() για να βρεθούν οι νέες θέσεις για τον στόχο και το βλήμα. Ο παίκτης, που προστατεύει το στόχο, να πληκτρολογεί τις συντεταγμένες στις οποίες πιστεύει ότι βρίσκεται τώρα το βλήμα και εάν η απόσταση μεταξύ του σημείου του οποίου η συντεταγμένες δόθηκαν από τον παίκτη και της τωρινής θέσης του βλήματος είναι μικρότερη από την απόσταση sd το βλήμα καταστρέφεται. Το πρόγραμμα να τερματίζεται αν καταστραφεί το βλήμα ή αν καταστραφεί ο στόχος τυπώνοντας σχετικό μήνυμα και την απόσταση από το στόχο ή το βλήμα τις βολής που επέφερε την καταστροφή.

Σημείωση :

Να μη χρησιμοποιηθούν πουθενά γενικές μεταβλητές.

Οι συναρτήσεις nbco_or() και  ntco_or() να μη διαβάζουν τιμές και να μην εκτυπώνουν αποτελέσματα.

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

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

Η συνάρτηση nbco_or() να συνταχθεί κατάλληλα έτσι ώστε η νέα θέση του βλήματος να είναι πάντα πιο κοντά στο στόχο από την προηγούμενη. Αυτή η απαίτηση δεν υπάρχει για τη συνάρτηση ntco_or().

Η νέα θέση του στόχου είναι γνωστή για τη συνάρτηση nbco_or() ενώ για τη συνάρτηση ntco_or() είναι γνωστή μόνο η προηγούμενη θέση του βλήματος.

Για την παραγωγή των τυχαίων αριθμών να χρησιμοποιήσετε τη συνάρτηση βιβλιοθήκης rand() ή άλλη αντίστοιχή του μεταγλωττιστή που χρησιμοποιείτε. Η rand() δε δέχεται ορίσματα και σε κάθε κλίση της επιστρέφει έναν νέο τυχαίο ακέραιο θετικό αριθμό στο διάστημα (0, RAND_MAX). Για περισσότερες πληροφορίες συμβουλευτείτε τη βοήθεια του μεταγλωττιστή σας.


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: airguitar on April 18, 2013, 22:25:15 pm
Μας αφησε την εβδομαδα της προοδου κενη ?? γιατι βλεπω η προθεσμια ειναι μεχρι 12/5(πως και ετσι  :P)


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: airguitar on April 18, 2013, 22:25:41 pm
θα την εχουμε για το Πασχα


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: TechSupport on April 18, 2013, 23:53:55 pm
βασικα δεν εχει να κανει σχεη με την προοδο,καθως κατω απο ομαλες συνθηκες θα ηταν για τις 28/4,αλλα πεφτει Κυριακη των Βαιων και μετα διακοπες για Πασχα και δεν νομιζω πως θα κατσει καποιος να την κανει αυτες τις μερες!  ;)


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: zidan on April 28, 2013, 20:30:38 pm
Δυναμική δέσμευση έχει κάνει (στη ύλη ενοώ)????????


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: George_RT on May 01, 2013, 22:40:56 pm
Δυναμική δέσμευση έχει κάνει (στη ύλη ενοώ)????????
Δεν είμαι 100% σίγουρος αλλά δεν έχει κάνει .

Για την άσκηση δεν νομίζω να χρειάζεται κιόλας 


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: pavlosmk on May 05, 2013, 20:50:47 pm
πως γινεται να μην χρησιμοποιησουμε ουτε γενικες μεταβλητες ουτε πινακες για να επιστρεψουμε τις νεες συντεταγμες απ τις συναρτησεις??
πως θα τις επιστρεψουμε αφου μπορουμε να βαλουμε μονο μια τιμη στο return.. ?? :/


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: AckermanMik on May 05, 2013, 20:52:40 pm
pointers


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: pavlosmk on May 05, 2013, 22:46:21 pm
οχχχ το φανταστικα..σαν πινακας δεν ειναι ομως αυτο???
ή πως τελοσπαντων το κανεις με pointers?


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: George_RT on May 05, 2013, 23:05:13 pm
Όταν έχεις void συνάρτηση δεν μπορείς να επιστρέψεις τιμές με το return για αυτό χρησιμοποιούμε τους pointers.
Οχι οι pointers δεν είναι πίνακες !


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: nikitas350 on May 05, 2013, 23:30:46 pm
οχχχ το φανταστικα..σαν πινακας δεν ειναι ομως αυτο???
ή πως τελοσπαντων το κανεις με pointers?

Code:
#include "stdio.h"

void fun(int* sum, int a, int b) {
     *sum = a + b;
}

int main() {
     int result, x, y;
     x = 1;
     y = 3;

     fun(&result, x, y);
    
     printf("%d", result);
    
     return 0;
}


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: alexampa on May 06, 2013, 02:03:28 am
"Ο στοχος αλλαζει κι αυτος θεση προσθετοντας ή αφαιρώντας απο εναν τυχαιο αριθμο στις συντεταγμενες της θεσης του."

Μια ερωτηση μονο: με βαση ποιο κριτηριο καποιες φορες θα προσθετουμε και αλλες φορες θα αφαιρούμε??
[Αν και,ακομα κι αν κανουμε μονο το ενα απο τα δυο (δηλαδη μονο προσθετουμε ή μονο αφαιρουμε) το προγραμμα θα δουλευει και παλι κανονικα,παρ'ολο που ο στοχος θα κινειται προς μια μονο κατευθυνση (αυξησης ή αντιστοιχα μειωσης των τιμων των συντεταγμενων του).]


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: AckermanMik on May 06, 2013, 09:58:14 am
Εγώ στην αρχή προσθέτω τον αριθμό. Αν είναι δεκτός είμαι οκ, αλλιώς τον αφαιρώ. Αλλιώς ξανακάνω ραντ


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: TechSupport on May 06, 2013, 18:56:15 pm
Η ραντ ειναι με #include <stdlib.h>? :-\


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: George_RT on May 06, 2013, 19:16:08 pm
Η ραντ ειναι με #include <stdlib.h>? :-\
Εγώ και χωρίς βιβλιοθήκη που έγραψα rand(); δουλεύει ! .


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: alexampa on May 06, 2013, 23:33:13 pm
Εγώ στην αρχή προσθέτω τον αριθμό. Αν είναι δεκτός είμαι οκ, αλλιώς τον αφαιρώ. Αλλιώς ξανακάνω ραντ

Τι εννοεις αν ειναι δεκτος?? Οποιεσδηποτε δεν μπορουν να ειναι οι συντεταγμενες του στοχου??  :???: Υπαρχει καποια εξαρτηση στον υπολογισμο των συντεταγμενων του στοχου απο τις προηγουμενες συντεταγμενες θεσης του βληματος??  Αφου η εκφωνηση λεει οτι δεν υπαρχει η απαιτηση να πλησιαζει ο στοχος το βλημα ή κατι τετοιο. Μηπως καταλαβα κατι λαθος? :???:  :-\


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: vasilis1005 on May 07, 2013, 10:55:49 am
Εγώ στην αρχή προσθέτω τον αριθμό. Αν είναι δεκτός είμαι οκ, αλλιώς τον αφαιρώ. Αλλιώς ξανακάνω ραντ

Τι εννοεις αν ειναι δεκτος?? Οποιεσδηποτε δεν μπορουν να ειναι οι συντεταγμενες του στοχου??  :???: Υπαρχει καποια εξαρτηση στον υπολογισμο των συντεταγμενων του στοχου απο τις προηγουμενες συντεταγμενες θεσης του βληματος??  Αφου η εκφωνηση λεει οτι δεν υπαρχει η απαιτηση να πλησιαζει ο στοχος το βλημα ή κατι τετοιο. Μηπως καταλαβα κατι λαθος? :???:  :-\

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

απλα πως θα κανουμε τον ελεγχο; (μεσα στην if τι θα βαλω);
την αποσταση θα την θεσουμε ως pointer;


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: George_RT on May 07, 2013, 17:02:03 pm
Για τον έλεγχο με την if έχω φάει και εγώ σκάλωμα για κάποιον λόγο δημιουργούνται καινούριες συντεταγμένες μόνο για το x και για το y μένουν ίδιες .

Η απόσταση sd δεν χρειάζεται να την βάλεις μέσα σε συνάρτηση .Θα είναι μεταβλητή στην main()  όπου και εκεί θα κάνεις τους υπολογισμούς για το εάν θα καταστραφεί το βλήμα


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: billios on May 07, 2013, 19:38:02 pm
πως μπορώ να ορίσω το RAND_MAX σε ενα συγκεκριμενο αριθμο?παιζει να γινεται με #define?


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: zidan on May 07, 2013, 20:15:40 pm
Το RAND_MAX είναι το me που δίνεις στο main...


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: billios on May 07, 2013, 22:31:02 pm
Το RAND_MAX είναι το me που δίνεις στο main...
ναι οκ αυτο,αλλα το RAND_MAX ειναι ορισμενο απ' τν βιβλιοθηκη σ' ενα default αριθμο...εγω πως μπορώ να βαλω το me να ειναι το 
 RAND_MAX?


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: alexampa on May 08, 2013, 00:34:10 am
Εγώ στην αρχή προσθέτω τον αριθμό. Αν είναι δεκτός είμαι οκ, αλλιώς τον αφαιρώ. Αλλιώς ξανακάνω ραντ

Τι εννοεις αν ειναι δεκτος?? Οποιεσδηποτε δεν μπορουν να ειναι οι συντεταγμενες του στοχου??  :???: Υπαρχει καποια εξαρτηση στον υπολογισμο των συντεταγμενων του στοχου απο τις προηγουμενες συντεταγμενες θεσης του βληματος??  Αφου η εκφωνηση λεει οτι δεν υπαρχει η απαιτηση να πλησιαζει ο στοχος το βλημα ή κατι τετοιο. Μηπως καταλαβα κατι λαθος? :???:  :-\

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

απλα πως θα κανουμε τον ελεγχο; (μεσα στην if τι θα βαλω);
την αποσταση θα την θεσουμε ως pointer;

Συμφωνω, η νεα θεση του βληματος πρεπει να ειναι πιο κοντα.Δεν αναφερομαι ομως στο βλημα, αλλα στον στοχο. Η νεα θεση του στοχου δεν πρεπει απαραιτητα να ειναι πιο κοντα. Ειτε προσθετουμε συνεχως εναν τυχαιο αριθμο ειτε τον αφαιρουμε για να βρουμε τις νεες συντεταγμενες του στοχου επειδη το RAND_MAX του στοχου ειναι το 1/4 του βληματος, το προγραμμα θα δουλευει κανονικα. Γι' αυτο ρωταω, ποια η αναγκαιοτητα αλλοτε να προσθετουμε και αλλοτε να αφαιρουμε, αφου ακομα κι αν κανουμε μονο το ενα απο τα δυο δεν θα υπαρχει κανενα προβλημα?? Ρωταω μηπως εχω αντιληφθει κατι λαθος πανω σε αυτο.


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: ntaFAQ on May 08, 2013, 11:40:40 am
μπορει να γραψει καποιος πως γινεται ακριβως η δηλωση της rand?? στη συγκεκριμενη ασκηση με το me??


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: Μουργόλυκος on May 09, 2013, 15:56:15 pm
μπορει να γραψει καποιος πως γινεται ακριβως η δηλωση της rand?? στη συγκεκριμενη ασκηση με το me??


x=rand() % me;         


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: vasilis94 on May 09, 2013, 16:05:08 pm
μπορει να γραψει καποιος πως γινεται ακριβως η δηλωση της rand?? στη συγκεκριμενη ασκηση με το me??


x=rand() % me;         

Ή διαφορετικά x= me* rand()/RAND_MAX αν ήθελες να μη περιορίστεί το x στους ακεραίους... Τώρα αν εννοούσε ο ntaFAQ δήλωση της συνάρτησης αυτή δε χρειάζεται από τη στιγμή που έχεις κάνει #include την αντίστοιχη βιβλιοθήκη..


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: PureForm on May 09, 2013, 16:37:06 pm
εμεισ θα διαβασουμε συντεταγμενεσ x,y η απλα εναν αριθμο και θεωρουμε οτι οι συντεταγμενη του ειναι η διευθυνση που εχει δωσει ο υπολογιστησ?
και αν χρειαζεται να διαβασουμε x,y συντεταγμενεσ ο ραντ αριθμοσ θα ειναι μονο ενασ η ενασ για το x και αλλοσ για το y


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: jordan_S on May 09, 2013, 18:12:21 pm
Υπαρχει περιπτωση η rand να μας βγαζει τους ιδιους τυχαιους αριθμους?Την ετρεξα καμια 10αρια φορες και βγαζει συνεχεια τους ιδιους


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: vasilis94 on May 09, 2013, 18:12:29 pm
εμεισ θα διαβασουμε συντεταγμενεσ x,y η απλα εναν αριθμο και θεωρουμε οτι οι συντεταγμενη του ειναι η διευθυνση που εχει δωσει ο υπολογιστησ?
και αν χρειαζεται να διαβασουμε x,y συντεταγμενεσ ο ραντ αριθμοσ θα ειναι μονο ενασ η ενασ για το x και αλλοσ για το y

Θα διαβάσεις τις αρχικές συντεταγμένες x,y. Δε καταλαβαίνω τι εννοείς για τη διεύθυνση...

Όσο για το άλλο, όλα εξαρτώνται από το πως μεταφράζεις αυτό:
Quote
Το βλήμα αλλάζει θέση προσθέτοντας ή αφαιρώντας από έναν τυχαίο αριθμό στις συντεταγμένες της θέσης του
Προσωπικά, έβαλα 2 random αριθμούς, έναν για κάθε συντεταγμένη χωρίς να μαι σίγουρος ωστόσο. Επίσης, μετά αν είναι 2, υπάρχει το ερώτημα: Μπορώ να προσθέτω τον έναν και να αφαιρώ τον άλλον? Και το πιο καμένο ερώτημα: Αν πχ. ο στόχος είναι στο (0,0) και το βλήμα στο (10,0) προσθέτεις ή αφαιρείς το dy ώστε να ναι πιο κοντά(και στις δυο περιπτώσεις μακρύτερα θα ναι)

Γενικά, απ' ότι κατάλαβα όσο προσεγμένη και να ναι η εκφώνηση, δύσκολο να μην υπάρχουν διαφορετικές ερμηνείες της... Πρακτικά, κάνε ό,τι νομίζεις καλύτερο, η εξάσκηση μετράει..


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: PureForm on May 09, 2013, 18:30:16 pm
οκ τωρα καταλαβα,κατι αλλο εφοσον εμεισ ζηταμε η αποσταση του βληματοσ απο τον τον στοχο την επομενη φορα να ειναι μικροτερη,για την συναρτηση που υπολιγιζει τισ καινουργιεσ συντεταγμενεσ για το βλημα δεν θα πρεπει να δεχεται και τισ καινουργιεσ συντεταγμενεσ του στοχου εφοσον αναφερει το προβλημα οτι ειναι γνωστεσ ετσι ωστε να ελεγχουμε μεσα στην συναρτηση τι παιζει και να προσαρμοζονται καταλληλα οι καινουργιεσ συντεταγμενεσ του βληματοσ?


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: vasilis94 on May 09, 2013, 18:40:30 pm
οκ τωρα καταλαβα,κατι αλλο εφοσον εμεισ ζηταμε η αποσταση του βληματοσ απο τον τον στοχο την επομενη φορα να ειναι μικροτερη,για την συναρτηση που υπολιγιζει τισ καινουργιεσ συντεταγμενεσ για το βλημα δεν θα πρεπει να δεχεται και τισ καινουργιεσ συντεταγμενεσ του στοχου εφοσον αναφερει το προβλημα οτι ειναι γνωστεσ ετσι ωστε να ελεγχουμε μεσα στην συναρτηση τι παιζει και να προσαρμοζονται καταλληλα οι καινουργιεσ συντεταγμενεσ του βληματοσ?

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

Υπαρχει περιπτωση η rand να μας βγαζει τους ιδιους τυχαιους αριθμους?Την ετρεξα καμια 10αρια φορες και βγαζει συνεχεια τους ιδιους

Φυσιολογικά θα πρεπε να βγάλει διαφορετικές.. Είναι μερικές χιλιάδες/εκατομμύρια οι ακέραιες τιμές μέχρι το RAND_MAX, οπότε πρακτικά αδύνατο να συμπίπτουν. Εκτός αν έκανες καμιά περίεργη ακέραια διαίρεση για να πάρεις το διάστημα που θες ή τίποτα τέτοιο (μου χε τύχει να βγάζει 0 ή 1 στην αρχή όπως το χα γράψει)


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: alexampa on May 10, 2013, 01:11:16 am
Υπαρχει περιπτωση η rand να μας βγαζει τους ιδιους τυχαιους αριθμους?Την ετρεξα καμια 10αρια φορες και βγαζει συνεχεια τους ιδιους

Φυσιολογικά θα πρεπε να βγάλει διαφορετικές.. Είναι μερικές χιλιάδες/εκατομμύρια οι ακέραιες τιμές μέχρι το RAND_MAX, οπότε πρακτικά αδύνατο να συμπίπτουν. Εκτός αν έκανες καμιά περίεργη ακέραια διαίρεση για να πάρεις το διάστημα που θες ή τίποτα τέτοιο (μου χε τύχει να βγάζει 0 ή 1 στην αρχή όπως το χα γράψει)

Εγω πάντως, οταν εψαχνα στο Google για την rand διαβασα οτι (δυστυχως) η rand βγαζει παντα τους ιδιους "τυχαιους" αριθμους οταν την τρεχεις ξανα και ξανα με τις ιδιες αρχικες συνθηκες!(δηλαδη ιδιες αρχικες συντεταγμενες στοχου,βληματος και ιδιο me) Γι' αυτο οταν θες το προγραμμα σου να ειναι, πρακτικα, πιο λειτουργικο χρησιμοποιεις την srand οι αλλες παροιμοιες που δεν θυμαμαι τωρα, οι οποιες βγαζουν καθε φορα διαφορετικους αριθμους, ακομα κ αν οι αρχικες συνθηκες ειναι ιδιες. Και μενα το ιδιο μου συμβαινει με την rand,οποτε νομιζω πως ειναι απολυτα φυσιολογικο και εφοσον η εκφωνηση προτεινει την rand, μαλλον δεν τους απασχολει ιδιαιτερα το θεμα αυτο. :)


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: zos on May 10, 2013, 01:39:38 am
Χρησιμοποιείστε την srand και εναν timer ρολογιού για να είναι πραγματικά τυχαία. Θα σας χρειαστεί και στην
C++ και δεν είναι τίποτα το τραγικό το internet έχει έτοιμα παραδείγματα.


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: Μουργόλυκος on May 10, 2013, 17:29:41 pm
Με βάση ποιο κριτήριο αφαιρούμε ή προσθέτουμε τις συντεταγμένες του στόχου?


Title: Re: [Δομημένος Πρ.]Εργασία D
Post by: απλυτος on May 11, 2013, 03:50:20 am
Με βάση ποιο κριτήριο αφαιρούμε ή προσθέτουμε τις συντεταγμένες του στόχου?
δεν διευκρινίζει. εγω προσωπικά παίρνω τις συντεταγμένες του βλήμματος και παίρνω συνθήκη η απόσταση βλήμμα-στόχος να αυξάνεται.