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.