• 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 »

watt

zdravim... karla mam v podstate celeho hotoveho co sa tyka funkcii.. jeden problem co mam je pri nacitavani zo suboru... prvy riadok uz mam void turnOn(char *path){     
  FILE *fp;
  fp = fopen("input.kw","r");
  fscanf(fp,"%d %d %d %d %c %d",&world.height,&world.width,&karel.x,&karel.y, &karel.direction, &karel_beepers);
  strncpy(krok,"turnOn()",10);
  draw();
       }
  .. to co neviem je ako nacitat zvysok sveta... aj tomu ako to je vysvetlene na http://stargate.cnl.tuke.sk/~mirek/pvjc/scenarios/10/index.html celkom nerozumiem... viem, ze plno ludi to ma tak by som vam bol vdacny :)

cenki

Quote from: watt on  01.05.2010, 01:40:29
zdravim... karla mam v podstate celeho hotoveho co sa tyka funkcii.. blablabla

   char z=0;
   z = getc(fp);
   while (z != EOF) {
      if(z=='B'){
         int i, j, b;
         fscanf(fp,"%d %d %d", &j,&i,&b);
         world[height-i][j-1]=b;
      };
      if(z=='W'){
         int i, j;
         fscanf(fp,"%d %d", &j,&i);
         world[height-i][j-1]=-1;
      };
      z = getc(fp);
   }

Palike

Quote from: mirek on  30.04.2010, 00:46:10
initscr() volaj v turnOn(), ked budes mat vsetko inicializovane, nacitane, osetrene.
endwin() volaj v turnOff(), ked sa chystas karla vypnut. a ten system("pause") napis este pred turnOff()

tak ako to hovoris tak to neide.. nwm preco.. dal som to tak ako mi hovoris.. na zaciatku mi vykresli cely svet (farebne) tak ako ma potom ked mal vykonat move tak ono to spravilo..ale nevykreslilo mi cely svet.. iba hornu cast kde je poloha karla a to... ked mal znova vykonat move tak uz nezobrazilo ani to..az nakoniec to "press..."

ursus

pre Mirka

zaujimalo by ma, co vsetko ma byt okomentovane? resp co sa povazuje za neúplné komentáre (0-3b)

dakujem
So this router walks into the doctor's office...
- Doctor, it hurts when IP.

sakalll3

potreboval by som pls pomoct s ulohou c 10 s druhym a tretim bodom  http://stargate.cnl.tuke.sk/~mirek/pvjc/scenarios/10/index.html  nemam ani ponatia co dalej.......... kazda rada dobra diki moc

mirek

Quote from: Palike on  01.05.2010, 04:07:20
Quote from: mirek on  30.04.2010, 00:46:10
initscr() volaj v turnOn(), ked budes mat vsetko inicializovane, nacitane, osetrene.
endwin() volaj v turnOff(), ked sa chystas karla vypnut. a ten system("pause") napis este pred turnOff()

tak ako to hovoris tak to neide.. nwm preco.. dal som to tak ako mi hovoris.. na zaciatku mi vykresli cely svet (farebne) tak ako ma potom ked mal vykonat move tak ono to spravilo..ale nevykreslilo mi cely svet.. iba hornu cast kde je poloha karla a to... ked mal znova vykonat move tak uz nezobrazilo ani to..az nakoniec to "press..."

a volas aj refresh()?
So say we all!

mirek

Quote from: ursus on  01.05.2010, 05:12:40
pre Mirka

zaujimalo by ma, co vsetko ma byt okomentovane? resp co sa povazuje za neúplné komentáre (0-3b)

dakujem
je to uvedene v poziadavkach na vypracovanie zadania. chystam sa to prebrat aj na cvikach tento tyzden.
So say we all!

Palike

Quote from: mirek on  03.05.2010, 03:01:15

a volas aj refresh()?

ano pred sleep v draw a ked som mal este na zaciatku za tym to endwin tak to slo... len tam bol ten problem ako som spominal na zaciatku... ze ked robil tie funkcie co mal (bez turnOff to nemam zadeklarovane) tak to vykreslovalo normalne...ale ked ich dorobil a malo ist to system pause co je v maine na konci.. tak mi to hodilo prazdne pole len dole ze press...

totaluser

chcem sa opytat ohladom poslednej ulohy v cviceni 10
Úloha:  Vytvorte knižničnú funkciu turnOff(), ktorá vypne robota Karla a zapíše výslednú podobu sveta do súboru.
Názov súboru, do ktorého zapíšete svet po zavolaní tejto funkcie, je output.kw. V prípade, že tento súbor neexistuje, vytvoríte ho. V prípade, že súbor existuje, prepíšete ho novým. Súbor musí mať rovnaký formát, ako ktorýkoľvek súbor, ktorý ste schopný načítať. To znamená, že tento súbor musíte vedieť následne otvoriť vo svojom programe.


len sa chcem spytat, ci tomu spravne rozumiem
tak ako nacitavam svet zo suboru a vo funkcii draw prechadzam svet 2 cyklami a podla X,Y umiestujem steny, beepre, karla, tak aj tu budem prechadzat cely svet 2 cyklami a jeho podobu zapisem do suboru?

alebo sa tym mysli nieco ine?
dakujem velmi pekne za odpoved

mirek

Quote from: totaluser on  03.05.2010, 16:58:45
len sa chcem spytat, ci tomu spravne rozumiem
tak ako nacitavam svet zo suboru a vo funkcii draw prechadzam svet 2 cyklami a podla X,Y umiestujem steny, beepre, karla, tak aj tu budem prechadzat cely svet 2 cyklami a jeho podobu zapisem do suboru?

alebo sa tym mysli nieco ine?
dakujem velmi pekne za odpoved

dobre tomu rozumies
So say we all!

mirek

Quote from: Palike on  03.05.2010, 04:23:14
Quote from: mirek on  03.05.2010, 03:01:15

a volas aj refresh()?

ano pred sleep v draw a ked som mal este na zaciatku za tym to endwin tak to slo... len tam bol ten problem ako som spominal na zaciatku... ze ked robil tie funkcie co mal (bez turnOff to nemam zadeklarovane) tak to vykreslovalo normalne...ale ked ich dorobil a malo ist to system pause co je v maine na konci.. tak mi to hodilo prazdne pole len dole ze press...
ak mame spolu cviko, tak sa ozvi. nenapada ma teraz, kde by to mohlo ryzovat.
So say we all!

freshmakerik

#461
for: Mirek

kde ma začať počítanie pozície ?? dole vľavo (ako na obrázku nižšie) alebo hore vľavo ??
teda kde sa nachádza pozícia 1:1, ..aby mi to správne načítalo karla, steny a beepre zo súboru..



//edit:
a tiež.., pozície stien, beeprov a karla v súbore o informáciach sveta (svet.kw) začínajú od 0:0, alebo 1:1 ??
.. e.g. w 0 0, alebo w 1 1 ??
aj počítač je len človek..

ursus

huh, ja som daval lavy horny roh ako 0,0
So this router walks into the doctor's office...
- Doctor, it hurts when IP.

freshmakerik

Quote from: ursus on  04.05.2010, 03:08:26
huh, ja som daval lavy horny roh ako 0,0
no veď práve, ak by to tak bolo tak paráda :D
lebo aj ja to tak mám..
aj počítač je len človek..

Palike

Quote from: mirek on  03.05.2010, 17:29:55
ak mame spolu cviko, tak sa ozvi. nenapada ma teraz, kde by to mohlo ryzovat.

bohuzial nemame... ale aj tak dakujem za  ostatne rady  :thumbs-up:

Shwollo

cawte.... neviete niekto prečo mi nechce zo súboru načítať orientáciu? všetko ostatné načíta... len orientáciu nie. Dokonca mi ani karla nezobrazí....

#define MAX_HEIGHT 20
#define MAX_WIDTH 20
#define WALL -1
#define EMPTY 0
int width,height;
int world[MAX_HEIGHT][MAX_WIDTH];

typedef struct {
        int x,y,direction, beepers;
        }ROBOT;
ROBOT karel;

typedef enum {
        E, N, W, S
        }direction;
       
typedef enum {
        FALSE, TRUE
        }Boolean;

void turnOn(char *path){
     
     path = fopen ("world.txt", "r");
     fscanf (path, "%d %d %d %d %c %d", &width, &height, &karel.x, &karel.y, &karel.direction, &karel.beepers);
   
   int x,y;
for(x=0; x<height; x++){
for(y=0; y<width; y++)
world[width][height];
     
}
}

void draw()
{
if (width > 20 || height > 20) { printf ("chyba, maximalne rozmery svera su 20x20, \npokracujte stlacenim klavesy enter");  getchar(); exit(1); }
else {
  system("cls");
  printf("pozicia: x:%d y:%d \n",karel.x, karel.y); 
  printf("orientacia: ");
  if (karel.direction == S) printf("juh \n");
  if (karel.direction == N) printf("sever \n");
  if (karel.direction == W) printf("zapad \n");
  if (karel.direction == E) printf("vychod\n");
  printf("pocet beeprov v batohu: %d\n", karel.beepers);
  printf("tu je %d beeprov\n", world[karel.x][karel.y]);
  printf("ma beepre? %d\nje tu beeper? %d\n", beepersInBag(), beepersPresent());
  printf("orientacia %c  \n \nfrontIsblocked? %d \n",  karel.direction,  frontIsBlocked());
  printf("frontIsClear?   %d\nrightIsClear?   %d \nleftIsClear?    %d", frontIsClear() ,rightIsClear(), leftIsClear() );
  printf("\n\n");
     int x,y;

     for(x=0; x<height; x++){
     for(y=0; y<width; y++){
                     if(karel.y==y && karel.x==x)
                                            {
                                            if (karel.direction == S) printf("v");
                                            else if(karel.direction == E) printf(">");
                                            else if(karel.direction == N) printf("^");
                                            else if(karel.direction == W) printf("<");
                                            }
                     else
                     {
                      if (world[x][y] == WALL)   printf("#");
                      if (world[x][y] == EMPTY)  printf(".");
                      if (world[x][y] > 0)      printf("%d", world[x][y]);
                     }
   }
   printf("\n");
}

sleep(1000);
  }
}


v súbore mám len
9 9 0 0 W 200
nepíšte mi SS - radšej mi píšte mail. (tá obálka pod mojim avatarom :)))

Vikinger

Chcel by som sa spytať ohľadom nižšie definovanej funkcií move
ked karel narazí na stenu vypise sa chybová hlaška, ale totizžo ked ma viac krat napisane move tak hlasku vypise viac krat, nevedeli by ste nejak prepisať tu funkciu tak ze: ked narazi na stenu tak hned to stopne a len raz vypise tu chybovu hlasku dakuejm ....

void move(void){ 
  int x,y;
  if(frontIsClear()==1)
  {
if(karel.direction==0) karel.y=karel.y+1;
    if(karel.direction==90) karel.x=karel.x-1;
    if(karel.direction==180) karel.y=karel.y-1;
    if(karel.direction==270) karel.x=karel.x+1;
    draw();
krok++;
}
else printf("\nChyba, je tu stena!\n\n");

}

Vikinger

Quote from: Vikinger on  05.05.2010, 07:26:20
Chcel by som sa spytať ohľadom nižšie definovanej funkcií move
ked karel narazí na stenu vypise sa chybová hlaška, ale totizžo ked ma viac krat napisane move tak hlasku vypise viac krat, nevedeli by ste nejak prepisať tu funkciu tak ze: ked narazi na stenu tak hned to stopne a len raz vypise tu chybovu hlasku dakuejm ....

void move(void){ 
  int x,y;
  if(frontIsClear()==1)
  {
if(karel.direction==0) karel.y=karel.y+1;
    if(karel.direction==90) karel.x=karel.x-1;
    if(karel.direction==180) karel.y=karel.y-1;
    if(karel.direction==270) karel.x=karel.x+1;
    draw();
krok++;
}
else printf("\nChyba, je tu stena!\n\n");

}


už to netreba mam to :-)

Vikinger

s prikazom putBeeper som vyhodil Beeper, ale mi to nevyhodilo tam kde je karel ale o jednu poziciu dalej a doprava dole, kde mozem mat definovanu zlu xovu a y-oovu os?

Safyia

Quote from: Vikinger on  05.05.2010, 08:46:55
s prikazom putBeeper som vyhodil Beeper, ale mi to nevyhodilo tam kde je karel ale o jednu poziciu dalej a doprava dole, kde mozem mat definovanu zlu xovu a y-oovu os?
pretoze suradnica sa zacina od [ 0 ] [ 0 ], takze 0,1,2,3 atd. Takze ked si si chcel dat beeper na 3, 3, realne pozicia je 4. riadok, 4.stlpec
nemoze to byt preto  ???  ;D

cyberguru

Ahojte. Mohol by mi niekto pomoct s tymto kodom (potrebujem tam dopracovat funkciu putBeeper) a to nasledovne:
Karel sa nachádza v ľavom hornom rohu.
>.....
......
......
......
......
......

Situácia po postavení štvorca:
......
.****.
.****.
.****.
.****.
.....>

Koncová situácia:
Karel sa opäť nachádza v ľavom hornom rohu.
>.....
....*.
...*..
..*...
.*....
......

Samotný kód:

#define MAX_HEIGHT 20
#define MAX_WIDTH 20
#define EMPTY 0
#define WALL 1

void draw(void);
void movek(void);
void turnLeft(void);
void turnOn(void);
int frontIcClear(void);
int frontIsBlocked(void);

int width=6;
int height=6;

int karel_x=0, karel_y=0, karel_direction=180;

int world1[6][6] = {
    { 0,  0,  0,  0,  0,  0 },
    { 0,  0,  0,  0,  0,  0 },
    { 0,  0,  0,  0,  0,  0 },
    { 0,  0,  0,  0,  0,  0 },
    { 0,  0,  0,  0,  0,  0 },
    { 0,  0,  0,  0,  0,  0 },
};


int world[MAX_HEIGHT][MAX_WIDTH];

void turnOn(void){
  int i, j;
 
  for(i=0; i<height; i++)
  {
    for(j=0; j<width; j++)
    {
      world[j]=world1[j];   
    }
  } 
}

void draw(void){
  int i, j;
     
  for(i=0; i<height; i++)
  {
    for(j=0; j<width; j++)
    {
      if(karel_x==i && karel_y==j)
      {
        if(karel_direction==0) printf("\t <");
        if(karel_direction==90) printf("\t ^");
        if(karel_direction==180) printf("\t >");
        if(karel_direction==270) printf("\t v");
      }
      else
      {
            if(world[j]==EMPTY) printf("\t.");
            if(world[j]==WALL)  printf("\t#");     
      }
    }
    printf("\n\n\n");
  }
  sleep(1000);
  system("cls");
}

void movek(void)
{
  if(karel_direction==0)
  {
    if(frontIsClear())
    {
      karel_x=karel_x;
      karel_y=karel_y-1;
    }
    else printf("access denied\n");
  }
  else if(karel_direction==90)
  {
    if(frontIsClear())
    {
      karel_x=karel_x-1;
      karel_y=karel_y;
    }
    else printf("access denied\n");
  }
  else if(karel_direction==180)
  {
    if(frontIsClear())
    {
      karel_x=karel_x;
      karel_y=karel_y+1;
    }
    else printf("access denied\n");
  }
  else if(karel_direction==270)
  {
    if(frontIsClear())
    {
      karel_x=karel_x+1;
      karel_y=karel_y;
    }
    else printf("access denied\n");
  }
   
}

void turnLeft(void)
{
    if(karel_direction==0)
    {
      karel_direction=270;
    }
    else if(karel_direction==90)
    {
      karel_direction=0;
    }
    else if(karel_direction==180)
    {
      karel_direction=90;
    }
    else if(karel_direction==270)
    {
      karel_direction=180;
    }
    draw();
}

int frontIsClear(void){
             
   if(karel_direction==90)
   {
     if(karel_x==0)
     {
       return 0;
     }
     else
     {
       if(world[karel_x-1][karel_y]==WALL)
       {
         return 0;
       }
       else
       {
         return 1;
       }
     }
   }
   else if(karel_direction==0)
   {
     if(karel_y==0)
     {
       return 0;
     }
     else
     {
       if(world[karel_x][karel_y-1]==WALL)
       {
         return 0;
       }
       else
       {
         return 1;
       }
     }
   }
   else if(karel_direction==180)
   {
     if(karel_y==width)
     {
       return 0;
     }
     else
     {
       if(world[karel_x][karel_y+1]==WALL)
       {
         return 0;
       }
       else
       {
         return 1;
       }
     }
   }
   else if(karel_direction==270)
   {
     if(karel_x==height)
     {
       return 0;
     }
     else
     {
       if(world[karel_x+1][karel_y]==WALL)
       {
         return 0;
       }
       else
       {
         return 1;
       }
     }
   }   
}
int frontIsBlocked(void){
     if(frontIsClear()) return 0;
     else return 1;
}

profesionale

Caute. Chcem sa spytat na senzori facingSouth() , facingWest() .... o co ide pri tychto senzoroch....lebo neviem ci som si to spravne z anglictiny prelozil. Ma to znamenat ci je na SEVER, JUH, ZAPAD, VYCHOD stena alebo ako???


Dakujem za odpoved.

Ing. nemtom

iba z nazvu funkcii usudzujem ze zistuje na aku svetovu stranu sa pozera karel ci sipka ci co to tam mate
brix will be shat

mirek

Quote from: cyberguru on  05.05.2010, 15:58:33
Ahojte. Mohol by mi niekto pomoct s tymto kodom (potrebujem tam dopracovat funkciu putBeeper) a to nasledovne:
ak chces dopracovat funkciu putBeeper(), tak sa kukni naspat na scenar ku cviku c. 8. funkcia je pomerne jednoducha:
1. pripocitaj jeden beeper na aktualnu poziciu
2. odpocitaj beeper z batohu

a cele to zabal do podmienky, ze ak tam su beepre, tak makaj, inak sa vypni
So say we all!

mirek

Quote from: Bc. nemtom on  05.05.2010, 17:11:52
iba z nazvu funkcii usudzujem ze zistuje na aku svetovu stranu sa pozera karel ci sipka ci co to tam mate
presne tak. dokonca aj google hodi pomerne dobry preklad: "ak Karel stojí na východ"
So say we all!