Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

koniec programu po if pomiomo pentli c++


Rekomendowane odpowiedzi

Opublikowano

Hej jestem początkującym programistą i prosze was o wytłumaczeniu czemu tak działa program i jak powinien wyglądać dobrze zbudowany :D

#include<iostream>
#include<cstdio>
#include<conio.h>
#include<cstdlib>
#include<ctime>

int main()
{
 srand(time (NULL));
 int losowa=(std::rand() %999)+1;
 int a;//inicjuje zmienne
 int s=0;
 std::cout<<"Witam w grze"<<std::endl;
 std::cout<<"Losuję liczbę z przedziału 1 do 1000"<<std::endl;
 std::cout<<"Wpisz liczbę"<<std::endl;
 do
 {
  std::cin>>a;
  if(a>0 && a<1001)//Sprawdza czy liczba jest prawidłowa
  {
   if(a<losowa)// jesli podana liczba jest za mala
   {
    std::cout<<"Za mało"<<std::endl;
    std::cout<<"Spróbuj jeszcze raz"<<std::endl;
   }
   if(a>losowa)//jesli podana liczba jest za duża
   {
    std::cout<<"Za dużo"<<std::endl;
    std::cout<<"Spróbuj jeszcze raz"<<std::endl;
   }
   if(a==losowa)//kiedy trafiłeś
   {
    std::cout<<"Gratulacje trafiłeś";
   }
  }
  else
  {
   std::cout<<"Podałeś nieprawidłowy znak"<<std::endl;
  }
  s++;
 }while(a==losowa);
 getch();
 return 0;
}

Program działa tak: losuje liczbę każe mi ją podać po czym pisze mi czy za dużo czy za mało i jak chcę oddać kolejny strzał to konsola się zamyka :(

Opublikowano
#include<iostream>
#include<cstdio>
#include<conio.h>
#include<cstdlib>
#include<ctime>

int main()
{
srand(time (NULL));
int losowa=(std::rand() %999)+1;
int a;//inicjuje zmienne
int s=0;
std::cout<<"Witam w grze"<<std::endl;
std::cout<<"Losuję liczbę z przedziału 1 do 1000"<<std::endl;
std::cout<<"Wpisz liczbę"<<std::endl;
do
{
std::cin>>a;
if(a<1001)//Sprawdza czy liczba jest prawidłowa
{
if(a<losowa)// jesli podana liczba jest za mala
{
std::cout<<"Za mało"<<std::endl;
std::cout<<"Spróbuj jeszcze raz"<<std::endl;
}
if(a>losowa)//jesli podana liczba jest za duża
{
std::cout<<"Za dużo"<<std::endl;
std::cout<<"Spróbuj jeszcze raz"<<std::endl;
}
if(a==losowa)//kiedy trafiłeś
{
std::cout<<"Gratulacje trafiłeś";
}
}
else
{
std::cout<<"Podałeś nieprawidłowy znak"<<std::endl;
}
s++;
}while(a!=losowa);
getch();
return 0;
}

Pętla do...while zwraca negację ;). Warunek kończący to negacja.

Opublikowano

#include<iostream>
#include<cstdio>
#include<conio.h>
#include<cstdlib>
#include<ctime>

int main()
{
srand(time (NULL));
int losowa=(std::rand() %999)+1;
int a;//inicjuje zmienne
int s=0;
std::cout<<"Witam w grze"<<std::endl;
std::cout<<"Losuję liczbę z przedziału 1 do 1000"<<std::endl;
std::cout<<"Wpisz liczbę"<<std::endl;
do
{
std::cin>>a;
if(a>0 && a<1001)//Sprawdza czy liczba jest prawidłowa
{
if(a<losowa)// jesli podana liczba jest za mala
{
std::cout<<"Za mało"<<std::endl;
std::cout<<"Spróbuj jeszcze raz"<<std::endl;
}
if(a>losowa)//jesli podana liczba jest za duża
{
std::cout<<"Za dużo"<<std::endl;
std::cout<<"Spróbuj jeszcze raz"<<std::endl;
}

}
if(a==losowa)//kiedy trafiłeś
std::cout<<"Gratulacje trafiłeś";
}
}
else
std::cout<<"Podałeś nieprawidłowy znak"<<std::endl;
}

}
s++;
}while(a==losowa);
getch();
return 0;
} Program

 

Zobacz tak

Opublikowano

Bo pętla wykonuje się, dopóki warunek jest spełniony.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

#include<iostream>

#include<cstdio>

#include<conio.h>

#include<cstdlib>

#include<ctime>

 

int main()

{

srand(time (NULL));

int losowa=(std::rand() %999)+1;

int a;//inicjuje zmienne

int s=0;

std::cout<<"Witam w grze"<<std::endl;

std::cout<<"Losuję liczbę z przedziału 1 do 1000"<<std::endl;

std::cout<<"Wpisz liczbę"<<std::endl;

do

{

std::cin>>a;

if(a>0 && a<1001)//Sprawdza czy liczba jest prawidłowa

{

if(a<losowa)// jesli podana liczba jest za mala

{

std::cout<<"Za mało"<<std::endl;

std::cout<<"Spróbuj jeszcze raz"<<std::endl;

}

if(a>losowa)//jesli podana liczba jest za duża

{

std::cout<<"Za dużo"<<std::endl;

std::cout<<"Spróbuj jeszcze raz"<<std::endl;

}

}

if(a==losowa)//kiedy trafiłeś

std::cout<<"Gratulacje trafiłeś";

}

}

else

std::cout<<"Podałeś nieprawidłowy znak"<<std::endl;

}

}

s++;

}while(a==losowa);

getch();

return 0;

} Program

 

Zobacz tak

Po co dodajesz kod, który nie działa?

 

nie rozumiem czemu mimo pętli program po instrukcji if się zamyka :(

@tvardy12, błąd polega na tym, że w lini numer 41 jest mały błędzik, który powoduje odwrotne działanie.

Linia 41 to:

}while(a==losowa);

Powyższy zapis oznacza w skrócie: wykonuj pętlę do...while tak długo, aż zmienna a będzie różna od zmiennej losowa. Oznacza to, że po wpisaniu jakiejkolwiek liczby, pętla się zakończy, bo warunek zostanie spełniony.

Dlaczego tak się dzieje? Po prostu warunek kończący w pętli do...while to negacja (przeciwieństwo).

Jak to naprawić? Wystarczy zmienić jeden znak :D.

}while(a!=losowa);

!= to inaczej negacja (odwrotność).

Zatem negacja (warunek kończący pętlę do...while) negacji (zapis !=) jest równy zapisowi równości (==).

Opublikowano
}while(a==losowa);

Powyższy zapis oznacza w skrócie: wykonuj pętlę do...while tak długo, aż zmienna a będzie różna od zmiennej losowa.

 

 

Chyba właśnie odwrotnie: dopóki zmienna a będzie równa zmiennej losowa, wykonuj pętle.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

Warunek kończący pętlę do...while to negacja.

 

 

No tak,dopiero teraz zdałem sobie sprawę że mówimy cały czas o jednym, tylko właśnie z różnych perspektyw. Wydaje mi się, że moja jest nieco klarowniejsza, gdyż "while" tłumaczy się jako "dopóki", "podczas gdy":


bool trwa = true;

while(trwa){
   //kod będzie się powtarzał dopóki zmienna trwa jest prawdą
   //z pętli można wyjść poprzez zmianę wartości zmiennej:
   trwa = false;
   //bądź poprzez słówko kluczowe:
   break;
   //w tym drugim przypadku pętla zakończy się na słowie break.
}

No i to dotyczy każdej pętli, nie tylko do... while.


Pomagam w projektach dotyczących programowania (C++/C/Java/C#/inne). Jak masz jakiś problem, napisz do mnie, wspólnie poszukamy rozwiązania ;).

Opublikowano

dzieki wszystkim za pomoc wreszcie zrozumiałem :D Lecą like temat do zamknięcia

 

@Edit

Zmienna s miała pokazywać na końcu programu liczbę strzałów zapomniałem o niej :)

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...