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

question-closed Nie rozumiem przykładu z wykorzystaniem pętli.

Object Storage Arubacloud
+1 głos
305 wizyt
pytanie zadane 4 stycznia 2022 w C# przez niezalogowany
zamknięte 5 stycznia 2022

Nie rozumiem działania pętli wewnętrznej dokładnie warunku.

Dlaczego po wypisaniu litery j program dalej się wykonuje przecież pętla ma zwiększać wartość zmiennej o 1 więc powinna zwiększyć do k  i się nie wykonać bo k < k.

 

 

for (int row = 1; row < 11; row++)
{
  for (char column = 'a'; column < 'k'; column++)
  {
    Console.WriteLine($"The cell is ({row}, {column})");
  }
}

 

komentarz zamknięcia: Odpowiedź która mi pomogła.

4 odpowiedzi

0 głosów
odpowiedź 4 stycznia 2022 przez k222 Nałogowiec (30,150 p.)

Output programu (warto dorzucić na przyszłość):

The cell is (1, a)
The cell is (1, b)
The cell is (1, c)
The cell is (1, d)
The cell is (1, e)
The cell is (1, f)
The cell is (1, g)
The cell is (1, h)
The cell is (1, i)
The cell is (1, j)
The cell is (2, a)
The cell is (2, b)
The cell is (2, c)
The cell is (2, d)
The cell is (2, e)
The cell is (2, f)
The cell is (2, g)
The cell is (2, h)
The cell is (2, i)
The cell is (2, j)
The cell is (3, a)
The cell is (3, b)
The cell is (3, c)
The cell is (3, d)
The cell is (3, e)
The cell is (3, f)
The cell is (3, g)
The cell is (3, h)
The cell is (3, i)
The cell is (3, j)
The cell is (4, a)
The cell is (4, b)
The cell is (4, c)
The cell is (4, d)
The cell is (4, e)
The cell is (4, f)
The cell is (4, g)
The cell is (4, h)
The cell is (4, i)
The cell is (4, j)
The cell is (5, a)
The cell is (5, b)
The cell is (5, c)
The cell is (5, d)
The cell is (5, e)
The cell is (5, f)
The cell is (5, g)
The cell is (5, h)
The cell is (5, i)
The cell is (5, j)
The cell is (6, a)
The cell is (6, b)
The cell is (6, c)
The cell is (6, d)
The cell is (6, e)
The cell is (6, f)
The cell is (6, g)
The cell is (6, h)
The cell is (6, i)
The cell is (6, j)
The cell is (7, a)
The cell is (7, b)
The cell is (7, c)
The cell is (7, d)
The cell is (7, e)
The cell is (7, f)
The cell is (7, g)
The cell is (7, h)
The cell is (7, i)
The cell is (7, j)
The cell is (8, a)
The cell is (8, b)
The cell is (8, c)
The cell is (8, d)
The cell is (8, e)
The cell is (8, f)
The cell is (8, g)
The cell is (8, h)
The cell is (8, i)
The cell is (8, j)
The cell is (9, a)
The cell is (9, b)
The cell is (9, c)
The cell is (9, d)
The cell is (9, e)
The cell is (9, f)
The cell is (9, g)
The cell is (9, h)
The cell is (9, i)
The cell is (9, j)
The cell is (10, a)
The cell is (10, b)
The cell is (10, c)
The cell is (10, d)
The cell is (10, e)
The cell is (10, f)
The cell is (10, g)
The cell is (10, h)
The cell is (10, i)
The cell is (10, j)

Dlaczego po wypisaniu litery j program dalej się wykonuje przecież pętla ma zwiększać wartość zmiennej o 1 więc powinna zwiększyć do k  i się nie wykonać bo k < k.

W tym zdaniu jest jedna prawdziwa rzecz - pętla ma zwiększać wartość zmiennej o 1 więc powinna zwiększyć do k  i się nie wykonać bo k < k. - tak się też dzieje, pętla wewnętrzna (z itratorem column) zwiększa się od 'a' do 'j'. Kwestia w tym, że mamy tutaj pętlę w pętli, więc pętla wewnętrzna wykona się 11 razu od początku - ad 'a', do końca ' do 'j'. za kążdym razem przy 'k' się skończy. Na danych można to podzielić tak:

== tu zaczyna się pętla zewnętrzna ==
-- row = 1 --
== tu zaczyna się pętla wewnętrzna ==
-- cell = a --
The cell is (1, a)
-- cell = b --
The cell is (1, b)
-- cell = c --
The cell is (1, c)
-- cell = d --
The cell is (1, d)
-- cell = e --
The cell is (1, e)
-- cell = f --
The cell is (1, f)
-- cell = g --
The cell is (1, g)
-- cell = h --
The cell is (1, h)
-- cell = i --
The cell is (1, i)
-- cell = j --
The cell is (1, j)
-- cell = k  - poza zakresem, kończymy--
== tu kończy się pętla wewnętrzna ==


-- row = 2 --
== tu zaczyna się pętla wewnętrzna ==
-- cell = a --
The cell is (1, a)
-- cell = b --
The cell is (1, b)
-- cell = c --
The cell is (1, c)
-- cell = d --
The cell is (1, d)
-- cell = e --
The cell is (1, e)
-- cell = f --
The cell is (1, f)
-- cell = g --
The cell is (1, g)
-- cell = h --
The cell is (1, h)
-- cell = i --
The cell is (1, i)
-- cell = j --
The cell is (1, j)
-- cell = k  - poza zakresem, kończymy--
== tu kończy się pętla wewnętrzna ==
...

-- row = 10 --
== tu zaczyna się pętla wewnętrzna ==
-- cell = a --
The cell is (1, a)
-- cell = b --
The cell is (1, b)
-- cell = c --
The cell is (1, c)
-- cell = d --
The cell is (1, d)
-- cell = e --
The cell is (1, e)
-- cell = f --
The cell is (1, f)
-- cell = g --
The cell is (1, g)
-- cell = h --
The cell is (1, h)
-- cell = i --
The cell is (1, i)
-- cell = j --
The cell is (1, j)
-- cell = k  - poza zakresem, kończymy--
== tu kończy się pętla wewnętrzna ==

-- row = 11 - poza zakressem, kończymy --
== tu kończy się pętla zewnętrzna ==

 

komentarz 4 stycznia 2022 przez niezalogowany
Przy pierwszym wykonaniu pętli wewnętrznej do zmiennej jest dodawana litera k w takim razie dlaczego pętla wewnętrzna wykona się kolejny raz jak w zmiennnej jest litera  k  a nie a.
0 głosów
odpowiedź 5 stycznia 2022 przez niezalogowany
Podbijam
0 głosów
odpowiedź 5 stycznia 2022 przez Wiciorny Ekspert (270,190 p.)

nigdzie do zmiennej nie jest dodawana litera K. Tak jak opisałeś w komentarzu zmienna column jest inkrementowana, a jest ona literą alfabetu ... litery alfabetu mają swoje wartości numeryczne w tablicy ASCII 

Tutaj masz link do wartości https://www.asciitable.com/
https://www.bryk.pl/wypracowania/pozostale/informatyka/15912-tabela-znakow-w-standardowych-kodach-ascii.html 

for (char column = 'a'; column < 'k'; column++)  // column++ inkrementacja 
// column = 'a' to przypisanie 
//  column < 'k' warunek logiczny a nie przypisanie 

zatem  column = 'a' = > ma wartość 161 jeśli zostanie inkrementowana bedzie to 162 co daje reprezentacje 'b', dalej c 163 ... itd 
Warunek jest 
column < 'k'; K ma wartość 171, zatem... do momentu kiedy nie będzie to 171 wewnętrzna pętla się wykonuje dla jednej iteracji zewnętrznej 

 

0 głosów
odpowiedź 5 stycznia 2022 przez VBService Ekspert (253,400 p.)
edycja 6 stycznia 2022 przez VBService

Przy pierwszym wykonaniu pętli wewnętrznej do zmiennej jest dodawana litera k w takim razie dlaczego pętla wewnętrzna wykona się kolejny raz jak w zmiennnej jest litera  k  a nie a.

wywołanie pętli wewnątrz innej pętli powoduje inicjalizowanie zmiennych wewnętrznej pętli "od nowa" za każdym wywołaniem, czyli dla

row = 1
column = a

następuje inkrementacja columncolumn = bcolumn = c, ... column = j - koniec pętli wewnętrznej

inkrementacja pętli zewnętrznej (w tym przypadku, można ją nazwać też np. główna)

row2
column = a 

ponowne zainicjalizowane zmiennej column, według  for (char column = 'a'; ...

itd.

 

przykład  ( on-line )

using System;

class HelloLoop {
    static void Main() {
        for (int i=1; i<11; i++)
        {
            Console.Write("Dla i={0,2} : ", i);
            
            for (int j=1; j<11; j++)
                Console.Write("j={0} ", j);
            
            Console.WriteLine();       
        }
    }
}

 

komentarz 5 stycznia 2022 przez niezalogowany
Dzęki za pomoc zamykam temat.

Podobne pytania

0 głosów
0 odpowiedzi 1,781 wizyt
0 głosów
1 odpowiedź 855 wizyt
pytanie zadane 8 września 2021 w C i C++ przez Piotr Zenger Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 3,165 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez de1vee Nowicjusz (220 p.)

92,579 zapytań

141,432 odpowiedzi

319,657 komentarzy

61,963 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!

...