Προς το περιεχόμενο

Γενικό thread αποριών για τη C#.


Alithinos

Προτεινόμενες αναρτήσεις

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

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

  • Απαντ. 505
  • Δημ.
  • Τελ. απάντηση

Συχνή συμμετοχή στο θέμα

Συχνή συμμετοχή στο θέμα

Δημοσιευμένες Εικόνες

Υπερβολές του Groot..όπως πάντα!

Το  ΥΓ2....λέει κάτι που είναι αντίθετο με αυτό που έγραψα; Τι σημαίνει "το έχει φτιάξει στατικά"; Η μάνα του ή ο σχεδιαστής της γλώσσας;...Άρα το By Design δεν καλύπτεται με την εξήγηση που έδωσα;

Και τα άλλα δεν είναι στο θέμα μας. Και τα struct είναι αντικείμενα αλλά έχουν ειδικό χειρισμό και θα μπερδέψει τον Alithinos..ή όποιον άλλο νέο ασχοληθεί.

 

(πάλι κάτι γνωστά τρωκτικά εμφανίστηκαν...αλλά τα έχω..σε αγνόηση...)

 

 

 

Το τι σημαίνει "το έχει φτιάξει στατικά", πραγματικά και εγώ θέλω να το μάθω μιας και εσύ το έγραψες!!

 

 

Για τα άλλα... μαύρη είναι η νύχτα στα βουνά!

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης

Και εδώ κανείς αναρωτιέται... 

 

Να κάτσει να εξηγήσει τι και πως; Υπάρχει λόγος να μάθει στον συγκεκριμένο τι ακριβώς γίνεται; 

 

 

 

Δεν μπορείς να εξηγήσεις το παραμικρό σε έναν άνθρωπο που στα 50 του λειτουργεί ως 15χρονος. Ο Μ2000 νομίζει ότι οποιαδήποτε κριτική κάνουμε εδώ αφορά τον ίδιο σαν άνθρωπο, κι όχι αυτά που λέει. Οπότε έχει βαλθεί να μας πείσει όλους πόσο άξιο και ικανό άτομο είναι. Και γι αυτό αρχίζει τα παραληρήματα με την M2000 επί παντός επιστητού ώστε να πειστεί κι ο τελευταίος εδώ μέσα πόσο φοβερή δουλειά έχει κάνει. Κανείς βέβαια δεν αμφισβητεί ότι έχει κάνει εντυπωσιακή δουλειά, αυτό που αμφισβητούμε είναι αφενός την έλλειψη μέτρου ώστε σε κάθε μα κάθε thread να μιλά γι αυτό το πράγμα, αφετέρου τη χρησιμότητα της γλώσσας καθώς το να φτιάξεις μια γλώσσα που βασίζεται σε τεχνολογίες εικοσαετίας δεν το λες και το πιο έξυπνο πράγμα στο κόσμο.

 

Όλα αυτά βέβαια είναι απλά γραφικά κι από ένα σημείο κι έπειτα αστεία. Για μένα το πραγματικό ερώτημα είναι γιατί οι Moderators εξακολουθούν να δείχνουν ανοχή ενώ αποδεδειγμένα σπαμάρει όλα τα threads. Πιθανώς έχουν σοβαρότερα πράγματα να ασχοληθούν, όπως να απειλούν με ban κάποιον που γράφει σε λάθος thread. Αν γράψεις σε λάθος thread είσαι κατάπτυστος, άμα τρολάρεις διαρκώς όλες τις συζητήσεις είσαι ωραίος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ρε συ Μ2000. Από όλα τα threads στα οποία έχεις σχολιάσει (και δεν είναι λίγα πανάθεμα τα) έχεις συνειδητοποιήσει σε πόσα ΔΕΝ έχεις αναφέρει την Μ2000; Μιλάμε για ρεκόρ. Δεν σου λέει τίποτα αυτό;

  • Like 2
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

 

Alithinos C κατέχεις?

 
#include<stdio.h>
int main(void)
{
      int n , d;
      printf(" Give n : \n");
      scanf("%d" , &n);

      for( d=2; d<n; d++)
           if( n % d == 0 ) /* Ψάχνει άν υπάρχει αριθμός με τον οποίο διαιρείται 
             τέλεια με αρχή το 2 (Το 0 και το 1 δεν ειναι πρώτοι). */
           break;
       if( d < n )
           printf(" %d is divisible by %d \n " , n , d);
       else
          printf("%d is prime \n" , n); /* Eφόσον δεν βρέθηκε κάποιος μικροτερός του 
              που να τον διαιρεί.*/
      return 0;
}

 

Τη C μπόρεσα να τη διαβάσω άνετα, και να το μεταφράσω και σε C#

static void Main(string[] args)
         {
             int n, d;
             Console.WriteLine(" Give n: \n");
             n = int.Parse(Console.ReadLine());

             for (d = 2; d < n; d++)
             {
                 if (n % d == 0)
                     break;
             }
             if (d < n)
                 Console.WriteLine(" {0} is divisible by {1}",n ,d);
             else
                 Console.WriteLine("{0} is prime", n);

             Console.ReadKey();
          } 

και να το τεστάρω, και να διαπιστώσω πως όντως δουλεύει!

 

 

Ωστόσο εξακολουθώ να μη καταλαβαίνω κάτι...

 

Ο αλγόριθμος που μου έδωσες, σε βήματα κάνει το εξής:

 

1. Για όσο το d είναι μικρότερο από n: //Ξεκινώντας από 2 και ανεβαίνοντας κατά 1 κάθε φορά.

2. Αν το n διαιρείται με το d, βγες εκτός λούπας.

3. Αν το d είναι μικρότερο του n τότε ο n δεν είναι πρώτος

4. Αλλιώς το d είναι πρώτος.

 

Ο τρόπος που κατέληξα εγώ ήταν ο εξής:

 

1. Για όσο το d είναι μικρότερο ή ίσο του n / 2: //Ξεκινώντας από 2 και ανεβαίνοντας κατά 1 κάθε φορά.

2. Αν to n διαιρείται με το d τότε θέσε boolean = false και βγες εκτός λούπας..

3. Αν η boolean είναι true αφού τελειώσεις τη λούπα, τότε το d είναι πρώτος.

4. Αλλιώς το d δεν είναι πρώτος.

 

Οι σημαντικές διαφορές που εντοπίζονται είναι 2:

 

A) Ότι κάνεις έλεγχο αν το d είναι μικρότερο του n αφού τελειώσει η λούπα ενώ εγώ τσεκάρω τη τιμή της boolean.

Β) Ότι για προϋπόθεση εκτέλεσης της for βάζεις το d < n, ενώ εγώ τελικά έβαλα d<= n/d.

 

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

 

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

 

Γιατί ανεβαίνει το d παραπάνω από d<n ? Αφού το μόνο πράγμα που αλλάζει τη τιμή της d είναι η for, και στη for ορίσαμε να σταματήσει να ανεβάζει το d όταν d<n = true ?

:huh:

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημοσ. (επεξεργασμένο)

Αν σου είναι εύκολο να εξηγήσεις τι εννοείς με το αντικείμενο Collection, ίσως τελικά δεν διαφωνήσω.

Εννοεί ότι το .NET Framework έχει μια κλάση που σε βοηθά να φτιάξεις και να χειριστείς μια λίστα, και έτσι για να χρησιμοποιήσεις τη λίστα πρέπει να δημιουργήσεις ένα αντικείμενο της κλάσης. (εκτός και αν θες κάθε φορά να φτιάχνεις μια λίστα από το 0 μόνος σου φυσικά)

 

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

 

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

 

Σαφώς και μια λίστα ως δομή δεδομένων δεν μπορεί να λάβει μια συνάρτηση ως δεδομένο.

Αλλιώς δεν θα ήταν δομή δεδομένων, αλλά δομή συναρτήσεων aka κλάση.

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

Επεξ/σία από Alithinos
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Alithinos...

 

Σκέψου λίγο κάτι. Έχεις έναν αριθμό X. Έστω ότι τον διαιρείς με τον αριθμό Z = 2 και παίρνεις έναν αριθμό Y με Y < X. 

 

Για κάθε Z' > Z που θα διαιρείς τον Χ και θα παίρνεις ένα αποτέλεσμα Y', υπάρχει περίπτωση ποτέ περίπτωση να ισχύσει Y' > Y;

 

 

Εάν όχι και εάν έχεις d τον αριθμό που θες να δεις εάν είναι πρώτος και n το running argument στην for, τότε γιατί να ψάχνεις μέχρι το n <= d; Εάν το d είναι ΠΟΛΥ μεγάλο, τότε εάν δεν χρειάζεται να πας μέχρι το n <= d θα κερδίσεις αρκετό χρόνο. 

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δεν μπερδεύω κάτι, απλά ότι γράφω θα το καταλάβεις όταν έρθει η ώρα!

Μια κλάση δεν είναι συνάρτηση (μόνο στη Μ2000 ο ορισμός κλάσης δημιουργεί συνάρτηση που γυρνάει αντικείμενο, by value).

Η μέθοδος constructor είναι συνάρτηση. Όταν ζητάμε νέο αντικείμενο, by reference, τότε η εντολή new καλεί την constructor συνάρτηση και εκ χωρεί τον δείκτη στην μεταβλητή που ορίσαμε του τύπου δείκτης στη κλάση.

Το collection είναι αντικείμενο, και ως αντικείμενο έχει μια κλάση, το πρώτυπο ας πούμε.Αυτό που παρέχει η λίστα είναι δείκτες για αντικείμενα, βάσει ενός δείκτη, αριθμού θέσης. Αν έχουμε 5 αντικείμενα μπορούμε να τα διαβάσουμε από το 0 έως το count-1. Η ιδιότητα count είναι βασική.

Εφόσον συναρτήσεις έχουν τα αντικείμενα, και τέτοια παίρνει η λίστα, ναι μπαίνουν συναρτήσεις σε λίστα. Αν είναι περασμένα by reference, στη c# οι κλάσεις δίνουν αντικείμενα by reference, τα struct δίνουν by value, τότε μπορούμε να αλλάξουμε ιδιότητες, ενώ αν είναι by value πρέπει να περάσουμε νέα τιμή για όλο. (παραξενιά αυτό..σε επόμενη έκδοση θα το φτιάξουν...πιστεύω)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ωστόσο εξακολουθώ να μη καταλαβαίνω κάτι...

 

Ο αλγόριθμος που μου έδωσες, σε βήματα κάνει το εξής:

 

1. Για όσο το d είναι μικρότερο από n: //Ξεκινώντας από 2 και ανεβαίνοντας κατά 1 κάθε φορά.

2. Αν το n διαιρείται με το d, βγες εκτός λούπας.

3. Αν το d είναι μικρότερο του n τότε ο n δεν είναι πρώτος

4. Αλλιώς το d είναι πρώτος.

 

Ο τρόπος που κατέληξα εγώ ήταν ο εξής:

 

1. Για όσο το d είναι μικρότερο ή ίσο του n / 2: //Ξεκινώντας από 2 και ανεβαίνοντας κατά 1 κάθε φορά.

2. Αν to n διαιρείται με το d τότε θέσε boolean = false και βγες εκτός λούπας..

3. Αν η boolean είναι true αφού τελειώσεις τη λούπα, τότε το d είναι πρώτος.

4. Αλλιώς το d δεν είναι πρώτος.

 

Οι σημαντικές διαφορές που εντοπίζονται είναι 2:

 

A) Ότι κάνεις έλεγχο αν το d είναι μικρότερο του n αφού τελειώσει η λούπα ενώ εγώ τσεκάρω τη τιμή της boolean.

Β) Ότι για προϋπόθεση εκτέλεσης της for βάζεις το d < n, ενώ εγώ τελικά έβαλα d<= n/d.

 

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

 

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

 

Γιατί ανεβαίνει το d παραπάνω από d<n ? Αφού το μόνο πράγμα που αλλάζει τη τιμή της d είναι η for, και στη for ορίσαμε να σταματήσει να ανεβάζει το d όταν d<n = true ?

:huh:

Σκέψου πώς λειτουργεί το loop. Σε κάθε επανάληψη ΠΡΩΤΑ αυξάνεται το d, ΜΕΤΑ ελέγχεται η συνθήκη και αν είναι ακόμα αληθής εκτελείται το loop body.

 

Με συνθήκη d < n και n, d ακέραιους, η συνθήκη θα γίνει false όταν το d έχει αυξηθεί για να γίνει ίσο με το n. Αυτό βέβαια θα γίνει μόνο αν το loop τερματίσει από "φυσικά αίτια". Αν κάνεις break στο ενδιάμεσο το d θα είναι ακόμα < n οπότε έτσι μπορείς να καταλάβεις αν το loop τερμάτισε με break ή όχι.

 

That said, προφανώς αυτό δεν είναι παγκόσμια σταθερά του σύμπαντος, π.χ. τίποτα δε σε εμποδίζει να αλλάξεις μόνος σου την τιμή του loop variable μέσα στο body, π.χ. d = n και μετά break. Αυτό βέβαια δεν έχει νόημα και δεν είναι καλή πρακτική οπότε καθαρά θεωρητική συζήτηση.

 

Προσωπικά πλέον από τη σκοπιά που βλέπω τα πράγματα, όπου η αναγνωσιμότητα του κώδικα είναι ο νούμερο ένα και ο νούμερο δύο στόχος, hands down προτιμώ τη λύση με το επιπλέον flag όπως το έχεις εσύ για προφανείς λόγους.

 

Επίσης όσον αφορά το όριο, είναι προφανές αν κάτσεις να το σκεφτείς ότι το d δε χρειάζεται να πάει ποτέ παραπάνω από √n. Αν το n δεν είναι πρώτος τότε υπάρχουν τουλάχιστον 2 αριθμοί x,y με xy = n. Στη γενική περίπτωση δεν είναι ίσοι: ο ένας είναι μικρότερος από τη ρίζα ν και ο άλλος μεγαλύτερος. Επομένως ελέγχοντας μέχρι τη ρίζα (όχι μέχρι το n ούτε καν το n/2) θα βρεις σίγουρα τον μικρότερο παράγοντα και θα ξέρεις ότι το n δεν είναι πρώτος.

 

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

 

Τελικά δηλαδή η optimal μορφή του loop εδώ είναι

 

for(d = 3; d <= sqrt(n); d += 2)

 

Προσοχή στο <= που χρειάζεται για να καλύψεις σωστά την περίπτωση όπου το n είναι το τετράγωνο κάποιου πρώτου, και επίσης βάζεις ένα extra test εκτός loop για d = 2.

 

Δεν μπερδεύω κάτι, απλά ότι γράφω θα το καταλάβεις όταν έρθει η ώρα!

 

Not to rain on your parade αλλά έτσι που τα γράφεις κανένας δεν καταλαβαίνει τι προσπαθείς να πεις. Σου το έχουν επισημάνει αρκετοί, και δεδομένου του ποιοί ακριβώς δε νομίζω πως είναι θέμα εμπειρίας.

 

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

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Defacer,

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

 

 

Ο Όιλερ έχει τον πιο γρήγορο αλγόριθμο:

Φτιάχνουμε ένα πίνακα Χ στοιχείων (εδώ βάζω +1, γιατί κάτω όριο έχω το 0 και δεν με ενδιαφέρει)

Όπου ο πίνακας είναι στην ουσία σημαίες. Όπου μείνει με τιμή 0 θα είναι πρώτος, δηλαδή το ι(11) θα είναι 0 άρα το 11 είναι πρώτος.

παίζουν τρεις μεταβλητές, η κ, η κ2 που είναι το τετράγωνο του κ και η λ. Η λ παίρνει τιμές από το τετράγωνο του κ μέχρι το Χ, ανά κ, άρα πάει στα  κ σε κάθε δύναμη από τη δεύτερη και κάνει το πίνακα ι(λ)=ι(λ)-1 άρα -1, αν ήδη είναι -1 θα γίνει κάτι ακόμα μικρότερο, αν είχαμε boolean θα κάναμε or True και θα κοιτάγαμε στο False για πρώτο.

Μετά στην Επανέλαβε πάμε στον επόμενο πρώτο. Ουσιαστικά ο Όιλερ κάνει "Στάση" σε κάθε πρώτο, ακυρώνει όλες τις δυνάμεις του μέχρι το χ, και πάει στον επόμενο.

 

 Πίνακας ι(χ+1)
      κ=2
      κ2=κ**2
      Ενώ κ2<χ {
            Για λ=κ2 έως χ ανά κ { ι(λ)--}
            Επανέλαβε {
                  κ++
                  κ2=κ**2
            } μέχρι ι(κ)=0 ή κ2>χ
      }

 

Αυτό χρειάζεται για να πάρουμε τους πρώτους!

 Για ι=2 εως χ {

      αν ι(ι)=0 τότε τύπωσε ι,
      }

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Σκέψου πώς λειτουργεί το loop. Σε κάθε επανάληψη ΠΡΩΤΑ αυξάνεται το d, ΜΕΤΑ ελέγχεται η συνθήκη και αν είναι ακόμα αληθής εκτελείται το loop body.

 

 

Ποοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοο αυτό ήταν ?!?!?!?!?!  :shock:

Να που έκανα το λάθος μου. Αμέσως με το που διάβασα αυτό το κομμάτι, μου λύθηκε η απορία.

 

Νόμιζα πως αφού κάνει την τελευταία εκτέλεση του block παραδίδει απ ευθείας τη σκυτάλη στον εκτός loop κώδικα, μην υπολογίζοντας πως θα ανεβάσει για άλλη μια φορά τη τιμή του d. Έτσι εξηγείται λοιπόν, και το d έφτανε σε τιμή παραπάνω από d<n. Τώρα βγάζει απόλυτο νόημα ο κώδικας που μου έδειξε ο DDevil! Και βγάζει νόημα και γιατί δούλεψε ο αρχικός δικός μου κώδικας κατά ατύχημα όταν άλλαξα για συνθήκη αντί του d<n σε d<= d/2 !!!!

 

Σε ευχαριστώ πολύ για το σχόλιο σου!  :-D

 

Μου έκανε ξεκάθαρο το λάθος που με ταλαιπωρούσε τόσες μέρες και με έκανε να αναρωτιέμαι αν είμαι βλαμμένο. Τώρα που έχω μια πιο ολοκληρωμένη γνώση για τη for θα κοιτάξω να μη ξανακάνω παρόμοιο λάθος.

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Alithinos ένα for loop

for(i=0; i<2; i++)

ειναι ισοδύναμο με ένα while

int i=0; 
while(i<2) {
            // εντολές εδώ 
            i++ ;
}
 

Η αρχικοποίηση του i γινεται μονο μια φορά στην αρχή στη συνέχεια εκτιμάται η συνθηκη i<2 αν αυτη ειναι αληθής τοτε εκτελειται το σώμα του λουπ και στο τέλος αυξάνεται η τιμή κατα ένα. Οταν τελειώσει το λουπ ο μετρητης θα έχει την τιμή 2 διοτι στον έλεγχο i<2 ειχαμε TRUE εκτελέσθηκε το σώμα του μετά αυξηθηκε σε 2 οποτε το 2<2 ειναι ψευδές "σπαει" το λουπ δεν εκτελούνται οι εντολές στο σώμα του οποτε η τιμή της μεταβλήτής που χρησιμοποιείς για μετρητή ειναι αυξημένη κατα 1.        

  • Like 1
Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Επισκέπτης

Εφόσον συναρτήσεις έχουν τα αντικείμενα, και τέτοια παίρνει η λίστα, ναι μπαίνουν συναρτήσεις σε λίστα. Αν είναι περασμένα by reference, στη c# οι κλάσεις δίνουν αντικείμενα by reference, τα struct δίνουν by value, τότε μπορούμε να αλλάξουμε ιδιότητες, ενώ αν είναι by value πρέπει να περάσουμε νέα τιμή για όλο. (παραξενιά αυτό..σε επόμενη έκδοση θα το φτιάξουν...πιστεύω)

 

Ρε συ M2000, σοβαρά τώρα, ΓΙΑΤΙ ΓΡΑΦΕΙΣ ΓΙΑ ΠΡΑΓΜΑΤΑ ΠΟΥ ΔΕΝ ΓΝΩΡΙΖΕΙΣ; Αυτό που γράφεις δεν ισχύει. Είναι τελείως λάθος. Να αλλάξεις ιδιότητες μια συνάρτησης επειδή έχει περαστεί by reference; Δεν υπάρχει τέτοιο πράγμα στο .NET. Δεν δουλεύουν έτσι τα αντικείμενα κούκλε μου. Υπάρχει ένα πράγμα που λέγεται encapsulation κι ένα άλλο που λέγεται inheritance. Για να αλλάξεις ιδιότητες πρέπει να κάνεις subclass μια κλάση, αν το επιτρέπει ο σχεδιασμός της.

 

Σταμάτα να λες συνεχώς βλακείες, μας έχεις κουράσει.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Elorant,

σταμάτα να επεξηγείς ότι δεν κατανοείς! Ιδιότητες συνάρτησης δεν υπάρχουν..τέλος..Αυτό στο όνειρό σου το είδες!

 

οι κλάσεις ΔΕΝ είναι συναρτήσεις!

 

αλλάζω ιδιότητα δεν σημαίνει βάζω μια άλλη στη θέση της!!!!!!!!! Έλεος..

αλλάζω τιμή στην ιδιότητα σημαίνει...τι άλλο πιο προφανές..

 

Και προγραμματιστής και αγράμματος ΔΕΝ ΠΑΕΙ

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Elorant,

σταμάτα να επεξηγείς ότι δεν κατανοείς! Ιδιότητες συνάρτησης δεν υπάρχουν..τέλος..Αυτό στο όνειρό σου το είδες!

 

οι κλάσεις ΔΕΝ είναι συναρτήσεις!

Ιδιότητες συναρτήσεων υπάρχουν σε όλες τις γλώσσες.

 

Σε χαμηλό επίπεδο, αυτές οι ιδιότητες χρησιμοποιούνται για να λειτουργούν/ελέγχονται οι function pointers στην C, π.χ.

 

 

Πάλι ό,τι να 'ναι γράφεις.

 

Υ.Γ. Υπάρχουν γλώσσες όπου συναρτήσεις και κλάσεις είναι αντικείμενα και τα δύο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα

  • Δημιουργία νέου...