kopsti Δημοσ. 26 Οκτωβρίου 2010 Δημοσ. 26 Οκτωβρίου 2010 while (k1>0) and (k2>0) do if (k1>k2) then k1 := (k1 mod k2) else k2 := (k2 mod k1); τώρα μαθαίνω pascal και όταν κάνω compile μου εμφανίζει ότι υπάρχει πρόβλημα με τη 2η γραμμή και συγκεκριμένα : error: invalid operands to binary `mod' ποιο είναι το πρόβλημα? k1,k2 είναι real ευχαριστώ, και ελπίζω να το έγραψα και σε σωστό μέρος, γιατί είμαι καινούργιος!
taazz Δημοσ. 26 Οκτωβρίου 2010 Δημοσ. 26 Οκτωβρίου 2010 Ποιον compiler χρησιμοποιείς; Έχω την εντύπωση ότι το mod μπορεί να χρησιμοποιηθεί μόνο με ακέραιους αριθμούς.
thanantypas Δημοσ. 26 Οκτωβρίου 2010 Δημοσ. 26 Οκτωβρίου 2010 θες να γράψεις ολο των κώδικα, και τι θες να κάνεις ? ---------- Προσθήκη στις 21:18 ---------- Προηγούμενο μήνυμα στις 21:12 ---------- while (k1>0) and (k2>0) do begin if (k1>k2) then k1 := (k1 mod k2); else k2 := (k2 mod k1); end; ορισμός της εντολής while while λογικη έκφραση do begin εντολές end;
isay Δημοσ. 26 Οκτωβρίου 2010 Δημοσ. 26 Οκτωβρίου 2010 το mod παίζει μόνο με integer http://www.pascalprogramming.info/operators/
panosxry Δημοσ. 8 Νοεμβρίου 2010 Δημοσ. 8 Νοεμβρίου 2010 Αυτό που λέει ο isay είναι. Όσο για το while δεν χρειάζεται να ακολουθήσει begin-end αφού το if είναι μία εντολή
kopsti Δημοσ. 12 Νοεμβρίου 2010 Μέλος Δημοσ. 12 Νοεμβρίου 2010 Ευχαριστώ παιδιά είχατε δίκιο..! Να ρωτήσω και κάτι άλλο, σε μια άσκηση όπου πρέπει να εμφανίζω τους τετραψήφιους που το αθροισμα των ψηφίων τους υψωμένων στην 4η ισούται με τον αριθμό, τι πρέπει να κάνω ώστε ο αλγόριθμος να γίνει αποδοτικότερος με τη χρήση πινάκων; Εννοώ θα τους χρησιμοποιήσω για την αποθήκευση των ζητούμενων αριθμών ή θα περάσω απο την αρχή όλους τους τετραψήφιους σε πίνακα για να βρω απο εκει τους ζητούμενους? ελπίζω να καταλαβατε!
V.I.Smirnov Δημοσ. 12 Νοεμβρίου 2010 Δημοσ. 12 Νοεμβρίου 2010 Λάθος σκέψη κάνεις !! Η ουσία είναι να αποθηκεύσεις σε πίνακα τα αποτελέσματα των πράξεων που είναι κοινά σε κάθε υπολογισμό. Έτσι θα αποφευχθούν άσκοπες πράξεις. Προφανώς οι 4ες δυνάμεις των ψηφίων 0-9 πρέπει να υπολογίζονται σε κάθε αριθμό που ελέγχεται αν πληρεί την συνθήκη. Αυτά θα τα υπολογίσεις στην αρχή και θα τα αποθηκεύσεις. Έτσι θα τα παίρνεις έτοιμα από τον πίνακα όταν τα χρειαστείς, χωρίς να τα υπολογίζεις κάθε φορά εκ νέου. -
kopsti Δημοσ. 12 Νοεμβρίου 2010 Μέλος Δημοσ. 12 Νοεμβρίου 2010 Λάθος σκέψη κάνεις !! Η ουσία είναι να αποθηκεύσεις σε πίνακα τα αποτελέσματα των πράξεων που είναι κοινά σε κάθε υπολογισμό. Έτσι θα αποφευχθούν άσκοπες πράξεις. Προφανώς οι 4ες δυνάμεις των ψηφίων 0-9 πρέπει να υπολογίζονται σε κάθε αριθμό που ελέγχεται αν πληρεί την συνθήκη. Αυτά θα τα υπολογίσεις στην αρχή και θα τα αποθηκεύσεις. Έτσι θα τα παίρνεις έτοιμα από τον πίνακα όταν τα χρειαστείς, χωρίς να τα υπολογίζεις κάθε φορά εκ νέου. - θες να μου δώσεις ένα παράδειγμα? γιατι δεν ειμαι σιγουρος οτι καταλαβα
V.I.Smirnov Δημοσ. 12 Νοεμβρίου 2010 Δημοσ. 12 Νοεμβρίου 2010 Παράδειγμα δεν θα δώσω διότι δεν έχω compiler πρόχειρο, ούτε ξέρω pascal. Αλλά σκέψου σε αυτό που έγραψα. Η άσκηση ζητά να ψάξεις τους 4ψήφιους αριθμούς. Δηλ. αυτούς στο διάστημα [1111 , 9999], συνολικά 8889 αριθμοί. Για κάθε αριθμό που ελέγχεις, πρέπει ανάμεσα στα άλλα να λαμβάνεις τα μεμονωμένα ψηφία του και να τα υψώνεις στην 4η δύναμη. Αυτό είναι κάτι που θα το κάνεις για κάθε αριθμό. Αν έχεις βρει από πριν τις 4ες δυνάμεις κάθε ψηφίου (συνολικά 10 ψηφία, δηλ. 10 δυνάμεις) και τις παίρνεις έτοιμες θα κάνεις αυτή την δουλειά μόνον μια φορά. Αλλιώς θα την κάνεις 8889 φορές, όσες και οι αριθμοί που ελέγχεις.... -
kopsti Δημοσ. 12 Νοεμβρίου 2010 Μέλος Δημοσ. 12 Νοεμβρίου 2010 Παράδειγμα δεν θα δώσω διότι δεν έχω compiler πρόχειρο, ούτε ξέρω pascal. Αλλά σκέψου σε αυτό που έγραψα. Η άσκηση ζητά να ψάξεις τους 4ψήφιους αριθμούς. Δηλ. αυτούς στο διάστημα [1111 , 9999], συνολικά 8889 αριθμοί. Για κάθε αριθμό που ελέγχεις, πρέπει ανάμεσα στα άλλα να λαμβάνεις τα μεμονωμένα ψηφία του και να τα υψώνεις στην 4η δύναμη. Αυτό είναι κάτι που θα το κάνεις για κάθε αριθμό. Αν έχεις βρει από πριν τις 4ες δυνάμεις κάθε ψηφίου (συνολικά 10 ψηφία, δηλ. 10 δυνάμεις) και τις παίρνεις έτοιμες θα κάνεις αυτή την δουλειά μόνον μια φορά. Αλλιώς θα την κάνεις 8889 φορές, όσες και οι αριθμοί που ελέγχεις.... - απο το 1000, οχι το 1111..καταλαβα..σε ευχαριστώ.αλλα τι γίνεται αν δεν μονο στους 4ψήφιους, αλλά απο το 0 μέχρι τον τελευταίο οκταψήφιο?? εννοώ οκ, αποθηκεύω στην αρχή το αποτελεσμα των 10 δυναμεων, αλλά πώς θα πάρω τα ψηφία?
V.I.Smirnov Δημοσ. 12 Νοεμβρίου 2010 Δημοσ. 12 Νοεμβρίου 2010 απο το 1000, οχι το 1111..καταλαβα..σε ευχαριστώ.αλλα τι γίνεται αν δεν μονο στους 4ψήφιους, αλλά απο το 0 μέχρι τον τελευταίο οκταψήφιο?? εννοώ οκ, αποθηκεύω στην αρχή το αποτελεσμα των 10 δυναμεων, αλλά πώς θα πάρω τα ψηφία? Αυτό είναι ένα έμμεσο ζητούμενο της άσκησης και θα πρέπει να το βρεις μόνος σου. Σκέψου το εξής. Το αρχικό στάδιο της λύσης είναι να βρεις πώς θα αποδομείς κάθε αριθμό που σαρώνεις ώστε να έχεις τα ψηφία του. Το αν θα υπολογίζεις κάθε φορά τις δυνάμεις των ψηφίων ή θα τις λαμβάνεις έτοιμες από πίνακα είναι μεταγενέστερο στάδιο της λύσης. Έστω π.χ. ότι δεν αποθηκεύεις τις δυνάμεις. Πώς θα κάνεις τον έλεγχο ; Δεν είναι κάτι που εξαρτάται από την αποθήκευση. Βρες πώς θα κάνεις αυτό - το άλλο είναι πανεύκολο.... (Αν έχω καταλάβει καλά...) -
kopsti Δημοσ. 12 Νοεμβρίου 2010 Μέλος Δημοσ. 12 Νοεμβρίου 2010 σωστά..ευχαριστώ τότε..!θα δω τι μπορώ να κάνω
panosxry Δημοσ. 17 Νοεμβρίου 2010 Δημοσ. 17 Νοεμβρίου 2010 Τελικά κατάφερες να φτιάξεις αποδοτικό αλγόριθμο? [offtopic] τα βρίσκουμε σκούρα συνάδελφε? [/offtopic]
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.