Kezdőoldal » Számítástechnika » Programozás » Miért van az, hogy néha...

Miért van az, hogy néha egymást nem érintő mezőket tekint "hajónak" a program? (pl. : 3:5 és 4:1)

Figyelt kérdés

Ne szóljatok le, ez az első komolyabb kódom. A switchek azért vannak benne, mert amúgy nem generált pl.: 3-masokat. Azt is tudom, hogy néhány lehetőséget soha nem fog legenerálni (pl.: 5:5 és 4:5 egyszerre), ezen majd még javítok. A kód:


#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[])

{

int tabla[4][4] = {0}, szam1, szam2, szam3;

srand(time(NULL));

szam1 = rand()%1000;

switch(szam1 % 4){

case 0: szam1 = 0;break;

case 1: szam1 = 1;break;

case 2: szam1 = 2;break;

case 3: szam1 = 3;break;

}

szam2 = rand()%1000;

switch(szam2 % 4){

case 0: szam2 = 0;break;

case 1: szam2 = 1;break;

case 2: szam2 = 2;break;

case 3: szam2 = 3;break;

}

tabla[szam1][szam2] = 1;

szam3 = rand()%1000;

switch(szam3 % 2){

case 0: szam3 = 0;break;

case 1: szam3 = 1;break;

}

if(szam3 == 0)

szam1 = szam1 + 1;

else

szam2 = szam2 + 1;

tabla[szam1][szam2] = 1;

szam3 = 0;

printf("Rajta! Adj meg a koordinatait a kiloni kivant teruletnek!");

do{

printf("\nx: ");

scanf("%d",&szam1);

printf("y: ");

scanf("%d",&szam2);

szam1 = szam1 - 1;

szam2 = szam2 - 2;

if(tabla[szam1][szam2] == 1){

printf("Talalt!");

szam3 = szam3 + 1;

}

else

printf("Nem talat!");

}while(szam3 != 2);

printf("Sullyedt!\n");

scanf("%d",&szam1);

}



2014. júl. 20. 00:31
1 2
 1/13 A kérdező kommentje:
Torpedóról van szó, kettes hajókkal. Azt kifelejtettem.
2014. júl. 20. 00:33
 2/13 anonim ***** válasza:

Ez a tipikus: rosszat akartál csinálni, és még rosszul is csináltad.

Azt a mod 1000 mod 4-et végképp nem értem, de hogy minek a switch azt se.

Meg úgy kb semmit.

2014. júl. 20. 01:48
Hasznos számodra ez a válasz?
 3/13 A kérdező kommentje:
Eredetileg csak % 3 volt. De úgy nem adta ki 0-3 ig a számokat. Ez nem tudom miért történt, ezért tettem bele a switcheket. Az a része stimm, csak hülyén megfogalmazva. Az említett hiba utána volt.
2014. júl. 20. 02:42
 4/13 anonim ***** válasza:
100%

A %3 valószínűleg azért nem adta ki a 0-3 számokat, mert hárommal osztva soha nem lesz három a maradékod.

szam1 = rand()%4; <-ez pótolna 7 sort.


A végén a szam3 feladata megváltozik, ez borzasztóan csúnya. Inkább most az elején szokj le róla, illetve szokj rá a beszédesebb változónevekre. (x, y, direction, hits)


szam1 = szam1 - 1;

szam2 = szam2 - 2;

Ez a 2 sor pedig nem is értem mit csinál.


Azt viszont egyáltalán nem vizsgálod, hogy hol van vége a pályának. Lazán berakod a [0,3] tömb 4. oszlopába&sorába a hajót, aztán nem csoda hogy nem találja el. Ellenőrzésképpen rajzold ki magadnak a táblát a felpítés után, hátha ki tudod egészíteni.

2014. júl. 20. 03:19
Hasznos számodra ez a válasz?
 5/13 A kérdező kommentje:

A szam2 = szam2 + 2 az valójában plusz egy. Ezt egyből javítottam a kódban, de sajna ide így került ki. Azért mert koordinátának nem szokott az ember megadni 0-át, de indexelni onnan kezd.


Akkor ezentúl új változót használok rá! Köszönöm a tanácsod, két napja ismerkedem a nyelvvel tehát nagyon sok még a hiányosságom. Ha kompaktabban és használhatóban megírom akkor még kiteszem ide, hogy legyen valami visszajelzésem arról, hogy hogyan sikerült.

2014. júl. 20. 03:43
 6/13 anonim ***** válasza:
55%
Ez az év okádék kódja, grat!
2014. júl. 20. 08:55
Hasznos számodra ez a válasz?
 7/13 A kérdező kommentje:

One More String: Köszönöm az építő jellegű kritikád. Te elsőre tökéletes kódot írtál.


Addig is megpróbáltam javítani a dolgon, gondolom ez is hibás, de csak kevésbé.

#include <stdio.h>

#include <stdlib.h>


int main(int argc, char *argv[])

{

int tabla[4][4] = {0}, x, y, irany, kilott = 0;

srand(time(NULL));

x = rand()%5;

y = rand()%5;

irany = rand()%2;

tabla[x][y] = 1;

switch(irany % 2){

case 0: if(x < 4)

x = x + 1;

else

x = x - 1;break;

case 1: if(y < 4)

y = y + 1;

else

y = y - 1;break;

}

tabla[x][y] = 1;

printf("Rajta! Adj meg a koordinatait a kiloni kivant teruletnek! (0-4 ig)\n");

do{

do{

printf("x: ");

scanf("%d",&x);

}

while(x > 4 || x < 0);

do{

printf("y: ");

scanf("%d",&y);

}while(y > 4 || y < 0);

if(tabla[x][y] == 1){

printf("Talalt!\n");

kilott = kilott + 1;

}

else

printf("Nem talat!\n");

}while(kilott < 2);

printf("Sullyedt!\n");

}


Nem tud nagyobb számod se megadni, minden lehetőség legenerálódik (még nem ugyanolyan eséllyel) és a véletlenszerű kiválasztásnál a hülyeségeket kiszedtem.

2014. júl. 20. 13:25
 8/13 anonim ***** válasza:

Ha működik, akkor jó.

Most függvények használatával varázsold szebbé, olvashatóvá!

2014. júl. 20. 13:29
Hasznos számodra ez a válasz?
 9/13 anonim ***** válasza:

Kezd jó lenni, +1 a függvényekhez.


Más:

* ha [0,4] szeretnéd a tábládat, akkor int tabla[5][5] kell neked, különben túlindexeled.

* x = x+1; -> ++x; (Pre- és posztinkremens operátor valamilyen következő leckéből.)

* ha a lépés 0 vagy 1, akkor a switchen belül már nem kell a kettes maradékát venni

* [link] ide tedd fel, ez megtartja a formázást és olvashatóbb lesz nekünk is.

2014. júl. 20. 13:46
Hasznos számodra ez a válasz?
 10/13 A kérdező kommentje:

Tagolva olvashatóbb. Csak sajnos azt nem támogatja a gyakori.


[link]


Amúgy milyen függvényekkel és hogyan? Tényleg kezdő vagyok.

2014. júl. 20. 13:46
1 2

Kapcsolódó kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!