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

schemat iteracji pętla for, while, do- while

Pętla while

Schemat realizacji powtórzeń pętlą while

schemat iteracji pętla

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

schemat iteracji do- while

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

pętla for, while, do- while

Krok 1. Układ komponentów

Kontrolka TabControl ma w sobie zawarte trzy wewnętrzne kontrolki TabPage, które dodajemy jak poniżej:

- osadzamy w obszarze kontrolki GroupBox kontrolkę TabControl

kontrolka TabControl

Właściwości Dock przypisujemy wartość Fill. Kontrolka TabControl wypełni dostępny obszar kontroli GroupBox

-dodajemy wewnętrzne kontrolki TabPage

kontrolka 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

kontrolka Panel visual studio c#

Układ w pozostałych dwóch zakładkach

kontrolki tabPage

Krok 3. Dodajemy tekst informujący użytkownika aplikacji

zawartość Text kontrolek visual studio c#

Wybranym kontrolkom ustawiamy tryb pracy w wielu liniach (Multiline ustaw na True) oraz przypisujemy pionową belkę przewijania (ScrollBars ustaw na Vertical)

tryb multiline Visual studio C#

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

kod ASCII visual studio c#

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

petla do- while visual studio c#

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

pętla while visual studio c#

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++;
            }
        }
    }
}