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

[C++] Pętla Do While kończy się niespodziewanie - prosze o pomoc z warunkiem petli

Ostatnio zmodyfikowano 2015-12-01 13:59
Autor Wiadomość
gz08
Temat założony przez niniejszego użytkownika
» 2015-11-27 20:56:36
Oto i cały kod:
C/C++
#include <iostream>
#include <string.h>     //Nie zapomnij aktualizowac
#include <string>       //"Kolko i krzyzyk"
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <conio.h>

int wybor;





using namespace std;

int gra()
{
   
    int wybor_pola = 0;
   
    int test = 0;
   
   
    int pole1 = 0;
    int pole2 = 0;
    int pole3 = 0;
    int pole4 = 0;
    int pole5 = 0;
    int pole6 = 0;
    int pole7 = 0;
    int pole8 = 0;
    int pole9 = 0;
    bool wartosc_ifa = 0;
    bool wartosc_ifa2 = 0;
   
   
   
   
   
   
   
   
   
   
    do
    {
       
       
       
       
       
        do
        {
           
           
            cout << endl << endl << endl << endl << "Ruch 1" << endl;
            cout << "Przed ruchem:" << endl;
            cout << "   |   |   " << endl << " " << pole1 << " | " << pole2 << " | " << pole3 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole4 << " | " << pole5 << " | " << pole6 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole7 << " | " << pole8 << " | " << pole9 << " " << endl << "   |   |   ";
            cout << "Wybieram pole: ";
            cin >> wybor_pola;
            switch( wybor_pola )
            {
            case 1:
                if( pole1 == 0 )
                {
                    pole1 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
               
            case 2:
                if( pole2 == 0 )
                {
                    pole2 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 3:
                if( pole3 == 0 )
                {
                    pole3 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 4:
                if( pole4 == 0 )
                {
                    pole4 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 5:
                if( pole5 == 0 )
                {
                    pole5 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 6:
                if( pole6 == 0 )
                {
                    pole6 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 7:
                if( pole7 == 0 )
                {
                    pole7 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 8:
                if( pole8 == 0 )
                {
                    pole8 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 9:
                if( pole9 == 0 )
                {
                    pole9 = 1;
                    wartosc_ifa = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
                default: cout << "Nie ma takiego pola!"; break;
            }
           
           
           
           
        } while( wartosc_ifa != 1 );
       
        cout << "Po ruchu 1:" << endl << "   |   |   " << endl << " " << pole1 << " | " << pole2 << " | " << pole3 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole4 << " | " << pole5 << " | " << pole6 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole7 << " | " << pole8 << " | " << pole9 << " " << endl << "   |   |   ";
        wartosc_ifa = 0;
       
        do
        {
           
           
            cout << endl << endl << endl << endl << "Ruch 2" << endl;
            cout << "Przed ruchem:" << endl;
            cout << "   |   |   " << endl << " " << pole1 << " | " << pole2 << " | " << pole3 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole4 << " | " << pole5 << " | " << pole6 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole7 << " | " << pole8 << " | " << pole9 << " " << endl << "   |   |   ";
            cout << "Wybieram pole: ";
            cin >> wybor_pola;
            switch( wybor_pola )
            {
            case 1:
                if( pole1 == 0 )
                {
                    pole1 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
               
            case 2:
                if( pole2 == 0 )
                {
                    pole2 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 3:
                if( pole3 == 0 )
                {
                    pole3 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 4:
                if( pole4 == 0 )
                {
                    pole4 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 5:
                if( pole5 == 0 )
                {
                    pole5 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 6:
                if( pole6 == 0 )
                {
                    pole6 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 7:
                if( pole7 == 0 )
                {
                    pole7 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 8:
                if( pole8 == 0 )
                {
                    pole8 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            case 9:
                if( pole9 == 0 )
                {
                    pole9 = 2;
                    wartosc_ifa2 = 1;
                   
                }
                else
                {
                    cout << "To pole jest juz zajete!";
                }
                break;
            }
           
           
           
           
        } while( wartosc_ifa2 != 1 );
       
        cout << endl << "Po ruchu 2:" << endl << "   |   |   " << endl << " " << pole1 << " | " << pole2 << " | " << pole3 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole4 << " | " << pole5 << " | " << pole6 << " " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " " << pole7 << " | " << pole8 << " | " << pole9 << " " << endl << "   |   |   ";
        wartosc_ifa2 = 0;
       
    } while(( pole1 && pole2 && pole3 ) ||( pole1 && pole4 && pole7 ) ||( pole1 && pole5 && pole9 ) ||( pole2 && pole5 && pole8 ) ||( pole3 && pole5 && pole7 ) ||( pole3 && pole6 && pole9 ) ||( pole4 && pole5 && pole6 ) ||( pole7 && pole8 && pole9 ) == 0 );
   
    cout << endl << "Gratulacje Wygrywasz Gre!!!";
    getch();
   
    return 0;
   
   
}






int main()
{
   
   
   
   
   
    do
    {
       
       
        cout << "Witaj w wersji alfa gry komputerowej," << endl << "ktora jest cyfrowa wersja popularnej gry kolko i krzyzyk" << endl;
        getch();
        Beep( 130, 900 );
        system( "cls" );
        cout << "MENU START:" << endl << "1. Nowa gra" << endl << "2. Pomoc" << endl << "3. Tworcy" << endl << "0. Wyjscie" << endl << endl << endl << "Moj wybor to: ";
        cin >> wybor;
        system( "cls" );
        switch( wybor )
        {
        case 1: gra(); break;
        case 2:
            cout << "Pola ponumerowane sa w sposob podany nizej na ilustracji. Aby wybrac dane pole wystarczy podac jego numer." << endl << "   |   |   " << endl << " 1 | 2 | 3 " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " 4 | 5 | 6 " << endl << "   |   |   " << endl << "-----------" << endl << "   |   |   " << endl << " 7 | 8 | 9 " << endl << "   |   |   " << endl << "W grze mamy do wyboru dwa znaki 1 albo 2. Wyboru dokonuje sie pomiedzy graczami tzn.: kto zanczyna gre jest 1";
            getch();
            break;
        case 3:
            cout << "Gra powstala dzieki:" << endl << endl << "1.Grzegorz Zielonka" << endl << "2.Tak jak wyzej" << endl << "3.Patrz punkt pierwszy" << endl << "4.Grzego... a zagalopowalem sie ;-) sorry" << endl << endl;
            getch();
            system( "cls" );
            break;
        case 0: return 0;
        case 250502:
            cout << "To jest ukryta zawartosc." << endl << "Cos wiecej sie wymysli w trakcie.";
            getch();
            default:
            cout << "Hej sa tu tylko 'trzy' opcje!!!";
            getch();
        }
    } while( wybor != 1 );
   
   
   
   
   
   
   
    return 0;
   
}
P-140950
carlosmay
» 2015-11-27 21:17:05
W obecnej postaci warunek będzie spełniony dla wartości '1' i '2', oraz
C/C++
( pole1 && pole5 && pole9 )
 powoduje, że warunek będzie zawsze prawdziwy. Wystarczy podać pierwszy ruch i pętla nigdy się nie skończy.
( pole1 == pole2 && pole2 == pole3 ) ||( pole1 == pole4 && pole4 == pole7 )
 to tak mniej więcej zadziała.
Oczywiście całość musisz zanegować.
P-140953
gz08
Temat założony przez niniejszego użytkownika
» 2015-11-27 21:20:43
Dzięki za pomoc. Jutro napisze czy działa u mnie :-)
P-140955
Bornegio
» 2015-11-28 13:54:50
Moim skromnym i niedoświadczonym zdaniem wyszedł straszny potworek, to może dam ci kilka rad. Po pierwsze pole zapisz w tablicy jednowymiarowej. Typu np. int, albo od razu string i będzie prościej. Potem napisz funkcję odpowiadającą za sprawdzanie, czy warunek skończenia gry nie został spełniony (3 w rzędzie).

Tę funkcję jest napisać całkiem prosto, może to być funkcja bool, która zwraca true, jeśli gra skończona, albo false, jeśli nie. Może wyglądać np tak.

Zakładając, że mamy jednowymiarową tablicę stringów o nazwie plansza[], którą funkcja może przyjąć jako argument, albo po prostu może być tablicą globalną.

Funkcja w takim wypadku mogłaby wyglądać tak:

bool CzyKoniec(sting plansza[])
{
     //spradza pion i poziom za pomoca petli for
     for (int i = 0; i < 3; i++)
     {
          //sprawdza w pionie
          if (plansza =! " " && plansza == plansza[i+3] && plansza == plansza[i+6])
               return true;
          //sprawdza w poziomie
          if (plansza[i*3] =! " " && plansza[i * 3] == plansza[i * 3 + 1] && plansza == plansza[i * 3 + 2])
               return true;
     }//koniec petli for

     //sprawdza skosy porównując do środkowego oczka w planszy
     if (plansza[4] != " " && plansza[4] == plansza[0] && plansza[4] == plansza[8])
          return true;
     if (plansza[4] != " " && plansza[4] == plansza[2] && plansza[4] == plansza[6])
          return true
     else
          return false;
}

Po drugie nie musisz sprawdzać za każdym razem, czy wybrane pole jest zajęte, bo masz tablicę i robisz warunek, ze jeśli wybrane pole nie jest puste (czyli jest różne od " "), to wyskakuje komunikat, że jest zajęte i nie pozwala tam nadpisać i prosi o ponowne wykonanie ruchu.

Po trzecie za pomocą pętli for możesz napisać prostą funkcję, która czyści plansze. Wystarczy, że pętla for przeleci po każdym polu planszy i przypisze mu " " i będziesz mógł ją wywołać w każdej chwili komendą.

Do tego możesz napisać osobną funkcję wyświetlającą planszę i poprawisz tym sposobem czytelność kodu. Sam jak się uczyłem podstaw to napisałem Kółko krzyżyk, tylko, że z opcją gry przeciwko Ai, albo przeciwko drugiemu graczowi. Znajdę to podeślę


P-140984
reju89
Problem z odpaleniem programu
» 2015-11-28 14:39:17
Witam
Jestem początkujący i właśnie przerabiam kurs c++ od podstaw. Potrzebuje pomocy. Pisze program z przykładu:
#include <iostream>
#include <cstdio>
int main ()
{
    std::cout << "t\ tekst \"C:\\Hej\\ho.txt.\"" << std::endl;
    printf( "Uczymy sie \" pisac \t tekst C:\\Hej\\ho.txt. w stylu C\n" );
    printf( "\n\na tu konczymy zabawe" );
    std::cout << std::endl << std::endl << "zrob sobie przerwe :)" << std::endl;

    return 0;
}
I nie mogę bo odpalić w sumie żadnego programu nie mogę odpalić.
Napisałem tak jak było w zadaniu i niby pokazuje ze wszystko ok ale jak odpalam to nic się nie wyświetla tylko czarne tło.
Napisałem :
#include <iostream>
#include <cstdio>
int main ()
{
    std::cout << "==============" << std::endl;
    printf( "= To proste! =\n" );
    std::cout << "==============" << std::endl;
    std::cout << "\t A jak to zrobic?\"" << std::endl;
    printf( "Koniec");

    return 0;
}

P-140987
carlosmay
» 2015-11-28 15:34:41
Witam
Jestem początkujący i właśnie przerabiam kurs c++ od podstaw. Potrzebuje pomocy.
 
Załóż własny temat. Jeden temat, jeden problem.
Większa szansa na odpowiedź.
P-140996
gz08
Temat założony przez niniejszego użytkownika
» 2015-11-28 19:36:37
Bornegio dzięki za rade, ale ja po prostu nie byłem w stanie z moją wiedzą na temat c++ napisać czegoś mniej "potwornego". Jest to spowodowane tym, że ze względu na moje wrodzone lenistwo, choć uczę się c++ od 2 lat nie ukończyłem do tej pory w 100% żadnego kursu programowania w tymże języku.
P-141018
gz08
Temat założony przez niniejszego użytkownika
» 2015-11-28 19:50:29
Niestety warunek:
C/C++
do
.
.
.
while( !( pole1 == pole2 && pole2 == pole3 ) ||( pole1 == pole4 && pole4 == pole7 ) ||( pole1 == pole5 && pole5 == pole9 ) ||( pole2 == pole5 && pole5 == pole8 ) ||( pole3 == pole5 && pole5 == pole7 ) ||( pole3 == pole6 && pole6 == pole9 ) ||( pole4 == pole5 && pole5 == pole6 ) ||( pole7 == pole8 && pole8 == pole9 ) );

także nigdy się nie kończy.
P-141022
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona