Potrzebuję pomocy w zrozumieniu działania pętli "while"

0

Witam, potrzebuję pomocy w zrozumieniu działania pętli "while".

Zadanie, które sobie postawiłem do wykonania jest następujące:

Mam funkcję określoną wzorem:

screenshot-20180524235146.png

Początkowa wartość funkcji "lambda zi" jest równa dajmy na to 35.
Chciałbym, żeby funkcja wykonywała się tak długo dopóki jej wartość nie wzrośnie do 120.
Za każdym razem zwiększając jedynie "i" od wartości początkowej 1 ze skokiem "+1"

Czyli chodzi mi o uzyskanie takiego rezultatu:

screenshot-20180525000159.png

Prosiłbym o napisanie przykładowej pętli w dowolnym języku z jakimś krótkim objaśnieniem, niestety poradniki w internecie dotyczące pętli while jakoś do mnie nie trafiają ;/

P.S Nie mam zamiaru pracować ani uczyć się programowania, także nie musicie hejtować, jednorazowy projekt w matlabie :P

1

Proszę bardzo, tak to idzie:

 lambda_z_i = 0;
    a = 35;
    z = 10;
    i = 1;
    while lambda_z_i < 120:
        lambda_z_i = a + i * z;
        i += 1;

    print i, lambda_z_i

W pętli zwiększa sie zmienna lambda_z_i, a a i z to parametry ustwaiane na początku iteracji.

1

Początkowa wartość funkcji "lambda zi" jest równa dajmy na to 35.

Tu chyba błąd, chyba powinno być "lambda A" (jak podałeś w przykładach). Dalej będę pisać lambda_A. Jednocześnie mam wątpliwości, czy delta lambda z nie powinna być rozpatrywana raz z minusem, a drugi raz z plusem.

Nie programowałem w Matlabie, ale zgodnie z tym: https://www.tutorialspoint.com/matlab/matlab_while_loop.htm, to pętla while wyglądałaby w Matlabie tak:

lambda_A = 35; % tu podstawiasz wartość początkową zmiennej lambda_A
delta = ...; % tu ustawiasz wartość zmiennej delta lambda z (jak wnioskuję z podanego przykładu, jest stała)
i = 1; % tu ustawiasz wartość początkową licznika
lambda_z = lambda_A + i * delta; % tu ustawiasz wartość początkową zmiennej lambda_Z, by mogła zostać porównana przy pierwszym obiegu pętli – inaczej nie miałaby, hm, żadnej wartości (nie wiem, jak się nazywa w Matlabie brak wartości zmiennej)

while (lambda_z < 120) % dopóki zmienna lambda_z jest mniejsza niż 120
    i = i + 1; % zwiększamy wartość zmiennej i (licznika), dodając 1 do jej poprzedniej wartości i przypisując wynik dodawania do niej samej
    lambda_z = lambda_A + i * delta; % przypisujemy zmiennej lambda_z nową wartość, zgodnie ze wzorem

Nie mam zamiaru pracować ani uczyć się programowania

A może jednak? Co stoi na przeszkodzie? :) Może sam Matlab/Scilab będzie/jest fajny?

0

Dziękuję za pomoc, pętla faktycznie działa ale chyba nie tak jak chciałem ;/ W wyniku otrzymałem tylko jedną wartość

 lambda_a = 35;
 delta = 10;
 i = 1;
 lambda_z_i = lambda_a + i * delta
while (lambda_z_i < 120)
     i = i + 1;
     lambda_z_i = lambda_A + i * delta;
end

A chodziło mi o to, żeby program pokazał wszystkie wartości wynikowe czyli w przypadku powyższej pętli 35, 45, 55, 65. Chyba powinienem zastosować inną pętlę?

1

Wstaw sobie print w pętli.

0

Po raz kolejny zadziałało, dziękuje, jesteście nieocenieni :D
Myślę, że ostatnie pytanie, po wykonaniu takiej pętli i wydruku wyników matlab zwraca mi o jeden wynik za dużo. tj. podaje mi wynik 125, który jest większy od zadeklarowanego (120). Da się to jakoś obejść, żeby ostatnim prezentowanym wynikem było 115?

 lambda_A=35;  
 delta = 10;
 i = 0;
 lambda_z_i = lambda_A + i * delta;
 
while (lambda_z_i < 120)
     i = i + 1;
     lambda_z_i = lambda_A + i * delta;
     fprintf('Punty 1:): %.4f \n', lambda_z_i);
     r=(lambda_w)-(lambda_z_i);
     fi_z_i= atand(tand(fi_w)*cosd(r));
     fprintf('Punty 2:): %.4f \n', fi_z_i);
      
end
1

możesz zamienić

while (lambda_z_i < 120)

na

while (lambda_z_i < 120 - delta)
0

Spróbuj wyświetlić przed obliczeniem nowej wartości lambda_z – po prostu zamień linijki miejscami. Tylko pamiętaj, że wtedy fi_z_i będzie wyświetlać trochę inny ciąg wartości.

while (lambda_z_i < 120)
    fprintf('Punty 1:): %.4f \n', lambda_z_i);
    r=(lambda_w)-(lambda_z_i);
    fi_z_i= atand(tand(fi_w)*cosd(r));
    fprintf('Punty 2:): %.4f \n', fi_z_i);
    i = i + 1;
    lambda_z_i = lambda_A + i * delta;
end

EDIT: Nie, to głupie, ponieważ jeśli coś zależy od lambda_z, to będzie pobierało inną wartość niż wyświetlana.

0

Zaproponowany sposób użycia pętli while nie spełnia chyba założeń z pierwszego postu.
Proponuję zrobić to tak:

do {
     lambda_z_i = lambda_A + i * delta;
     i = i + 1;		
} while (lambda_z_i < 120);

Edit: też będzie źle ;-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1