Przerwania w pętli
Instrukcje przerwania pętli to instrukcja continue oraz break. Przy pomocy tych instrukcji można zaniechać wykonania pojedynczego kroku iteracji w pętli lub przerwać wykonanie pętli zanim zostanie spełniony warunek końca powtórzeń pętli.
Działanie instrukcji continue:
- przerywa wykonanie bieżącej iteracji pętli
- dla pętli while lub do- while powoduje skok do testowania warunku końca pętli
- dla pętli for powoduje skok do instrukcji inkrementacji (powtórzeń) i testowanie warunku końca pętli
Działanie instrukcji break powoduje przerwanie wykonywania pętli i skok do pierwszej instrukcji poza pętlą
Do wykonani poniższych ćwiczeń będzie potrzebny generator liczb losowych. W języku C# wywołanie generator liczb losowych jest bardzo proste. W pierwszym kroku deklarujemy zmienną losową, w drugim kroku wywołujemy instrukcję losowania wartości liczbowej. Losowanie może być nieograniczone przedziałem- wtedy nie podajemy żadnego argumentu do funkcji Next.
Wskazówka:
Random los = new Random();
int i=los.Next();
Podanie jednego argumentu powoduje, że losowane są wartości mniejsze niż podany zakres.
Wskazówka:
Random los = new Random();
int i=los.Next(100);
Podanie dwóch argumentów powoduje, że losowane są wartości nie mniejsze niż wartość pierwszego argumentu i mniejsze niż wartość drugiego argumentu
Wskazówka:
Random los = new Random();
int i=los.Next(50,100);
Zad. 1
Napisz program, który z wylosowanych liczb obliczy sumę liczb podzielnych przez 3 oraz wyświetli kolejne wartości sumowane. Zastosuj dowolną pętlę z wykorzystaniem instrukcji continue
Proponowany układ kontrolek
Uwaga: Kontrolki textBox4 oraz textBox5 pracują w trybie Multiline z włączoną opcją przewijania w pionie (ScrollBars = Vertical)
Poniżej kod odpowiedzialny za losowanie
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
Random los = new Random();
int zakres = Convert.ToInt16(textBox2.Text);
int n=Convert.ToInt16(textBox3.Text);
textBox4.Text = null;
for(int j = 0; j < n; j++)
{
int i = los.Next(zakres);
textBox4.AppendText(i.ToString()+Environment.NewLine);
}
}
Skompiluj program i sprawdź efekt działania. Prawidłowo działający program zwraca wylosowane liczby całkowite. Sumowanie liczb podzielnych przez 3 z wykorzystaniem pętli i instrukcji continue przedstawia poniższy schemat blokowy
Wykonujemy sumowanie wylosowanych liczb podzielnych przez 3. Zwróć uwagę w jaki sposób określono w pętli granicę iteracji, czyli jak się odczytuje ilość linii w kontrolce TextBox pracującej w trybie Multiline (j < textBox4.Lines.Count()-1)
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
textBox5.Text = null;
int suma = 0;
for (int j = 0; j < textBox4.Lines.Count()-1; j++)
{
int i = Convert.ToInt16(textBox4.Lines[j].ToString());
if (i % 3 != 0) continue;
textBox5.AppendText(suma.ToString()+"+"+i.ToString());
suma += i;
textBox5.AppendText(" = " + suma.ToString()+Environment.NewLine);
}
}
Sprawdź działanie programu. Poniżej widok na prawidłowo działający program
Zad. 2
Napisz program, który po wylosowaniu dowolnych liczb całkowitych przerwie ich sumowanie w przypadku gdy wartość sumy osiągnie lub przekroczy zadaną wartość. Zastosuj dowolną pętlę, którą przerwiesz instrukcją break;
Proponowany układ kontrolek
Losowanie wartości liczbowych to praktycznie przekopiowany kod z zadania 1, różnice to odwołania do kontrolek typu TextBox. Losowanie podpinamy do zdarzenia Click kontrolki button4
Wskazówka:
private void button4_Click(object sender, EventArgs e)
{
Random los = new Random();
int zakres = Convert.ToInt16(textBox10.Text);
int n = Convert.ToInt16(textBox9.Text);
textBox8.Text = null;
for (int j = 0; j < n; j++)
{
int i = los.Next(zakres);
textBox8.AppendText(i.ToString() + Environment.NewLine);
}
}
Schemat blokowy proponowanego rozwiązania z wykorzystaniem instrukcji break
Rozwiązanie zadnia przedstawia poniższy kod
Wskazówka:
private void button3_Click(object sender, EventArgs e)
{
int granica= Convert.ToInt16(textBox11.Text);
textBox7.Text = null;
int suma = 0;
for (int j = 0; j < textBox8.Lines.Count() - 1; j++)
{
int i = Convert.ToInt16(textBox8.Lines[j].ToString());
textBox7.AppendText(suma.ToString() + "+" + i.ToString());
suma += i;
textBox7.AppendText(" = " + suma.ToString() + Environment.NewLine);
if (suma >= granica) break;
}
}
Skompiluj program i sprawdź efekt działania