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

Problem z Pętlą

Object Storage Arubacloud
0 głosów
258 wizyt
pytanie zadane 27 maja 2022 w C# przez MisticVoid Początkujący (490 p.)
int n = 12;

int [] tab = new int [n];
Random rand = new Random ();


for (int i = 0; i < tab.Length; i++)
{
    /*if (i <= 3)//0 1 2 3
    {
        tab [i] = rand.Next(-29,30);
    }
    */

    if (i>=4 && i <=7)//4 5 6 7
    {
        int sto = 101;
        while (sto!=0)
        {
            sto -= 1;
            tab[i] = sto;
        }
    }
    
    /*if (i >=8)// 8 9 10 11 
    {
        tab[i] = int.Parse(Console.ReadLine ());
    }*/
}

foreach (var x in tab)
{
    Console.WriteLine(x);
}

Dobry wieczór mam taki kod i nie mam pomysłu czemu nie działa pętla while tzn. nie przypisuje do tablicy liczb. Bardzo proszę o nakierowanie mnie na błąd i z góry dziękuję za pomoc.

komentarz 27 maja 2022 przez Apled Dyskutant (9,520 p.)
Co ten kod ma w ogóle robić?

Pętla while ma działać dopóki zmienna sto jest różna od zera i wrzuca ona w indeks i wartość tej zmiennej, tylko przy każdej iteracji wartość się zmniejsza, aż dojdzie do zera. W efekcie wrzuca do tablicy same zera.

Czy to taki kod, który sam sobie piszesz czy jakieś konkretne zadanie?
komentarz 27 maja 2022 przez MisticVoid Początkujący (490 p.)

Akurat to zadanie jest z kursu ponieważ jestem jeszcze na początkowym etapie nauki i wszystko od czasu do czasu powtarzam. Głównym zadaniem tego kodu jest wstawienie do pierwszych czterech indeksów tablicy wylosowanych liczb do następnych czterech wyniki odejmowania od stu w dół a w ostatnich liczby podane przez użytkownika . Przy czym pierwsze oraz trzecie zadanie działa tak drugie też działa ale nie wiedziałem czemu w ten sposób.smiley 

1 odpowiedź

0 głosów
odpowiedź 28 maja 2022 przez VBService Ekspert (252,740 p.)
edycja 28 maja 2022 przez VBService

następnych czterech wyniki odejmowania od stu w dół

Jeżeli dobrze rozumiem treść zadania to pętla while w tym kontekście jest zbędą

zapisz ją sobie tak i zobacz po wynikach na ekranie co się dzieje.  smiley

[ on-line ]

    for (int i=0; i<tab.Length; i++)
    {
        /*
        if (i<=3) // 0 1 2 3
        {
            tab[i] = rand.Next(-29,30);
        }
        */
 
        if (i>=4 && i<=7) // 4 5 6 7
        {
            int sto = 101;
            while (sto!=0)
            {
                sto -= 1;
                tab[i] = sto;
                Console.WriteLine("tab[" + i + "] = " + sto);
            }
        }
     
        /*
        if (i>=8) // 8 9 10 11 
        {
            tab[i] = int.Parse(Console.ReadLine());
        }
        */
    }

 

gdy i przyjmuje wartość 4 to w pętli while pozycja w tablicy tab o indeksie 4 jest nadpisywana, aż do momentu osiągnięcia wartości zero przez zmienną sto (analogicznie się dzieje dla i = 5, 6, 7)

Druga sprawa w tym zapisie

    for (int i=0; i<tab.Length; i++)
    {
        if (i<=3) // 0 1 2 3
        {
            tab[i] = rand.Next(-29,30);
        }
 
        if (i>=4 && i<=7) // 4 5 6 7
        {
            int sto = 101;
            while (sto!=0)
            {
                sto -= 1;
                tab[i] = sto;
                Console.WriteLine("tab[" + i + "] = " + sto);
            }
        }
     
        if (i>=8) // 8 9 10 11 
        {
            tab[i] = int.Parse(Console.ReadLine());
        }
    }

przy każdej inkrementacji zmiennej i są sprawdzane wszystkie warunki, IMO w tym kontekście jeżeli jeden warunek jest spełniony reszta powinna być pominięta, czyli np.

    for (int i=0; i<tab.Length; i++)
    {
        if (i<=3) // 0 1 2 3
        {
            tab[i] = rand.Next(-29,30);
        }
        else if (i>=4 && i<=7) // 4 5 6 7
        {
            int sto = 101;
            while (sto!=0)
            {
                sto -= 1;
                tab[i] = sto;
                Console.WriteLine("tab[" + i + "] = " + sto);
            }
        }
        else if (i>=8) // 8 9 10 11 
        {
            tab[i] = int.Parse(Console.ReadLine());
        }
    }

 

propozycja zmian  [ on-line ]

using System;

class HelloWorld {
  static void Main() {
    int n=12, sto=100;
 
    int [] tab = new int[n];
    Random rand = new Random();
 
 
    for (int i=0; i<tab.Length; i++)
    {
        if (i<=3) // 0 1 2 3
        {
            tab[i] = rand.Next(-29,30);
        }
        else if (i>=4 && i<=7) // 4 5 6 7
        {
            tab[i] = sto--;
        }
        else if (i>=8) // 8 9 10 11 
        {
            tab[i] = int.Parse(Console.ReadLine());
        }
    }
    
    Console.WriteLine();
 
    foreach (var x in tab)
    {
        Console.WriteLine(x);
    }

  }
}

 

 

P.S. int sto = 101  smiley chyba sto_jeden

            int sto = 100;
            while (sto!=0)
            {
                tab[i] = sto;
                sto -= 1;
            }

albo po prostu użyć: Pre- & Post Increment in C#

            int sto = 100;
            while (sto!=0)
            {
                tab[i] = sto--;
            }

 

wink  How to use ternary operator in C#

for (int i=0; i<tab.Length; i++)
{
    tab[i] = (i<=3) ? rand.Next(-29,30) : ((i>=8) ? int.Parse(Console.ReadLine()) : sto--);
}

// lub

for (int i=0; i<tab.Length; i++)
    tab[i] = (i<=3) ? rand.Next(-29,30) : ((i>=8) ? int.Parse(Console.ReadLine()) : sto--);

 

Podobne pytania

0 głosów
1 odpowiedź 143 wizyt
pytanie zadane 20 maja 2020 w C# przez AgentTecza Obywatel (1,810 p.)
+1 głos
3 odpowiedzi 313 wizyt
pytanie zadane 13 stycznia 2021 w C# przez kubaa322 Użytkownik (710 p.)
0 głosów
1 odpowiedź 220 wizyt
pytanie zadane 24 lipca 2021 w C i C++ przez Bartusio445 Początkujący (290 p.)

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

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

...