THMMY.gr

Μαθήματα Βασικού Κύκλου => Δομημένος Προγραμματισμός => Topic started by: λήθη on April 17, 2008, 09:49:54 am



Title: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on April 17, 2008, 09:49:54 am
Για να ελεγχθούν οι παρεμβολές μεταξύ Ν ραδιοσταθμών που εκπέμπουν με ισχύ Wi watt (i=1,…,Ν) να γραφεί το πρόγραμμα στο οποίο να ορίζεται η συνάρτηση void check(…) η οποία δέχεται την ισχύ εκπομπής δύο σταθμών, μια ελάχιστη wmin και μια μέγιστη wmax αποδεκτή ισχύ σήματος και την απόσταση μεταξύ των δυο σταθμών. Η συνάρτηση να υπολογίζει την ακτίνα εκπομπής κάθε σταθμού από τον τύπο Ri=sqrt(Wi/w) και αν υπάρχει επικάλυψη να υπολογίζει ένα κοινό ελάχιστο ποσοστό μείωσης της ισχύος των δυο σταθμών έτσι ώστε να μην υφίσταται η επικάλυψη. Η ίδια συνάρτηση να υπολογίζει με βάση αυτό το ποσοστό τις νέες τιμές για την εκπεμπόμενη ισχύ του κάθε σταθμού έτσι ώστε αυτές να βρίσκονται μέσα στα επιτρεπτά όρια και να μην υπάρχει επικάλυψη.

Η συνάρτηση main να διαβάζει την ελάχιστη αποδεκτή ισχύ σήματος wmin, τη μέγιστη επιτρεπόμενη ισχύ vmax, τις συντεταγμένες (Xi,Yi) (i=1,…,Ν) και την ισχύ εκπομπής Wi, (i=1,…,Ν)  από Ν σταθμούς και να χρησιμοποιεί τη συνάρτηση check για να υπολογίσει και να εκτυπώσει τις νέες τιμές για την ισχύ εκπομπής κάθε σταθμού έτσι ώστε να μην υπάρχει επικάλυψη.

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


Hμ/νία λήξης δηλώσεων: 07/05/2008


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: portinos on April 17, 2008, 12:59:58 pm
Πότε πρόλαβε να την ανεβάσει κιόλας??? ^que^. Και είναι σωστό αυτό: η προθεσμία είναι μέχρι   
 7 Μαϊου;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: e1rini on April 17, 2008, 13:08:26 pm
Η προθεσμία μια χαρά μου φαίνεται. Μια εργασία να δουλέψουμε για τις διακοπές.
Τι δε σου αρέσει;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: sarovios on April 17, 2008, 13:32:59 pm
Πότε πρόλαβε να την ανεβάσει κιόλας??? ^que^. Και είναι σωστό αυτό: η προθεσμία είναι μέχρι   
 7 Μαϊου;

Αν η προθεσμια ηταν 1 εβδομαδα οπως και για τις αλλες εργασιες θα επρεπε να την ανεβασεις μεγαλη τεταρτη.Πως σου φαινεται αυτο? Καλυτερα ετσι να δουλεψουμε λιγο παραπανω και εμεις οι ψιλοασχετοι τωρα που εχουμε λιγο χρονο γιατι χασαμε τη μπαλα...   :D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 17, 2008, 13:39:21 pm
Έλεος, τι κόλλημα έχει φάει με τις συχνότητες και τους ραδιοσταθμούς! Κάτι πιο ενδιαφέρον δε μπορεί να σκεφτεί πια???  >:( >:( >:(


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: portinos on April 17, 2008, 13:45:24 pm
Καλά δεν είπα και τίποτα. Απλά μου φάνηκε περίεργο για τον Κορτέση... Τον έχω ικανό να μας έβαζε να παραδώσουμε εργασίες τη Μεγάλη Τετάρτη και γι' αυτό το σχολίασα. Για τίποτα άλλο, όσο για το χρόνο, όσο περισσότερος τόσο το καλύτερο.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 17, 2008, 15:14:49 pm
Στον τύπο  Ri=sqrt(Wi/w)  το μικρό w τί ακριβώς είναι???



Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 17, 2008, 21:27:25 pm
Οι εργασίες γίνονται όλο και πιο ... ενδιαφέρουσες!  :D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ripper_george on April 17, 2008, 22:05:42 pm
Plz,
κάποιος αν έχει ιδέα να εξηγήσει τι ακριβώς είναι στον τύπο sqrt(Wi/w) το w...
Παίζει να είναι η μέση τιμή των wmax wmin???
Δεν μου φαίνεται να έχει νόημα να δώσει ο χρήστης ως συντεταγμένες του ραδιοφωνικού σταθμού κάτι της μορφής:
30,50 κτλ...

Thx in advance


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: mitsos_dlx on April 18, 2008, 00:59:50 am
Για το w το μικρό δεν γίενεται πουθενά λόγος οπότε στη χειρότερη περίπτωση να μην το λάβουμε καθόλου υπόψη μας ;)! Μια χαρά φένεται ο τύπος και χωρίς αυτό.

Το ερώτημά μου είναι άλλο όμως.
Λέει λοιπόν στην άσκηση:

Υπολογίστε το ελάχιστο κοινό ποσοστό μείωσης για να μην υπάρχει επικάλυψη. ...οk

Με βάση το ποσοστό μείωσης (που είναι κοινό!, πχ -20% και για τους 2 σταθμούς) υπολογίστε τη νέα επιτρεπόμενη ισχύ κάθε σταθμού έτσι ώστε να μην πέσει κάτω από το wmin στην ουσία (λόγω της μείωσης) και να μην υπάρχει επικάληψη.

Αν η μείωση δεν οδηγήσει σε πτώση κάποιας ισχύος κάτω απο το κατώτατο οριο wmin τότε όλα είναι καλά και τα 2 W μειώνονται κατά το ίδιο ποσοστό.

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

πχ Αν  W1=110 W2=150 wmin=100 και θέλουμε μείωση 20% δεν γίνεται γιατί  τότε
     newW2=130>wmin αλλά  newW1=88<wmin .
     Όμως με newW1=100=wmin και newW2=120 (στη τύχη το νούμερο) πετυχαίνουμε να μην έχουμε επικάληψη για τη συγκεκριμένη πάντα απόσταση. Δηλαδή πάμε το newW1 που έχει το πρόβλημα όσο πιο κάτω μπορεί να παει (στο wmin) και μετά βρίσκουμε πόσο πρέπει να είναι το άλλο για να μην έχουμε επικάληψη.

Βέβαια έδω η μείωση δεν είναι κοινή. Αλλά πετυχαίνουμε αυτό που ζητάει η άσκηση σε δεύτερο χρόνο (όχι επικάληψη και μέσα στα όρια). Γιατί στην αρχή ζητάει κοινή μειωση!

Μου φάνεται λοιπόν οτί εδώ η εκφώνηση δεν ξέρει τι θέλει...
1) Κοινή μείωση οποσδήποτε και αν δεν γίνεται (κάποια συχνότητα πέσει κάτω από το wmin) να βγάλουμε ένα μήνυμα "Λυπούμαστε! Μετακινήστε αλλόυ τους σταθμούς σας!"
Ή
2) Να βρούμε οποσδήποτε νέες συχνότητες, ακόμη και με μη κοινό ποσοστό μείωσης.
(υπάρχει βέβαια και η περίπτωση να πέσουν και οι 2 κάτω από το wmin οπότε πάμε στη λύση 1 :D :D :D)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 18, 2008, 01:44:39 am
Ναι πράγματι, και εγώ το σκέφτηκα αυτό με τη μείωση και την περίπτωση να βγει έξω από τα όρια! Πολλές ασάφειες η συγκεκριμένη εργασία...
Τουλάχιστον να μάθουμε τι είναι το w....  :D :D :D :D :D :D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Goklagie on April 18, 2008, 04:29:13 am
Επίσης στην αρχή λέει για N σταθμούς και μετά αναφέρει απόσταση μεταξύ 2 σταθμών...

Άγνωσται αι βουλαί του Κορτέση...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: nicole on April 18, 2008, 12:23:42 pm
Στον τύπο  Ri=sqrt(Wi/w)  το μικρό w τί ακριβώς είναι???



Τελικά το w ειναι το wmin. Έχει διορθωθεί στις εκφωνήσεις τις εργασίας στο e-thmmy.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: zeus90 on April 18, 2008, 16:02:17 pm
Στον τύπο  Ri=sqrt(Wi/w)  το μικρό w τί ακριβώς είναι???



Τελικά το w ειναι το wmin. Έχει διορθωθεί στις εκφωνήσεις τις εργασίας στο e-thmmy.
Πάλι καλά αν και θα έπρεπε να διορθωθούν και κάποιες άλλες ασάφειες.... :(


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 18, 2008, 18:04:24 pm
Πρέπει να χρησιμοποιήσουμε δυναμική δέσμευση μνήμης ή μπορούμε αυθαίρετα να θέσουμε ένα μέγιστο για το N????


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: stefos on April 18, 2008, 19:10:23 pm
Πρέπει να χρησιμοποιήσουμε δυναμική δέσμευση μνήμης ή μπορούμε αυθαίρετα να θέσουμε ένα μέγιστο για το N????
Δυναμική δέσμευση μνήμης...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: SolidSNK on April 19, 2008, 19:29:51 pm
Νομίζω καταλαβαίνω τι σημαίνει επικάλυψη, αλλά για σιγουριά μπορεί κανείς να εξηγήσει μία?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 19, 2008, 20:09:35 pm
Νομίζω καταλαβαίνω τι σημαίνει επικάλυψη, αλλά για σιγουριά μπορεί κανείς να εξηγήσει μία?

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: SolidSNK on April 19, 2008, 20:10:33 pm
thx bud


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 19, 2008, 20:46:56 pm
Έχω μια ερώτηση ακόμα!

Στο τέλος για να υπολογίσουμε τις νέες τιμές και για τους Ν σταθμούς πρέπει να χρησιμοποιούμε τη συνάρτηση check() ανά δύο σταθμούς????


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: astakos on April 19, 2008, 21:26:46 pm
Δεν έχω καταλάβει που χρειάζονται οι συντεταγμένες (Xi,Yi) (i=1,…,Ν)  που λέει στην εκφώνηση ,μπορεί κάποιος  να βοηθήσει ?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: rigos on April 19, 2008, 23:41:51 pm
Για να υπολογίσεις τις αποστάσεις μεταξύ των σταθμών
 :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 20, 2008, 12:33:13 pm
πως κάνουμε δυναμική δέσμευση μνήμης?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 20, 2008, 14:15:31 pm
Δες στις σημειώσεις του Κορτέση ,εκεί που λέει δυναμική κατανομή μνήμης. Χρησιμοποιείς τη συνάρτηση malloc που περιέχεται στη βιβλιοθήκη stdlib.h


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 20, 2008, 14:51:57 pm
το ξέρω αλλά δεν θα μπορούσε να τα λέει πιο ακαταλαβίστικα..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 20, 2008, 16:35:34 pm
OK ,θα προσπαθήσω να σου εξηγήσω (και εγώ δεν είμαι σίγουρος αν κατάλαβα σωστά).

Για παράδειγμα θέλεις να αποθηκεύσεις Ν στοιχεία που είναι συχνότητες:

#include <stdio.h>
#include <stdlib.h>

void main()
{


float *sixnotites;      // Δηλώνεις έναν pointer που δείχνει σε μια διεύθυνση στη μνήμη όπου από εκεί και μετά θα αποθηκεύσεις float
int i,N;

scanf("%d",&N);      // Τη στιγμή της εκτέλεσης ο χρήστης εισάγει το Ν
sixnotites = (float *)malloc(N*sizeof(float));

H malloc είναι μια συνάρτηση που εντοπίζει μια διεύθυνση στη μνήμη όπου από εκεί και μετά υπάρχουν (Ν*sizeof(float)) ελεύθερα bytes. Βάζουμε μέσα στην παρένθεση N*sizeof(float) γιατί σκοπεύουμε να αποθηκεύσουμε εκεί αριθμούς float.
ُΕπειδή όμως η malloc επιστρέφει void pointer μιας και δεν ξέρει τι θέλεις να αποθηκεύσεις εκεί, κάνεις ένα type casting ->
sixnotites=(float *).....

για να ισχύει float*=(float*) void*

και μετά για να αποθηκεύσεις τα στοιχεία γράφεις:

for (i=0;i<N;i++)
    scanf("%f",sixnotites + i);


}


Nα θέσω και εγώ κάτι ερωτήματα:
1) Τι νόημα έχει η check() να δέχεται ως όρισμα το wmax αφού δεν υπάρχει περίπτωση η ισχύς να γίνει μεγαλύτερη από αυτό, καθώς η ισχύς μόνο μειώνεται??!!!

2) Αν κατά τη μείωση της ισχύος με τη χρήση της check, η ισχύς γίνει μικρότερη από τη wmin τι κάνουμε??
Εγώ σκέφτηκα να γίνεται η ισχύς ίση με τη wmin,αλλά το πρόβλημα είναι ότι θα υπάρχει επικάλυψη πάλι.

Τι είναι σημαντικότερο? Να μην υπάρχει επικάλυψη ή να μη παραβιάζονται τα όρια?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 20, 2008, 17:25:19 pm
thanx a lot θα το δοκιμάσω.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: georngeo on April 20, 2008, 18:54:00 pm
λιγο μπερδεμενη η ασκηση...αν βρεις το κοινο ποσοστο και υστερα η w δεν ειναι μεταξυ των wmin και wmax τι γινεται? μενει με την ιδια τιμη?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 20, 2008, 19:04:55 pm
λιγο μπερδεμενη η ασκηση...αν βρεις το κοινο ποσοστο και υστερα η w δεν ειναι μεταξυ των wmin και wmax τι γινεται? μενει με την ιδια τιμη?

ٍΣίγουρα θα είναι μικρότερη από wmax.  Αν είναι μικρότερη από wmin θα βάλω να γίνεται ίση με wmin.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 20, 2008, 19:45:09 pm
ας πει κάποιος τα ορίσματα της check γιατι θα τρελαθώ..

thx


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: georngeo on April 20, 2008, 19:54:46 pm
void check(float *w1,float *w2,float *wmin0,float *wmax0,float *ds)

ds i apostasi twn sta8mwn,w1,w2 oi times tis isxyos twn 2 sta8mwn


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 20, 2008, 20:00:26 pm
όλο λάθη μου βγάζει ο compiler..
τα w1 και w2 πώς τα ορίζεις??


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: georngeo on April 20, 2008, 20:17:41 pm
orizeis tin check prin to void main()
void check(float *w1,float *w2,float *wmin0,float *wmax0,float *ds);

otan tin kaleis grafeis px
check(&w,&w[j],&wmin,&wmax,&d);

w1,w2 einai typou float(etsi ta ebala egw), diaforetikes times isxyos 2 sta8mwn pou yparxoun se ena pinaka w[n] me tis times isxyos twn sta8mwn.Ta orismata tis sinartisis den ta ksanadilwneis mesa stin sinartisi.den kserw an se boithisa...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 20, 2008, 21:01:17 pm
georngeo

εσύ στην περίπτωση που το W γίνεται μικρότερο από το wmin τι κάνεις???

Υπάρχει απάντηση σε αυτό το γ*****ενο πρόβλημα??


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: georngeo on April 20, 2008, 21:14:35 pm
auto rwtisa kai prin kai mou fanike kapws asafis i ekfwnisi.den kserw..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 21, 2008, 19:31:34 pm
Επίσης στην αρχή λέει για N σταθμούς και μετά αναφέρει απόσταση μεταξύ 2 σταθμών...

Άγνωσται αι βουλαί του Κορτέση...
Αυτό το έκανε μάλλον διότι ο αλγόριθμος θα ήταν πιο δύσκολος αν σου έλεγε "Να γίνουν οι απαραίτητες μειώσεις ισχύος μέσα στα όρια ώστε να μην υπάρχει καμία επικάλυψη μεταξύ των σταθμών"  :D :D :D

Απλά βάζεις το χρήστη να επιλέξει μεταξύ ποιων σταθμών θα εκτελέσει τον έλεγχο


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 21, 2008, 21:11:28 pm
Nα θέσω και εγώ κάτι ερωτήματα:
1) Τι νόημα έχει η check() να δέχεται ως όρισμα το wmax αφού δεν υπάρχει περίπτωση η ισχύς να γίνει μεγαλύτερη από αυτό, καθώς η ισχύς μόνο μειώνεται??!!!
2) Αν κατά τη μείωση της ισχύος με τη χρήση της check, η ισχύς γίνει μικρότερη από τη wmin τι κάνουμε??
Εγώ σκέφτηκα να γίνεται η ισχύς ίση με τη wmin,αλλά το πρόβλημα είναι ότι θα υπάρχει επικάλυψη πάλι.

Τι είναι σημαντικότερο? Να μην υπάρχει επικάλυψη ή να μη παραβιάζονται τα όρια?
1)Έλα ντε !?
Ίσως για να γίνει πιο ρεαλιστικό το πρόβλημα

2)Εγώ επέλεξα να γίνεται ίση με την wmin εφόσον μόνο η μία ισχύς πέφτει κάτω από το wmin
Τότε η συνάρτηση μειώνει όσο χρειάζεται την ισχύ του άλλου σταθμού (υπολογίζοντας το αντίστοιχο ποσοστό) προσέχοντας να μην πέσει και αυτή κάτω από το wmin. Αν και οι δύο πέσουν κάτω από το wmin σημαίνει είτε ότι το ελάχιστο όριο wmin είναι πολύ μεγάλο είτε οι σταθμοί είναι πολύ κοντά  μεταξύ τους. Τότε "πετάει" μήνυμα σφάλματος


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 21, 2008, 21:56:13 pm
Επίσης στην αρχή λέει για N σταθμούς και μετά αναφέρει απόσταση μεταξύ 2 σταθμών...

Άγνωσται αι βουλαί του Κορτέση...
Αυτό το έκανε μάλλον διότι ο αλγόριθμος θα ήταν πιο δύσκολος αν σου έλεγε "Να γίνουν οι απαραίτητες μειώσεις ισχύος μέσα στα όρια ώστε να μην υπάρχει καμία επικάλυψη μεταξύ των σταθμών"  :D :D :D

Απλά βάζεις το χρήστη να επιλέξει μεταξύ ποιων σταθμών θα εκτελέσει τον έλεγχο

Δε νομίζω να επιλέγεις κάθε φορά μόνο δύο σταθμούς. Τότε ,δεν έχει νόημα να υπάρχουν Ν σταθμοί. Ας υπάρχαν δύο και κάθε φορά να ξανατρέχαμε το πρόγραμμα. Η δυσκολία είναι ότι πρέπει να εφαρμόζεται ανά δυο σταθμούς και για τους Ν έτσι ώστε να μην υπάρχει επικάλυψη σε κανέναν από αυτούς.Εδώ όμως είναι που δημιουργείται η δυσκολία με το τι γίνεται αν πέσει κάτω από το wmin....
ِΑν π.χ υπάρχουν 50 σταθμοί είναι πολύ κουραστικό να επιλέγεις κάθε φορά δυο.
Πρέπει να το κάνει το πρόγραμμα για όλους


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 21, 2008, 23:59:53 pm
Δε νομίζω να επιλέγεις κάθε φορά μόνο δύο σταθμούς. Τότε ,δεν έχει νόημα να υπάρχουν Ν σταθμοί. Ας υπάρχαν δύο και κάθε φορά να ξανατρέχαμε το πρόγραμμα. Η δυσκολία είναι ότι πρέπει να εφαρμόζεται ανά δυο σταθμούς και για τους Ν έτσι ώστε να μην υπάρχει επικάλυψη σε κανέναν από αυτούς.Εδώ όμως είναι που δημιουργείται η δυσκολία με το τι γίνεται αν πέσει κάτω από το wmin....
ِΑν π.χ υπάρχουν 50 σταθμοί είναι πολύ κουραστικό να επιλέγεις κάθε φορά δυο.
Πρέπει να το κάνει το πρόγραμμα για όλους

Ο κώδικας όμως για κάτι τέτοιο δεν γίνεται να βασίζεται σε σύγκριση μεταξύ 2 σταθμών
Για παράδειγμα:
Μας ζητάει τις συντεταγμένες των σταθμών, άρα δεν έχουμε π.χ. σταθμούς σε μια σειρά (πράγμα που απλοποιεί το πρόγραμμα) αλλά διάσπαρτους πάνω σε μια επιφάνεια (ας τη θεωρήσουμε επίπεδη)
Έστω ότι ξεκινάς με τον 1ο και τον 2ο μετά με τον 2ο και 3ο κοκ
Θα φτάσεις σε ένα σημείο όπου π.χ. ο 15ος θα εμφανίζει επικάλυψη με τον 28ο και τον 39ο
Αν πας να το ελέγξεις, μπορεί ο 15ος να μην μπορεί να μειωθέι και αν μειωθεί ο 28ος να αφήνει κενά στην κάλυψη μεταξύ του 17ου και του 52ου.
 ;D ;D ;D
Είδες που μας πάει? θα πρέπει να κάνεις τοοοοσες πολλές επαναλήψεις ώστε να σιγουρευτείς ότι κανένας σταθμός δεν εμφανίζει επικάλυψη με οποιονδήποτε άλλο...
Ακόμα και αν συγκρίνεις κάθε σταθμό με κάθε άλλο, πάλι δε σου φτάνει.

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


Νομίζω ότι ήρθε η ώρα να στείλουμε ένα email :P


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 22, 2008, 12:47:41 pm
Δε χρειάζονται πολλές επαναλήψεις, μόνο οι απαραίτητες. Γίνονται με δυο for

for(i=0;i<N;i++)       
      for(j=0;j<N;j++)
         if (i!=j) {
                distance= κτλ           
                check(&W[ι],&W[j],wmin,wmax,distance);
             }


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

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

Όπως και να ' χει αν στείλεις email ενημέρωσέ μας!! :D :D :D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 22, 2008, 13:12:00 pm
Οπότε εσύ λες να γίνουν όλες οι επαναλήψεις, να αλλάζουν οι τιμές των σταθμών και στο τέλος να εμφανίζει όλο τον πίνακα ισχύος για κάθε σταθμό (επειδή το ζητάει η άσκηση)
fair enough  ;)

Πραγματικά, τι γίνεται με τα όρια άραγε?  :D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Komimis on April 22, 2008, 13:17:30 pm
εγώ ακόμα δεν μπορώ να καταλάβω πως χρησιμοποιώ την malloc
εχω ορίσει το εξης
float *Wi
Wi=(float*)malloc(n*sizeof(float));

στο όρισμα της check δεν πρέπει να βάλω 2 τιμές W?
πώς γίνεται να αναφερθώ στην 1η και μετα στην 5η ξερώ γω??
θέλω δλδ check (W1,W5)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ripper_george on April 22, 2008, 14:01:49 pm

Help!!

Έστω ότι ένας σταθμός έχει conflict με άλλους 2 σταθμούς....
Θα τον μειώσω κατα χ%, λόγω του πρώτου και στη συνέχεια στην ίδια μειωμένη τιμή να μειωθεί περιταίρω λόγω του δευτερου??? Η να πάρω το σταθμό για τον οποίο έχουμε τη μεγαλύτερη μείωση και να την υπολογίσω σε αυτή???

Thx


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 22, 2008, 14:06:57 pm
εγώ ακόμα δεν μπορώ να καταλάβω πως χρησιμοποιώ την malloc
εχω ορίσει το εξης
float *Wi
Wi=(float*)malloc(n*sizeof(float));

στο όρισμα της check δεν πρέπει να βάλω 2 τιμές W?
πώς γίνεται να αναφερθώ στην 1η και μετα στην 5η ξερώ γω??
θέλω δλδ check (W1,W5)

To Wi που έβαλες θα χρησιμοποιηθεί σαν όνομα στον πίνακα που χρειάζεσαι.
Στην πραγματικότητα το "όνομα του πίνακα" δεν είναι παρά ένας pointer που δείχνει στην πρώτη θέση μνήμης.
Όταν λοιπόν θα καταχωρείς τιμές θα λες
scanf("%f", Wi+i);
όταν θα διαβάζεις συχνότητες θα λες
check(Wi[0],Wi[4])
για τον 1ο κι 4ο σταθμό


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 22, 2008, 14:08:59 pm

Help!!

Έστω ότι ένας σταθμός έχει conflict με άλλους 2 σταθμούς....
Θα τον μειώσω κατα χ%, λόγω του πρώτου και στη συνέχεια στην ίδια μειωμένη τιμή να μειωθεί περιταίρω λόγω του δευτερου??? Η να πάρω το σταθμό για τον οποίο έχουμε τη μεγαλύτερη μείωση και να την υπολογίσω σε αυτή???

Thx
Λογικά ανα δύο θα το παίρνεις. Πρώτα μείωση ο 1ος με το 2ο και μετά ο 1ος με τον 3ο κοκ


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ripper_george on April 24, 2008, 03:53:17 am
Ναι, αλλά να μειώσω πρώτα τον 1 κατα π.χ. 10% (λόγω του 2ου) και μετα να τον ξαναμειώσω κατα πχ. 50% (λόγω του 3ου) στην ηδη μειωμένη τιμή του, η να τον μειώσω μια και καλή λόγω του 3ου στο π.χ. 56%????/
Δηλαδή να λειτουργήσει κάπως σαν το επιτόκιο???? :)
Η να υπολογίσω την μέγιστη μείωση μια κια καλή έτσι ώστε να μην έχει conflict με τους αλλους σταθμούς??


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 24, 2008, 10:30:08 am
Με αφορμή το οχτακοσιοστό ογδοηκοστό όγδοο ποστ μου :D
παραθέτω την απάντηση του κ. Κορτέση στο email μου

1)Ποιο το νόημα του ανώτατου ορίου;
Quote
Το ανώτερο όριο εκπομπής έχει την έννοια ότι αν ο σταθμός καταθέσει ισχύ μεγαλύτερη από αυτό θα πρέπει να τη μείωση κάτω από αυτό ανεξάρτητα αν υπάρχει ή όχι επικάλυψη με άλλον σταθμό.

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

3)Η άσκηση ζητάει συγκρίσεις μεταξύ 2 σταθμών. Οι συγκρίσεις και απαραίτητες  αλλαγές θα επιλέγονται από το χρήστη ή θα γίνονται αυτόματα για κάθε δυνατό συνδυασμό;
Quote
Η check θα ελέγχει μόνο δύο σταθμούς το πρόγραμμα θα τη χρησιμοποιεί για όλους τους δυνατούς συνδυασμούς σταθμών έτσι ώστε τελικά κανείς σταθμός να μην επικαλύπτει κάποιον άλλον.

4)Υπάρχει περίπτωση επιβάλλοντας την απαραίτητη μείωση ισχύος για να εξαλειφθεί η επικάλυψη η ισχύς του ενός ή και των 2 σταθμών να πέσει κάτω από το κατώτερο όριο ελάχιστης αποδεκτής ισχύος. Σε αυτή την περίπτωση τι γίνεται; Αν μόνο ο ένας σταθμός εμφανίσει πρόβλημα μπορούμε να εξισώσουμε την ισχύ του με το Wmin και να μειώσουμε ανάλογα την ισχύ του άλλου; Τι είναι σημαντικότερο, να μην υπερβούμε τα όρια, να έχουμε ένα κοινό ποσοστό μείωσης ισχύος ή να αποτρέψουμε την επικάλυψη;
Quote
Αν η διόρθωση φέρει τον ένα σταθμό κάτω από το κατώτερο όριο η ισχύς του θα τεθεί ίση με την wmin Για τον δεύτερο σταθμό δε θα γίνει νέα μείωση έστω και αν με εκπομπή wmin του πρώτου υπάρχει επικάλυψη.

Quote
Αυτά για να γίνει πιο απλό το πρόγραμμα.
Αν θέλετε να κάνετε πιο κοντά στην πραγματικότητα το πρόγραμμα μπορείτε στις περιπτώσεις 2 και 4 να αυξήσετε ή να μειώσετε την ισχύ ώστε να έχετε τη βέλτιστη κάλυψη χωρίς επικαλύψεις. Κάτι τέτοιο δεν το απαιτεί η εργασία. Σας προειδοποιώ όμως ότι με αυτή την προσέγγιση ο αλγόριθμος αποκτά μεγάλη πολυπλοκότητα

Τον ευχαριστούμε για τις απαντήσεις του  :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 24, 2008, 13:29:55 pm
Αχ επιτέλουςςςςςς!!Ξεκαθαρίστηκαν οι ασάφειες! thanks agent

ِΑλλά μια τελευταία ερώτηση:
Οι ελάχιστη και μέγιστη εκπομπή ισχύος είναι κοινή για όλους τους σταθμούς ε??


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on April 24, 2008, 14:05:54 pm
Αχ επιτέλουςςςςςς!!Ξεκαθαρίστηκαν οι ασάφειες! thanks agent

ِΑλλά μια τελευταία ερώτηση:
Οι ελάχιστη και μέγιστη εκπομπή ισχύος είναι κοινή για όλους τους σταθμούς ε??
Σαφώς...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on April 26, 2008, 00:07:38 am
δεν μ' άρεσε αυτή η εργασία :( η προηγούμενη τα έσπαγε!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 26, 2008, 02:57:35 am
δεν μ' άρεσε αυτή η εργασία :( η προηγούμενη τα έσπαγε!

+1


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: fourier on April 29, 2008, 20:09:00 pm
Να ρωτησω, επειδη βαριεμαι να αρχισω τους υπολογισμους με το χερι, εχει βρει κανεις καμια ομαδα τιμων που να μπορει να χρησιμοποιηθει δοκιμαστικα, για να δουμε εαν το προγραμμα δουλευει κανονικα?

+1 κι απο μενα, αθλια εργασια

Επισης, ας αρχισουμε να δημοσιευουμε τον κωδικα μας, για συγκριση, βοηθεια κλπ κλπ.

Εγω εκανα αυτο, το οποιο δειχνει να τρεχει:


Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

void check(float min, float max, float *w1, float *w2, float *dst);

int main (void) {


float wmin=0.0, wmax=0.0, d=0.0, tempx=0.0, tempy=0.0;
float *X, *Y, *W;
int n=0, i=0, j=0;


printf("Posoi sta8moi 8a eksetastoun? ");
scanf("%d",&n);
printf("\nEisagete thn ELAXISTH dynath isxy ekpomphs wmin: ");
scanf("%f",&wmin);
printf("Eisagete th MEGISTH dynath isxy empomphs wmax: ");
scanf("%f",&wmax);


X = malloc(n*sizeof(float));
Y = malloc(n*sizeof(float));
W = malloc(n*sizeof(float));


/* APODWSH ARXIKWN TIMWN */
for (i=0;i<n; i++) {
X[i]=0.0;
Y[i]=0.0;
W[i]=0.0;
}


/* EISAGWGH TIMWN APO TO XRHSTH */
for (i=0; i<n; i++) {
printf("\nEisagete tis syntetagmenes tou %dou sta8mou:",(i+1));

printf("\nx%d= ",(i+1));
scanf("%f",&X[i]);

printf("y%d= ",(i+1));
scanf("%f",&Y[i]);

printf("Isxys: ");
scanf("%f",&W[i]);

printf("\n-----------------------------------------------\n");
}

for (i=0; i<n; i++) {
for (j=0; j<n; j++) {

tempx=fabs(X[i]-X[j]);
tempy=fabs(Y[i]-Y[j]);

d = sqrt(pow(tempx,2)+pow(tempy,2));

check(wmin, wmax, &W[i], &W[j], &d);
}
}

for (i=0; i<n ; i++) {
printf("H nea syxnothta tou %dou sta8mou einai: %3.1f\n",i+1,W[i]);
}

printf("\n\nTELOS!\n\n");

free(X);
free(Y);
free(W);
X=NULL;
Y=NULL;
W=NULL;

return 0;

}


void check(float min, float max, float *w1, float *w2, float *dst) {

float r1=0.0, r2=0.0, common=0.0;

/* ELEGXOS THRHSHS ANWTATOU ORIOU */
if(*w1 > max) {
*w1=max;
}

if(*w2 > max) {
*w2=max;
}

r1 = sqrt((*w1)/min);
r2 = sqrt((*w2)/min);

if(*dst<(r1+r2)) {
common = (r1+r2)-(*dst);
r1 = r1-(common/2);
r2 = r2-(common/2);
}

*w1 = min*pow(r1,2);
*w2 = min*pow(r2,2);

/* ELEGXOS GIA THRHSH TOU KATWTEROU ORIOU, META THN MEIWSH TWN SYXNOTHTWN */
if(*w1<min) {
*w1 = min;
}

if(*w2<min) {
*w2 = min;
}
}


Οποιος εχει να προτεινει διορθωσεις, ειναι καλοδεχουμενος!


Στον Visual Studio βγαζει κατι warnings, και ισως πρεπει να χρησιμοποιησω double αντι για float, αλλα προς το παρον βαριεμαι να κανω αλλαγες.....


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 30, 2008, 14:10:48 pm
  Στο καθένα από αυτά     

        X = malloc(n*sizeof(float));
   Y = malloc(n*sizeof(float));
   W = malloc(n*sizeof(float));

βάλε

  if (X==NULL){                                   
      printf("Den yparxei arketi mnimi!");       
      exit(1);

κ.τ.λ


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: fourier on April 30, 2008, 14:23:51 pm
  Στο καθένα από αυτά     

        X = malloc(n*sizeof(float));
   Y = malloc(n*sizeof(float));
   W = malloc(n*sizeof(float));

βάλε

  if (X==NULL){                                   
      printf("Den yparxei arketi mnimi!");       
      exit(1);

κ.τ.λ

Ευχαριστω, αλλα μπορεις να μου εξηγησεις γιατι?  :-[


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on April 30, 2008, 14:35:06 pm
Δες στις σημειώσεις του Κορτέση σελ. 47 νομίζω.

Όταν η μνήμη που ζητάς με τη malloc δεν υπάρχει,τότε  ο pointer παίρνει την τιμή NULL. Επειδή μπορεί να παρουσιαστούν προβλήματα αν συνεχιστεί η εκτέλεση του προγράμματος, βγάζεις μήνυμα ότι δεν επαρκεί η μνήμη και τερματίζεις το πρόγραμμα...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: portinos on April 30, 2008, 21:22:25 pm
Παιδιά Χρόνια Πολλά και Χριστός Ανέστη. Μόλις τελείωσα την εργασία, αλλά έχω μία απορία. Έχω τον Dev περασμένο και σε Windows XP και σε Vista. Τρέχω το πρόγραμμα και στα δύο και ενώ στα XP το τρέχει κανονικά χωρίς κανένα πρόβλημα, στα Vista μου βγάζει λάθη στην έτοιμη βιβλιοθήκη stdlib.h. Εχώ φταίω ή τα Vista;;;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: smo on April 30, 2008, 22:34:36 pm
δεν μ' άρεσε αυτή η εργασία :( η προηγούμενη τα έσπαγε!

+1

+2 απο μενα


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: dimvam on May 01, 2008, 17:52:25 pm
Έχω το εξής πρόβλημα:

Όταν βάζω μία συνάρτηση και τρέχω το πρόγραμμα μου βγάζει μήνημα λάθους: όνομα συνάρτης must have prototype.
Αυτό συμβαίνει και στα πιο απλά προγραμματάκια που παίρνω έτοιμα από βιβλία προγραμματισμού. Τι μπορεί να φταίει;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: kanele on May 01, 2008, 18:14:27 pm
   Έχεις δηλώσει τη συνάρτηση πριν τη μαιν(); :D

Αν όχι πρέπει να το κάνεις, και όλα μάλιστα...τι επιστρέφει και ορίσματα

Αυτό λέγεται function prototype ή πρωτότυπο συνάρτησης


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: dimvam on May 01, 2008, 19:22:48 pm
   Έχεις δηλώσει τη συνάρτηση πριν τη μαιν(); :D

Αν όχι πρέπει να το κάνεις, και όλα μάλιστα...τι επιστρέφει και ορίσματα

Αυτό λέγεται function prototype ή πρωτότυπο συνάρτησης
Σωστός! Ευχαριστώ πολύ. Καμιά φορά κάτι τόσο αυτονόητο ξεχνιέται μετά τις διακοπές του Πάσχα...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: tsap on May 01, 2008, 21:34:58 pm
Ρε παιδια να ρωτησω κατι απλο...
Στο προγραμμα μας θα υπαρχει κανενα loop ωστε να δεχομαστε καθε φορα(για ενα αριθμο επαναληψεων) διαφορετικα ζευγαρια για συγκριση σε ΜΙΑ εκτελεση του προγραμματος ή απλα λεμε στο χρηστη πες μου ποιους 2 σταθμους θελεις να "κοιταξω"; 


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: dimvam on May 01, 2008, 23:27:09 pm

Να ρωτήσω κάτι. Αν χρησιμοποιούμε τη malloc πρέπει να βάλουμε στο τέλος οπωσδήποτε και τη free? Γιατί κάτι τέτοιο βλέπω να έχει κάνει ο συνάδελφος που ανέβασε τον κώδικα.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: dimvam on May 01, 2008, 23:28:13 pm
Ρε παιδια να ρωτησω κατι απλο...
Στο προγραμμα μας θα υπαρχει κανενα loop ωστε να δεχομαστε καθε φορα(για ενα αριθμο επαναληψεων) διαφορετικα ζευγαρια για συγκριση σε ΜΙΑ εκτελεση του προγραμματος ή απλα λεμε στο χρηστη πες μου ποιους 2 σταθμους θελεις να "κοιταξω"; 
Έχει απαντηθεί από τον Κορτέση το συγκεκριμένο. Η συνάρτηση check θα ελέγχει όλα τα δύνατα ζεύγη τιμών. Χρησιμοποίησε δύο for.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: fourier on May 01, 2008, 23:31:17 pm

Να ρωτήσω κάτι. Αν χρησιμοποιούμε τη malloc πρέπει να βάλουμε στο τέλος οπωσδήποτε και τη free? Γιατί κάτι τέτοιο βλέπω να έχει κάνει ο συνάδελφος που ανέβασε τον κώδικα.

Εγω γενικα δεν ασχολουμαι με τις εκτρωματικες και αθλιες σημειωσεις του Κορτεση, διαβαζω απο ενα βιβλιο καποιου Μισυρλη, και εκει συμβουλευει να το κανουμε παντα στο τελος. Δεν ξερω εαν ειναι δικια του παραξενια ή δειγμα "καλου" προγραμματισμου, αλλα μου φαινεται καλη ιδεα.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 02, 2008, 00:16:24 am

Να ρωτήσω κάτι. Αν χρησιμοποιούμε τη malloc πρέπει να βάλουμε στο τέλος οπωσδήποτε και τη free? Γιατί κάτι τέτοιο βλέπω να έχει κάνει ο συνάδελφος που ανέβασε τον κώδικα.

Εγω γενικα δεν ασχολουμαι με τις εκτρωματικες και αθλιες σημειωσεις του Κορτεση, διαβαζω απο ενα βιβλιο καποιου Μισυρλη, και εκει συμβουλευει να το κανουμε παντα στο τελος. Δεν ξερω εαν ειναι δικια του παραξενια ή δειγμα "καλου" προγραμματισμου, αλλα μου φαινεται καλη ιδεα.

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 02, 2008, 03:02:34 am
Όσον αφορά τη free() ,μέσα στη παρένθεση πρέπει πάντα να υπάρχει void pointer?
Δηλαδή, όταν αρχικά τον έχουμε δηλώσει ως float π.χ. ,πρέπει να κάνουμε type casting στον pointer για να γίνει void?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 03, 2008, 17:01:03 pm
Εγω ενα εχω να πω..η εργασια θα μπορουσε να ειναι πολυ καλυτερη
και τα κομματια οπου υπαρχουν οι παγιδες γινονται ολο και πιο δυσκολο να το αντιληφθεις..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 03, 2008, 17:48:06 pm
Εγω γενικα δεν ασχολουμαι με τις εκτρωματικες και αθλιες σημειωσεις του Κορτεση, διαβαζω απο ενα βιβλιο καποιου Μισυρλη, και εκει συμβουλευει να το κανουμε παντα στο τελος. Δεν ξερω εαν ειναι δικια του παραξενια ή δειγμα "καλου" προγραμματισμου, αλλα μου φαινεται καλη ιδεα.
Αχαχαχαχ, ο Μισυρλής! Τι trash βιβλία που γράφει αυτός, έλεος!  :D
Αυτό (http://ecx.images-amazon.com/images/I/51TGEPRTDNL.jpg) είναι το ευαγγέλιο στη C.-


Quote
  r1=sqrt(*W1 / *wmin);
  r2=sqrt(*W2 / *wmin);

  i=1.00;
  do
   {
    n_r1=i*r1;
    n_r2=i*r2;
    i=i-0.01;
    }
  while ((n_r1+n_r2)> dis);

  *W1=(n_r1 * n_r1) * (*wmin);
  *W2=(n_r2 * n_r2) * (*wmin);

Για να βρω το ελάχιστο κοινό ποοστό μείωσης έγραψα το παραπάνω κομμάτι κώδικα.
Το βρίσκετε σωστό οι πιο έμπειροι????
Θα λειτουργεί θέλω να πω σε όλες τις δυνατές περιπτώσεις?
Κάθε παρατήρηση ή διόρθωση ευπρόσδεκτη και καλοδεχούμενη.....! :)
Γιατί δείκτης το wmin και max;  :(


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: zeus90 on May 03, 2008, 18:02:01 pm
Εντελώς λάθος το παραπάνω...
Έχει λογικά σφάλματα...
Μην ασχολείστε οι επόμενοι :-[


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 03, 2008, 18:13:06 pm
Αχαχαχαχ, ο Μισυρλής! Τι trash βιβλία που γράφει αυτός, έλεος!  :D
Αυτό (http://ecx.images-amazon.com/images/I/51TGEPRTDNL.jpg) είναι το ευαγγέλιο στη C.-

Πράγματι είναι καλό βιβλίο, του έχω ρίξει μια ματιά.
Επίσης ,πολύ καλό για αρχάριους είναι το " C by Example ". (http://i12.ebayimg.com/01/i/000/a5/77/5fc9_1_b.JPG)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 03, 2008, 18:18:36 pm
Και το συστήνω ανεπιφύλακτα. Μεταφρασμένο από τις εκδόσεις κλειδάριθμος.

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

1η συνθήκη: Το ποσοστό μείωσης του ενός σταθμού ισούται με του άλλου σταθμού
2η συνθήκη: Οι νέες ακτίνες έχουν άθροισμα ίσο με την απόσταση


Σύστημα 2x2 that is.  :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 03, 2008, 18:26:11 pm
Το ελάχιστο ποσοστό μείωσης όπως το έκανα εγώ είναι (1-c) όπου

 c = (minW*dis*dis)/(*W_a + *W_b + 2*sqrt((*W_a)*(*W_b)));


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 03, 2008, 18:37:17 pm
Το ελάχιστο ποσοστό μείωσης όπως το έκανα εγώ είναι (1-c) όπου

 c = (minW*dis*dis)/(*W_a + *W_b + 2*sqrt((*W_a)*(*W_b)));

Ditto.  :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 04, 2008, 01:42:35 am
Εμένα το ποσοστό μου φάνηκε το εύκολο σημείο... (*)

Η λογική είναι η εξής:

η απόσταση ρ1+ρ2 θα πρέπει να είναι το πολύ όσο η απόσταση των σταθμών, ας την πούμε ΑΠ.

όπου χ*ρ1+χ*ρ2=ΑΠ
άρα χ=ΑΠ/(ρ1+ρ2)

Μετά, αφού βρούμε το χ, κάνουμε και έναν έλεγχο αν το χ*ρ είναι κάτω από  wmin και αν δεν είναι αλλάζουμε την τιμή του ρ σε χ*ρ   


(*)με δεδομένο ότι έφτιαξα μια λογική εργασία που δεν τρέχει :Ρ  είπαμε, αυτή η εργασία, δε λέει...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 04, 2008, 01:57:55 am
Για να ρίξω λίγο λάδι στη φωτιά με κάτι ενδιαφέρον: ο πίνακας των αποστάσεων να είναι δισδιάστατος ή τριγωνικός;  ::)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 04, 2008, 02:02:33 am
τριγωνικός qui est que c'est?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 04, 2008, 02:06:08 am
τριγωνικός qui est que c'est?
Ντεν μιλώ γαλλικά καρντιά μου.  :P


Απ' τη στιγμή που η απόσταση του σταθμού 1 απ' τον 2 είναι ίδια μ' αυτήν που 'χει ο 2 απ' τον 1, γιατί να μην δεσμεύσουμε μόνο τον πίνακα πάνω απ' τη διαγώνιο;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 04, 2008, 02:21:36 am
Εγώ πάλι δε χρησιμοποίησα καθόλου πίνακα γαι αποστάσεις!
Δήλωσα μια μεταβλητή float και η απόσταση υπολογίζεται προσωρινά πριν την εφαρμογή της check()


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 04, 2008, 02:26:45 am
Εγώ πάλι δε χρησιμοποίησα καθόλου πίνακα γαι αποστάσεις!
Δήλωσα μια μεταβλητή float και η απόσταση υπολογίζεται προσωρινά πριν την εφαρμογή της check()
Γιατί όμως η check να καλείται πολλές φορές αντί για μία αφού διαβάσεις όλα τα δεδομένα, that's a good question.


Δεν 'ναι κακή η υλοποίηση αυτή!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: mademlis on May 04, 2008, 02:54:29 am
Να δώσω κάποιες πληροφορίες για την free (το ίδιο ισχύει και για την delete που θα μάθετε στο επόμενο εξάμηνο).

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

Ενας εμπειρικός χρυσός κανόνας στην αποδέσμευσης είναι ο εξής:
Αποδεσμεύουμε τη μνήμη ΑΚΡΙΒΩΣ τη στιγμή που σταματάμε να τη χρειαζόμαστε. ΟΥΤΕ μια εντολή νωρίτερα, ΟΥΤΕ μια εντολή αργότερα.

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

Σε λειτουργικά συστήματα όπως τα Windows ΝΤ, ΧΡ,2000, οπου έχει υιοθετηθεί έξυπνο σύστημα απόδοσης μνήμης σε κάθε προγράμμα που τρέχει, αποφεύγονται 2 σημαντικοί κίνδυνοι:
1) Να πειράχθεί μνήμη που ανήκει σε άλλο πρόγραμμα (ή στο ίδιο το λειτουργικό).
2) Να μείνει δεσμευένη μνήμη μετά το τέλος του προγράμματος.




Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: jeen on May 04, 2008, 14:37:26 pm
Ρε παιδιά εγώ έχω άλλο πρόβλημα..Πως χρησιμοποιώ pointers σε συνθήκες; Για παράδειγμα γράφω if ( (*w)<wmin  || (*w)>wmax ){...}.Στη συνέχεια θέτω wmin=1, wmax=20 και w=50 και αντί να μου βγάλει το σχετικό μνμ σφάλματος που γράφω στις αγκύλες, δέχεται τη τιμή...Τι πρέπει να αλλάξω;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 04, 2008, 14:39:16 pm
Ρε παιδιά εγώ έχω άλλο πρόβλημα..Πως χρησιμοποιώ pointers σε συνθήκες; Για παράδειγμα γράφω if ( (*w)<wmin  || (*w)>wmax ){...}.Στη συνέχεια θέτω wmin=1, wmax=20 και w=50 και αντί να μου βγάλει το σχετικό μνμ σφάλματος που γράφω στις αγκύλες, δέχεται τη τιμή...Τι πρέπει να αλλάξω;
Για το w=50 λες; Προφανώς και το δέχεται. Αλλά ξέρεις τι έχεις κάνει; Έχεις αλλάξει το address του pointer έτσι!  :D



Δηλαδή δείχνει σε άλλη θέση μνήμης από εκεί που έδειχνε αρχικά. Που μπορεί να μην σου ανήκει καν.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: jeen on May 04, 2008, 14:58:58 pm
 :???:Δε το έχω...Τι θέλεις να πεις; Το πρόβλημα μου είναι πως να ελέγξω αν μια ισχύς είναι μικρότερη ή μεγαλύτερη απ'το επιτρεπτό...Με τι εντολές...Γιατί αυτό που γράφω δε δουλευει...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 04, 2008, 15:01:05 pm
Πόσταρε το συγκεκριμένο κομμάτι του προγράμματος να σου πούμε...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: jeen on May 04, 2008, 15:08:51 pm
   for(i=1;i<=n;i++)
   {
      printf("W[%d]=",i);
      scanf("%f",W+i);
      if( (*w)>wmax || (*w)<wmin)
      {
         printf("ERROR...!\aMi epitrepti sixnotita\n");
                        i--;
                }
   }


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 04, 2008, 15:15:39 pm
   for(i=0;i<n;i++)
   {
      printf("W[%d]=",i);
      scanf("%f",w+i);
      if( *(w+i) >wmax || *(w+i) <wmin)
      {
         printf("ERROR...!\aMi epitrepti sixnotita\n");
                        i--;
                }
  }
  κάντο έτσι


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: jeen on May 04, 2008, 15:24:52 pm
Τέλειο...Thanks..Το ίδιο πρόβλημα αντιμετώπισα και μέσα στην check στην περίπτωση που η νέα w προκύψει μικρότερη από τη wmin...Θα το κοιτάξω και αν δε τα καταφέρω θα έχετε νέα μου...Thanks και πάλι...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ioannisnirvana on May 04, 2008, 18:27:11 pm
Το ίδιο πρόβλημα έχω κι εγώ μέσα στην check. Κάνω αυτόν τον έλεγχο :

if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

και ανάλογα στο τέλος για το με το min, αλλά δεν μου βγάζει σωστά αποτελέσματα. Συγκεκριμένα μου βγάζει πάντα σαν νέες ισχείς το min ότι εισόδους και να βάλλω....any ideas κανείς? Και το +i που βάζεις στη λούπα Emfanever ποια φυσική σημασία έχει? δεν μπορώ να καταλάβω...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 04, 2008, 18:33:24 pm
Εγώ δεν έχω καταλάβει γιατί να αλλάξεις τα όρια wmin και wmax.  :???:


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


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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 04, 2008, 18:45:37 pm
Και το +i που βάζεις στη λούπα Emfanever ποια φυσική σημασία έχει? δεν μπορώ να καταλάβω...
Όταν έχεις μια διεύθυνση
π.χ
float *w;   

και έστω
 w=1000;    // το 1000 είναι η διεύθυνση, όχι το περιεχόμενο της διεύθυνσης

αν αποθηκεύσεις κάτι εδώ, αυτό επειδή είναι float (4 byte) θα καταλάβει τις διευθύνσεις 1000-1003

έτσι
αν γράψεις

w=w +1;
επειδή είναι τύπου float
γράφοντας +1 θα γίνει 1004 ώστε να δείχνει στο αμέσως επόμενο float

for (i=0;i<N;i++)
    scanf("%f", w+i); // αν δε βάλεις +i θα αποθηκεύει συνέχεια στην ίδια διεύθυνση

αυτό είναι ίδιο με :

for (i=0;i<N;i++)
    scanf("%f", &w[ι]);
Το ίδιο πρόβλημα έχω κι εγώ μέσα στην check. Κάνω αυτόν τον έλεγχο :

if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }
μήπως μπορείς να ποστάρεις και κάτι τριγύρω από αυτό για να καταλάβουμε καλύτερα??
αν έχεις σωστά την check δε θα έπρεπε να σου κάνει προβλήματα...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ion on May 04, 2008, 20:25:51 pm
Το ίδιο πρόβλημα έχω κι εγώ μέσα στην check. Κάνω αυτόν τον έλεγχο :

if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

και ανάλογα στο τέλος για το με το min, αλλά δεν μου βγάζει σωστά αποτελέσματα. Συγκεκριμένα μου βγάζει πάντα σαν νέες ισχείς το min ότι εισόδους και να βάλλω....any ideas κανείς? Και το +i που βάζεις στη λούπα Emfanever ποια φυσική σημασία έχει? δεν μπορώ να καταλάβω...

επειδή εγώ είμαι χαζή και είχα ακριβώς το ίδιο πρόβλημα
είχα βάλει ανάποδα στο σκανφ τα μιν και μαξ
δεν νομίζω αλλά το λέω για καλό κ για κακό


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 00:44:42 am
δοκίμασε να βάλεις τον πόιντερ σε παρένθεση


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 05, 2008, 00:45:41 am
Παντως..αυτο που εντοπιζω εγω οτι εχει μεγαλυτερη δυσκολια ειναι η εκτυπωση των καινουριων συχνοτητων..

Ισως να μην εχω αντιληφθει πληρως ποιες συχνοτητες θα επρεπε να λαβουμε υποψη, λογω ασαφειας, αλλα αν ειναι αυτες που παλευω τοσες ωρες να βγαλω..θα πρεπει να κανω εντελως διαφορετικη υλοποιηση..
Εχει ωρες που προσπαθω να βρω ενα τροπο να εμφανιζονται οχι οι ελαχιστες απο καθε συγκριση - αυτο ειναι το ευκολο -
αλλα οι ελαχιστες που αφορουν καθε σταθμο απο καθε συγκριση..

Τεσπα..εχω και κατι αλλο στο μυαλο μου..



Σορρυ κιολας αλλα καπου ηθελα να το πω.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 00:47:33 am
Εγώ πάλι δε χρησιμοποίησα καθόλου πίνακα γαι αποστάσεις!
Δήλωσα μια μεταβλητή float και η απόσταση υπολογίζεται προσωρινά πριν την εφαρμογή της check()
Γιατί όμως η check να καλείται πολλές φορές αντί για μία αφού διαβάσεις όλα τα δεδομένα, that's a good question.


Δεν 'ναι κακή η υλοποίηση αυτή!

έτσι κι εγώ...  την απόστασή μου την υπολογίζει μία συνάρτηση που καλώ πριν από την check και μου επιστρέφει ένα float που δίνω σαν όρισμα μέσα στην check εκείνη τη στιγμή :)

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 00:49:01 am
Παντως..αυτο που εντοπιζω εγω οτι εχει μεγαλυτερη δυσκολια ειναι η εκτυπωση των καινουριων συχνοτητων..

Ισως να μην εχω αντιληφθει πληρως ποιες συχνοτητες θα επρεπε να λαβουμε υποψη, λογω ασαφειας, αλλα αν ειναι αυτες που παλευω τοσες ωρες να βγαλω..θα πρεπει να κανω εντελως διαφορετικη υλοποιηση..
Εχει ωρες που προσπαθω να βρω ενα τροπο να εμφανιζονται οχι οι ελαχιστες απο καθε συγκριση - αυτο ειναι το ευκολο -
αλλα οι ελαχιστες που αφορουν καθε σταθμο απο καθε συγκριση..

Τεσπα..εχω και κατι αλλο στο μυαλο μου..



Σορρυ κιολας αλλα καπου ηθελα να το πω.

Αλλάζεις τις τιμές με κλήση με αναφορά;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 05, 2008, 00:51:58 am
Ελα..μαλακιες λεω..μια χαρα δουλευει ^wav^
εκανα επαληθευση και δεν υπαρχει πουθενα επικαλυψη :)


Αλλάζεις τις τιμές με κλήση με αναφορά;

Tωρα με δουλευεις, ετσι? :P


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 00:55:03 am
Ελα..μαλακιες λεω..μια χαρα δουλευει ^wav^
εκανα επαληθευση και δεν υπαρχει πουθενα επικαλυψη :)


Αλλάζεις τις τιμές με κλήση με αναφορά;

Tωρα με δουλευεις, ετσι? :P

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 05, 2008, 00:56:16 am
αλλάζει η τσεκ τις τιμές στον αρχικό πίνακα και κάθε επόμενη σύγκριση γίνεται με βάση τις νέες τιμές που έχουν αποθηκευτεί στον πίνακα με την ακτίνα.
Αυτή η υλοποίηση πιστεύω είναι και η σωστότερη. :)


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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 00:58:02 am
αλλάζει η τσεκ τις τιμές στον αρχικό πίνακα και κάθε επόμενη σύγκριση γίνεται με βάση τις νέες τιμές που έχουν αποθηκευτεί στον πίνακα με την ακτίνα.
Αυτή η υλοποίηση πιστεύω είναι και η σωστότερη. :)


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

ούτε καν. Ο Κορτ είπε ότι αν η νέα συχνότητα πάει κάτω από το όριο, απλά την βάζουμε ίση με wmin. Το κακό με αυτή την υλοποίηση είναι ότι θα βρίσκει κάθε φορά τον συντελεστή μείωσης της ακτίνας, ακόμη και αν η τιμή έχει ήδη πέσει στο wmin.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 05, 2008, 01:00:34 am
Στο παραδειγμα που δοκιμασα ολες οι τιμες πεφτουν κατω απο την ελαχιστη..
Απλα ισως θα επρεπε να εχει και το μηνυμα που λες..


Ε καλα..ο συντελεστης μειωσης ειναι απλα για..εντυπωσιασμο..!
Ετσι κι αλλιως πουθενα δεν τυπωνεται..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 01:01:12 am
θα έπρεπε να πέσουν εννοείς...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 05, 2008, 01:01:45 am
ούτε καν. Ο Κορτ είπε ότι αν η νέα συχνότητα πάει κάτω από το όριο, απλά την βάζουμε ίση με wmin. Το κακό με αυτή την υλοποίηση είναι ότι θα βρίσκει κάθε φορά τον συντελεστή μείωσης της ακτίνας, ακόμη και αν η τιμή έχει ήδη πέσει στο wmin.
Πάσο τότε (πού να το ξέρω ο καψερός;  :P). Και σ' αυτήν την περίπτωση απλά προχωρά στο επόμενο σαν να μην συμβαίνει τίποτα;




Αχ, Ελλαδιστάν.  :P


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 05, 2008, 01:02:37 am
Το κακό με αυτή την υλοποίηση είναι ότι θα βρίσκει κάθε φορά τον συντελεστή μείωσης της ακτίνας, ακόμη και αν η τιμή έχει ήδη πέσει στο wmin.

Είπαμε η εργασία είναι για τον π......  !!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 05, 2008, 01:03:17 am
θα έπρεπε να πέσουν εννοείς...

πεφτουν εννοω.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 01:04:40 am
ναι καλέ. Και δεν αναφέρεται πουθενά, αλλά πρέπει να γίνεται και έλεγχος αν η ακτίνα είναι πάνω από wmax  και αν ναι, να εξισώνεται με αυτό.

Τον ρωτήσανε αν χρειάζεται όταν μία ισχύς αναγκαστεί να γίνει wmin  ο συντελεστής της ισχύος του άλλου σταθμού να μεγαλώσει για να ισχύει η συνθήκη και είπε όχι, θα γίνει πολύ πολύπλοκη μετά :) για μας δουλεύει..!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 01:05:07 am
θα έπρεπε να πέσουν εννοείς...

πεφτουν εννοω.

και τις αφήνεις να πέσουν; τι σόι πνευματικός μπαμπάς τους είσαι; δεν τις νοιάζεσαι;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 05, 2008, 01:11:24 am
Είμαι πολύ περίεργος να δώ την απάντηση που θα ανεβάσει ο Κορτέσης!!

Θα έμπλεξε τα πόδια του με την ίδια του την άσκηση!   ;D


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: vasso on May 05, 2008, 01:41:47 am
μπα.. στην εκφώνηση των ασκήσεων είναι συνήθως το πρόβλημα. Η λύση είναι συγκεκριμένη :P


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 05, 2008, 11:49:53 am
Το ελάχιστο ποσοστό μείωσης όπως το έκανα εγώ είναι (1-c) όπου

 c = (minW*dis*dis)/(*W_a + *W_b + 2*sqrt((*W_a)*(*W_b)));

Ditto.  :)

πως το βγάζεις αυτό;

Κάποιος άλγόριθμος για αυτό το ελάχιστο υπάρχει;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Πιστολέρο on May 05, 2008, 12:12:36 pm

Κάποιος άλγόριθμος για αυτό το ελάχιστο υπάρχει;

'Eστω d η απόσταση των δύο σταθμών, (R1)' , (R2)' OI νέες ακτίνες εκπομπής και Π το ποσοστό μείωσης (0<Π<1)

μετά τη μείωση των w1,w2 θα ισχύει (R1)'+(R2)'=d =>[(1-Π)w1]/wmin+[(1-Π)w2]/wmin=d => Π=1-(d*wmin)/(w1+w2)


αν έκανα καμιά βλακεία πειτε το!!   8)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ion on May 05, 2008, 12:19:02 pm
μπερδεύτηκα λίγο όπως τα είπες
εγώ έβαλα

Π=(R1+R2)-d/R1+R2
kai meta R1'=R1*(1-R1)

δεν έχω χαρτί μπροστά μου να συγκρίνω


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: aussie on May 05, 2008, 14:18:25 pm
δοκίμασε να βάλεις τον πόιντερ σε παρένθεση

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: aussie on May 05, 2008, 18:57:38 pm
Και το +i που βάζεις στη λούπα Emfanever ποια φυσική σημασία έχει? δεν μπορώ να καταλάβω...
Όταν έχεις μια διεύθυνση
π.χ
float *w;   

και έστω
 w=1000;    // το 1000 είναι η διεύθυνση, όχι το περιεχόμενο της διεύθυνσης

αν αποθηκεύσεις κάτι εδώ, αυτό επειδή είναι float (4 byte) θα καταλάβει τις διευθύνσεις 1000-1003

έτσι
αν γράψεις

w=w +1;
επειδή είναι τύπου float
γράφοντας +1 θα γίνει 1004 ώστε να δείχνει στο αμέσως επόμενο float

for (i=0;i<N;i++)
    scanf("%f", w+i); // αν δε βάλεις +i θα αποθηκεύει συνέχεια στην ίδια διεύθυνση

αυτό είναι ίδιο με :

for (i=0;i<N;i++)
    scanf("%f", &w[ι]);
Το ίδιο πρόβλημα έχω κι εγώ μέσα στην check. Κάνω αυτόν τον έλεγχο :

if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }
μήπως μπορείς να ποστάρεις και κάτι τριγύρω από αυτό για να καταλάβουμε καλύτερα??
αν έχεις σωστά την check δε θα έπρεπε να σου κάνει προβλήματα...

οκέικ ποστάρω και τα τριγύρω και ο θεός βοηθός
θανκσ για βοήθεια αν βρεθεί άκρη
void check(float min, float max, float *w1, float *w2, float *distance) {
   
   float r1=0.0, r2=0.0, reduce_factor=0.0;

   if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

   r1 = sqrt((*w1)/min);
   r2 = sqrt((*w2)/min);

   if((*distance)<(r1+r2)) {
      reduce_factor = (r1+r2)-(*distance);
      r1 = r1-(reduce_factor/2);
      r2 = r2-(reduce_factor/2);
   }
   *w1 = min*pow(r1,2);
   *w2 = min*pow(r2,2);
   
    printf("%f", *w1);
   if(*w1<min) {
      *w1 = min;
   }
   if(*w2<min) {
      *w2 = min;
   }
   
}


 8) :D :o


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 05, 2008, 20:39:25 pm
Παιδιά, εγώ έχω μια απορία, που δεν ξέρω πόσο άκυρη μπορεί να είναι...
Με ποιο σκεπτικό παίρνετε αυτόν τον τύπο για τη δόρθωση των ισχύων???
Εννοώ το:
*w1 = min*pow(r1,2);

είναι τύπος φυσικής που δεν ξέρω???
Και στην εκφώνηση δεν διευκρινίζεται με ποιον τρόπο γίνεται η διόρθωση...
:)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 05, 2008, 20:43:34 pm
Το ελάχιστο ποσοστό μείωσης όπως το έκανα εγώ είναι (1-c) όπου

 c = (minW*dis*dis)/(*W_a + *W_b + 2*sqrt((*W_a)*(*W_b)));

Ditto.  :)

πως το βγάζεις αυτό;

Κάποιος άλγόριθμος για αυτό το ελάχιστο υπάρχει;

R1=sqrt(W1/wmin)
R2=sqrt(W2/wmin)

W1΄= c*W1                 , όπου π.χ c = 0,8  δηλαδή το κοινό ποσοστό μείωσης είναι 20%
W2΄= c*W2

Άρα =>  R1΄=sqrt(W1΄/wmin)   =>  R1΄=sqrt(c*W1/wmin)   (1)
             R2΄=sqrt(W2΄/wmin)   =>  R2΄=sqrt(c*W2/wmin)   (2)

R1΄ + R2΄ = distance   (3)

Από τις σχέσεις (1), (2) , (3) λύνεις ώς προς c και μετά εύκολα υπολογίζονται τα W1΄,W2΄

   


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 05, 2008, 20:50:28 pm
Παιδιά, εγώ έχω μια απορία, που δεν ξέρω πόσο άκυρη μπορεί να είναι...
Με ποιο σκεπτικό παίρνετε αυτόν τον τύπο για τη δόρθωση των ισχύων???
Εννοώ το:
*w1 = min*pow(r1,2);

είναι τύπος φυσικής που δεν ξέρω???
Και στην εκφώνηση δεν διευκρινίζεται με ποιον τρόπο γίνεται η διόρθωση...
:)

Είναι ένας τύπος που μαθαίνεις στο 8 εξάμηνο.....

Όχι βρε,

Από τον τύπο της εκφώνησης , r1= sqrt( w/min)
λύνεις ώς προς w και βγαίνει
w= r1^2 *min   !!!!!!!!!!!!!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 05, 2008, 20:52:55 pm
Έχεις δίκιο!!!
δεν το είχα προσέξει..........:)
THANKS!!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: dimvam on May 05, 2008, 23:36:22 pm
Κάνε την check να μην τυπώνει αποτελέσματα. Βγάλει το printf από εκεί.
Ε;; Σωστά δε λέω; Αφού λέει στην εκφώνηση ότι η check δεν τυπώνει αποτελέσματα.


οκέικ ποστάρω και τα τριγύρω και ο θεός βοηθός
θανκσ για βοήθεια αν βρεθεί άκρη
void check(float min, float max, float *w1, float *w2, float *distance) {
   
   float r1=0.0, r2=0.0, reduce_factor=0.0;

   if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

   r1 = sqrt((*w1)/min);
   r2 = sqrt((*w2)/min);

   if((*distance)<(r1+r2)) {
      reduce_factor = (r1+r2)-(*distance);
      r1 = r1-(reduce_factor/2);
      r2 = r2-(reduce_factor/2);
   }
   *w1 = min*pow(r1,2);
   *w2 = min*pow(r2,2);
   
    printf("%f", *w1);
   if(*w1<min) {
      *w1 = min;
   }
   if(*w2<min) {
      *w2 = min;
   }
   
}


 8) :D :o


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: difotiad on May 06, 2008, 00:21:06 am
Κάνε την check να μην τυπώνει αποτελέσματα. Βγάλει το printf από εκεί.
Ε;; Σωστά δε λέω; Αφού λέει στην εκφώνηση ότι η check δεν τυπώνει αποτελέσματα.


οκέικ ποστάρω και τα τριγύρω και ο θεός βοηθός
θανκσ για βοήθεια αν βρεθεί άκρη
void check(float min, float max, float *w1, float *w2, float *distance) {
   
   float r1=0.0, r2=0.0, reduce_factor=0.0;

   if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

   r1 = sqrt((*w1)/min);
   r2 = sqrt((*w2)/min);

   if((*distance)<(r1+r2)) {
      reduce_factor = (r1+r2)-(*distance);
      r1 = r1-(reduce_factor/2);
      r2 = r2-(reduce_factor/2);
   }
   *w1 = min*pow(r1,2);
   *w2 = min*pow(r2,2);
   
    printf("%f", *w1);
   if(*w1<min) {
      *w1 = min;
   }
   if(*w2<min) {
      *w2 = min;
   }
   
}


 8) :D :o

πρεπει οπωσδηποτε να μηδενισουμε τα r1,r2,reduse factor ?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 06, 2008, 01:32:47 am
Το ελάχιστο ποσοστό μείωσης όπως το έκανα εγώ είναι (1-c) όπου

 c = (minW*dis*dis)/(*W_a + *W_b + 2*sqrt((*W_a)*(*W_b)));

Ditto.  :)

πως το βγάζεις αυτό;

Κάποιος άλγόριθμος για αυτό το ελάχιστο υπάρχει;

R1=sqrt(W1/wmin)
R2=sqrt(W2/wmin)

W1΄= c*W1                 , όπου π.χ c = 0,8  δηλαδή το κοινό ποσοστό μείωσης είναι 20%
W2΄= c*W2

Άρα =>  R1΄=sqrt(W1΄/wmin)   =>  R1΄=sqrt(c*W1/wmin)   (1)
             R2΄=sqrt(W2΄/wmin)   =>  R2΄=sqrt(c*W2/wmin)   (2)

R1΄ + R2΄ = distance   (3)

Από τις σχέσεις (1), (2) , (3) λύνεις ώς προς c και μετά εύκολα υπολογίζονται τα W1΄,W2΄

   


ευχαριστώ πολύ!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 06, 2008, 01:45:21 am

Κάποιος άλγόριθμος για αυτό το ελάχιστο υπάρχει;

'Eστω d η απόσταση των δύο σταθμών, (R1)' , (R2)' OI νέες ακτίνες εκπομπής και Π το ποσοστό μείωσης (0<Π<1)

μετά τη μείωση των w1,w2 θα ισχύει (R1)'+(R2)'=d =>[(1-Π)w1]/wmin+[(1-Π)w2]/wmin=d => Π=1-(d*wmin)/(w1+w2)


αν έκανα καμιά βλακεία πειτε το!!   8)


Εμένα το ποσοστό μου φάνηκε το εύκολο σημείο... (*)

Η λογική είναι η εξής:

η απόσταση ρ1+ρ2 θα πρέπει να είναι το πολύ όσο η απόσταση των σταθμών, ας την πούμε ΑΠ.

όπου χ*ρ1+χ*ρ2=ΑΠ
άρα χ=ΑΠ/(ρ1+ρ2)

Μετά, αφού βρούμε το χ, κάνουμε και έναν έλεγχο αν το χ*ρ είναι κάτω από  wmin και αν δεν είναι αλλάζουμε την τιμή του ρ σε χ*ρ   


(*)με δεδομένο ότι έφτιαξα μια λογική εργασία που δεν τρέχει :Ρ  είπαμε, αυτή η εργασία, δε λέει...

νομίζω κάπου χάνεις τις ρίζες (sqrt), στις ακτίνες.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: aussie on May 06, 2008, 02:34:00 am
Κάνε την check να μην τυπώνει αποτελέσματα. Βγάλει το printf από εκεί.
Ε;; Σωστά δε λέω; Αφού λέει στην εκφώνηση ότι η check δεν τυπώνει αποτελέσματα.


οκέικ ποστάρω και τα τριγύρω και ο θεός βοηθός
θανκσ για βοήθεια αν βρεθεί άκρη
void check(float min, float max, float *w1, float *w2, float *distance) {
   
   float r1=0.0, r2=0.0, reduce_factor=0.0;

   if(*w1 > max) {
      *w1=max;
   }
   if(*w2 > max) {
      *w2=max;
   }

   r1 = sqrt((*w1)/min);
   r2 = sqrt((*w2)/min);

   if((*distance)<(r1+r2)) {
      reduce_factor = (r1+r2)-(*distance);
      r1 = r1-(reduce_factor/2);
      r2 = r2-(reduce_factor/2);
   }
   *w1 = min*pow(r1,2);
   *w2 = min*pow(r2,2);
   
    printf("%f", *w1);
   if(*w1<min) {
      *w1 = min;
   }
   if(*w2<min) {
      *w2 = min;
   }
   
}


 8) :D :o

yeah kala ta les:)
ksexasa na to vgalw to printf..swsti h paratirisi..apla esteila ena apo ta trial versions tou program..:P
ti na pw


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 06, 2008, 14:39:30 pm
Παιδιά τί είναι το pow Που βλέπω συνέχεια?????????


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 06, 2008, 14:40:40 pm
Παιδιά τί είναι το pow Που βλέπω συνέχεια?????????
Ύψωση σε δύναμη.

pow(βάση, εκθέτης)



Συμπεριλαμβάνεται στο πακέτο <math.h> (το οποίο μπορείτε να το αγοράσετε κυρίες και κύριοι με δώρο το βιβλίο "το τσάι το Πούτιν"¨ :D)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 06, 2008, 14:50:33 pm
thx!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: mademlis on May 06, 2008, 16:04:40 pm
Επίσης, αν ακριβώς πριν  το
#include <math.h>

βάλουμε
#define _USE_MATH_DEFINES

τότε έχουμε διαθέσιμες τις μεταβλητές:
Code:
#define M_E        2.71828182845904523536		//ο Αριθμός Euler
#define M_LOG2E    1.44269504088896340736 //O λογάριθμος με βάση το 2 του e
#define M_LOG10E   0.434294481903251827651 //Ο δεκαδικός λογάριθμος του e
#define M_LN2      0.693147180559945309417 //Ο φυσικός λογάριθμος του 2
#define M_LN10     2.30258509299404568402 //Ο φυσικός λογάριθμος του 10
#define M_PI       3.14159265358979323846 //Το πασίγνωστο π
#define M_PI_2     1.57079632679489661923 //Το π/2
#define M_PI_4     0.785398163397448309616 //Το πι/4
#define M_1_PI     0.318309886183790671538 //το 1/π
#define M_2_PI     0.636619772367581343076 //το 2/π
#define M_2_SQRTPI 1.12837916709551257390 // Η ποσότητα 2/ριζα(π)
#define M_SQRT2    1.41421356237309504880 // ριζα 2
#define M_SQRT1_2  0.707106781186547524401 // ριζα του (1/2)

[/size]


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 06, 2008, 18:36:32 pm
Παιδιά μέσα στην check δεν χρειάζεται να βάλουμε  2 for?
Γιατί την χωρίς τα for αλλα μου βγαζει μόνο την τιμέ του 1ου σταθμού , η οποία τιμή ειναι η ίδια με την παλιά..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Tuvok on May 06, 2008, 18:40:08 pm
Ερωτηση: αν στειλουμε μια εργασια που εχουμε κανει καποιο λαθος,μπορουμε να την ξαναστειλουμε διορθωμενη?θα κρατηθει η τελευταια ή δν θα γινουν δεκτρες κ οι 2?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: aussie on May 06, 2008, 18:42:46 pm
Ερωτηση: αν στειλουμε μια εργασια που εχουμε κανει καποιο λαθος,μπορουμε να την ξαναστειλουμε διορθωμενη?θα κρατηθει η τελευταια ή δν θα γινουν δεκτρες κ οι 2?
νομιζω ότι έχει να την διαγράψεις και να την ξανα ανεβάσεις στις επιλογές σου..οπότε λογικά καταχωρείται η τελευταία που ανεβάζεις σε περίπτωση που έκανες λαθος.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: λήθη on May 06, 2008, 18:52:02 pm
Ερωτηση: αν στειλουμε μια εργασια που εχουμε κανει καποιο λαθος,μπορουμε να την ξαναστειλουμε διορθωμενη?θα κρατηθει η τελευταια ή δν θα γινουν δεκτρες κ οι 2?
νομιζω ότι έχει να την διαγράψεις και να την ξανα ανεβάσεις στις επιλογές σου..οπότε λογικά καταχωρείται η τελευταία που ανεβάζεις σε περίπτωση που έκανες λαθος.

ετσι ειναι

πατας εκει που λεει για διαγραφη της δηλωσης σου, και αμεσως μετα ξαναδηλωνεις την εργασια :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Papatanasis on May 06, 2008, 19:11:04 pm
Ερωτηση: αν στειλουμε μια εργασια που εχουμε κανει καποιο λαθος,μπορουμε να την ξαναστειλουμε διορθωμενη?θα κρατηθει η τελευταια ή δν θα γινουν δεκτρες κ οι 2?
νομιζω ότι έχει να την διαγράψεις και να την ξανα ανεβάσεις στις επιλογές σου..οπότε λογικά καταχωρείται η τελευταία που ανεβάζεις σε περίπτωση που έκανες λαθος.

ετσι ειναι

πατας εκει που λεει για διαγραφη της δηλωσης σου, και αμεσως μετα ξαναδηλωνεις την εργασια :)

¨Η απλα μπορεις να στειλεις την καινουργια εργασια με το ιδιο ονομα και θα γινει αντικατασταση με την παλια!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 06, 2008, 19:15:11 pm
Παιδιά μέσα στην check δεν χρειάζεται να βάλουμε  2 for?
Γιατί την χωρίς τα for αλλα μου βγαζει μόνο την τιμέ του 1ου σταθμού , η οποία τιμή ειναι η ίδια με την παλιά..


Θα βάλεις 2 for αλλά όχι μέσα στην check. Στη main θα τα βάλεις και μέσα στη λούπα θα είναι η check


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 06, 2008, 19:38:31 pm
Bασικά και έτσι που το χω ότι να ναι βγάζει οταν ειναι να εμφανίσει τις νέες τιμές...
Και εχω ακόμα ενα προβλημα.. Με πετάει απο το πρόγραμμα όταν έχω δώσει όλες τις τιμές.. δηλαδή δίνω και την ισχύ του τελευταίου σταθμού και με πετάει... Ξέρει κανείς τι φταίει???????


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on May 06, 2008, 20:06:13 pm
Και εχω ακόμα ενα προβλημα.. Με πετάει απο το πρόγραμμα όταν έχω δώσει όλες τις τιμές.. δηλαδή δίνω και την ισχύ του τελευταίου σταθμού και με πετάει... Ξέρει κανείς τι φταίει???????
Δε σε πετάει. Κλείνει η κονσόλα πριν προλάβεις να δεις τι έγινε.  :P
Βάλε ένα getch(); στο τέλος και είσαι οκ


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 06, 2008, 20:08:07 pm
Ερώτηση:
Όταν θέλω να πολλαπλασιασω ένα δείκτη το κάνω έτσι:

wmin*(*distance)  π.χ.(όπου wmin απλή μεταβλητή και distance pointer)
Η απορία στην ουσία παρουσιαστηκε όταν έκανα την  check συνάρτηση-και ήθελα να κάνω πράξεις με pointers...
ο compiler το δέχεται μόνο έτσι-αλλά δεν είμαι και σίγουρη αν έτσι είναι το σωστό...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 06, 2008, 20:12:40 pm
Ερώτηση:
Όταν θέλω να πολλαπλασιασω ένα δείκτη το κάνω έτσι:
Εννοείς το περιεχόμενό του; Γιατί ο δείκτης.... ένα redirect (κάτι σαν ανακατεύθυνση) είναι, με τι να τον πολλαπλασιάσεις; :P


(*p)*w: πολλαπλασιάζεις την τιμή της θέσης μνήμης που δείχνει ο p με την τιμή της w. :)



(Αν δεν τα 'χω ξεχάσει, δηλαδή :P)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 06, 2008, 20:16:26 pm
ναι το περιεχόμενο του εννοω...
Άρα αυτό είναι το σωστο..:)
Η C θέλει φαντασία τελικά... :)
ευχαριστώ πολύ Γιώργο! Nice pic by the way!:)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 06, 2008, 20:24:13 pm
Επίσης μια που είσαι κι εσύ εδώ Emfanever... :)
κάπου είχες πει για την mallοc σε κάποιον να βάλει κάτι if... το οποίο πήγα να υιοθετήσω κι εγώ στην εργασία μου.. :)
αλλά είναι έτσι το σωστό : if(&x==NULL){...
όταν το γράφεις ε??
(έχω μεγάλο πρόβλημα με τους δείκτες όπως θα καταλάβατε..)

το χ είναι ορισμένο σαν δείκτης επίσης...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 06, 2008, 20:32:08 pm
όχι σωστό είναι χωρίς & !  :P

Αφού είναι ορισμένο σαν δείκτης το όνομα του από μόνο του σημαίνει τη διεύθυνση στην οποία δειχνει ο δείκτης!!

δλδ
if(x==NULL){...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: ifigeneia on May 06, 2008, 20:35:17 pm
Απλώς οταν κάνω compile, μου βγάζει λάθος έτσι(ότι πρόκειται για δαιφορετικού τύπου μεταβλητές..)
ενώ όταν βάζω & όχι(όλα αυτα τα κάνω απλώς πειραματικά-χωρίς να γνωρίζω γιατί...)
:)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 06, 2008, 20:39:03 pm
Το if(&x==NULL) είναι κάτι βασικά που δεν πολυστέκει γιατί το σύστημα κοιτάζει έτσι τη διεύθυνση του x και όχι την τιμή του. :)



Ένα μικρό tutorial περί δεικτών: κάθε θέση μνήμης, στην οποία αποθηκεύεις μία τιμή, έχει μία διεύθυνση για να μπορεί το σύστημα να βρίσκει πού είναι αυτή η τιμή που ζητάς.
Δηλαδή, εάν θες να βρεις τον τάδε φίλο σου, προφανώς θα δεις τη διεύθυνση που μένει και θα πας από εκεί να τον βρεις. :)

Όταν λοιπόν σε κάποια έκφραση βάζουμε το "x", το σύστημα αυτόματα ψάχνει τη διεύθυνση του x κι επιστρέφει την τιμή του. Εσύ δεν χρειάζεται να ξέρεις σε ποια διεύθυνση είναι το x, το θυμάται το σύστημα τη στιγμή που δηλώνεις int x (ή οτιδήποτε άλλο).

Όταν γράφεις &x τότε το σύστημα βρίσκει την διεύθυνση του x κι επιστρέφει... τη διεύθυνσή του.

Και τι κάνει το *x; Βλέπει το περιεχόμενο του x, πηγαίνει σ' εκείνη τη διεύθυνση και σου επιστρέφει το περιεχόμενό της.



Ένα απλό παράδειγμα: έστω ότι όλη η "μνήμη" μας είναι τα σπίτια επί της Τσιμισκή και το περιεχόμενο της κάθε θέσης είναι πόσα άτομα μένουν στο κάθε σπίτι. Έστω x ο αριθμός των ατόμων που μένουν στο σπίτι Τσιμισκή 8. Εάν μένουν εκεί 5 άτομα, τότε το "x" ισούται με 5 (η "τιμή" της μεταβλητής).
Το "&x" ισούται με 8, που είναι η διεύθυνση.


Και το "*x" τι είναι; Εδώ το 5 (το περιεχόμενο) γίνεται διεύθυνση, οπότε το σύστημα πάει στο σπίτι Τσιμισκή 5 και σου επιστρέφει πόσα άτομα είναι εκεί μέσα.





Οπότε δείκτης είναι κάτι σαν.... ανακατεύθυνση. Ελπίζω να τα 'πα κατανοητά. :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 06, 2008, 20:44:51 pm
Δοκίμασε αυτό να δεις ότι δε χρειάζεται να βάλεις & για να επιστρέψει διεύθυνση


#include <stdio.h>

void main()
{
  float *x;

  printf("%d",x);           

}

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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 06, 2008, 20:47:15 pm
Δοκίμασε αυτό να δεις ότι δε χρειάζεται να βάλεις & για να επιστρέψει διεύθυνση


#include <stdio.h>

void main()
{
  float *x;

  printf("%d",x);           

}

βγάζει ακέραιο που δεν μπορεί να είναι τίποτα άλλο από τη διεύθυνση...
Νομίζω θα κολλήσει εδώ γιατί δεν έχει τιμή ο δείκτης x. Εκτός κι αν εννοείς:
printf("%d",&x);


Αυτό όντως θα τυπώσει τη διεύθυνση που δέσμευσε ο compiler όταν πληκτρολογήσαμε το float *x;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 06, 2008, 20:50:26 pm
Στον Borland που το έτρεξα τυπώνει κανονικά αριθμό ( τον 1440 συγκεκριμένα)...μπορεί να έχει σχέση με τους compiler


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: AgentCain on May 06, 2008, 20:55:27 pm
Νομίζω θα κολλήσει εδώ γιατί δεν έχει τιμή ο δείκτης x. Εκτός κι αν εννοείς:
printf("%d",&x);


Αυτό όντως θα τυπώσει τη διεύθυνση που δέσμευσε ο compiler όταν πληκτρολογήσαμε το float *x;

όταν όρισε τον χ είπε ότι είναι διεύθυνση τύπου float
άρα η printf δεν μπορεί παρά να τυπώσει την διεύθυνση  :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Γιώργος on May 06, 2008, 21:01:16 pm
Ναι, διεύθυνση θα τυπώσει, αλλά ποια διεύθυνση; :)


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


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 06, 2008, 21:13:36 pm
Ε ναι ,ξέμεινε αλλά είναι διαθέσιμη.

Εξάλλου έχουμε να κάνουμε με τη malloc που ψάχνει να βρεί συγκεκριμένες θέσεις στη μνήμη ,δλδ διευθύνσεις που είναι ελεύθερες. Άμα δε βρει δίνει στον pointer την τιμή NULL.

Δηλαδή εσύ γράφεις   

   &x=(float*)malloc(n*sizeof(float));

??


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: solli144 on May 06, 2008, 23:07:42 pm
παιδια για τη συνάρτηση sqrt() τι include χρειάζεται?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Wade on May 06, 2008, 23:08:46 pm
παιδια για τη συνάρτηση sqrt() τι include χρειάζεται?

math.h ;)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: solli144 on May 06, 2008, 23:18:15 pm
thanks  :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: gagas on May 07, 2008, 01:36:13 am
αφου η συναρτηση check ειναι τυπου void δεν επιστρεφει κατι στην main..
πως θα μπορεσουμε εμεις να μεταβαλουμε τις τιμες της ισχυος w(i) αν υπαρχει επικαλυψη,αφου αυτες βρισκονται στην συναρτηση main και δεν μπορουμε να επιστρεψουμε σε αυτην τις τιμες w1,w2;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 01:39:14 am
γι'αυτό χρησιμοποιείς κλήση με αναφορά, όχι με τιμή!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: gagas on May 07, 2008, 01:44:43 am
ευχαριστω..καταλαβα..αλλαζουν αυτοματα οι τιμες.

κ κατι ακομα.γιατι να εισαγουμε στην συναρτηση check το wmax εφοσον δεν τον χρησιμοποιει σε κανεναν υπολογισμο?
ο ελεγχος για το εαν η ισχυς ενος σταθμου ειναι στα αποδεκτα ορια wmin-wmax πρεπει να γινεται στην main και οχι στην check,υποθετω..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 01:51:42 am
Κανονικά ναι ,αλλά απ'οτι φαίνεται ο Κορτέσης θέλει να γίνεται μέσα στην check!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: daydreamer on May 07, 2008, 05:52:02 am
Μια ερώτηση κι από μένα. Εφόσον ο κ. Κορτέσης μας παρέδωσε χθες, Τρίτη, τη δυναμική παραχώρηση μνήμης, γιατί είναι υποχρεωτικό να τη χρησιμοποιήσουμε σε αυτή την εργασία;

Μια χαρά γίνεται και με στατικούς πίνακες. Άλλωστε δεν είναι ρεαλιστικό να υπάρχουν σε μια περιοχή πάνω από 50 ραδιοφωνικοί σταθμοί :D Άρα με ένα νούμερο όπως το 100 καθαρίζεις.

Υπάρχει κάτι που δε λαμβάνω υπόψην μου; Ευχαριστώ :)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: furygl on May 07, 2008, 05:53:13 am
Geia se olous kai kali tixi me tin ergasia,ego opos kai merikoi aloi tou tmimatos mas ime apo thetiki kateuthinsi :-[,
me liga logia C++ pasxo :'(,
ekana kai go tin ergasia(afou diabasa ta post sas dekades fores kai brika lisis se poles apories mou) ala den mporo na tin trekso sosta,an kseri kanis na mou pi merika apo ta lathi tha imoun eugnomon.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 11:36:36 am
Σου στέλνω τη σωστή έκδοση...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Anyparktos on May 07, 2008, 13:01:43 pm
emfanever,thanks καταρχήν!
Δεύτερον,μέχρι σήμερα το βράδυ(12) είναι η προθεσμία?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 07, 2008, 13:59:35 pm
Ναι.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 14:00:35 pm
Σου στέλνω τη σωστή έκδοση...

Βασικά παιδιά με πετάει χωρίς να εμφανίζει τίποτα.. Συμβαίνει το ίδιο και σε σας? έβαλα την getch();  στο τέλος αλλά τίποτα...


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 07, 2008, 14:04:34 pm
εγώ βάζω 2 φορές το getchar:


getchar();
getchar();


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 14:13:33 pm
εγώ βάζω 2 φορές το getchar:


getchar();
getchar();

Που τα βάζεις αυτά? Γιατί δίνω και την ισχύ του τελευταίου σταθμού και δεν εμφανίζει τίποτα .. Μετά με το που πατάω Enter με πετάει..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Πιστολέρο on May 07, 2008, 14:32:57 pm
βάλε την εντολή  system("pause") ; αμέσως πρίν το τέλος του προγράμματος (ίσως να χρειαστεί και το #ιinclude<stdlib.h> στην αρχή)


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 07, 2008, 15:22:53 pm
εγώ βάζω 2 φορές το getchar:


getchar();
getchar();

Που τα βάζεις αυτά? Γιατί δίνω και την ισχύ του τελευταίου σταθμού και δεν εμφανίζει τίποτα .. Μετά με το που πατάω Enter με πετάει..

ακριβώς πριν το άγκιστρο κλεισίματος της main.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 15:31:58 pm
thx για την βοήθεια.. Αλλά δεν γίνεται τίπορα δεν μου εμφανίζει τις νέες τιμές ..


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 07, 2008, 15:48:47 pm
μήπως κάνεις κάτι άλλο λάθος;


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 15:59:04 pm
Βασικα και του Emfanever την εργασία που κατέβασα για να τρέξω πάλι με πετάει.. Παίζει να χει και πρόβλημα το dev που έχω.. Το ωραίο είναι ότι βάζω μια scanf μέσα στον βρόγχο  εμφανίζει τις νέες τιμές, και μου τις βγάζει.. Παρόλο που πρέπει να πατάω ένα νούμερο .. έχω καταμπερδευτει..
Αν έχει κάποιος κουράγιο να την δει... ορίστε


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 16:05:18 pm
Βασικα και του Emfanever την εργασία που κατέβασα για να τρέξω πάλι με πετάει.. Παίζει να χει και πρόβλημα το dev που έχω.. Το ωραίο είναι ότι βάζω μια scanf μέσα στον βρόγχο  εμφανίζει τις νέες τιμές, και μου τις βγάζει.. Παρόλο που πρέπει να πατάω ένα νούμερο .. έχω καταμπερδευτει..
Αν έχει κάποιος κουράγιο να την δει... ορίστε

Δεν ήταν η εργασία μου αυτή, απλά είχα διορθώσει τα λάθη του άλλου


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 16:11:05 pm
α οκ  :P.. Αυτή που ανέβασα κανείς έχει δει κάνα λάθος να με πει?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 16:13:42 pm
α οκ  :P.. Αυτή που ανέβασα κανείς έχει δει κάνα λάθος να με πει?

Σε μένα τρέχει έτσι..
Αλλά βγάζει λάθος αποτελέσματα, μάλλον έχει λάθος στη λογική



Βρήκα κ άλλο λάθος :

  for (i=0;i<N;i++)
{
      /* Gia na emfanistoun oi times patas enan charactira kai enter*/
      printf("H nea isxys tou %dou sta8mou einai:%f\n",i+1,W);
         scanf("%f",&W);       <- σβήστο αυτό


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: anonymous-root on May 07, 2008, 16:34:30 pm
{
      /* Gia na emfanistoun oi times patas enan charactira kai enter*/
      printf("H nea isxys tou %dou sta8mou einai:%f\n",i+1,W[ i ]);
         scanf("%f",&W[ i ]);
        getch();
   
}
   
   ^
   |
   |

σβήσε αυτό (όπως είπε ο εμφανεβερ)

και πρόσθεσε στο τέλος (δηλαδή πριν το άγκιστρο κλεισίματος της μαιν.)


getchar();
getchar();
   return 0;   
     
}


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: leon-SPT on May 07, 2008, 17:37:51 pm
ok thx!


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: furygl on May 07, 2008, 19:18:40 pm
Σου στέλνω τη σωστή έκδοση...

Thx,ok ida dio lathoi xontra pou ekana ala den katalabeno giati to max mpeni automata,mono eki kolao an mporis na mou eksigisis.euxaristo para poli,sou xrostao


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: Emfanever on May 07, 2008, 19:55:50 pm
Σου στέλνω τη σωστή έκδοση...

Thx,ok ida dio lathoi xontra pou ekana ala den katalabeno giati to max mpeni automata,mono eki kolao an mporis na mou eksigisis.euxaristo para poli,sou xrostao

'Οταν δημιουργείς την check γράφεις:

void check(float min, float max, float *w1, float *w2, float *ds)    // Αυτά μέσα στην παρένθεση είναι τα ορίσματα και έχουν συγκεκριμένη σειρά και τύπο.
{
...........
}
όταν τη χρησιμοποιείς σωστά γράφεις στη main :
main()
{
.........
check(wmin, wmax, &w[ι], &w[j], &d);
...........
}
H check σαν πρώτο όρισμα περιμένει μια μεταβλητή τύπου float (δεν έχει σημασία το όνομα). Αφού εσύ σωστά έβαλες το wmin που είναι float, η τιμή του αντιγράφεται στο min. Το ίδιο και με τα υπόλοιπα.

Επίσης ,αν έγραφες ανάποδα τα wmin,wmax το αποτέλεσμα θα ήταν να ισχύει:
min=wmax
k
max=wmin.
Mε την ίδια σειρά που θα τα βάλεις ,με την ίδια σειρά θα αντιγραφούν οι τιμές τους στα min,max,*w1, κτλ (αρκεί να είναι σωστός ο τύπος τους)



Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: wetman0 on May 07, 2008, 20:08:36 pm
Παιδιά είχε ρωτήσει και ένα αλλό παλικάρι πιο πριν αλλά δεν είδα απάντηση..
Έχει κανένας τίποτα εύκαιρα νούμερα για έλεγχο που να τα έκανε με το χέρι και να είναι standard?


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: tesla on May 07, 2008, 23:00:08 pm
Παιδια να ρωτησω.Εχω γραψει αυτο για το ελαχιστο ποσοστο μειωσης.Το προβλημα ειναι οτι αναφερεται στις ακτινες του καθε σταθμου.Πως μπορω να το τροποποιησω ωστε να αναφερεται στις ισχεις;Γτ οταν τρεχω το προγραμμα οι ισχεις δε μειονονται κατα το ιδιο ποσοστο.

void check(float *w1,float *w2,float wmin,float wmax,float d)
 {float r1,r2,;
  r1=sqrt(*w1/wmin);
  r2=sqrt(*w2/wmin);
  if(d<(r1+r2))
   {red=(r1+r2)-d;
    r1=r1-(red/2);
    r2=r2-(red/2);
    *w1=r1*r1*wmin;
    *w2=r2*r2*wmin;

Εδω το red/2 ειναι το κοινο ποσοστο μειωσης των ακτινων.Ευχαριστω.


Title: Re: [Δομημένος Πρ.] Εργασία C 2008
Post by: wetman0 on May 07, 2008, 23:39:44 pm
pososto_meiosis = 1 - (d*d*wmin/(w1 + w2 + 2sqrt(w1*w2)))
Χαρτι και μολυβι ρε συ


Title: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: mxkrtg13 on May 10, 2008, 12:11:05 pm
Ρε παιδιά να ρωτήσω κάτι.Μας δουλεύει ο κύριος??Η εγώ κάνω κάτι λάθος?
Καλά ασε τις εργασίες που βγάζει,που θες μεταφραστή για να καταλάβεις τη ζητάει,άσε το γεγονός οτι διορθώνει την εκφώνηση-->δείγμα προχειρότητας,δοκιμάστε να τρέξετε την λύση του στην εργασία C.ένα μάυρο παράθυρο,ένας κέρσορας που αναβοσβήνει περιμένοντας κάτι.Εισάγουμε αριθμό,επόμενο,ξαναμανα,κ δεν τελειώνει ποτέ,εισάγουμε γράμμα πχ abc τσουπ κρασάρει.Βάλτε αρνητική τιμή,την δέχεται μια χαρά.Ρωτάω τώρα,αν εγώ στις εξετάσεις σαυτην την άσκηση παρουσίαζα αυτη τη λύση θα μου βαζε 10/10?κ λέω 10 γιατι αφού είναι η λύση του καθηγητή προφανώς κ είναι όχι μονο σωστή αλλά κ σωστά δομεμένη.
Δηλαδή τα prinf(dose arithmo sixnotitas bla bla bla) δεν χρειάζονται?
¨Εχω κάνει κάπου λάθος?


Title: Re: Λύση εργασίας C
Post by: edenaxas on May 10, 2008, 13:30:11 pm
καλυτερα μονο διαβαζε τον κωδικα και μην τον τρεχεις, προσπαθησε να καταλαβεις την φιλοσοφια της λυσης και οχι την ποιοτητα του προγραμματος.

o κορτεσης παντα ετσι γραφει τα προγραμματα-λυσεις και στο ethmmy και στο βιβλιο αν δεις σε καθε λυση δεν ανησυχει για την ποιοτητα του UI του προγραμματος του τοσο οσο να δουλευει σωστα.
αλλο τωρα αν εχεις να εισαγεις π.χ στοιχεια πελατη με διαφορετικους τυπους μεταβλητων(ονομα char, τηλεφωνο int κτλ..) και το μονο που εχεις ειναι ενας κερσορας που αναβοσβηνει...


παντως αν στις εξετασεις αν δεν βαλεις οδηγιες στον χρηστη (dwse onoma κτλ) θα εχεις μια πολυ δυσαρεστη βαθμολογικη εκπληξη..ετσι κι αλλιως το νοημα του προγραμματισμου δεν ειναι τοσο ο ευαναγνωστος κωδικας και το φιλικο UI αλλα κατα κυριο λογο ειναι η σωστη αλγοριθμικη υλοποιηση.


Title: Re: Λύση εργασίας C
Post by: edenaxas on May 10, 2008, 13:32:56 pm
οχι πως δεν ειναι σημαντικο να εχεις ευαναγνωστο κωδικα και φιλικο GUI...


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: vasso on May 12, 2008, 05:54:51 am
και ας μην ξεχνάμε ότι και ο καθηγητής (ή όποιος βοηθός του έγραψε το πρόγραμμα- λύση) είναι άνθρωπος, όχι ο τέλειος προγραμματιστής. Ναι μεν, έχει πολλήήήήή περισσότερη εμπειρία στον προγραμματισμό από εμάς αλλά υπάρχει πάντα η πιθανότητα ο αλγόριθμος που έφτιαξε κάποιος φοιτητής στη φλασιά που του ήρθε όταν έψαχνε να βρει τρόπο υλοποίησης να είναι πιο αποδοτικός από τον τελικώς δοσμένο.


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: anonymous-root on May 12, 2008, 08:31:29 am
Η λύση του κορτέση είναι μια απλή υπόδειξη στην ουσία, η οποία όπως και κάθε άλλος κώδικας επιδέχεται βελτιστοποιήσεις.

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


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: Καμένος on May 12, 2008, 10:55:20 am
Παρόλα αυτά δεν είναι δυνατό να δίνει λύσεις οι οποίες δεν δουλεύουν. Δε τα δοκιμάζει πριν τα δώσει?


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: edenaxas on May 14, 2008, 12:08:23 pm
και παλι το νοημα δεν ειναι τοσο στο να δεις το αποτελεσμα του προγραμματος( ετσι κι αλλιως ξερεις τι πρεπει να κανει το προγραμμα...) το νοημα ειναι στην κατανοηση του κωδικα πιστευω.
δηλ. μην κανεις καθολου run, κατσε απλα και δες τον κωδικα γραμμη-γραμμη σκεψου καθε γραμμη τι κανει και αν σε ενοχλει τοσο που δεν τρεχει το προγραμμα, βρες το bug! τα περισσοτερα τα μαθαινεις διορθωνοντας λαθη και μλκιες της στιγμης που ξεφευγουν απο το ματι...


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: Καμένος on May 14, 2008, 12:24:14 pm
και παλι το νοημα δεν ειναι τοσο στο να δεις το αποτελεσμα του προγραμματος( ετσι κι αλλιως ξερεις τι πρεπει να κανει το προγραμμα...) το νοημα ειναι στην κατανοηση του κωδικα πιστευω.

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

Αλλά δεν αρκεί μόνο αυτό. Θεωρητικά εαν μπείς στο νόημα των αλγορίθμων, μπορείς να διαβάσεις τις εντολές μιας Χ γλώσσας προγραμματισμου για μία δύο μέρες και μετά να είσαι ικανός να προγραμματίσεις σε αυτή. Το μόνο σίγουρο είναι ότι όταν θα πάς να φτιάξεις κάποιο project (και δε μιλάω για προγράμματα 100-200 γραμμών, αλλά πιο σύνθετα που συνδιάζουν πολλά πράγματα) αποκλέιεται να δουλεψει με τη πρώτη.

Το πιθανότερο δεν είναι να έκανες λάθος στη φιλοσοφία λύσης ή στην επιλογή του αλγορίθμου, αλλά να έκανες ένα (ή συνήθως περισσότερα) ψιλολάθος(η). Το θέμα είναι ότι πολλές φορές ο εντοπισμός τους σε ένα μεγάλο κώδικα είναι πολύ δύσκολος. Έτσι για να γράψεις ένα πρόγραμμα θα καταναλώσεις 30% του χρόνου για να το γράψεις και 70% για να διορθώσεις τα bugs (ή και παραπάνω).

Για να τελειώνω πιστεύω ότι στον προγραμματισμό είναι εξίσου σημαντικό το να επιλέγεις τον σωστό αλγόριθμο, με το να μπορείς να κάνεις το πρόγραμμα να τρέχει σωστά. Γι αυτό και πρέπει να διδάσκεται και το debugging εκτος από το programming. Τέλος, σύμφωνα με τα παραπάνω, πιστεύω ότι είναι τελείως λάθος ο τρόπος εξέτασης της C, δηλαδή να γράφεις κώδικα στο χαρτί. Το νόημα του προγραμματισμόυ είναι να μπορείς να φτιάξεις ένα προγραμμα που τρέχει σωστά. Το "περίπου" δεν υφίσταται...


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: edenaxas on May 14, 2008, 12:40:27 pm
κατ'αρχας οταν πας να γραψεις κωδικα που υπερβαινει τα μικρα μεγεθη, απο πειρας σου λεω οτι δεν πας και αμολας καπου 3000 γραμμες κωδικα και μετα πας γυρευοντας το bug... σπας την εφαρμογη που θες να δουλεψεις σε περιπου αυτοτελεις νοηματικες ενοτητες, ελεγχεις αν αυτα τα μικρα κομματια δουλευουν σωστα και στο τελος "ραβεις" την τελικη εφαρμογη συνδεοντας back2back ή οπως αλλιως εχεις σκεφτει το προγραμμα σου.

επειτα, οταν λεω να δεις τον κωδικα εννοω να κατανοησεις την εφαρμογη  του Χ αλγοριθμου ετσι οπως τον εχει δομησει ο οποιος προγραμματισης. δεν εννοω σε καμμια περιπτωση να πεις αν οι εντολες ειναι σωστες.. ετσι κι αλλιως καθε προγραμμα που εχω γραψει εγω και νομιζω οποιος εχει ασχοληθει με προγραμματισμο, παντα ξεκινας με ψευδο κωδικα, μετα επιλεγεις την γλωσσα που θες να υλοποιησεις και αρχιζεις την μεταφραση απο ψευδοκωδικα σε γλωσσα προγραμματισμου. υπο αυτο το πρισμα, ναι δεν εχει σημασια τοσο η γλωσσα οσο οι αλγοριθμοι, αυτο που πιστευω ειναι οτι οι γλωσσες προγραμματισμου ειναι κατι σαν το αντιστοιχο της γραμματικης στην οποιαδηποτε "ομιλουμενη" γλωσσα, γνωριζοντας μονο γραμματικη δεν μπορεις να επικοινωνησεις, πρεπει να ξερεις και συντακτικο(αλγοριθμοι και τεχνικες) αλλα και την καθομιλουμενη( τρικ και προσεγγισεις καθε προγραμματιστη ή consensus προγραμματιστων)

επιπλεον δεν συμφωνω για το ποσοστο που εβαλες...οντως ο χρονος σου μαλλον καπως ετσι θα διαμεριζεται στον προγραμματισμο ειτε θα ειναι 60-40 ειτε 50-50 ειτε καπου εκει παντως. ο κυκλος ζωης του λογισμικου μετα απο την συγγραφη κωδικα παντα περναει στον ελεγχο και αν ο ελεγχος εντοπισει σφαλματα, στην διορθωση. μαλλον θα πρεπει να συνιθισεις στο debugging αλλιως νομιζω οτι θα σε ζορισουν καποιες καταστασεις.(ιδιεταιρα αν ο κωδικας ξεπερναει το μικρο μεγεθος...)

επισης, πιστευω οτι το debugging δεν μαθαινεται και αυτο οφειλεται στην φυση των bug που δεν μπορει να προσδιοριστει με ακριβεια και μαθηματικη σαφηνεια μιας και υπαρχουν περα απο τα οφθαλμοφανη bugs και λογικα bugs που και να σπας το κεφαλι σου δεν μπορεις απλα να "ριξεις" μια ματια και να τα εντοπισεις ενω κυριως οφειλονται ειτε σε απροσεξια, ειτε σε λαθος εφαρμογη. τo debugging αναπτυσσεται σαν ενστικτο με επαναληψη και εμπειρια...

anway αυτη ειναι η αποψη μου, δεν λεει κανεις οτι πρεπει ντε και καλα να ειναι σωστη ή οτιδηποτε..


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: Καμένος on May 14, 2008, 12:51:11 pm
κατ'αρχας οταν πας να γραψεις κωδικα που υπερβαινει τα μικρα μεγεθη, απο πειρας σου λεω οτι δεν πας και αμολας καπου 3000 γραμμες κωδικα και μετα πας γυρευοντας το bug... σπας την εφαρμογη που θες να δουλεψεις σε περιπου αυτοτελεις νοηματικες ενοτητες, ελεγχεις αν αυτα τα μικρα κομματια δουλευουν σωστα και στο τελος "ραβεις" την τελικη εφαρμογη συνδεοντας back2back ή οπως αλλιως εχεις σκεφτει το προγραμμα σου.

Κι εγώ από πειρας μιλάω.. Και ο δικός σου κώδικας να τρέχει μόνος του, αν συμμετέχουν κι άλλοι στο project και πάς να ενώσεις τους κώδικες συνήθως γίνεται πανικός.. Τέλος πάντων.. Συμφωνώ σε αυτά που λές (εκτός από τον ψευδοκώδικα :p)

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

Τέλως πάντων, αυτό που ήθελα να πώ είναι ότι το πιο σημαντικό δεν είναι να γράψεις έναν κώδικα στο περίπου αλλά να γράψεις έναν κώδικα που δουλεύει. Και επίσης ότι το debugging είναι απαραίτητο στον προγραμματισμό, αλλά ο τρόπος διδασκαλίας εω δε δίνει καμία σημασία σε αυτό.. Και το θέμα είναι ότι αν το bug είναι περίεργο μπορείς να χάσεις πολλές ωρες στο debugging εαν δεν έχεις ασχοληθεί. Δεν θα μπορούσαν να μπόυν ασκήσεις τέτου χαρακτήρα? Πχ έχουμε αυτό το πρόγραμμα ο οποίος με αυτές τις εισόδους δεν λειτουργεί. Βρείτε το σημείο που ευθύνεται και διορθώστε το". Έτσι, και τον αλγόριθμο του προγράμματος πρέπει να κατανοήσει ο φοιτητής, και να μάθει πως γίνεται το debbuging..


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: edenaxas on May 14, 2008, 13:06:10 pm
ok θα σου δειξει με μια ασκηση ενος ειδους bug.
με μια αλλη ενος αλλου ειδους bug
με μια αλλη ενος αλλου ειδους bug

με μια αλλη ενος αλλου ειδους bug
με μια αλλη ενος αλλου ειδους bug
και τα μαθηματα θα συνεχιζονται προσπαθωντας να καλυψουν το ευρος της μορφολογιας της ανθρωπινης μαλακιας και απροσεξιας... :D

παντως αν δουλευεις σε project και οι αλλοι σου δινουν μαλακιες υλοποιησεις εχεις δυο επιλογες:
1. δουλευε μονος σου ;D
2. θεσε απο πριν στανταρ, πχ μανωλη εσυ θα κανεις την ταδε συναρτηση που θα παιρνει αυτα τα δεδομενα χ,υ και θα επιστρεφει τα κ,λ , μαρια εσυ...κτλ αλλα το κυριο σημειο ειναι ολοι να εχουν κατανοησει το πως εσπασες νοητικα το project και το πως εχεις θεωρησει οτι θα ρεουν οι πληροφοριες σου απο κομματι σε κομματι, και φυσικα πως το εχει θεωρησει το καθε μελος της ομαδας σου.
οπως λεει και ο agent cain στην υπογραφη του,
 Ανάμεσα σ'αυτό που σκέφτομαι, σ'αυτό που θέλω να σας πω, σ'αυτό που πιστεύω ότι σας λέω, σ'αυτό που σας λέω, σ'αυτό που θέλετε να ακούσετε, σ'αυτό που ακούτε, σ'αυτό που πιστεύετε ότι καταλαβαίνετε, σ'αυτό που θέλετε να καταλάβετε και σ'αυτό που καταλαβαίνετε υπάρχουν τουλάχιστον 9 πιθανότητες να μην συννενοηθούμε.
αλλα και παλι οπως το βλεπω εγω το debugging αναλυεται σε παραγοντες ανθρωπινου λαθους και παλι δεν μπορεις να διδαξεις κατι σαν "αναγνωριση pattern ανθρωπινης μαλακιας μεσω k-m-p" ;D


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: Καμένος on May 14, 2008, 13:20:09 pm
Μα εγώ δεν είπα να δούν οι φοιτητές όλα τα bugs που μπορούν να παρουσιαστούν. Είπα να δουν μερικά γιανα καταλάβουν πως γίνεται το debugging. Με τη λογική σου, να μη λύνουν προβλήματα προγραμματισμού γιατί θα λύσουν ένα, θα λύσουν δύο
και τα μαθηματα θα συνεχιζονται προσπαθωντας να καλυψουν το ευρος της μορφολογιας κάθε αλγορίθμου κτλ κτλ.....

Όσο για το project, το να γράψεις μόνος σου κώδικα 20000 γραμμών είναι λίγο αγγούρι. Άρα αναγκαστικά πρέπει να αποκτήσεις συνεργάτες, με τους οποίους φυσικά έχεις στάνταρ, αλλά εφόσον δεν είσαι μέσα στο μαυλό τους, ούτε αυτοί στο δικό σου, θα υπάρξουν παρερμηνίες και άρα bugs.

Και για να επιστρέψω, θεωρείς λογικό να δίνει μία επίλυση άσκησης προγραμματισμού ο καθηγητής, και να μη τρέχει σωστά?


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: vasso on May 14, 2008, 16:55:22 pm
Και για να επιστρέψω, θεωρείς λογικό να δίνει μία επίλυση άσκησης προγραμματισμού ο καθηγητής, και να μη τρέχει σωστά?


μήπως αυτά είναι τα bugs που πρέπει να διορθώσουμε;  ;D


Title: Re: [Δομημένος Προγραμματισμός ] Λύση εργασίας C
Post by: edenaxas on May 14, 2008, 23:12:49 pm
κοιτα, δεν λεω οτι ειναι σωστη πρακτικη, δεν λεω οτι βοηθαει περισσοτερο απο ενα υποδειγματικα λυμενο προβλημα
αντιθετως μπορω να προσθεσω οτι σε καθε προβλημα θα μπορουσε ο καθηγητης που ενδιαφερεται ο κορτεσης και ο καθε κορτεσης αφου δωσει λυμενο το προγραμμα με πληρη documentation να κανει και σαφεις υποδειξεις στις παγιδες του προγραμματος πχ εδω θα μπορουσε καποιος να κανει το εξης λαθος...ή ενα συνηθες λαθος για τον ταδε βροχο ειναι να ξεκινας απο 0 και να τελειωνεις σε 100 και να περιμενεις να μετρησεις 100 ή παραδειγματα που να υποδεικνυουνε τα πολυ βασικα προγραμματιστικα λαθη και παγιδες που μπορουνε να γινουν κατα τη συγγραφη κωδικα.
δεν λεω οτι ολα αυτα δεν ειναι καλα..
αλλα δεν θα συμβουν απλα γιατι θα παρουν χρονο και ενδιαφερον απο καποιον που θα θελησει να ασχοληθει και προφανως δεν υπαρχει καποιος.

απλα αυτο που λεω στο τελος θα βοηθησει τον οποιον ασχληθει ενω αλλιως απλως θα οργιστει με την οργανωση του μαθηματος...

ζυγισε τα.

edit:
Quote
Με τη λογική σου, να μη λύνουν προβλήματα προγραμματισμού γιατί θα λύσουν ένα, θα λύσουν δύο
και τα μαθηματα θα συνεχιζονται προσπαθωντας να καλυψουν το ευρος της μορφολογιας κάθε αλγορίθμου κτλ κτλ.....
παντως αυτο γινεται και λεγεται μελετη αλγοριθμων βεβαια βοηθαει το οτι το πληθος των αλγοριθμων δεν ειναι απειρο, με λιγη φαντασια μπορεις οντως να κανεις τα παντα αλλα για τα ανθρωπινα λαθη...δν ξερω