mgr inż. Wacław Libront * Bobowa 2019
ZSO Bobowa, ul. Długoszowskich 1, 38-350 Bobowa, tel: 0183514009, fax: 0183530221, email: sekretariat@zsobobowa.eu, www: zsobobowa.eu
for (początek; koniec; iteracja) instrukcja;
for (początek; koniec; iteracja) { instrukcje;… }
Pętle we wszystkich językach programowania powtarzają wiele razy instrukcje programu. To właśnie dzięki pętlom komputery mogą niezmordowanie wyszukiwać, obliczać, oczekiwać... bez pętli komputer byłby zwykłym kalkulatorem.
Przykład
Wypisz na ekranie 10 kolejnych liczb naturalnych
for (int i=1; i<=10; i=i+1) cout << i << endl; |
deklarujemy zmienną sterującą pętlą „i” nadajemy jej wartość 1 int i=1
definiujemy, do kiedy pętla jest kontynuowana i<=10, pętla się skończy gdy i>10
definiujemy sposób zmiany zmiennej sterującej, w przykładzie po wykonaniu każdej instrukcji, zmienna sterująca ulega zmianie, tutaj jest zwiększana o 1 i=i+1
w pętli wykonywana jest instrukcja cout, na ekranie wypisywane są liczby od 1 do 10
nie musimy stosować instrukcji bloku {}, bo wykonujemy w pętli tylko jedną instrukcję cout
Zadanie - Suma liczb
Wylicz sumę oraz iloczyn 10 kolejnych liczb całkowitych
int suma=0; int iloczyn=1; for (int i=1; i<=10; i=i+1){ suma=suma+i; iloczyn=iloczyn*i; } cout << "SUMA=" << suma << endl; cout << "ILOCZYN=" << iloczyn << endl; |
for (int i=1;i<=10; i++) cout << i << endl; |
int suma=0; int iloczyn=1; for (int i=1;i<=10; i++){ suma+=i; iloczyn*=i; } cout << "SUMA=" << suma << endl; cout << "ILOCZYN=" << iloczyn << endl; |
Jakie inne „udogodnienia” w języku C++?
i=i+1 i++
i=i-1 i--
s=s+a s+=a
s=s-a s-=a
s=s*a s*=a
s=s/a s/=a
Co ciekawe, twórcy języka C przewidzieli następujące zapisy: i++ oraz ++i. Obie zwiększają wartość zmiennej „i” o jeden, ale ta pierwsza (i++) robi to po wykonaniu pętli, a druga (++i) przed wykonaniem pętli! Na wszelki wypadek stosuj zawsze instrukcję i++.
Zapis char (i) albo (char) i albo (char)(i) oznacza, że konwertujemy wartość z jednego typu na inny. W naszym przykładzie zamieniamy liczbę z pętli na odpowiadający jej znak w kodzie ASCII. Aby sprawdzić, pod jakim numerem kryje się znak wpisany z klawiatury możesz wypróbować konwersję znaku na liczbę int(znak).
for (int i=65; i<=90; i++) cout << i << " " << char(i) << endl; char znak; cin >> znak; cout << int(znak) << endl; |
Zadanie - gwiazdki
Wyświetl na ekranie prostokąt złożony z WxK gwiazdek. W i K wprowadzamy z klawiatury.
int W,K; cout << "Podaj W: "; cin >> W; cout << "Podaj K: "; cin >> K; for (int i=1;i<=W;i++){ for (int j=1;j<=K; j++){ cout << "*"; } cout << endl; } |
wczytujemy liczbę wierszy i kolumn do zmiennych W i K
wewnętrzna pętla (zmienna j) wypisuje gwiazdki w wierszu – tyle ile kolumn
po wypisaniu gwiazdek w wierszu przechodzimy do nowego
zewnętrza pętla (zmienna i) zlicza kolejne wiersze
wewnętrzna pętla wykonuje tylko jedną instrukcję dlatego nie musi być klamer, ale ładniej wygląda jeśli je wstawimy i być może przydadzą się w przyszłości, gdy będziemy rozbudowywać program.
Zadanie – tabliczka mnożenia
Wyświetl na ekranie tabliczkę mnożenia w zakresie 1..100
for (int i=1; i<=10; i++){ for (int j=1; j<=10; j++){ cout.width(5); cout << i*j; } cout << endl; } |
środkowa pętla zawiera tylko jedną instrukcję, dlatego bez bloku {}
zewnętrzna pętla zawiera dwie instrukcje: pętla i nowy wiersz, dlatego blok {}
1) Wypisz na ekranie sumę i iloczyn liczb parzystych w zakresie 1..20
2) Napisz programy, które wypiszą na ekranie poniższe ciągi liczbowe i 50 następnych (przy pomocy pętli FOR)
2) „Narysuj” na ekranie choinki złożone z gwiazdek: 1, 2, 3,… aż do N gwiazdek. Ilość gwiazdek (wiersze = kolumny) wczytujemy z klawiatury.
UWAGA Choinki rysowane są zawsze od góry!
4) Wykorzystaj instrukcję warunkową i funkcje logiczne, i narysuj za pomocą pętli FOR poniższe obrazki. Ilość gwiazdek (wiersz = kolumna) wpisujemy z klawiatury.
Policz liczbę znaków ”O” i wypisz na końcu.
UWAGA narysuj najpierw prostokąt z gwiazdek, a potem za pomocą warunków logicznych rysuj spacje lub usuwaj gwiazdki.
5) Napisz prosty kalkulator, który będzie działał w pętli i reagował na znaki: +-*/ = pokazuje wynik obliczeń C kasuje obliczenia Q koniec działania programu
Przykładowe rozwiązania zadań
Jedynie ciężka umysłowa praca i zrozumienie działania
programu może nauczyć programowania!
//zadanie 1 int sum=0; int ilo=1; for (int i=1; i <= 10; i++){ sum=sum+i*2; ilo=ilo*i*2; } cout << "SUMA parzystych (2..20)=" << sum << endl; cout << "ILOCZYN parzystych (2..20)=" << ilo << endl; |
//zadanie 2 //zadanie 2a for (int i=0; i < 50; i++){ cout << i*2 << " "; } cout << endl; cout << endl; //zadanie 2b for (int i=0; i < 50; i++){ cout << i*7 << " "; } cout << endl; cout << endl; //zadanie 2c int s=1; cout << s << " "; for (int i=0; i < 50; i++){ s=s+i; cout << s << " "; } cout << endl; cout << endl; //zadanie 2d long long L1=0; long long L2=1; cout << L1 << " " << L2 << " "; for (int i=0; i < 50; i++){ long long s=L1+L2; cout << s << " "; L1=L2; L2=s; } cout << endl; |
//zadanie 3 choinki int N; cout << "Ile gwiazdek: "; cin >> N; cout << "CHOINKA 1" << endl; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= w; k=k+1){ cout << "*"; } cout << endl; } cout << "CHOINKA 2" << endl; for (int w=1; w <= N; w=w+1){ for (int k=N; k >= w; k=k-1){ cout << "*"; } cout << endl; } cout << "CHOINKA 3" << endl; for (int w=1; w <= N ;w=w+1){ for (int k=1; k <= N ;k=k+1){ if (k > 10-w) cout << "*"; else cout << " "; } cout << endl; } cout << "CHOINKA 4" << endl; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if (k >= w) cout << "*"; else cout << " "; } cout << endl; } |
//zadanie 4 int N; cout << "Ile gwiazdek: "; cin >> N; //sama ramka int ile=0; cout << "FIGURA 1" << endl; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if (w==1 || w==N || k==1 || k==N){ cout << "O"; ile=ile+1; } else cout << " "; } cout << endl; } cout << ile << endl; //jedna przekatna cout << "FIGURA 2" << endl; //int ile=0; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if (w==1 || w==N || k==1 || k==N || w==k){ cout << "O"; ile=ile+1; } else cout << " "; } cout << endl; } cout << ile << endl; //obie przekatne cout << "FIGURA 3" << endl; //int ile=0; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if (w==1 || w==N || k==1 || k==N || w==k || w==N-k){ cout << "O"; ile=ile+1; } else cout << " "; } cout << endl; } cout << ile << endl; //kwadrat w kwadracie - wypełniony cout << "FIGURA 4" << endl; //int ile=0; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if ((w==1 || w==N || k==1 || k==N ) || ((w>=3 && w<=N-2) && (k>=3 && k<=N-2))) { cout << "O"; ile=ile+1; } else cout << " "; } cout << endl; } cout << ile << endl; //kwadrat w kwadracie - pusty cout << "FIGURA 5" << endl; //int ile=0; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if ((k==1 || k==N) || (w==1 || w==N) || (w >= 3 && k >= 3 && w <= N-2 && k <= N-2) && !(w > 3 && k > 3 && w < N-2 && k < N-2)) { cout << "O"; ile=ile+1; } else cout << " "; } cout << endl; } cout << ile << endl; //podwojna ramka cout << "FIGURA 6" << endl; //int ile=0; for (int w=1; w <= N; w=w+1){ for (int k=1; k <= N; k=k+1){ if (w <= 2 || w >= N-1 || k <= 2 || k >= N-1){ cout << "X"; ile++; } else cout << " "; } cout << endl; } cout << ile << endl; |
//zadanie 5 |
//SZABLON #include <stdlib.h> //system #include <iostream> //cout #include <iomanip> //fixed #include <cmath> //pow using namespace std; int main(){ setlocale(LC_ALL, ""); system("pause"); } |