Organizacja obliczeń cyklicznych w programie - pętle o nieokreślonej liczbie powtórzeń (instrukcje while i do-while), pętla o określonej liczbie powtórzeń (instrukcja for)
Cele ćwiczenia:
Umiejętność budowania algorytmów i ich postaci graficznej.
Zapoznanie z instrukcjami pętli while i do-while.
Zapoznanie z instrukcją pętli for.
Wykorzystanie niektórych manipulatorów strumienia z biblioteki standardowej iomanip.
Nowe zagadnienia:
instrukcje pętli while i do-while,
instrukcja pętli for,
operatory zwiększania (inkrementacji) i zmniejszania (dekrementacji)
operatory przypisania
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 wewnętrznej 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> 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ą.
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.
Zadanie 2
Napisz program do zadania 1 stosując pętle do-while
Z pętli for korzystamy wtedy, kiedy znamy liczbę powtórzeń, które chcemy wykonać.
Składnia instrukcji for jest następująca:
for (w-i; w-w; w-z)
{
instrukcja wewnętrzna
}
w-i - wyrażenie-inicjujące: powoduje zainicjowanie licznika pętli
w-w - wyrażenie-warunkowe: jeśli jest niezerowe (prawda) wykonywana jest instrukcja pętli
w-z - wyrażenie-zmieniające: powoduje zwiększenie lub zmniejszenie liczników pętli.
Instrukcja for jest wykonywana tak długo, jak długo wartość wyrażenia-warunkowego jest różna od zera (prawda). W przypadku, gdy wartość ta osiągnie zero (fałsz), to wykonywanie instrukcji wewnętrznej pętli for kończy się.
Operatory zwiększania.
W celu prawidłowego przebiegu pętli konieczne jest wyrażenie-zmieniające, które określa krok z jakim zmienia się zmienna sterująca np. i= i + 1.
Język C++ dopuszcza pewne formy skróconego zapisu dla wyrażeń zmieniających:
Inkrementacja:
i = i +1 → i + = 1 → i++
Dekrementacja:
i = i -1 → i - = 1 → i--
Krok pętli może być różny od 1 np. i+=5 oraz może być również ułamkowy np. i+=0.1
Operatory przypisania
Język C++ dopuszcza pewne skrótowe formy zapisu pewnych wyrażeń arytmetycznych np.:
OPERATOR |
ZASTOSOWANIE |
ZNACZENIE |
= |
a=b |
a=b |
+= |
a+=b |
a=a+b |
-= |
a-=b |
a=a-b |
*= |
a*=b |
a=a*b |
/= |
a/=b |
a=a/b |
Zadanie 3
Napisz program wyświetlający na ekranie kolejne liczby naturalne od jeden do wartości podanej z klawiatury.
#include<cstdlib>
#include<iostream>
using namespace std;
main()
{
int i,n;
cout<<"Podaj ile wyświetlić liczb ";
cin>>n;
for (i=1; i<=n;i=i+1)
{
cout<<"i = "<<i<<endl;
}
system (“pause”);
return 0;
}
Zadanie4
Napisz program do zamiany dziesiętnej liczby n na system szesnastkowy i ósemkowy
#include <iostream>
#include <iomanip>
using namespace std;
main()
{
int n;
cout<<"wprowadz liczbe dziesietna \n";
cin>>n;
cout<<n<<" to szesnastkowo: "<<hex<<n<<endl;
cout<< " to osemkowo: "<<setbase(8)<<n<<endl;
system("pause");
return 0;
}
Zadania C++ - 4
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ą sumą 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.
Napisz program, realizujący wyświetlanie na ekranie liczb naturalnych od wartości podanej z klawiatury do jeden.
Napisz program, realizujący wyświetlanie na ekranie wszystkich liczb nieparzystych od jeden do wartości podanej z klawiatury.
Napisz program, w którym należy podać określoną ilość liczb, a następnie wprowadzone liczby mają zostać przyporządkowane do odpowiednich przedziałów:
(liczba<0, 0<=liczba<=50,liczba>51).
Napisz program, który oblicza i wyświetla wartość n!.
Napisz program, który oblicza średnią arytmetyczną z n podanych przez użytkownika liczb.
Napisz program, który oblicza i drukuje wartość pierwiastka kwadratowego z 2 z dokładnością od 1 do 10 miejsc po przecinku w kolejnych liniach.
Napisz program, który z 10 liczb wczytanych z klawiatury znajduje liczbę największa i najmniejszą.
Napisz program obliczający wartość wyrażenia:
dla x i n podanych z klawiatury.
Dla belki przedstawionej na rysunku wyznaczyć jak zmienia się moment gnący w trakcie przemieszczania się obciążenia wzdłuż belki w kolejnych odległościach co 0,5 m.
Ćwiczenia laboratoryjne nr 4
„Język Programowania” str. 2
2
Instrukcja wewnętrzna
Instrukcja wewnętrzna
W
T
N
w
N
T
Instrukcja wewnętrzna
( w-i;w-w;w-z)
T
N
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int 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;
system(„pause”);
return 0;
}
#include<cstdlib>
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
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;
system (“pause”);
return 0;
}
10 m
x
F=300 kN