Instrukcje iteracyjne w C#
Opracował dr Robert Fidytek
Pętle
Często mamy do czynienia z sytuacją, że
pewną instrukcję lub grupę instrukcji należy
wykonać pewną określoną liczbę razy lub aż
zostanie spełniony pewien warunek.
W takich sytuacjach z pomocą przychodzą nam
pętle, które nazywane są również instrukcjami
iteracyjnymi. Wyróżniamy następujące rodzaje
pętli:
for
while
do - while
foreach
W przypadku pętli istnieje niebezpieczeństwo, że się zapętli. Instrukcje są wykonywane
w nieskończonej pętli z powodu podania złego warunku wyjścia z pętli.
2
Pętla for
Postać pętli:
for (instrukcja1; warunek; instrukcja2)
Instrukcja3;
Schemat działania:
Na początku wykonywana jest instrukcja1. Jest ona
wykonywana tylko raz, podczas rozpoczęcia działania
pętli. Następnie jest sprawdzana wartość wyrażenia
logicznego warunek. Gdy warunek ma wartość false
wykonanie pętli zostaje zakończone.Gdy warunek ma
wartość true, to program przechodzi do wykonania
instrukcji instrukcja3, a dopiero potem wykonuje
instrukcję instrukcja2. Po wykonaniu instrukcji
instrukcja2 ponownie przechodzimy do sprawdzenia
wartości wyrażenia logicznego warunek i w zależności
od jego wartości kontynuujemy wykonanie pętli lub nie.
Proszę zauważyć, że instrukcja1 nie jest wykonywana
ponownie.
3
Uwaga: instrukcja1 najczęściej inicjuje licznik pętli, a
instrukcja2 definiuje sposób zmiany licznika pętli.
Wybrakowana pętla for ???
for (instrukcja1; warunek; instrukcja2)
for (; warunek; instrukcja2)
instrukcja3;
Instrukcja3;
for (instrukcja1; warunek; instrukcja2)
for (instrukcja1; warunek;)
{
instrukcja3;
instrukcja3;
}
for (; warunek; instrukcja2) ;
for (instrukcja1; warunek; instrukcja2)
for (; warunek;)
{
instrukcja3;
instrukcja3_1;
instrukcja3_2;
for (; warunek; ) ;
...
instrukcja3_n;
for (; ;) ;
}
4
Proste użycie pętli for
int i;
for (i = 1; i <= 10; i++)
Console.Write("{0}, ",i);
int i;
for (i = 10; i >= 1; i--)
Console.Write("{0}, ",i);
int i;
for (i = 10; i >= 1; i-=3)
Console.Write("{0}, ",i);
5
Zagnieżdżanie pętli for
//rysowanie prostokąta
int a = 3, b = 10, i, j;
for (i = 1; i <= a; i++)
{
for (j = 1; j <= b; j++)
Console.Write("*");
Console.WriteLine("");
}
//tabliczka mnożenia
int i, j;
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= 10; j++)
Console.Write("{0,3} ",i*j);
Console.WriteLine("");
}
6
Przykład: Obliczanie silni
int silnia = 1, i, n;
Console.Write("Podaj n = ");
n=Convert.ToInt32(Console.ReadLine());
for (i = 1; i <= n; i++)
silnia *= i;
Console.WriteLine("{0}!={1}",n,silnia);
Czy program dobrze
liczy wartość silni dla
ujemnych wartości
liczby n?
n!=1*2*3*4*...*n
Jak to naprawić?
7
Instrukcje oddzielone przecinkami ?!
for (instrukcja1; warunek; instrukcja2)
Instrukcja3;
Instrukcje instrukcja1 i instrukcja2 nie muszą być
pojedynczą instrukcją. Może być ich kilka, wtedy
poszczególne instrukcje oddzielamy przecinkami.
int i, j;
for (i = 1, j = 1; i <= 10; i += 2, j += 3)
Console.WriteLine("{0,8:c} + {1,8:c} = {2,8:c}", i, j, i + j);
Co oznacza
zapis {0,8:c}?
8
Pętla while
Postać pętli:
while (warunek)
instrukcja;
lub
while (warunek)
{
instrukcja1;
...
instrukcjan;
}
Schemat działania:
Na początku sprawdzana jest wartość logiczna
wyrażenia warunek. Gdy warunek ma wartość false
wykonanie pętli zostaje zakończone.Gdy warunek ma
wartość true, to program przechodzi do wykonania
wykonania instrukcji. Następnie następuje ponowne
sprawdzenie wartości logicznej wyrażenia warunek.
Uwaga: Wykonywane instrukcje powinny wpływać na
wartość logiczną wyrażenia warunek, w przeciwnym
9
razie pętla się zapęli i nigdy się nie zakończy.
Przykład: Wielokrotne wypisywanie
tekstu
int i = 1, ile = 100;
while (i <= ile)
{
Console.WriteLine("Nie będę używał komórki na wykładzie.");
i++;
}
10
Przykład: Rysowanie trójkąta
równoramiennego z gwiazdek
int i = 1, j = 1, n = 24;
while (i <= n)
{
j=1;
while (j <= i)
{
Console.Write("*");
j++;
}
Console.WriteLine("");
i++;
}
11
Przykład: Ciąg Fibonacciego
int a=0, b=1, c=1;
Console.Write("{0}\n{1}\n", a, b);
Wzór:
Console.Write("{0}\n", c);
while (c <= 10000)
F(0)=0, F(1)=1, F(n) = F(n-1) + F(n-2)
{
a = b; b = c; c = a + b;
Console.WriteLine(c);
}
int a=0, b=1, c=1, i=0;
Console.WriteLine("F({0,2}) = {1,5}",i++,a);
Console.WriteLine("F({0,2}) = {1,5}",i++,b);
Console.WriteLine("F({0,2}) = {1,5}",i++,c);
while (c <= 10000)
{
a = b; b = c; c = a + b;
Console.WriteLine("F({0,2}) = {1,5}",i,c);
i++;
}
12
Pętla do - while
Postać pętli:
do
{
instrukcje;
} while (warunek);
Schemat działania:
Najpierw wykonywane są instrukcje pętli. Po ich
wykonaniu sprawdzane jest wyrażenie logiczne
warunek. Jeżeli ma wartość true, to instrukcje pętli
zostaną wykonane ponownie. Jeżeli wyrażenie
warunek ma wartość false, to wykonanie pętli
zostanie przerwane.
W przypadku pętli do - while mamy pewność, że
instrukcje pętli zawesze zostaną wykonanie co
najmniej raz.
13
Przykład: Literki
string str;
do
{
Console.Write("Podaj literkę: ");
str = Console.ReadLine();
} while (str != "k");
Console.WriteLine("Koniec pętli do-while");
14
Przykład: Średnia ocen
int ocena, suma=0, ilosc=0;
do
{
Console.Write("Podaj ocene (0 konczy wprowadzanie): ");
ocena=Convert.ToInt32(Console.ReadLine());
if ((ocena >= 2) && (ocena <= 5))
{
suma += ocena;
ilosc++;
}
} while (ocena != 0);
if (ilosc > 0)
{
Console.WriteLine("Ilość wprowadzonych ocen: {0}",ilosc);
Console.WriteLine("Srednia ocen: {0} ",(double)suma/ilosc);
}
15
Przykład: Odliczanie
using System;
using System.Threading;
namespace ConsoleApplication9
{
class Program
{
static void Main(string[] args)
{
int n=10;
while (n >= 1)
{
Console.WriteLine(n--);
Thread.Sleep(500); //opóznienie 500 ms = 0,5 s
}
Console.WriteLine("\nBUM !!!");
Console.ReadKey(true);
}
}
}
16
Pętla: foreach
Pętla foreach przechodzi dokładnie raz przez
każdy element tablicy.
int a=1;
Pojęcia tablicy i składnia pętli foreach zostaną
omówione na innym wykładzie.
17
Zadanie 1
Popraw błędy logiczne w poniższym programie obliczającym sumę
ciągu arytmetycznego 1+2+3+4+...+100.
int i=1, suma=0;
for (; i >= 100; ++i) ;
suma += i;
Console.WriteLine(suma);
18
Zadanie 2
Który z poniższych programów wypisze większą liczbę na ekranie?
//program 1
int wynik=1;
for (int i=1; i <= 5; ++i) wynik *= 2;
Console.WriteLine(wynik);
//program 2
int j = 0, licz = 0;
++licz;
while (j++ < 5) licz = 2 * licz;
Console.WriteLine(licz);
19
Zadanie 3
Poniższy kod zapisany przy pomocy pętli for zapisz
przy pomocy pętli while.
for (int i = 13; i > 2; i -= 2, Console.WriteLine(i)) ;
20
Zadanie 4
Popraw błędy w poniższym kodzie.
int i;
while (i = 1)
{
Console.WriteLine(i++);
}
21
Wyszukiwarka
Podobne podstrony:
Instrukcje iteracyjneW03 instrukcje iteracyjne4 Instrukcje warunkowe (prezentacja)Instrukcja iteracyjna For 1INF ćwicz 4 Instrukcje iteracyjne cz 3instrukcja prezentacja2instrukcja bhp fryzjer prezentacjeinstrukcja bhp przy obsludze euro grillaPrezentacja MG 05 2012DS1000PL InstrukcjaBlaupunkt CR5WH Alarm Clock Radio instrukcja EN i PLPrezentacja ekonomia instytucjonalna na MoodleInstrukcja do cwiczenia 4 Pomiary oscyloskopowewięcej podobnych podstron