• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Początkujący- zadanie z książki Alexa Allana.

Object Storage Arubacloud
0 głosów
174 wizyt
pytanie zadane 6 lutego 2017 w C i C++ przez PawelR Nowicjusz (140 p.)

Witam! Jestem na początku mojej przygody z programowaniem. Uczę się z filmików pana Mirosława Zelenta  i z książki pana Alexa Allana " C++. Przewodnik dla początkujących". Jestem przy pętlach while, for i do-while i mam do rozwiązania zadanie: Napisz program, który drukuje pełny tekst piosenki "99 Bottles of Beer".

#include <iostream>

using namespace std;

int main()

{
int x=99;
while(x>=3)
{
cout<< x << " bottles of beer on the wall, "<<x<< " bottles of beer ."<< endl;

x--;
cout<< " Take one down and pass it around, " << x <<" bottles of beer on the wall. "<<endl; //tutaj przerywam pętle

}
cout<< x <<" bottles of beer on the wall, "<< x <<" bottles of beer. "<<endl; //tutaj piszę od nowa
x--;
cout<< " Take one down and pass it around, " << x <<" bottle of beer on the wall. "<<endl; //bo tu już nie ma "bottles", tylko "bottle"
cout<< x <<" bottle of beer on the wall, "<<x<<" bottle of beer. "<<endl; 
cout<<" Take one down and pass it around, no more bottles of beer on the wall. "<<endl;
{
int x =99;

cout<<"No more bottles of beer on the wall, no more bottles of beer. "<<endl;
cout<<" Go to the store and buy some more, "<<x<<" bottles of beer on the wall. "<<endl;
}
return 0;






}

1.Czy ten kod, który napisałem- w miarę nada się? 

2. Mam problem ze słowem "bottles". Ogólnie chodzi o to , w piosence mamy najpierw 99 bottles, potem 98, 97.  itd.. Gdy licznik tych butelek dojdzie do momentu, że została jedna butelka, to zamiast słowa "bottles"( liczba mnoga) powinno być użyte słowo "bottle"( liczba poj.). Czy da się w tej pętli jakoś tak zaktualizować to słowo, że gdy odliczanie dojdzie właśnie do tego momentu, że bottles=1, żeby zamiast "bottles" wyświetlało "bottle"?  Jak widzicie , napisałem, tak jak umiałem, ale wydaje mi się, że można to zrobić jakoś prościej. Mam nadzieję, że zadałem pytanie w miarę z sensem i mi pomożecie. 

4 odpowiedzi

0 głosów
odpowiedź 6 lutego 2017 przez niezalogowany
Rozwiazanie jest okej. Jesli dziala to nie powinienes miec do siebie zastrzezen, bo dopiero sie uczysz. Jesli chcialbys stworzyc to wszystko w jednej petli to moglbys zastosowac 2 zmienne typu string ( moglo to jeszcze nie byc wytlumaczone u P. Zelenta) oraz odpowidnio uzyty warunek if ktory sprawdza ze gdy liczba botelek jest mniejsza od zadanej wtedy uzywasz drugiej zmiennej typu string ktora przechowuje slowo "bottle". Na pewno jest jeszcze wiele innych rozwiazan, ale ta mi przyszla pierwsza na mysl :)
Pozdrawiam i mam nadzieje ze pomoglem.
komentarz 6 lutego 2017 przez PawelR Nowicjusz (140 p.)
Ok. Dzięki za odpowiedź.
0 głosów
odpowiedź 6 lutego 2017 przez ofnero Użytkownik (830 p.)
edycja 6 lutego 2017 przez ofnero

Skoro jesteś początkującym, również tak jak ja to możesz zrobić w taki sposób, że pętla wyświetli tekst od 99 do 2, a dla 1 i 0 dopiszesz samemu :P 

#include <iostream>

int main()
{
int x = 99;
do
{
std::cout << x << " bottles of beer on the wall, " << x << " bottles of beer. \n";
std::cout << "Take one down and pass it around, " << x-1 << " bottles of beer on the wall.\n";
std::cout << std::endl;
    x--;
} while(x>1);
std::cout << "1 bottle of beer on the wall, 1 bootle of beer. \n";
std::cout << "Take one down and pass it around, no more bootles of beer on the wall.\n";
std::cout << std::endl;
std::cout << "No more bottles of beer on the wall, no more bootles of beer. \n";
std::cout << "Go to the store and buy some more, 99 bottles of beer on the wall.\n";
std::cout << std::endl;

return 0;
}

 

0 głosów
odpowiedź 6 lutego 2017 przez niezalogowany

Jeśli chodzi o "zaktualizowanie" słowa w pętli, to wystarczy zadeklarować jakąś zmienną typu string i użyć instrukcji warunkowej, która będzie przypisywać do tej zmiennej dane słowo. 

Na przykład w taki sposób: 

#include <iostream>
#include <string> 

using namespace std;

int main() {
	int nZm = 99;
	string sBot;
	while(nZm != 0)	{
		nZm == 1 ? sBot = "bottle" : sBot = "bottles"; 
		// lub inaczej: if(nZm == 1) sBot = "bottle"; else sBot = "bottles";
		cout << nZm << " " << sBot << endl;
		nZm--;
	}
	// system("pause>nul");
	return 0;
}

Imo nie ma jednak sensu robić tego w pętli, bo słowo zmienia się tylko raz, a dodatkowo ostatnie dwie linie tekstu są zupełnie inne. 

0 głosów
odpowiedź 6 lutego 2017 przez Krzysztof Kubas Użytkownik (550 p.)
#include <iostream>

using namespace std;
int main ()
{
int x=99;

   
 
   cout <<x <<" bottles of beer on the wall"<<endl;
       
   cout <<x<< " bottles of beer ."<< endl;
    
    cout<< " Take one down and pass it aurond"<<endl;
   do
    {
  x--;  
    
    cout <<x <<" bottles of beer on the wall"<<endl;
         cout <<x<< " bottles of beer ."<< endl;
    
    cout<< " Take one down and pass it aurond"<<endl;
        }
        while (x>=3);
    
     cout << "1 bottle of beer ."<< endl;
    
    cout<< " Take one down and pass it aurond"<<endl;
    
    
cout<<"No more bottles of beer on the wall, no more bottles of beer. "<<endl;
cout<<" Go to the store and buy some more, "<<endl;
    
    return 0;
    
    
    
    
    
    
    
    
       }

Edytowane  na komórce  ;-)

Myślę że tak będzie oki.
komentarz 11 lutego 2017 przez PawelR Nowicjusz (140 p.)
Ok. Dzięki wszystkim za odpowiedzi, ale już na samym początku mam problem i widzę, że będzie ciężko. Chodzi o to zadanie: "Napisz program służący do weryfikacji haseł, który daje użytkownikowi tylko kilka szans
na podanie poprawnego hasła, dzięki czemu użycie łamacza haseł będzie trudne."

Nie wiem jak mam to napisać. Kompletna pustka w głowie. Próbowałem, próbowałem i nic mi nie wychodzi. Czy to normalne u początkującego, czy to ja po prostu jestem taki głupi?

Podobne pytania

0 głosów
1 odpowiedź 142 wizyt
0 głosów
1 odpowiedź 83 wizyt
0 głosów
2 odpowiedzi 178 wizyt

92,555 zapytań

141,402 odpowiedzi

319,540 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...