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

C# while loop dodawanie

Object Storage Arubacloud
0 głosów
367 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ź 520 wizyt
pytanie zadane 1 kwietnia 2020 w C# przez Antoni2 Nowicjusz (160 p.)
0 głosów
1 odpowiedź 449 wizyt
pytanie zadane 25 grudnia 2016 w C# przez matilogias Obywatel (1,550 p.)
0 głosów
1 odpowiedź 453 wizyt
pytanie zadane 25 marca 2020 w C i C++ przez Ola_00 Nowicjusz (210 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...