Iteracje. Pętla for, do-while, while
Przez iterację rozumiemy powtarzanie instrukcji określoną ilość razy. W językach programowania możemy zrealizować te powtórzenia pętlami i rekurencjami. Rozróżniamy pętlę for, while i do- while.
Petla for
Schemat realizacji powtórzeń pętlą for przedstawia poniższa ilustracja
Pętla while
Schemat realizacji powtórzeń pętlą while
Petla do- while
Schemat realizacji powtórzeń pętlą do- while. Pętla ta w stosunku do innych zawsze wykona co najmniej raz zadane instrukcje, niezależnie od tego czy postawiony warunek jest spełniony
Cel: Napisz aplikację, która wyświetli kody znaków, obliczy kwadraty kolejnych n liczb oraz część całkowitą i resztę z dzielenia przez podaną wartość dla n kolejnych liczb
Krok 1. Układ komponentów
- GroupBox- sztuk 1
- TabControl- sztuk 1
- TabPage- sztuk 3 (powstaje w wyniku dodania zakładki w kontrolce TabControl)
- Panel- sztuk 3
- Button- sztuk 3
- Label- sztuk 4
- TextBox- sztuk 7
Kontrolka TabControl ma w sobie zawarte trzy wewnętrzne kontrolki TabPage, które dodajemy jak poniżej:
- osadzamy w obszarze kontrolki GroupBox kontrolkę TabControl
Właściwości Dock przypisujemy wartość Fill. Kontrolka TabControl wypełni dostępny obszar kontroli GroupBox
-dodajemy wewnętrzne kontrolki TabPage
Krok 2. Układ kontrolek na dodanych zakładkach TabPage
Zakładki służą oddzieleniu funkcji działania aplikacji. Ich zawartość jest zbliżona. Proponowany układ kontrolek
Układ w pozostałych dwóch zakładkach
Krok 3. Dodajemy tekst informujący użytkownika aplikacji
Wybranym kontrolkom ustawiamy tryb pracy w wielu liniach (Multiline ustaw na True) oraz przypisujemy pionową belkę przewijania (ScrollBars ustaw na Vertical)
Krok 4. Znaki kodu ASCII i nie tylko
W kodzie przyjęto standardowe nazwy dodanych kontrolek. Poniższy kod jest zawartością zdarzenia Click przycisku button1. Kod realizuje wypełnienie kontrolki textBox2 symbolami znaków z podanego zakresu. Wypełnienie jest przykładem użycia pętli for
Wskazówka:
private void button1_Click(object sender, EventArgs e)
{
string s;
if (textBox1.Text == "") return;
int n = Convert.ToInt16(textBox1.Text);
textBox2.Clear();
for(int i = 0; i <n; i++)
{
s = "Znak nr " + i.ToString() + " to " + (char)i;
textBox2.AppendText(s + Environment.NewLine);
}
}
Skompiluj program i sprawdź efekt działania. Prawidłowo działająca aplikacja zachowuje się jak poniżej
Krok 5. Obliczamy kwadraty kolejnych n liczb całkowitych
Kwadrat kolejnych liczb z zakresu podanego z klawiatury jest zrealizowany poprzez wykorzystanie pętli do- while. Zdarzenie Click przycisku button2 zawiera poniższy kod
Wskazówka:
private void button2_Click(object sender, EventArgs e)
{
string s;
if (textBox3.Text == "") return;
int n = Convert.ToInt16(textBox3.Text);
if (n > 256) n = 256;
textBox5.Clear();
int i = 0;
do
{
i++;
s = i.ToString() + " x " + i.ToString() + "=" + (i * i).ToString();
textBox5.AppendText(s + Environment.NewLine);
} while (i < n);
}
Skompiluj program i sprawdź efekt działania. Prawidłowo działająca aplikacja zachowuje się jak poniżej
Krok 6. Obliczamy część całkowitą i resztę z dzielenia dla liczb z wybranego zakresu
To zadanie jest dla przykładu zrealizowane pętlą while. Zdarzenie Click przycisku button3 zawiera poniższe linie kodu
Wskazówka:
private void button3_Click(object sender, EventArgs e)
{
string s;
if (textBox4.Text == "" || textBox7.Text=="" || textBox7.Text=="0") return;
int n = Convert.ToInt16(textBox4.Text);
if (n > 256) n = 256;
int b= Convert.ToInt16(textBox7.Text);
//wstepne wartosci czesci calkowitej i reszty z dzielenia
int c = 0, r = 0;
int i = 1;
textBox6.Clear();
while (i <= n)
{
c = i / b;
r = i % b;
s = i.ToString() + "/" + b.ToString() + "=" + c.ToString() + "; "
+ i.ToString() + "%" + b.ToString() + "=" + r.ToString();
textBox6.AppendText(s+Environment.NewLine);
i++;
}
}
Skompiluj program i sprawdź efekt działania. Prawidłowo działająca aplikacja zachowuje się jak poniżej
Pełny kod utworzonej aplikacji
Zawartośc pliku Form1.cs
Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace petle
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string s;
if (textBox1.Text == "") return;
int n = Convert.ToInt16(textBox1.Text);
textBox2.Clear();
for(int i = 0; i <n; i++)
{
s = "Znak nr " + i.ToString() + " to " + (char)i;
textBox2.AppendText(s + Environment.NewLine);
}
}
private void button2_Click(object sender, EventArgs e)
{
string s;
if (textBox3.Text == "") return;
int n = Convert.ToInt16(textBox3.Text);
if (n > 256) n = 256;
textBox5.Clear();
int i = 0;
do
{
i++;
s = i.ToString() + " x " + i.ToString() + "=" + (i * i).ToString();
textBox5.AppendText(s + Environment.NewLine);
} while (i < n);
}
private void button3_Click(object sender, EventArgs e)
{
string s;
if (textBox4.Text == "" || textBox7.Text=="" || textBox7.Text=="0") return;
int n = Convert.ToInt16(textBox4.Text);
if (n > 256) n = 256;
int b= Convert.ToInt16(textBox7.Text);
//wstepne wartosci czesci calkowitej i reszty z dzielenia
int c = 0, r = 0;
int i = 1;
textBox6.Clear();
while (i <= n)
{
c = i / b;
r = i % b;
s = i.ToString() + "/" + b.ToString() + "=" + c.ToString() + "; "
+ i.ToString() + "%" + b.ToString() + "=" + r.ToString();
textBox6.AppendText(s+Environment.NewLine);
i++;
}
}
}
}