Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Zdravím,
konečně jsem se dostal k cyklům v C++ a nějak v tom tápu, proto bych si chtěl z tohoto vlákna udělat takovou sbírku řešených příkladů (jestli to nebude někomu z velení/vedení vadit :)
1) Vykreslete šachovnici tak, že bílá políčka jsou reprezentována symbolem "*" a černá " " (začínáme "*").
Ať to ještě upřesním: m je počet řádků a n počet sloupců.
Mým problémem je již samotná algoritmizace.
Při sudém n mi stačí nechat vypisovat sekvence "* " resp. " *" n/2-krát.
Co však nejsem schopen udělat, je nějakým způsobem napsat, aby se na jednom řádku vypisoval jeden typ sekvence a na druhém druhý.
Co s tím?
Díky
Offline
↑ standyk:
Toto sice chápu, ale nějak nevidim, jak to napasovat do toho cyklu.
Offline
↑ byk7:
Neovládam syntax C++, ale keď máš 2 cykly (jeden vnorený v druhom) tak si len zisti či je (i+j) deliteľné dvomi. Ak áno vypíš ... ak nie vypíš ... . Keď skončíš ten vnorený cyklus, chodˇna nový riadok a zase zisťuj či (i+j) je deliteľné 2 .
Skúsil som to napíš v nejakom pseudokóde:
for(i from 1 to m){ for(j from 1 to n){ if( (i+j) mod 2 = 0) write("*"); else write(" "); } newline; }
Offline
↑ standyk:
aha :)
takže vubec nepotřebuju rozlišovat ty případy, jak jsem psal ↑ výš: ? to je paráda :)
Offline
↑ byk7:
Mohol by si to robiť aj tak ako si to asi chcel, že najprv by si si vytvoril reťazec dĺžky n+1, napríklad ababababababab . A potom by si v druhom cykle vyberal jednotlivé podreťazce, ktoré by si vypisoval pod seba.
ababababababab
ababababababab
ababababababab
...
V tomto prípade by tie cykly neboli vnorené.
Offline
↑ standyk:
tak jsem vytvořil toto
while(i<=m){ while(j<=n){ if((i+j)%2==0) cout << "*"; else cout << " "; j=j+1; } i=i+1; cout << endl; }
(pokud neni neco jasne, vysvětlím)
problémem je, že toto mi na první řádek vypíše to, co chci,
ale potom už to píše jen samé mezery
nějak nevidím v čem je chyba
Offline
↑ standyk:
tak jsem to napsal podle tvoji rady, ale pořád to není správně
pro m=n=5 to udělá tohle
* * * * * * * * * * * * * * *
ach jo
Offline
↑ byk7:
No keďže v Tvojich podmienkach je dovolená rovnosť, tak sa nebude nulovať ale "jednotkovať"
i = 1; j = 1; while(i<=m){ while(j<=n){ if((i+j)%2==0) cout << "*"; else cout << " "; j=j+1; } i=i+1; cout << endl; j = 1; }
Offline