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

Lekcja 3

FOR    Iteracja w C++

  1. schemat
  2. zadanie
  3. inkrementacja
  4. zagnieżdżenia
  5. zadania
  6. rozwiązania

Schemat instrukcji FOR

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;

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;

Inkrementacja i dekrementacja
Wszystkie języki programowania posługują się zapisem i=i+1 – tylko język C wprowadził "udogodnienie" polegające na skróceniu tego zapisu do i++ - dwa znaki mniej! ale za to mnóstwo zamieszania. Podobnie zamiast i=i-1 możemy zapisać i--. Przykłady w poprzednich ramkach można zapisać na sposób języka C++
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++?

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++.


Zadanie – Konwersja
Napisz program, który wyprowadzi znaki od A do Z.

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;		

Pętle zagnieżdżone

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

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

Zadania

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");
}