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

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

Δημοσ.

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

 

 

Αυτο νομίζω έγραψε.

Ο καθηγητης μου ειχε δειξει το πρωι πως λειτουργει η srand εγω δεν ημουν εκει γιατι ημουν στην Αθηνα και γυρισα το μεσημερι για το εργαστηριο,μας ειχε βαλει καποιες ασκησεις και μια ηταν με την srand ,με εκανε ξεφτιλα

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

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

Δημοσ.

Ο καθηγητης μου ειχε δειξει το πρωι πως λειτουργει η srand εγω δεν ημουν εκει γιατι ημουν στην Αθηνα και γυρισα το μεσημερι για το εργαστηριο,μας ειχε βαλει καποιες ασκησεις και μια ηταν με την srand ,με εκανε ξεφτιλα

Απλά πρέπει να ξεχωρίζεις τις συμπεριφορές και να αποφεύγεις να

αναπαράγεις αυτές του καθηγητή σου επειδή είναι καθηγητής. Δεν

είναι ωραίο.

Δημοσ.

Υπάρχει περίπτωση να είναι το πρόγραμμα του φίλου πιο γρήγορο απο την χρήση min , max ? Τουλάχιστον να πάει στον καθηγητή να του πει ότι θα το έκανα με min,max αλλά ήταν πιο αργο :-D

Δημοσ.

Υπάρχει περίπτωση να είναι το πρόγραμμα του φίλου πιο γρήγορο απο την χρήση min , max ? Τουλάχιστον να πάει στον καθηγητή να του πει ότι θα το έκανα με min,max αλλά ήταν πιο αργο :-D

Έτσι όπως είναι χωρίς else, δεν υπάρχει περίπτωση ούτε 1 στο εκατομμύριο :P

 

ΥΓ. Σχετικο-άσχετο: Υποτίθεται πως χωρίς branching γενικώς τρέχει πιο γρήγορα ένας κώδικας, αλλά κι αυτό δεν είναι σίγουρο.

Δημοσ.

Έτσι όπως είναι χωρίς else, δεν υπάρχει περίπτωση ούτε 1 στο εκατομμύριο :P

 

ΥΓ. Σχετικο-άσχετο: Υποτίθεται πως χωρίς branching γενικώς τρέχει πιο γρήγορα ένας κώδικας, αλλά κι αυτό δεν είναι σίγουρο.

 

Λογικά παραπλήσια θα είναι αν υποθέσουμε ότι οι min , max έχουν αριθμό συγκρίσεων αναλογα των παραμέτρων  + το call που γίνεται. Περισσότερο το ειπα φυσικά για να αλλάξουμε λίγο το κλίμα :-)

Δημοσ.

 γιατι το εχω δοκιμασει 1000 φορες και δουλευει ρολοι.. 

 

 

Το πρόγραμμα δεν δουλεύει σωστά, για παράδειγμα αν και οι 3 αριθμοί είναι ίσοι τότε οι μεταβλητές min και mid δεν θα πάρουν ποτέ τιμή. Οπότε αν η python αρχικοποιεί με 0 και δώσεις 100,100,100 θα σου πει ως απάντηση 0,0,100.

  • Like 1
Δημοσ.

Λογικά παραπλήσια θα είναι αν υποθέσουμε ότι οι min , max έχουν αριθμό συγκρίσεων αναλογα των παραμέτρων  + το call που γίνεται. Περισσότερο το ειπα φυσικά για να αλλάξουμε λίγο το κλίμα :-)

Το call μπορεί να γίνεται και internally inline, δεν το ξέρουμε από πριν. Επίσης οι min() και max() μπορεί να μην χρησιμοποιούν καν condition. Για παράδειγμα:

def mymax( x, y ):
	"""Return the largest of the 2 arguments"""
	return 0.5 * (x + y + abs(x-y))

def mymin( x, y ):
	"""Return the smallest of the 2 arguments"""
	return 0.5 * (x + y - abs(x-y))
Και η abs() μπορεί επίσης να μην χρησιμοποιεί condition, αλλά ας πούμε αν είναι σε IEEE απλώς να σβήνει το sign bit ή να υπολογίζεται μαθηματικά ως η τεραγωνική ρίζα του τετραγώνου.

 

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

Δημοσ.

Το call μπορεί να γίνεται και internally inline, δεν το ξέρουμε από πριν. Επίσης οι min() και max() μπορεί να μην χρησιμοποιούν καν condition. Για παράδειγμα:

def mymax( x, y ):
	"""Return the largest of the 2 arguments"""
	return 0.5 * (x + y + abs(x-y))

def mymin( x, y ):
	"""Return the smallest of the 2 arguments"""
	return 0.5 * (x + y - abs(x-y))
Και η abs() μπορεί επίσης να μην χρησιμοποιεί condition, αλλά ας πούμε αν είναι σε IEEE απλώς να σβήνει το sign bit ή να υπολογίζεται μαθηματικά ως η τεραγωνική ρίζα του τετραγώνου.

 

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

 

 

 

μια χαρά τα λες αλλά μιλάμε για generic function (με οποιο validation και local variables μπορεί να έχει) και αυτή  είναι η υλοποίηση (η οποία ειναι σε C by the way) . Επομένως θεωρώ ότι είναι valid οταν μιλάω θεωρητικά για παραπλήσιο performance. Παρόλα αυτά ναι μόνο με profiler μπορεί να βγει μια καθαρή απάντηση. Φυσικά και δεν θα κρίνουμε ουσιαστικά τις επιδόσεις ενός προγράμματος απο τον αριθμό των γραμμών η να θυσιάσουμε το readability για minor χρονικές διαφορές.

Δημοσ.

Μα δεν σου είπα πως είσαι invalid, σου είπα πως είναι implementation dependent και μόνο με profiler μπορεί να βγει ασφαλές συμπέρασμα.

 

Η CPython έτσι κι αλλιώς δεν φημίζεται για την ταχύτητά της, οπότε αν αυτο είναι που μας ενδιαφέρει δεν αποτελεί καλή επιλογή. Με άλλα λόγια, micro-optimization και CPython είναι μάλλον αντιφατικές έννοιες (εννοώ χωρίς PyPy, NumPy, κλπ). Οπότε το επιχείρημα "το έκανα έτσι επειδή είναι πιο γρήγορο" εκτός του ότι δεν ισχύει γενικώς, είναι και ασύμβατο με το spirit της γλώσσας.

 

Στη γενική περίπτωση τώρα και ανεξαρτήτως γλώσσας, με μια straight forward υλοποίήση των max() και min() τύπου:

(ψευδοκώδικας)
max(x,y) x if x > y else y
min(x,y) x if x < y else y
πρέπει να προσπαθήσει κάποιος πάρα πολύ για να βγάλει κώδικα λιγότερο efficient από 11 συνεχόμενα if ;)
Δημοσ.

 

Καλησπερα παιδια!

 

Οπως καταλαβαινετε ειμαι σε σχολη μηχανικων πληροφορικης και οπως καταλαβαινετε εχω και προγραμματισμο.. Στην εξεταστικη μου ζητηθηκε ενα προγραμμα που να δινω 3 αριθμους και να βγαζει μεγαλυτερο μεσαιο μικροτερο σε Pyhton η javascript... Επελεξα Python διοτι τα πηγαινω πολυ καλυτερα και πηρα στο παρακατω προγραμμα 3/10... εσεις τι βαθμο θα βαζατε μονο απο περιεργεια γιατι το εχω δοκιμασει 1000 φορες και δουλευει ρολοι.. Να πω οτι ειμαι τελείως αρχαριος!

 

print("Δώσε 3 αριθμούς")
a=input()
b=input()
c=input()
 
max=a
if max<b:
    max=b
if max<c:
    max=c
 
if a<b<max:
    mid=b
if a<c<max:
    mid=c
if b<a<max:
    mid=a
if b<c<max:
    mid=c
if c<a<max:
    mid=a
if c<b<max:
    mid=b
 
if a<mid<max:
    min=a
if b<mid<max:
    min=b
if c<mid<max:
    min=c
 
print("Τελικό αποτέλεσμα")
print(max)
print(mid)
print(min)

 

 

 

Να πω πως αυτο ηταν στο εργαστηριο... Ναι ειχαμε μαθει max min θεωρια αλλα δεν μας ειχα πει κατι για ποιο απλο τροπο.. Τι να πω θα παω να τον βρω απο κοντα γιατι δεν γινετε να το δηλωσω για 3η φορα...

 

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

 

Τώρα, αν είχες κοπεί ήδη 1 φορά στο ίδιο μάθημα, πάλι 5 θα σου έβαζα διότι θα αντιλαμβανόμουν ότι μέχρι εκεί μπορείς και διότι δεν μου αρέσει να ταλαιπωρώ κανέναν μάταια - και στην τελική μπορεί να είσαι ικανός σε άλλους τομείς της Πληροφορικής οπότε γιατί να σε χαντακώσω; ..

 

(φυσικά δεν το βλέπουν όλοι έτσι - - και δεν είναι κάτι στο οποίο σκοπεύω να αντιπαρατεθώ)

  • Like 1
Δημοσ.

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

 

Με αυτή τη λογική αν το έκανε με sort θα μπορούσε να τον κόψει γιατί δήθεν δεν διευκρινησε πως επιτρέπει ετοιματζίδικες συναρτήσεις.

 

Που να εξετάζονταν σε καμιά Haskell που υπάρχουν 2376373 τρόποι να κάνεις το ίδιο πράγμα ε ρε γέλιο που θα πεφτε..

Δημοσ.

Με το 5 είσαι ΟΚ; (που βασικά δεν είναι 5, όπως παρατήρησε ο darklord παραπάνω αν βάλεις ίδια νούμερα έχει πρόβλημα οπότε 3 και καλά είναι)

 

Τώρα όσον αφορά το "αν αυτό που δημιουργείς πληρεί προδιαγραφές τότε ΟΚ"... τι να πω. Πολύ ασθενής επαφή με το χώρο; Η έννοια της ποιότητας του κώδικα, που υπάρχουν εργαλεία τα οποία πληρώνει κανείς για να την εκτιμήσουν, δεν είναι "αντικειμενικό κριτήριο"; Το ότι αν γράφεις τέτοια και άυριο από 3 νούμερα πρέπει να πάμε σε 4 θα χρειαστεί να το ξαναγράψει κάποιος που θα πληρώνεται για το χρόνο του δεν είναι "αντικειμενικό κριτήριο";

 

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

Δημοσ.

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

 

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

 

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

Δημοσ.

 Το ότι αν γράφεις τέτοια και άυριο από 3 νούμερα πρέπει να πάμε σε 4 θα χρειαστεί να το ξαναγράψει κάποιος που θα πληρώνεται για το χρόνο του δεν είναι "αντικειμενικό κριτήριο";

 

Σχετικά με αυτή τη λογική(άσχετα με τον κώδικα του op, γενική η ερώτηση): πόσο συχνό θα έλεγες ότι είναι το να μην ξέρεις απο πριν αν το 3 μπορει στο μέλλον να χρειαστεί να γίνει 4, 5, 100, n;

 

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

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

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

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

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

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

Σύνδεση

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

Συνδεθείτε τώρα
  • Δημιουργία νέου...