index1859




[Kurs C++] IX. Pętla while i do ... while

var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


var pageTracker = _gat._getTracker("UA-3650348-1");
pageTracker._initData();
pageTracker._trackPageview();



Serwis został przeniesiony pod nową domenę: http://cpp0x.pl/ Strona główna Kursy Artykuły Forum Pliki Promuj Nas! PowrótHistoria odwiedzonych stronPoprzednia lekcjaKurs C++Następna lekcjaIX. Pętla while i do ... while9.1. Pętle po raz drugiWczytując dane często zdarza się również tak, że nie chcemy z góry określać ilości wczytywanych danych do programu. Decyzję o tym, czy dane będą dalej wprowadzane czy nie użytkownik ma podejmować w każdym kroku. Pętla for(...) już na pierwszy rzut oka byłaby niewygodna do tego celu. Co więcej wiedza, którą aktualnie posiadasz uniemożliwia Ci na razie wykorzystanie pętli for(...) do takiego zadania. Poza pętlą for, mamy do dyspozycji jeszcze dwa pętle while i do while. W pewnych warunkach pętle te mogą działać podobnie np.:for(int i = 0; i < 5; i++)cout << "Wartość i = " << i;int i = 0;while(i < 5){  cout << "Wartość i = " << i;  i++;}int i = 0;do{  cout << "Wartość i = " << i;  i++;}while(i < 5);Jak widać każdej z tych pętli możemy użyć to tego samego celu, jednak nie miałoby to większego sensu dlatego przyjrzyjmy się jakie posiadają różnice, oraz gdzie najlepiej jest ich użyć.9.2. Poznajemy pętlę do ... while(...);W przypadku, gdy chcemy wczytać określone dane co najmniej jeden raz, wykorzystujemy do tego celu pętlę do ... while(...). Składnia tej pętli wygląda następująco:do{  //tu instrukcje które mają być powtarzane}while(warunek);Pętla ta wykona najpierw blok instrukcji zawarty między klamrami, a następnie sprawdzi czy warunek jest spełniony (prawdziwy) czy też nie. Pętla wykonuje się tak długo, dopóki warunek jest prawdziwy.9.2.1. Liczymy średnią ocen jeszcze razRęczne liczenie ilości ocen jest dość monotonnym zajęciem. Ponieważ chcemy tego uniknąć, napiszemy program, który wczytuje oceny dopóki nie napotka stopnia 0. Wiemy przecież, że nie istnieje ocena 0, więc dla programu będzie to znak, że nie mamy więcej ocen do wczytania i chcemy poznać średnią. Program taki będzie wyglądał następująco:#include <iostream>#include <conio.h>using namespace std;int main(){  int ilosc=0;  float srednia=0;  float ocena;  do  {    cout<<"Podaj ocene (0 konczy wprowadzanie): ";    cin>>ocena;    if(ocena>0)    {      srednia+=ocena;      ilosc+=1;    }  }while(ocena!=0);  if(ilosc>0) srednia/=ilosc;  cout<<"Wprowadziles "<<ilosc<<" ocen"<<endl;  cout<<"Srednia ocen to: "<<srednia<<endl;  getch();  return(0);}9.3. Pętla while (...)Do tej pory poznaliśmy dwie pętle: for(...) i do ... while(...). Istnieje również trzecia pętla i jest nią pętla while(...). Składnia tej pętli wygląda następująco:while(warunek){  //powtarzany blok instrukcji}Różnica jest subtelna pomiędzy pętlą do ... while(...), a aktualnie omawianą while (...). W pętli while(...) warunek jest sprawdzany zanim wykona się blok instrukcji. W konsekwencji, jeśli warunek nie będzie spełniony, to blok zawarty poniżej pętli while(...) nie wykona się ani razu. Blok jest powtarzany tak długo, jak długo jest spełniony warunek pętli while(...).9.3.1 Kod ASCII w C++//Zamiana poszczególnych znaków na ASCII---#include <iostream>#include <conio.h>//-----------------------------------------int main(){  using namespace std;  const short MAX_ZNAKOW = 50; //stała dla indeksu tabeli  char wyraz[MAX_ZNAKOW] = {"Ciekawe zastosowanie - kod ASCII w C++"};  int indeks = 0;  cout << wyraz;  cout << "\nTeraz przeksztalcimy nasze zdanie"  << " w pion i zapiszemy kodami ASCII\n";  while (wyraz[indeks])  {    cout << wyraz[indeks]    << ": "    //rzutowanie char na int    << int(wyraz[indeks])    << endl;    //bez tej linijki pętla nigdy się nie zakończy    indeks++;  }  getch();  return 0;}//----------------------------------------Dwa słowa o linijceint(wyraz[indeks])taki zapis nazywam rzutowaniem. W tym przypadku jest to rzutowanie typu char na typ int. Dokładniej mówiąc, kompilator zamienia znak na liczbę. Liczba uzyskana w ten sposób to liczba kodu ASCII. 9.4. Zastosowanie pętli while (...)Pętlę while(...) zazwyczaj używa się częściej niż pętlę do ... while(...). Prawdopodobnie jest to podyktowane faktem, że dobrym zwyczajem jest i tak inicjacja początkowa wszystkich niezbędnych zmiennych. Jeśli będziemy chcieli, żeby pętla wykonała się conajmniej jeden raz to ustawimy wartości początkowe zmiennych tak, aby warunek tej pętli był spełniony. Nie jest to jednak żadna reguła i nie należy przywiązywać do tego wagi. Wszędzie tam, gdzie możemy użyć pętli do ... while(...), możemy również użyć pętli while(...) i na odwrót. Oczywiście zamiana jednej pętli na drugą będzie się wiązała z dodatkowymi, zazwyczaj drobnymi zmianami w kodzie. 9.5. Pętla while (...); i do ... while(...); w tandemie//Czas na przerwę i na warunek wyjścia----#include <iostream>#include <conio.h>#include <ctime> // nowa biblioteka//----------------------------------------int main(){  using namespace std;  char wyraz[30];  float sekundy;  int licznik = 0;  // Czas na przerwę jak tworzyć pauzy dla aplikacji--  cout << "Zrob sobie kawe(herbate), a moze masz"  << " smak na cos innego?\n"  << "Podaj ile czasu potrzebujesz na przygotwanie?\n";  (cin >> sekundy).get();  //CLOCKS_PER_SEC to stała  clock_t koniec = sekundy * CLOCKS_PER_SEC;  clock_t start = clock();  cout << "Wlasnie zaczela sie Twoja przerwa\a\n";  while (clock() - start < koniec)  ; //bardzo ważny śrdnik  cout << "Koniec przerwy czas na programowanie\a\n";  // Jak zatrzymać pętlę (warunek wyjścia)  cout << "\nJesli kiedy kolwiek chcesz zakonczyc"  << " ta petle wprowadz \"?\"\n";  do  {    cout << "Liczba petli tej petli\n"    << ++licznik << endl;    cout << "Podaj Swoje imie\n";    cin.get(wyraz, 30);    cin.get();  }while (wyraz[0] != '?');  cout << "Udalo sie brawo!";  getch();  return 0;}//----------------------------------------Użyto tu dwóch często przydatnych mechanizmów. Pierwszy służy to zatrzymania (pauzy) programu na określoną przez Nas liczbę sekund. By tego dokonać skorzystaliśmy z biblioteki <ctime>. Funkcja clock() zwraca ilość cykli zegara, które upłynęły od momentu uruchomiania programu, wartość ta dla różnych systemów może przyjąć różne typy danych(np. long, unsigned long lub inną). CLOCKS_PER_SEC jest to stała, jej wartość również zależy od systemu, na którym pracujecie. Określa ona ile jednostek czasu systemowego składa się na sekundę. Gdy podzielimy clock()/ CLOCKS_PER_SEC możemy otrzymać sekundy. Inaczej rozumując clock() i CLOCKS_PER_SEC  są wyrażone w tych samych wartościach, np. clock = 10 a CLOCKS_PER_SEC = 5 to w wyniku dzielenia otrzymamy 2 sekundy!(UWAGA wartości dla tego przykładu są przypadkowe i nie odzwierciedlają rzeczywistości). Jeśli słyszałeś dźwięk, a nie wiesz jak to się stało, że się pojawił, czas byś dobrze się zapoznał ze znakami specjalnymi..Drugi mechanizm to określenie wyjścia z pętli, dla wybranego przez Nas znaku. Powinieneś Sobie poradzić ze zrozumieniem tej części kodu.Na koniec dodam, iż najwyższy czas byś zapoznał się z biblioteką <conio.h>.9.6 Ćwiczenia1. Przedstawię ci 3 fragmenty kodu, twoim zadaniem jest wywnioskowanie co pojawi się na ekranie.1.int a;for (a = 1; a < 13; a +=4)cout <<  1;2.int a = 7;do{  cout << " a = " << a << endl;}while (a++ < 7);3.int a = 9;while (++a < 20)cout << a << endl; 2. Napisz program skoroszyt. Przykładowe działanie programu:Podaj liczbę osób, które chcesz wprowadzić do skoroszytu ?Podano liczbę 3. Wprowadź dane:Osoba – 1: Imię – XXXXX;  Nazwisko – YYYYYYNr tel.: XXXXXXXXX;  Uwagi – Kumpel Osoba – 2: Imię – XXXXX;  Nazwisko – YYYYYYNr tel.: XXXXXXXXX;  Uwagi – TeściowaOsoba – 3: Imię – XXXXX;  Nazwisko – YYYYYYNr tel.: XXXXXXXXX;  Uwagi – NauczycielDane mają być wyświetlone z tabeli, którą sam zaprojektuj.Jeżeli miałeś problemy ze zrozumieniem lekcji, masz jakieś pytania lub uwagi, napisz o tym na forum pozwoli to udoskonalić kurs.InformacjaNiniejsza lekcja została pierwotnie opracowana przez Piotra Szawdyńskiego. Autorem późniejszych modyfikacji jest już natomiast Dante, który jednocześnie dołożył swoją cegiełkę w rozwój kursu jak i serwisu.Poprzednia lekcjaKurs C++Następna lekcjaWszelkie prawa zastrzeżone. Autor: Piotr SzawdyńskiWszystkie teksty są chronione prawami autorskimi. Kopiowanie lub rozpowszechnianie treści bez wyraźnej zgody jego autora jest zabronione.PowrótHistoria odwiedzonych stronPanel LogowaniaLogin:Hasło:Zapamiętaj mnie!Zarejestruj sięOdzyskiwanie hasłaUżytkownikówObecnie aktywnych:16Zalogowanych:0Zarejestrowanych:4367Ostatnie 24h:414Non-cookie 24h:3241Wszystkich:264764Ostatnia Aktualizacja2010-11-23 00:46:20 (39 dni temu)Ostatnio aktywniHandy9020 godzPiotr Szawdyński21 godzFletcher37 godzwiew39 godzPietrzuch40 godzmat250149 godzbooncki51 godzRaver74 godzWynajem Sopot - wakacjePokój 2 osobowy 130zł/doba;Lokalizacja: Sopothttp://sopotwynajem.pl


O portaluArchiwumHistoriaIndeksRegulaminWyszukiwarkaLinkiRestauracja "ATOL" - Sopot© Wszelkie prawa zastrzeżone   2005-2011Czas wygenerowania strony: 0.066sAutor: Piotr Szawdyński





Wyszukiwarka

Podobne podstrony:
index1
INDEX1
index1
index1ae2
index11 Report
index1c99
index1
index1890
index1z

więcej podobnych podstron