Organizacja obliczeń cyklicznych w programie (pętle)
pętle o nieokreślonej liczbie powtórzeń - instrukcje while i do-while
Cele ćwiczenia:
Umiejętność budowania algorytmów i ich postaci graficznej.
Zapoznanie z instrukcjami pętli while i do-while.
Wykorzystanie niektórych manipulatorów strumienia z biblioteki standardowej iomanip.
Nowe zagadnienia:
instrukcje pętli while i do-while,
manipulatory strumieniowe: setw, setprecision, setfill, setbase
Definicje nowych pojęć do przyswojenia:
Instrukcje pętli (iteracyjne, powtarzania, obliczeń cyklicznych) - są to instrukcje pozwalające wykonać daną instrukcję (zwaną instrukcją wewnętrzną pętli) prostą lub złożoną zero lub więcej razy zależnie od spełnienia warunku sterowania pętlą.
Składnia instrukcji while jest następująca:
while (wyrażenie)
instrukcja wewnętrzna
Wykonywanie instrukcji while przebiega w ten sposób, że najpierw jest obliczana wartość wyrażenia (wyrażenie) i jeżeli ma ono wartość różną od zera (prawda), to jest wykonywana instrukcja wewnętrzna, która może być instrukcją prostą lub złożoną. Instrukcja może nie być nigdy wykonana, jeśli przy pierwszym obliczeniu wyrażenia (wyrażenie) będzie miało wartość zero (fałsz).
Składnia instrukcji do while jest następująca:
do
instrukcja wewnętrzna
while (wyrażenie);
Instrukcja jest wykonywana tak długo, jak długo wartość wyrażenia (wyrażenie) jest różna od zera (prawda) W przypadku, gdy wartość ta będzie równa zeru (fałsz), to wykonywanie instrukcji do...while kończy się. Wynika stąd, że instrukcja wewnętrzna jest zawsze wykonywana co najmniej jeden raz i to jest podstawowa różnica pomiędzy instrukcjami do...while a while.
manipulatory strumieniowe - umożliwiają wykonanie formatowania strumienia danych np. ustawianie szerokości pola, precyzji liczb, znaków wypełniających pole.
Biblioteka standardowa <iomanip.h> obsługuje manipulatory strumieniowe.
setw(n) - służy do ustawienia szerokości pola. Argument n to liczba całkowita (int) określająca ilość znaków w polu możliwych do wypełnienia. Np. setw(8).
setprecision(n) - ustala ilość cyfr po kropce dziesiętnej, czyli dokładność liczb zmiennoprzecinkowych (rzeczywistych). Wywołanie tego manipulatora powoduje ustawienie dokładności dla wszystkich kolejnych operacji, aż do następnego wywołania ustalającego dokładność. Argument n to liczba całkowita (int). Np.setprecision(5).
setfill(z) - służy do określania znaku wypełniającego pole. Stosowany przy porządkowaniu pola. Argument z jest typu znakowego. Np. setfill(`*').
setbase(n) - ustala podstawę formatu konwersji. Argument n może przyjąć wartości 0, 8, 10, 16.
Np. setbase(16) oznacza konwersję na system szesnastkowy.
setbase(8) oznacza konwersję na system ósemkowy.
setbase(10) oznacza konwersję na system dziesiętny.
setbase(0) oznacza konwersję na system domyślny.
lub bezpośrednio można użyć manipulatorów
dec - włącza konwersję dziesiętną.
hex - włącza konwersję szesnastkową.
oct - włącza konwersję ósemkową.
Napisz program do zamiany dziesiętnej liczby n na system szesnastkowy i ósemkowy
#include <iostream.h>
#include <iomanip.h>
#include <conio.c>
main()
{
int n;
cout<<"wprowadz liczbe dziesietna \n";
cin>>n;
cout<<n<<" to szesnastkowo: "<<hex<<n<<endl;
cout<< " to osemkowo: "<<setbase(8)<<n<<endl;
getch();
}
Zadanie 1
Napisz program do obliczania i wyprowadzenia na ekran w pewnym porządku, z ustaloną precyzją następujących wyrażeń: a=n-i, b=i/n, gdzie n jest podaną z klawiatury ilością iteracji a i jest kolejnym numerem iteracji. Wykorzystaj manipulatory strumienia do formatowania wydruku na ekranie dla kolejnych iteracji.
Program źródłowy
#include<iostream.h>
#include<conio.c>
#include<math.h>
#include<iomanip.h>
main()
{
int i=0;
float n, a, b;
cout<<”Podaj liczbe iteracji n”<<endl;
cin>>n;
while (i<n)
{
i++;
a=n-i;
b=i/n;
cout<<setw(10)<<setfill(`_')<<a;
cout<<setw(10)<<setprecision(2)<<setfill(`_')<<b;
cout<<setw(10)<<setfill(`_')<<i<<endl;
}
cout<<”KONIEC”<<endl;
getch();
}
Zadanie 2
Napisz program do zadania 1 stosując pętle do-while
Program źródłowy
#include<iostream.h>
#include<conio.c>
#include<math.h>
#include<iomanip.h>
main()
{
int i=0;
float n, a, b;
cout<<”Podaj liczbe iteracji n”<<endl;
cin>>n;
do
{
i++;
a=n-i;
b=i/n;
cout<<setw(10)<<setfill('_')<<a;
cout<<setw(10)<<setprecision(2)<<setfill(`_')<<b;
cout<<setw(10)<<setfill(`_')<<i<<endl;
}
while (i<n);
cout<<”KONIEC”<<endl;
getch();
}
Zadania C++ - 3.1
Napisz program obliczający kwadraty i sześciany dowolnej ilości liczb. Program ma kończyć działanie po podaniu z klawiatury liczby 0 nie realizując dla niej obliczeń.
Napisz program obliczający wartości funkcji sin(x), cos(x), tg(x), ctg(x) dla z góry określonej ilości liczb n.
Napisz program obliczający sumę n pierwszych wyrazów ciągu harmonicznego:
dla podanej wartości n.
Napisz program wyznaczający max i min liczbę w niepustym ciągu n liczb podanych z klawiatury.
Napisz program do obliczania sumy i iloczynu liczb całkowitych z przedziału od 1 do 100 podzielnych bez reszty przez 3.
Pracownik dokonuje ważenia x wyprodukowanych detali. Napisz program do krótkiej analizy zbioru x detali. Program ma obliczać max i min wagę detali oraz podać ich średnią wagę.
Klient dokonuje zakupów dysponując określoną suma pieniędzy. Napisz program do sumowania cen różnych produktów i ich ilości uwzględniający warunek posiadanej przez klienta kwoty pieniędzy.
Napisz program do obliczania ilości liczb rzeczywistych wprowadzonych z klawiatury zakończonych liczbą 999. Liczba 999 jest warunkiem wyjścia z pętli i nie powinna być wliczona do ilości liczb ciągu.
Napisz program do obliczania pierwiastka kwadratowego z liczb od 100 do 300 podzielnych bez reszty przez 25. Wydrukuj wyniki obliczeń w dwóch kolumnach wg następującego schematu:
liczba pierwiastek
100 10.000
125 11.180
Kierowca w ciągu roku tankował samochód n razy. Zawsze zapisywał ilość paliwa i przejechane kilometry. Napisz program obliczający ilość przejechanych kilometrów, ilość zużytego paliwa w ciągu roku oraz średnie spalanie samochodu na 100 km.
Napisz program wyświetlający na ekranie trójkąt równoramienny złożony z cyfr. Wysokość trójkąta (ilość wierszy) jest daną wejściową. Podstawa trójkąta powinna stykać się z lewym brzegiem ekranu
0
111
22222
3333333
Napisz program do wydruku na ekranie liczb od 0 do 15 w systemie dziesiętnym, ósemkowym i szesnastkowym.
Ćwiczenia laboratoryjne nr 3.1
„Język Programowania” str. 4
4
Instrukcja wewnętrzna
Instrukcja wewnętrzna
W
T
N
w
N
T