• Welcome to TUKE FÓRUM - Fórum pre študentov Technickej Univerzity v Košiciach.
 

ZADANIA Z predmetu PROGRAMOVANIE

Started by psicho, 29.01.2010, 17:40:30

« predchdzajce - alie »

ursus

Quote from: Safyia on  13.04.2010, 16:08:36
Quote from: sulo on  13.04.2010, 08:06:32
Quote from: ursus on  13.04.2010, 03:27:16
nechce sa mi to cele prezerat ale

for(i=0;i<height;i++){
for(j=0;j<width;j++){
world[ i ][j] = newWorld[ i ][j];

     
     }
  }
ale chujovo naplnujes to pole nie? ved je predsa dvojrozmerne

Myslím, že tam pôvodne bolo [ i ][ j ], len sa to nahradilo BBCode kurzívou ;D
Ale i tak, nemozes dat world[ i ][j] = newWorld[ i ][j]; ked nemas nikde definovane world :D Co chces do toho newWrold prepisovat? podla toho pola hore by to malo byt world1[ i ][j] = newWorld[ i ][j];
no no mate pravdu aj s tym bbcode, nestudoval som to;D
So this router walks into the doctor's office...
- Doctor, it hurts when IP.

cenki

Poradil by mi niekto ako mam robit s polozkami v struct?
ak mam napr:

struct karel {
int x;
int y;
int direction;
} k;

a chcel by som pracovat s x, nastavit x na nejake cislo, inkrementovat a pod. Ako to mam vlastne robit?
Viem deklarovat tie hodnoty pomocou:

struct karel k = {1,1,90};

ak pouzijem napr. k.x=5; tak to neberie.

sulo

Quote from: cenki on  15.04.2010, 03:27:09
ak pouzijem napr. k.x=5; tak to neberie.

Malo by to ísť. Akú chybu vypisuje pri kompilácii?

cenki


struct world {
int height;
int width;
int world[MAX_HEIGHT][MAX_WIDTH];
} w;

w.height=5;   //riadok 12
w.width=6;

ak pouzijem napr. toto tak vyhadzuje:
12 C:\...\library.c syntax error before '.' token

sulo

Pravdepodobne máš to priradenie mimo funkcie. Spustiteľný kód musí byť vnútri funkcie, nie len tak voľne pohodený.

void nejakaFunkcia() {
...
w.height=5;
w.width=6;
...
}

cenki

Jaj, fakt, dakujem. Ja som to chcel pouzit mimo funkcie ako globalnu premennu... uz mi to ide spravne.
//edit:
Este ak mozem dat blbu otazku :D
je mozne (resp. mohlo by sa? Ked to funguje) pouzivat namiesto:
int funkcia(){ ... };
iba:
unsigned char funkcia(){ ... };
ak ma funkcia returnovat iba 1 a 0? Kedze int zabera v pameti 4Bajty pricom unsigned char len 1Bajt. Nieje to lepsie setrenie miestom? (Viem ze pri zadani ktore je na programovani to velku vahu nema, ale pre info...)

sulo

Nedá sa jednoznačne povedať, čo je efektívnejšie, keďže každý kompilátor môže generovať iný strojový kód. Všeobecne by malo platiť, že ak chceme číselné hodnoty uložiť napr. do veľkého poľa, pamäťová efektivita je podstatná a mali by sme použiť čo najmenší vhodný typ, napr. char (resp. unsigned char). Pokiaľ máme malé množstvo premenných (typicky jednu) a prevádzame s nimi množstvo aritmetických operácií, mali by sme použiť takú veľkosť premennej, s ktorou procesor natívne pracuje - na x86 je to 32 bitov (int, resp. unsigned int).

V prípade návratovej hodnoty by som odporúčal použiť int, ale v podstate je to jedno, keďže číslené hodnoty sa vracajú v registri EAX bez ohľadu na ich veľkosť.

vojto

Quote from: cenki on  15.04.2010, 15:57:14
Jaj, fakt, dakujem. Ja som to chcel pouzit mimo funkcie ako globalnu premennu... uz mi to ide spravne.
//edit:
Este ak mozem dat blbu otazku :D
je mozne (resp. mohlo by sa? Ked to funguje) pouzivat namiesto:
int funkcia(){ ... };
iba:
unsigned char funkcia(){ ... };
ak ma funkcia returnovat iba 1 a 0? Kedze int zabera v pameti 4Bajty pricom unsigned char len 1Bajt. Nieje to lepsie setrenie miestom? (Viem ze pri zadani ktore je na programovani to velku vahu nema, ale pre info...)

vygoogli si ako je v jazykoch nad cckom definovany bool

luky

ako spraviť aby som nemusel zadávať súradnice ručne ale rovno ich načítalo zo súboru. Cvičiaci mám vravel nejaký príkaz čo treba zadať do prikazoveho riadku a zaň meno textového súboru a karolxxx.exe

sulo

Jedna možnosť je použiť priamo v programe funkcie na prácu so súbormi, v jazyku C je pomerne jednoduché zmeniť funkcie pracujúce so štandardným vstupom na prácu so súbormi.

Čo sa týka príkazového riadku, asi myslíš presmerovanie súboru na štandardný vstup. To sa dá napr. takto (predpokladáme, že vygenerovaný spustiteľný súbor má názov "karel"):
karel < subor_so_svetom.kw

petopetolkoo

typedef struct Robot
{
int x;
int y;
int direction;     
}karel ;



takto som si zadefinoval novy typ Robot
a ked dam napriklad:

karel.x=2;
tak mi k tomu pise chybu
syntax error before '.' token

neviete preco ?
v prikladoch je to takisto ako mam aj ja, ale mne to nejde  ???

Safyia

Quote from: petopetolkoo on  16.04.2010, 22:35:16
karel.x=2;
tak mi k tomu pise chybu
syntax error before '.' token

neviete preco ?
v prikladoch je to takisto ako mam aj ja, ale mne to nejde  ???

Uz sa to riesilo, staci citat...   :P

Quote from: sulo on  15.04.2010, 03:56:39
Pravdepodobne máš to priradenie mimo funkcie. Spustiteľný kód musí byť vnútri funkcie, nie len tak voľne pohodený.

petopetolkoo

aha...ja som to cital pred par dnami, ale nevnimal som to nejak :D :P..
ale aj tak nerozumiem preco to tak ma byt ..
ved ked si dam napriklad int a=10; mimo seckeho a mi to funguje tak preco nefunguje moj novy typ =10 ?  :P ..nerozumiem tomu

sulo

Lebo inicializácia premennej (priradenie počiatočnej hodnoty) sa môže vyskytovať len spolu s jej definíciou (určenie typu, názvu, vyhradenie miesta v pamäti).

Mimo funkcie teda môže byť:

int a = 10;

Ale už nie:
a = 10;

, lebo to je obyčajný príkaz priradenia a nie inicializácia.

petopetolkoo

#289
aha..ok ..dakujem za vysvetlenie.
.
a viem z tych karel.x a karel.y urobit nejako globalne premenne ?..l ???

Safyia

Quote from: petopetolkoo on  17.04.2010, 01:22:04
aha..ok ..dakujem za vysvetlenie.
.
a viem z tych karel.x a karel.y urobit nejako globalne premenne ?..l ???


typedef struct Robot
{
int x=3;
int y=4;
int direction=90;     
}karel ;



???  ;D

sulo

Ešte niečo - ak chceš rovno definovať aj premennú (resp. premenné), mal by si odstrániť kľúčové slovo typedef. Alebo, pokiaľ chceš použiť typedef, tak potom takto:

typedef struct {
...
} NOVY_TYP;

NOVY_TYP premenna;

petopetolkoo

QuoteKód:
typedef struct Robot
{
int x=3;
int y=4;
int direction=90;     
}karel ;
 
Safya takto mi to nejde ..neviem ci je chyba u mna ale ked to dam takto tak mi pise toto
no semicolon at end of struct or union


to sulo: jj, to mam

sulo

Quote from: Safyia on  17.04.2010, 01:37:44
typedef struct Robot
{
int x=3;
int y=4;
int direction=90;    
}karel ;



Takto určite nie. Existuje takýto spôsob inicializácie štrukúry:

typ premenna = {hodnota};
alebo:
typ premenna = {.clen = hodnota};

Napríklad:
Robot karel = {.x = 1, .y = 2};

Čo sa týka globálnych premenných: ak premennú definujeme mimo funkcie, je globálna. Ak je štruktúra globálna, k jej členom sa môže pristupovať odkiaľkoľvek. Takže neviem, čo tu tu treba riešiť.

Safyia

aha tipla som :D potom by teoreticky slo;

struct Robot
{
int x;
int y;
int direction;     
}karel ;
int x=3;

Aj mimo funkcie,nie?

sulo

Tá premenná "x" dole je niečo iné ako "karel.x". Malo by to byť takto:

karel.x = 3; (samozrejme niekde vo funkcii)

Ak nám tak veľmi vadí tá bodka, môžeme urobiť smerník:

int *p = &karel.x;
*p = 3;


, ale je to viac než zbytočné.

petopetolkoo

Safya:to som tiez skusal :D ,ale na to co mi poradil sulo by som sam neprisiel :P :D

Sulo: uz mi to ide ..dakujem :P

Safyia

Quote from: sulo on  17.04.2010, 02:57:46
Tá premenná "x" dole je niečo iné ako "karel.x".
Ahaa :D
Mno ok, deprimujete ma, idem to uz robit  ;D ;D

petopetolkoo

safiya ty sa neriadis podmienkou if(den==piatok.vecer) { zabava;oddych od skoly; }    ? :D :P ..

                                           

Safyia

Quote from: petopetolkoo on  17.04.2010, 04:15:03
safiya ty sa neriadis podmienkou if(den==piatok.vecer) { zabava;oddych od skoly; }    ? :D :P ..

                                           
Nie, ja sa tym riadim cez tyden, ked som na intraku, lebo tam sa prinutit neda...  ;D Doma umieram od nudy, tak to ide lahsie :D A chcem mat z krku vsetko cim skor... a hlavne chcem byt mudra!!! :D A svetovy mier...  :puf: