Program 13 1. Program obliczający pole koła o promieniu podanym

Transkrypt

Program 13 1. Program obliczający pole koła o promieniu podanym
Program 13
1. Program obliczający pole koła o promieniu podanym przez uŜytkownika. Promień ma
być liczbą całkowitą; pole ma być obliczane tylko wtedy, gdy wprowadzona liczba
jest nieujemna, w przeciwnym razie program ma wyświetlać komunikat o błędzie.
(Uwaga - liczby π nie deklarujemy!)
2. W programie z zadania 1 zadeklarować tablicę złoŜoną z 5 liczb całkowitych i pobrać
jej zawartość. Zmodyfikować program tak, aby obliczał pole koła o promieniu
równym największej liczbie w tej tablicy, oraz aby pobranie tablicy i obliczenie
odpowiedniego pola moŜna było wykonać wielokrotnie (o zakończeniu ma
zdecydować uŜytkownik).
3. Rozszerzyć program z zadań 1-2 tak, aby dodatkowo wypisywał w kolejności
nierosnącej liczby z podanej tablicy oraz mówił, czy zawiera ona powtórzenia.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int r,tab[5],temp;
bool powt=false;
char wyb;
do
{
//Wprowadzanie liczb do tablicy
for(int i=0;i<5;i++)
{
cout<<"Wprowadz element "<<i+1<<": ";
cin>>tab[i];
}
//Znalezienie elementu maksymalnego
r=tab[0];
for(int i=1;i<5;i++)
{
if(r<tab[i]) r=tab[i];
}
//Obliczenie pola kola
if(r<0)
{
cout<<"Promien kola jest liczba nieujemna!"<<endl;
}
else
{
cout<<"Pole kola wynosi: "<<M_PI*r*r<<endl;
}
//Sortowanie tablicy
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(tab[j]<tab[j+1])
{
temp=tab[j];
tab[j]=tab[j+1];
tab[j+1]=temp;
}
}
}
//Wypisanie zawartosci tablicy posortowanej nierosnaco
cout<<"Liczby z tablicy w kolejnosci nierosnacej: "<<endl;
for(int i=0;i<5;i++)
{
cout<<tab[i]<<endl;
}
//Sprawdzenie czy w tablicy wystepuja powtorzenia
for(int j=0;j<4;j++)
{
if(tab[j]==tab[j+1])
{
powt=true;
}
}
if(powt==true) cout<<"W tablicy sa powtorzenia"<<endl;
else cout<<"W tablicy nie ma powtorzen"<<endl;
cout<<"\nWcisnij k aby zakonczyc dzialanie programu\n";
cout<<"Wcisnij inny klawisz aby ponowanie przeprowadzic
obliczenia\n";
cin>>wyb;
}while(wyb!='k');
system ("PAUSE");
return 0;
}
Omówienie programu
Deklaracje zmiennych r i temp typu int oraz tablicy pięcioelementowej typu int o nazwie
tab:
int r, temp, tab[5];
Deklaracja zmiennej powt typu bool:
bool powt=false;
Deklaracja zmiennej wyb typu char:
char wyb;
Wprowadzanie przy pomocy klawiatury liczb do tablicy:
for(int i=0;i<5;i++)
{
cout<<"Wprowadz element "<<i+1<<": ";
cin>>tab[i];
}
Znalezienie elementu maksymalnego w tablicy
Na początku przyjmujemy, Ŝe element maksymalny tablicy to element pierwszy:
r=tab[0];
Następnie element ten porównujemy z kaŜdym następnym elementem tablicy. JeŜeli któryś
element jest większy od dotychczasowego elementu maksymalnego zmieniamy wartość
elementu maksymalnego.
for(int i=1;i<5;i++)
{
if(r<tab[i]) r=tab[i];
}
Przykład
ZałóŜmy, Ŝe w tablicy są liczby 1,-1,4,-2,5. Chcemy wyznaczyć element maksymalny.
Na początku przyjmijmy, Ŝe element maksymalny to pierwszy element tablicy czyli 1. Liczbę
tą zapisujemy w zmiennej r.
Pętla:
1. i=1 porównujmy wartość zmiennej r (czyli 1) z drugim elementem tablicy
tab[1] (czyli -1). PoniewaŜ warunek r<tab[i] nie jest spełniony zatem nie
zmieniamy wartości zmiennej r.
2. i=2 porównujmy wartość zmiennej r (czyli 1) z trzecim elementem tablicy
tab[2] (czyli 4). PoniewaŜ warunek r<tab[i] jest spełniony (bo 1<4) zatem
zmieniamy wartości zmiennej r. Nowa wartość zmiennej r wynosi 4.
3. i=3 porównujmy wartość zmiennej r (czyli 4) z czwartym elementem tablicy
tab[3] (czyli -2). PoniewaŜ warunek r<tab[i] nie jest spełniony zatem nie
zmieniamy wartości zmiennej r.
4. i=4 porównujmy wartość zmiennej r (czyli 4) z piątym elementem tablicy tab[4]
(czyli 5). PoniewaŜ warunek r<tab[i] jest spełniony (bo 4<5) zatem zmieniamy
wartości zmiennej r. Nowa wartość zmiennej r wynosi 5.
A zatem maksymalna liczba w tablicy to 5. Liczba ta jest promieniem koła dla którego
obliczmy pole powierzchni:
if(r<0)
{
cout<<"Promien kola jest liczba nieujemna!"<<endl;
}
else
{
cout<<"Pole kola wynosi: "<<M_PI*r*r<<endl;
}
PoniewaŜ pole ma być obliczane tylko wtedy, gdy wprowadzona liczba jest nieujemna (w
przeciwnym razie program ma wyświetlać komunikat o błędzie) wykorzystana została
instrukcja warunkowa z warunkiem r<0.
W obliczeniach wykorzystano wartość liczby π czyli stałą M_PI z biblioteki cmath stąd na
początku programu mamy #include <cmath>.
Następnie sortujemy tablicę tab nierosnąco:
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
if(tab[j]<tab[j+1])
{
temp=tab[j];
tab[j]=tab[j+1];
tab[j+1]=temp;
}
}
}
Metodę sortowania omówimy na przykładzie.
Przykład
ZałóŜmy, Ŝe w tablicy są liczby 1,-1,4,-2,5. Chcemy posortować tablicę nierosnąco.
Pętla:
1. i=0 pierwsze przejście tablicy.
a. j=0 porównujemy elementy tab[0] (czyli 1) i tab[1] (czyli -1).
PoniewaŜ warunek tab[0]<tab[1] nie jest spełniony zatem nie
dokonujemy przestawienia tych elementów tablicy.
b. j=1 porównujemy elementy tab[1] (czyli -1) i tab[2] (czyli 4).
PoniewaŜ warunek tab[1]<tab[2] jest spełniony zatem dokonujemy
przestawienia tych elementów tablicy. W efekcie tab[1]=4 i tab[2]=-1.
c. j=2 porównujemy elementy tab[2] (czyli -1) i tab[3] (czyli -2).
PoniewaŜ warunek tab[2]<tab[3] nie jest spełniony zatem nie
dokonujemy przestawienia tych elementów tablicy.
d. j=3 porównujemy elementy tab[3] (czyli -2) i tab[4] (czyli 5).
PoniewaŜ warunek tab[3]<tab[4] jest spełniony zatem dokonujemy
przestawienia tych elementów tablicy. W efekcie tab[3]=5 i tab[4]=-2.
A zatem po pierwszym „przejściu” tablica wygląda następująco:
1,4,-1,5,-2
Tablica nie jest jeszcze posortowana. Dlatego konieczne są kolejne „przejścia” tablicy i
porównania sąsiednich elementów dla i=1, i=2, i=3. Wyglądają one podobnie:
W kaŜdym „przejściu” porównywane są kolejno sąsiadujące elementy tablicy. JeŜeli dla
dwóch sąsiednich elementów warunek tab[j]<tab[j+1] jest spełniony wówczas
następuje zamiana miejscami tych elementów.
W efekcie po czwartym „przejściu” (dla i=3) tablica będzie posortowana nierosnąco:
5,4,1,-1,-2
Dalej wypisywana jest zawartość posortowanej tablicy:
cout<<"Liczby z tablicy w kolejnosci nierosnacej: "<<endl;
for(int i=0;i<5;i++)
{
cout<<tab[i]<<endl;
}
Następnie sprawdzamy, czy w tablicy występują powtórzenia. PoniewaŜ tablica jest
posortowana nierosnąco zatem jeŜeli jakaś liczba powtarza się to występuje w sąsiednich
elementach tablicy np.
5,3,3,2,1,1
A zatem musimy sprawdzić czy w tablicy na dwóch sąsiednich pozycjach nie występuje ta
sama liczba. JeŜeli tak to dla pewnego j (j moŜe przyjmować wartości 0,1,2,3) zachodzi
warunek tab[j]==tab[j+1]. JeŜeli tak wówczas zmieniamy wartość zmiennej logicznej
powt (na początku jej wartość to false) na true.
for(int j=0;j<4;j++)
{
if(tab[j]==tab[j+1])
{
powt=true;
}
}
Na końcu wypisywany jest odpowiedni komunikat. JeŜeli w tablicy są powtórzenia wówczas
zmienna powt ma wartość true i wypisywany jest komunikat: W tablicy sa
powtorzenia. JeŜeli w tablicy nie ma powtórzeń wówczas zmienna powt ma wartość
false i wypisywany jest komunikat: W tablicy nie ma powtorzen.
if(powt) cout<<"W tablicy sa powtorzenia"<<endl;
else cout<<"W tablicy nie ma powtorzen"<<endl;
PoniewaŜ pobranie tablicy, obliczenie odpowiedniego pola kola, wypisanie w kolejności
nierosnącej liczb z podanej tablicy oraz wypisanie informacji o powtórzeniach ma być
wykonywane wielokrotnie zatem omówione powyŜej instrukcje umieszczone są w
następującej pętli:
do
{
//INSTRUKCJE
cout<<"\nWcisnij k aby zakonczyc dzialanie programu\n";
cout<<"Wcisnij inny klawisz aby ponowanie przeprowadzic
obliczenia\n";
cin>>wyb;
}while(wyb!='k');
A zetem po wprowadzeniu liczb do tablicy i wykonaniu „obliczeń” pojawia się komunikat:
Wcisnij k aby zakonczyc dzialanie programu
Wcisnij inny klawisz aby ponowanie przeprowadzic obliczenia
Następnie wprowadzamy znak z klawiatury:
cin>>wyb;
JeŜeli wciśniemy k program kończy działanie. JeŜeli inny znak (czyli wyb!='k') – moŜemy
ponownie wprowadzić liczby do tablicy.

Podobne dokumenty