gon1332 Δημοσ. 26 Μαρτίου 2015 Δημοσ. 26 Μαρτίου 2015 Καλησπέρα παίδες! Αντιμετωπίζω ένα πρόβλημα. Η άσκηση είναι η εξής:Δημιουργήστε μια συνάρτηση η οποία θα υπολογίζει τα ψηφία ενός θετικού ακέραιου αριθμού. Π.χ., αν ο αριθμός είναι 1889, η συνάρτηση θα επιστρέφει 1 8 8 9. Ο κώδικάς μου είναι ο εξής: input('n') while n>0; A=mod(n,10); n=fix(n/10); disp(fliplr(A)) end μου εμφανίζει 9 8 8 1. ΤΙ φταίει; Βασικά με το mod(n, 10), έτσι όπως ξεκινάς υπολογίζεις τα ψηφία από δεξιά προς τα αριστερά. Τυπώνοντάς τα με αυτή τη σειρά, τη σειρά που τα βρίσκεις δηλαδή, έχεις αυτό το α- ποτέλεσμα. 1889 mod 10 = 9 print 9 screen[9] 188 mod 10 = 8 print 8 screen[9 8] 18 mod 10 = 8 print 8 screen[9 8 8] 1 mod 10 = 1 print 1 screen[9 8 8 1]
Stam13 Δημοσ. 26 Μαρτίου 2015 Μέλος Δημοσ. 26 Μαρτίου 2015 Σκέφτηκα να κάνω A=A(end:-1:1) αλλα και παλι δεν βγαινει καμια ιδεα;
gon1332 Δημοσ. 26 Μαρτίου 2015 Δημοσ. 26 Μαρτίου 2015 Σκέφτηκα να κάνω A=A(end:-1:1) αλλα και παλι δεν βγαινει καμια ιδεα; Αυτό με το Α που είπες δε νομίζω να γίνεται. Το Α είναι ένας scalar. Αν αντί να τα κάνεις display τα έβαζες σε μία λίστα και μετά την τύ- πωνες ανάποδα; Μετά παίζει και η αναδρομή αν έχεις μάθει. Σε python γίνεται κάπως έτσι: def print_digits(n): if not isinstance(n, int): return if n > 0: print_digits(n/10) print n%10, print_digits(1889) Παράδειγμα εκτέλεσης. (Απαξιώ να γράψω Matlab. )
melodystyle2003 Δημοσ. 26 Μαρτίου 2015 Δημοσ. 26 Μαρτίου 2015 Μια γρήγορη λύση (σίγουρα γίνεται καλύτερα) n=1889;i=0;while n>0; i=i+1; A=mod(n,10); n=fix(n/10); disp(flip(A)); d(i,=flip(A); end res=flip(d)'
Stam13 Δημοσ. 26 Μαρτίου 2015 Μέλος Δημοσ. 26 Μαρτίου 2015 Θα το ξανακοιτάξω με ανοιχτό μυαλό. Ευχαριστώ παίδες Μια γρήγορη λύση (σίγουρα γίνεται καλύτερα) n=1889;i=0;while n>0; i=i+1; A=mod(n,10); n=fix(n/10); disp(flip(A)); d(i,=flip(A); end res=flip(d)' δεν ειναι σωστή αυτή φίλε,παρεπιπτόντως
dimitris21gr Δημοσ. 28 Μαρτίου 2015 Δημοσ. 28 Μαρτίου 2015 Μια μικρή παρένθεση. Σαν καινούργιος στην Matlab, θέλω να ορίσω και έπειτα να κάνω την γραφική παράσταση μιας 3-κλαδης συνάρτησης Την συνάρτηση την έχω ορίσει έτσι: function y=fun(t) if (t>=0 && t<1) y=t; elseif (t>=1 && t<3) y=1/2*t; else y=0; end end Πως μπορώ να κάνω την γραφική παράσταση; Προσπαθώ με την plot αλλά έχω κάτι προβλήματα με τις συνθήκες στα if επειδή από ότι καταλαβαίνω στο t η plot δίνει έναν πίνακα και όχι μια τιμή.
melodystyle2003 Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 Καλησπέρα παίδες! Αντιμετωπίζω ένα πρόβλημα. Η άσκηση είναι η εξής:Δημιουργήστε μια συνάρτηση η οποία θα υπολογίζει τα ψηφία ενός θετικού ακέραιου αριθμού. Π.χ., αν ο αριθμός είναι 1889, η συνάρτηση θα επιστρέφει 1 8 8 9. Ο κώδικάς μου είναι ο εξής: input('n') while n>0; A=mod(n,10); n=fix(n/10); disp(fliplr(A)) end μου εμφανίζει 9 8 8 1. ΤΙ φταίει; Μια γρήγορη λύση (σίγουρα γίνεται καλύτερα) n=1889;i=0;while n>0;i=i+1; A=mod(n,10); n=fix(n/10); disp(flip(A)); d(i, : )=flip(A); end res=flip(d)' δεν ειναι σωστή αυτή φίλε,παρεπιπτόντως Μια μικρή παρένθεση. Σαν καινούργιος στην Matlab, θέλω να ορίσω και έπειτα να κάνω την γραφική παράσταση μιας 3-κλαδης συνάρτησης Την συνάρτηση την έχω ορίσει έτσι:function y=fun(t)if (t>=0 && t<1) y=t; elseif (t>=1 && t<3) y=1/2*t; else y=0; end end Πως μπορώ να κάνω την γραφική παράσταση; Προσπαθώ με την plot αλλά έχω κάτι προβλήματα με τις συνθήκες στα if επειδή από ότι καταλαβαίνω στο t η plot δίνει έναν πίνακα και όχι μια τιμή. Σου δίνω ένα παράδειγμα να χρησιμοποιήσεις ως βάση. figure(1) for i=1:10 t=sin(rand(1,1)) y=1; if (t>=0 && t<1) y=t; plot(y,t);hold on; elseif (t>=1 && t<3) y=1/2*t; plot(y,t);hold on; else y=0; plot(y,t);hold on; end drawnow end 1
GlenQuagmire Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 Μια μικρή παρένθεση. Σαν καινούργιος στην Matlab, θέλω να ορίσω και έπειτα να κάνω την γραφική παράσταση μιας 3-κλαδης συνάρτησης Την συνάρτηση την έχω ορίσει έτσι: function y=fun(t) if (t>=0 && t<1) y=t; elseif (t>=1 && t<3) y=1/2*t; else y=0; end end Πως μπορώ να κάνω την γραφική παράσταση; Προσπαθώ με την plot αλλά έχω κάτι προβλήματα με τις συνθήκες στα if επειδή από ότι καταλαβαίνω στο t η plot δίνει έναν πίνακα και όχι μια τιμή. Το Matlab για να δουλέψει η Plot θέλει δυο πίνακες ίδιου μήκους. Πιθανότατα γι'αυτό σου βγάζει το error. Δείξε την Plot σου.
dimitris21gr Δημοσ. 29 Μαρτίου 2015 Δημοσ. 29 Μαρτίου 2015 Με την βοήθεια του melodystyle (δίνοντας μου το σκεπτικό) και έχοντας τον ίδιο ορισμό έγραψα και ένα δεύτερο script το οποίο περιέχει τα παρακάτω και τα κατάφερα: h = animatedline; x = linspace(-5,5,100); figure(1) for i = 1:length(x) addpoints(h,x(i),fun(x(i))); drawnow end Η δουλειά μου γίνεται έτσι. Τώρα αν υπάρχει καλύτερος τρόπος δεν ξέρω. Επίσης, υπάρχει κάποιος πιο έξυπνος τρόπος να κάνω και την γραφική παράσταση της fun(2x) ή θα πρέπει να ορίσω νέα function στην matlab; Και ένα τελευταίο. Δοκίμασα τον παραπάνω κώδικα να τον γράψω στο ίδιο .m με τον ορισμό της function αλλά δεν με άφηνε. Για ποιο λόγο;
flik Δημοσ. 30 Μαρτίου 2015 Δημοσ. 30 Μαρτίου 2015 Για πολύκλαδη συνάρτηση μπορείς να της επιτρέψεις να δέχετε arrays. Επομένως θα έχεις for i=1:lenght(x) if x(i) >0 && x(i)<1 y(i) = x(i); else κτλ κτλ έτσι μπορεί να επιστρέψει arrays. Αλλιώς μπορείς να χρησιμοποιήσεις το εξής (δεν θυμάμαι πώς το είχα βρει κάποτε)region1 = x>=0 && x<1 region2 = x>=1&&x<3 y(region1) = x; y(region2) = x/2;
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα