• 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.

VPS Starter Arubacloud
+1 głos
282 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 (269,120 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 (251,210 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,760 wizyt
0 głosów
1 odpowiedź 794 wizyt
pytanie zadane 8 września 2021 w C i C++ przez Piotr Zenger Nowicjusz (120 p.)
0 głosów
4 odpowiedzi 3,076 wizyt
pytanie zadane 27 lutego 2019 w C i C++ przez de1vee Nowicjusz (220 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...