• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# while loop dodawanie

VPS Starter Arubacloud
0 głosów
452 wizyt
pytanie zadane 5 listopada 2016 w C# przez Alex.Ironside Stary wyjadacz (14,900 p.)

Witam. Zrobilem zadanie w petli for ale chce zeby zrobilo to samo z petla while. W skrocie chodzi o to zeby uzytkownik wprowadzil start petli jej koniec i o ile zwiekszac, a petla ma sie zsumowac

        private List<int> Looping(List<int> LoopParam)
        {
            var LoopSum = new List<int>();
            LoopSum.Add(0);
            LoopSum.Add(0);
            for (;LoopParam[0]<=LoopParam[1];LoopParam[0]+=LoopParam[2])
            {
                LoopSum[0]+=LoopParam[0];//Counting the score
            }
            for(;LoopParam[3]<= LoopParam[4]; LoopParam[3] += LoopParam[5])//Let's make the loop even more efficient!
            {
                LoopSum[1]+=LoopParam[3];//Counting the score
            }
            return LoopSum;
        }//Do the loop and summarize

Moja petla while:

        private List<int> LoopingWhile(List<int> LoopParam)
        {
            var Sum = new List<int>();
            Sum.Add(0);
            Sum.Add(0);
            while(LoopParam[0]<LoopParam[1])
            {
                LoopParam[0] += LoopParam[2];
                Sum[0] += LoopParam[0];
            }
            while (LoopParam[3]<LoopParam[4])
            {
                LoopParam[3] += LoopParam[5];
                Sum[1] += LoopParam[3];
            }
            return Sum;
        }

Wrzystkie zmienne sa przekazywane. Problem jest jedynie z dodawaniem.

1 odpowiedź

0 głosów
odpowiedź 6 listopada 2016 przez siof Gaduła (3,560 p.)
wybrane 13 listopada 2016 przez Alex.Ironside
 
Najlepsza

Żeby te pętle działały identycznie musisz sprawić aby zachowywały się tak samo.

Ogólna definicja pętli for:

for (a; b; c)
{
    ...
}

 może być zamieniona na pętlę while w taki sposób:

a;
while (b)
{
    ...

    c;
}

U Ciebie w stosunku do powyższego są 2 błędy. Pierwszy polega na błędnym warunku stopu pętli while a drugi na błędnym miejscu zwiększania parametru na podstawie którego leci pętla (z tego powodu po poprawie pierwszego elementu suma nie byłaby prawidłowa).

 

Edit w celu dopowiedzenia o drugim błędzie: 3 parametr pętli for jest wykonywany w momencie zakończenia kodu pomiędzy nawiasami klamrowymi a nie na jego początku ;)

komentarz 9 listopada 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
A cos dokladniej by sie dalo? :D
1
komentarz 9 listopada 2016 przez siof Gaduła (3,560 p.)

jasne, podam Ci przykład przerobienia pierwszej z dwóch pętli które masz

Twoja pętla for wygląda tak:

    for (;LoopParam[0]<=LoopParam[1];LoopParam[0]+=LoopParam[2])
    {
        LoopSum[0]+=LoopParam[0];//Counting the score
    }

Podana przeze definicja przeniesienia na while:

for (a; b; c)
{
    ...
}

a;
while (b)
{
    ...
 
    c;
}

Jak widzimy w Twojej pętli pierwszy parametr pętli for (czyli 'a') jest nieobecny więc go pomijamy.

Drugim parametrem Twojej pętli jest LoopParam[0]<=LoopParam[1] - to będzie nasze 'b'.

Trzecim parametrem jest LoopParam[0]+=LoopParam[2] - to będzie nasze 'c'.

Po podstawieniu do powyższego 'wzoru' pętli while wychodzi nam coś takiego:

while(LoopParam[0] <= LoopParam[1])
{
    ...

    LoopParam[0] += LoopParam[2];
}

Teraz pozostaje nam przenieść jedynie wnętrze pętli for do pętli while. Kod ten przenosimy w miejsce '...' i wychodzi nam poniższa pętla:

while(LoopParam[0] <= LoopParam[1])
{
    LoopSum[0]+=LoopParam[0]; //Counting the score

    LoopParam[0] += LoopParam[2];
}

Czy teraz wszystko zrozumiałe ? :)

1
komentarz 10 listopada 2016 przez siof Gaduła (3,560 p.)

Jeszcze dodam wyjaśnienie działania parametrów pętli for.

Jak widać w poniższym wzorze:

for (a; b; c)
{
    ...
}

w pętli for mamy 3 parametry oraz 'ciało' pętli ( które jest przedstawione jako '...' ).

Proste wyjaśnienie działania parametrów pętli for:

  • Kod z parametru 'a' wykonuje się generalnie przed zaczęciem wykonywania się pętli i wykonuje się tylko 1 raz
  • Kod z parametru 'b' wykonuje się przed każdym rozpoczęciem wykonywania się ciała pętli (i jeśli zwróci true to się wykona a jak nie to zakończy działanie pętli)
  • Kod z parametru 'c' wykonuje się po każdym wykonaniu się ciała pętli

Czyli generalnie wykonywanie się wygląda mniej więcej w takiej kolejności:

  1. a
  2. b
  3. ...
  4. c
  5. b
  6. ...
  7. c
  8. b
  9. ...
  10. c
  11. i tak dalej i tak dalej aż się skończy wykonywanie pętli

Oczywiście w powyższym ... to jest ciało pętli.

Mam nadzieje że w miare zrozumiale opisane ;)

 

komentarz 13 listopada 2016 przez Alex.Ironside Stary wyjadacz (14,900 p.)
No w sumie ma sens. Dzieki!

Podobne pytania

0 głosów
1 odpowiedź 688 wizyt
pytanie zadane 1 kwietnia 2020 w C# przez Antoni2 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 475 wizyt
pytanie zadane 25 grudnia 2016 w C# przez matilogias Obywatel (1,550 p.)
0 głosów
1 odpowiedź 547 wizyt
pytanie zadane 25 marca 2020 w C i C++ przez Ola_00 Nowicjusz (210 p.)

92,973 zapytań

141,937 odpowiedzi

321,171 komentarzy

62,301 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...