Lepší zápis podmínky – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Lepší zápis podmínky – C / C++ – Fórum – Programujte.comLepší zápis podmínky – C / C++ – Fórum – Programujte.com

 

Kuba
~ Anonymní uživatel
59 příspěvků
1. 11. 2012   #1
-
0
-

Zdravím,

ve škole jsem měl za úkol napsat podmínku (zbytek programu byl předepsaný), která do dvourozměrného pole znaků o N*N prvcích vepíše hvězdičky na řádky, jejichž index je dělitelný třemi nebo pěti, ale není dělitelný třemi i pěti zároveň. Přišel jsem na 3 způsoby řešení, které vedou ke správnému výsledku, možná i víc, ale teď si vzpomínám jenom na ty 3. Každé z těch řešení bylo označeno za špatné a dostal jsem 0 bodů z 20 možných. Co je na tom špatně a jak byste to napsali vy?

#include <iostream>
using namespace std;

const int N = 8;

char Grid[N][N];

void ClearGrid()
{
    for(int i = 0; i < N; i++)
        for(int j = 0; j < N; j++)
            Grid[i][j] = ' ';
}

void Star(const int Row, const int Column)
{
    if (0 <= Row && Row < N && 0 <= Column && Column < N)
        Grid[Row][Column] = '*';
    else
        cout << "Row or column is out of valid range!" << endl;
}

void PrintGrid()
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
            cout << Grid[i][j];
            cout << endl;
    }
    cout << endl;
}

void main()
{
    ClearGrid();
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            if ((i % 3 == 0 || i % 5 == 0) && (i % 3 != 0 || i % 5 != 0)) // moje 1. reseni
            // moje 2. reseni: if ((i % 3 == 0 && i % 5 != 0) || (i % 5 == 0 && i % 3 != 0))
            // moje 3. reseni: if ((i % 3 == 0 || i % 5 == 0) && i % 15 != 0)  
                Star(i, j);
        }
    }
    PrintGrid();
}

Nahlásit jako SPAM
IP: 84.42.156.–
vitamin+8
Grafoman
1. 11. 2012   #2
-
0
-

Ty si testoval len index i a zabudol si na index j

edit: neviem ako vahu ma u vas 1 bod, ale za to bolo fakt 20 bodov?

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
zlz
~ Anonymní uživatel
634 příspěvků
1. 11. 2012   #3
-
0
-

   

if ((i % 3 == 0) ^ (i % 5 == 0))
{
    for(int j=0; j<N; j++)
    {
        Star(i, j);
    }
}
Nahlásit jako SPAM
IP: 80.188.216.–
Kuba
~ Anonymní uživatel
59 příspěvků
1. 11. 2012   #4
-
0
-

#2 vitamin
Proč bych měl testovat index j? i je řádek a j je sloupec, hvězdičky se mají vypsat na celý řádek, takže pro všechny j

Nahlásit jako SPAM
IP: 84.42.156.–
vitamin+8
Grafoman
1. 11. 2012   #5
-
0
-

Mozno chceli daco taketo:

if ( (!(i % 3) ^ !(i % 5)) && (!(j % 3) ^ !(j % 5)))Star(i, j);

//alebo:

if ( (!(i % 3) ^ !(i % 5)) || (!(j % 3) ^ !(j % 5)))Star(i, j);

Na skolskych prikladoch je najtazsie zistit co od teba chcu, nie to spravyt.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Kuba
~ Anonymní uživatel
59 příspěvků
1. 11. 2012   #6
-
0
-

#3 zlz
To vypadá líp, ale v tom "správném" řešení nemá být ^, mělo by stačit || a &&. Podle rady cvičícího z posledních minut času by to mělo být:
if (i % 3 == 0 || i % 5 == 0 && i % 3 != 0) a stačí správně dopsat závorky. Ty ale nejsem schopný napsat tak, aby to vycházelo správně.

Nahlásit jako SPAM
IP: 84.42.156.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 15 hostů

Podobná vlákna

Co je lepší? — založil peťan

Co je lepsi? — založil office

Lepší directsound — založil honzik31

Která je lepší — založil Roman

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý