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

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

Δημοσ.

Καλησπέρα παίδες! Αντιμετωπίζω ένα πρόβλημα. Η άσκηση είναι η εξής:Δημιουργήστε μια συνάρτηση η οποία θα υπολογίζει τα ψηφία ενός θετικού ακέραιου αριθμού. Π.χ., αν ο αριθμός είναι 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]
Δημοσ.

Σκέφτηκα να κάνω 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. :P)

Δημοσ.

Θα το ξανακοιτάξω με ανοιχτό μυαλό. Ευχαριστώ παίδες


 

Μια γρήγορη λύση (σίγουρα γίνεται καλύτερα)

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 δίνει έναν πίνακα και όχι μια τιμή.

Δημοσ.

 

Καλησπέρα παίδες! Αντιμετωπίζω ένα πρόβλημα. Η άσκηση είναι η εξής:Δημιουργήστε μια συνάρτηση η οποία θα υπολογίζει τα ψηφία ενός θετικού ακέραιου αριθμού. Π.χ., αν ο αριθμός είναι 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)'

 

δεν ειναι σωστή αυτή φίλε,παρεπιπτόντως

 

xJHjG3a.png

 

 

 

Μια μικρή παρένθεση. Σαν καινούργιος στην 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
  • Like 1
Δημοσ.

Μια μικρή παρένθεση. Σαν καινούργιος στην 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 σου.

Δημοσ.

Με την βοήθεια του 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 αλλά δεν με άφηνε. Για ποιο λόγο;

Δημοσ.

Για πολύκλαδη συνάρτηση μπορείς να της επιτρέψεις να δέχετε 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;

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

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

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

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

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

Σύνδεση

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

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