Matematické Fórum

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

#1 27. 12. 2012 15:43

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Cyklení v C++

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 $m\times n$ 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


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

  • (téma jako vyřešené označil(a) byk7)

#2 27. 12. 2012 15:54 — Editoval standyk (27. 12. 2012 15:55)

standyk
Místo: SR
Příspěvky: 770
Škola: UMB BB
Pozice: študent
Reputace:   55 
 

Re: Cyklení v C++

↑ byk7:

Ahoj,
Nech i je riadiaca premenná cyklu pre riadky a j je riadiaca premenna cyklu pre stlpce. Stačí teda zistiť zvyšok po delení 2 výrazu (i+j). Teda:
$'*' \qquad \Leftrightarrow \qquad (i+j) \equiv_2 0$ a $'\,\,' \qquad \Leftrightarrow \qquad (i+j) \equiv_2 1$

Offline

 

#3 27. 12. 2012 15:58

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Cyklení v C++

↑ standyk:

Toto sice chápu, ale nějak nevidim, jak to napasovat do toho cyklu.


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#4 27. 12. 2012 16:11 — Editoval standyk (27. 12. 2012 16:11)

standyk
Místo: SR
Příspěvky: 770
Škola: UMB BB
Pozice: študent
Reputace:   55 
 

Re: Cyklení v C++

↑ 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:

Code:

for(i from 1 to m){
     for(j from 1 to n){
          if( (i+j) mod 2 = 0) write("*");
               else write(" ");
     }
     newline;
}

Offline

 

#5 27. 12. 2012 16:14

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Cyklení v C++

↑ standyk:

aha :)

takže vubec nepotřebuju rozlišovat ty případy, jak jsem psal ↑ výš: ? to je paráda :)


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#6 27. 12. 2012 16:25

standyk
Místo: SR
Příspěvky: 770
Škola: UMB BB
Pozice: študent
Reputace:   55 
 

Re: Cyklení v C++

↑ 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

 

#7 27. 12. 2012 16:38

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Cyklení v C++

↑ standyk:

tak jsem vytvořil toto

Code:

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


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#8 27. 12. 2012 16:50 — Editoval standyk (27. 12. 2012 16:52)

standyk
Místo: SR
Příspěvky: 770
Škola: UMB BB
Pozice: študent
Reputace:   55 
 

Re: Cyklení v C++

↑ byk7:

Pred koncom toho vonkajšieho cyklu musíš vynulovať počítadlo j, pretože v ďalších riadkoch bude to while(j<=n) vždy FALSE.

Code:

...
i=i+1;
cout << endl;
j = 0;
...

Offline

 

#9 27. 12. 2012 16:58

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Cyklení v C++

↑ standyk:
tak jsem to napsal podle tvoji rady, ale pořád to není správně
pro m=n=5 to udělá tohle

Code:

* * *
* * *
 * * *
* * *
 * * *

ach jo


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

#10 27. 12. 2012 17:07

standyk
Místo: SR
Příspěvky: 770
Škola: UMB BB
Pozice: študent
Reputace:   55 
 

Re: Cyklení v C++

↑ byk7:

No keďže v Tvojich podmienkach je dovolená rovnosť, tak sa nebude nulovať ale "jednotkovať"

Code:

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

 

#11 27. 12. 2012 17:18

byk7
InQuisitor
Příspěvky: 4713
Reputace:   221 
 

Re: Cyklení v C++

anoo :)
diky moc za pomoc


Příspěvky psané červenou barvou jsou moderátorské, šedá je offtopic.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson