Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Umieszczenie ';' po pętli while(...)

Ostatnio zmodyfikowano 2011-08-08 20:58
Autor Wiadomość
Gabr
Temat założony przez niniejszego użytkownika
Umieszczenie ';' po pętli while(...)
» 2007-10-05 18:08:31
Prze przypadek odkryłem coś takiego.
Proszę by podane programy kopiować i uruchamiać aby muc samemu sprawdzić.
Kolega przesłał mi program:

C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int as;
    cout << "Wpisz liczbe pomiedzy 2 a 10, aby zrobic 'robienie'." << endl;
    cin >> as;
    do
    {
        cout << "robienie!" << endl;
        cin >> as;
    } while(( as >= 2 ) &&( as <= 10 ) );
   
    cout << "JUZ NIEE!!" << endl << endl << endl << endl;
    cout << "Kliknij dowolny ass." << endl;
    getch();
    return( 0 );
}

Działa on troche źle bo jeśli na samym początku wpisze się inną luczbę niż jest pożądana to pętla się mimo tego włączy. Trzeba zastosoawać tutaj pętlę while żeby ta wpierw sprawdziała czy zmienna pasuje, a jak tak to się uruchomi. (pętla wyłancza się kiedy wpisze się inną liczbę poza 23456789 i 10, taki był cel i został osiągnięty).

Po wprowadzeniu poprawki:

C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int as;
    cout << "Wpisz liczbe pomiedzy 2 a 10, aby zrobic 'robienie'." << endl;
    cin >> as;
    while(( as >= 2 ) &&( as <= 10 ) )
    {
        cout << "robienie!" << endl;
        cin >> as;
    }
    cout << "JUZ NIEE!!" << endl << endl << endl << endl;
    cout << "Kliknij dowolny ass." << endl;
    getch();
    return( 0 );
}

Program dizała tak jak trzeba. Jednak jeśli nie wybierze się na samym początku pożądanej liczby to pętla się nie włączy bo warunek nie został spełniony.
Przez pomyłką po warunku while dałem średnik:

[li]while((as>=2)&&(as<=10));[/li]

Co mnie zdziwiło program z pętlą while który dział już poprawnie, z średnikiem po warunku działa tak jak ten pierwszy z pętlą do... while.

Czy ktoś mi to wytłumaczy?
P-7
DejaVu
Pętla do...while
» 2007-10-05 20:11:57
za 5min dam odpowiedź :)
/edit:

[tutorial]Pętla do...while działa następująco:
1. wejście do bloku który ma się wykonać
2. wykonanie bloku
3. sprawdzenie warunku wyjścia z pętli.
Szczegółowy opis: http://ddt.pl/kursy/?LessonId=12

W Twoim pierwszym programie robisz następujące kroki:
1. wypisujesz komunikat
2. wczytujesz wartość (cin>>as;)
3. rozpoczynasz pętlę
4. wczytujesz kolejny raz wartość (cin>>as;)
5. wypisujesz komunikat (cout<<"robienie!"<<endl;)
6. sprawdzasz warunek pętli do...while
7. kończysz program.

Kroku nr 2. nie powinno być, a program powinien wyglądać następująco:
C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int as;
    cout << "Wpisz liczbe pomiedzy 2 a 10, aby zrobic 'robienie'." << endl;
    do
    {
        cin >> as;
        cout << "robienie!" << endl;
    } while(( as >= 2 ) &&( as <= 10 ) );
   
    cout << "JUZ NIEE!!" << endl << endl << endl << endl;
    cout << "Kliknij dowolny ass." << endl;
    getch();
    return( 0 );
}
[/tutorial]
P-8
DejaVu
Pętla do...while
» 2007-10-05 20:32:10
[tutorial]
Pętlę do... while możesz wykorzystywać na dwa sposoby:

1. Sposób pierwszy: wiele instrukcji (blok instrunkcji)
C/C++
while(...)
{
}

2. Sposób drugi: jedna instrukcja;
while(...) instrukcja;

Używając zapisu: while((as>=2)&&(as<=10));
informujesz kompilator, że chcesz użyć jednej instrukcji, a ponieważ z reguły każda instrukcja kończy się średnikiem, to program potraktuje, że instrukcja jest między while(...), a średnikiem ;.

W efekcie otrzymujesz pętlę, która działa w nieskończoność.
[/tutorial]
P-9
Gabr
Temat założony przez niniejszego użytkownika
» 2007-10-06 10:09:40
Wiedziałem jak działają te pętle. Nie wiedziałem jednak dlaczego po wstawieniu średnika tak zadziała-teraz wiem.
To jeszcze inne rozwiązanie, które podałeś jest bardzo proste, a mimo tego na nie nie wpadłem.
Dzięki.
P-10
DejaVu
Temat zostaje zamknięty
» 2007-10-06 10:53:05
No to temat można uznać za zamknięty :)
P-11
jankowalski25
<<Removed by admin>>
» 2011-08-08 20:58:06
<<Removed by admin>>
P-38452
« 1 »
  Strona 1 z 1