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

dEVIANT

Quote from: sulo on  17.04.2010, 01:09:00
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).

Tu by som ťa troška poopravil. Nie definícia, ale deklarácia. A definícia premennej je v tomto prípade to isté ako jej inicializácia.

A dig prvý krát vidím, že sa k členu štruktúry pristupuje cez bodku. U nás to bolo furt -> dynamicky cez smerník.

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 ..
Toto u informatikov neplatí...:D

                                           
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

tommy-sv

Quote from: dEVIANT on  17.04.2010, 05:43:55
A dig prvý krát vidím, že sa k členu štruktúry pristupuje cez bodku. U nás to bolo furt -> dynamicky cez smerník.                                 
i tak še da - i tak še da
-> je platny operator ak pracujes so smernikom na strukturu, to aby si smernik nemusel dereferencovat
. je platny ked pracujes so strukturou samotnou
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

sulo

#302
http://stargate.cnl.tuke.sk/~mirek/pvjc/scenarios/09/index.html
"Úloha:  Vytvorte enumeračný typ Boolean, ktorý bude mať len dve hodnoty: TRUE (pravda, hodnota 1) a FALSE (nepravda, hodnota 0)."

Hodnoty TRUE a FALSE sa však už nachádzajú (ako makrá) vo windef.h, ktorý je vložený kvôli windows.h a funkcii sleep().

Takže buď sa nebude dať program na Windows skompilovať, alebo použijeme nejaké iné názvy (napr. YES a NO). Alebo windows.h vložíme až po našich definíciach typov, aj keď to nie je až také bežné.

petopetolkoo

typedef enum BOOLEAN
{
true=1,false=0       
}Boolean;


a takto sa to neda ?

tomaas09

Má niekto už tú implementáciu karola od toho 6 cvika az do teraz?? potreboval by som... za neaku finančnú odmenu.. napr 10eur.. tomaas09@zoznam.sk

tommy-sv

Quote from: sulo on  18.04.2010, 20:12:26
http://stargate.cnl.tuke.sk/~mirek/pvjc/scenarios/09/index.html
"Úloha:  Vytvorte enumeračný typ Boolean, ktorý bude mať len dve hodnoty: TRUE (pravda, hodnota 1) a FALSE (nepravda, hodnota 0)."

Hodnoty TRUE a FALSE sa však už nachádzajú (ako makrá) vo windef.h, ktorý je vložený kvôli windows.h a funkcii sleep().

Takže buď sa nebude dať program na Windows skompilovať, alebo použijeme nejaké iné názvy (napr. YES a NO). Alebo windows.h vložíme až po našich definíciach typov, aj keď to nie je až také bežné.

mozes pouzit aj lowercase:
enum BOOLEAN
{
    false,
    true
};

...

BOOLEAN active = false;
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

sulo

Síce tým nedodržíme mennú konvenciu, ale inak celkom dobré riešenie.  :)

pooler

mám spraveného celeho Karla už dosť dlho .. no robil som si ho po svojom - nie sú tam presne použite premenne ktore by mali byť podľa zadania - snad to nebude žiaden problem hm ?

staniel

No ja mám implementaciu karola od 1 do 9 cvika..dostal som ale zadanie c. 6 a nechapem..pomoze mi niekto?? aj za finnacnu odmenu..diky

dEVIANT

Hodte tu texty tých zadaní, nech vieme, čo to máte robiť  ;)
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

ursus

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


Shwollo

vedeli by ste mi niekto povedať, prečo mi nefunguje funkcia frontIsClear / Blocked?  :( Ja som už bezradný  bu


#define MAX_HEIGHT 20
#define MAX_WIDTH 20
#define WALL -1
#define EMPTY 0
int width,height;
int world[MAX_HEIGHT][MAX_WIDTH];
int karel_x;
int karel_y;
int karel_direction;
int karel_beepers = 20;


void turnOn(){
    int i,j;

    karel_x = 4;
    karel_y = 3;
    width=6;
    height=5;

   
int newWorld[5][6]={
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1, -1, -1, 0 }
};

karel_direction = 90;


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

}
}

void draw()
{
 system("cls");
 printf("pozicia: %d %d \n",karel_x, karel_y);  
 printf("orientacia: karel je gay: ");
 if (karel_direction == 0) printf("juh\n");
 if (karel_direction == 180) printf("sever\n");
 if (karel_direction == 270) printf("zapad\n");
 if (karel_direction == 90) printf("vychod\n");
 printf("pocet beeprov v batohu: %d\n", karel_beepers);
 printf("tu je %d beeprov", world[karel_y][karel_x]);
 printf(" \norientacia %d  \nclear?    %c\nblocked?  %c \n",  karel_direction, frontIsClear(), frontIsBlocked());

 printf("\n");
    int i,j;

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

}

void turnLeft()
{
     karel_direction += 90;
     karel_direction = karel_direction % 360;
     draw();
}
     
frontIsBlocked()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++ ;           //v            <-y->
      if(karel_direction==180) x--;          //^               x
      if(karel_direction==90) y++;           //>               |
      if(karel_direction==270) y--;          //<               v
if (world[x][y] != EMPTY) return 'a';
   else return 'n';      
}

frontIsClear()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++;            // v
     else if(karel_direction==180) y++;      // ^
     else if(karel_direction==90) y++;       // >
     else if(karel_direction==270) x++;      // <
if (world[x][y] != WALL) return 'a';
   else return 'n';
}
   
void movek()
{
    int x,y;
    if (frontIsClear() == 'a')    
     {    
     if(karel_direction==0) karel_x++;       //v            <-y->
     if(karel_direction==180) karel_y++;     //^              x
     if(karel_direction==90) karel_x++;      //>              |
     if(karel_direction==270) karel_x--;     //<              v
     draw();
     
     }
     else printf("\nchyba, je tu stena\n\n");
}

beepersInBag()
{
 if (karel_beepers >= 1) return 'a';
    else return 'n';
}

noBeepersInBag()
{
 return !beepersInBag();
}

beepersPresent()
{
 if (world[karel_y][karel_x] > 0) return 'a';
   else return 'n';
}

putBeeper()
{
if (world[karel_y][karel_x] >= 0)
   {
     world [karel_y][karel_x] += 1;          
     karel_beepers--;
   }
   else printf("nie su tu beepre\n");  
   draw();
}

pickBeeper()
{
if (world[karel_y][karel_x] >0)
   {
     world [karel_y][karel_x] -= 1;
     karel_beepers++;  
   }
   else printf("tu nie ju beper");        
   draw();
}





void testSensors()
{
       
 //  printf("suradnice: x:%d y:%d \norientacia %d  \nclear?    %c\nblocked?  %c \n", karel_x, karel_y, karel_direction, frontIsClear(), frontIsBlocked());
   printf("\nma beepre? %c\npocet beeprov v batohu: %d \nje tu beeper? %c\n", beepersInBag(), karel_beepers, beepersPresent());
   printf("tu je %d beeprov\n", world[karel_y][karel_x]);



}

nepíšte mi SS - radšej mi píšte mail. (tá obálka pod mojim avatarom :)))

mirek

Quote from: Shwollo on  19.04.2010, 22:09:03
vedeli by ste mi niekto povedať, prečo mi nefunguje funkcia frontIsClear / Blocked?  :( Ja som už bezradný  bu


frontIsClear()
{   
int x = karel_x;
int y = karel_y;
       if(karel_direction==0) x++;            // v
      else if(karel_direction==180) y++;      // ^
      else if(karel_direction==90) y++;       // >
      else if(karel_direction==270) x++;      // <
if (world[x][y] != WALL) return 'a';
    else return 'n';
}


nie nahodou preto, ze aj ked by mal ist karel dolu, tak ides hore? a aj ked by mal ist dolava, ty ides doprava? stale ku premennym x a y iba pripocitavas?
So say we all!

petopetolkoo

frontIsClear()
{   
int x = karel_x;
int y = karel_y;
       if(karel_direction==0) x++;            // v
      else if(karel_direction==180) y++;      // ^
      else if(karel_direction==90) y++;       // >
      else if(karel_direction==270) x++;      // <
if (world[x][y] != WALL) return 'a';
    else return 'n';
}
        ???????

shwollo..to si robis srandu ?

tommy-sv

Quote from: Shwollo on  19.04.2010, 22:09:03
vedeli by ste mi niekto povedať, prečo mi nefunguje funkcia frontIsClear / Blocked?  :( Ja som už bezradný  bu


void draw()
{
 system("cls");
 printf("pozicia: %d %d \n",karel_x, karel_y);  
 printf("orientacia: karel je gay: ");


jasne ze nefunguje ked karla vo funkcii draw() drazdis s tym ze je gay :ohmigod:
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

Safyia

#316
Quote from: petopetolkoo on  20.04.2010, 00:26:47
frontIsClear()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++;            // v
     else if(karel_direction==180) y++;      // ^
     else if(karel_direction==90) y++;       // >
     else if(karel_direction==270) x++;      // <
if (world[x][y] != WALL) return 'a';
   else return 'n';
}
 
;D pekne
Ale preco pri podmienke ked ide karol dolu a ked ide dolava vykonavas to iste? Neviem ci mas x os diagonalnu alebo horizontalnu, nechce s ami to pozerat, no jedno z toho zmen na y... a jeden y na x. A po druhe nemozes inkrementovat v oboch pripadoch, overujes predsa uplne ine pozicie. Medzi tie styri smery si rozhad x++,y++,x--a y-- tak aby ti to sedelo a vsetko pojde ako ma! :D

tommy ;D ;D ;D nevsimla som si :D

Shwollo

hups... ja som to asi 2x menil tak som si to nevšimol.  :03: Ale keď to dám takto tak mi to aj tak nejde
btw y - je horizontálne


#define MAX_HEIGHT 20
#define MAX_WIDTH 20
#define WALL -1
#define EMPTY 0
int width,height;
int world[MAX_HEIGHT][MAX_WIDTH];
int karel_x;
int karel_y;
int karel_direction;
int karel_beepers = 20;


void turnOn(){
    int i,j;

    karel_x = 4;
    karel_y = 3;
    width=6;
    height=5;

   
int newWorld[5][6]={
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1, -1, -1, 0 }
};

karel_direction = 90;


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

}
}

void draw()
{
 system("cls");
 printf("pozicia: %d %d \n",karel_x, karel_y);  
 printf("orientacia: karel je gay: ");
 if (karel_direction == 0) printf("juh\n");
 if (karel_direction == 180) printf("sever\n");
 if (karel_direction == 270) printf("zapad\n");
 if (karel_direction == 90) printf("vychod\n");
 printf("pocet beeprov v batohu: %d\n", karel_beepers);
 printf("tu je %d beeprov", world[karel_y][karel_x]);
 printf(" \norientacia %d  \nclear?    %c\nblocked?  %c \n",  karel_direction, frontIsClear(), frontIsBlocked());

 printf("\n");
    int i,j;

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

}

void turnLeft()
{
     karel_direction += 90;
     karel_direction = karel_direction % 360;
     draw();
}
     
frontIsBlocked()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++ ;           //v            <-y->
      if(karel_direction==180) x--;          //^               x
      if(karel_direction==90) y++;           //>               |
      if(karel_direction==270) y--;          //<               v
if (world[x][y] != EMPTY) return 'a';
   else return 'n';      
}

frontIsClear()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++;            // v
     else if(karel_direction==180) x--;      // ^
     else if(karel_direction==90) y++;       // >
     else if(karel_direction==270) y--;      // <
if (world[x][y] != WALL) return 'a';
   else return 'n';
}
   
void movek()
{
    int x,y;
    if (frontIsClear() == 'a')    
     {    
     if(karel_direction==0) karel_x++;       //v            <-y->
     if(karel_direction==180) karel_x--;     //^              x
     if(karel_direction==90) karel_y++;      //>              |
     if(karel_direction==270) karel_y--;     //<              v
     draw();
     
     }
     else printf("\nchyba, je tu stena\n\n");
}

beepersInBag()
{
 if (karel_beepers >= 1) return 'a';
    else return 'n';
}

noBeepersInBag()
{
 return !beepersInBag();
}

beepersPresent()
{
 if (world[karel_y][karel_x] > 0) return 'a';
   else return 'n';
}

putBeeper()
{
if (world[karel_y][karel_x] >= 0)
   {
     world [karel_y][karel_x] += 1;          
     karel_beepers--;
   }
   else printf("nie su tu beepre\n");  
   draw();
}

pickBeeper()
{
if (world[karel_y][karel_x] >0)
   {
     world [karel_y][karel_x] -= 1;
     karel_beepers++;  
   }
   else printf("tu nie ju beper");        
   draw();
}





void testSensors()
{
       
 //  printf("suradnice: x:%d y:%d \norientacia %d  \nclear?    %c\nblocked?  %c \n", karel_x, karel_y, karel_direction, frontIsClear(), frontIsBlocked());
   printf("\nma beepre? %c\npocet beeprov v batohu: %d \nje tu beeper? %c\n", beepersInBag(), karel_beepers, beepersPresent());
   printf("tu je %d beeprov\n", world[karel_y][karel_x]);



}

nepíšte mi SS - radšej mi píšte mail. (tá obálka pod mojim avatarom :)))

mirek

skus sa este pozriet na to, ako pracujes s y-ovou a x-ovou osou v poli - ako ich pouzivas pri nacitavani pola v turnOn() a ako ich pouzivas v senzore frontIsClear()
So say we all!

petopetolkoo

shwollo ten senzor urob radsej cez switch a nezabudaj kontrolovat aj hranice sveta, to jest height a width, kusok sa nad tym zamysli, nakresli si aj to pole ak ty to pomoze a skusaj hlavne skusaj

tommy-sv

Quote from: Shwollo on  20.04.2010, 01:58:41
hups... ja som to asi 2x menil tak som si to nevšimol.  :03: Ale keď to dám takto tak mi to aj tak nejde
btw y - je horizontálne

frontIsClear()
{    
...
if (world[x][y] != WALL) return 'a';
   else return 'n';
}


wtf: return 'a' return 'n' ???
teda pokial netestujes: if (frontIsClear() == 'y') lebo if (frontIsClear()) sa stale vyhodnoti ako true
a bolo by fajn definovat typ navratovej hodnoty... int
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

Shwollo

#321
Quote from: petopetolkoo on  20.04.2010, 02:06:53
shwollo ten senzor urob radsej cez switch a nezabudaj kontrolovat aj hranice sveta, to jest height a width, kusok sa nad tym zamysli, nakresli si aj to pole ak ty to pomoze a skusaj hlavne skusaj
nemáš to jedno, či tam dám swich alebo if?

Quote from: Shwollo on  20.04.2010, 01:58:41
wtf: return 'a' return 'n' ???

dal som tam "1" a "0" a robí to presne to isté


#define MAX_HEIGHT 20
#define MAX_WIDTH 20
#define WALL -1
#define EMPTY 0
int width,height;
int world[MAX_HEIGHT][MAX_WIDTH];
int karel_x;
int karel_y;
int karel_direction;
int karel_beepers = 20;


void turnOn(){
    int i,j;

    karel_x = 4;
    karel_y = 3;
    width=6;
    height=5;

   
int newWorld[5][6]={
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1,  0,  0, 0 },
   { 0, -1, -1, -1, -1, 0 }
};

karel_direction = 90;


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

}
}

void draw()
{
 system("cls");
 printf("pozicia: %d %d \n",karel_x, karel_y);  
 printf("orientacia: karel je gay: ");
 if (karel_direction == 0) printf("juh\n");
 if (karel_direction == 180) printf("sever\n");
 if (karel_direction == 270) printf("zapad\n");
 if (karel_direction == 90) printf("vychod\n");
 printf("pocet beeprov v batohu: %d\n", karel_beepers);
 printf("tu je %d beeprov", world[karel_y][karel_x]);
 printf(" \norientacia %d  \nclear?    %d\nblocked?  %d \n",  karel_direction, frontIsClear(), frontIsBlocked());

 printf("\n");
    int i,j;

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

}

void turnLeft()
{
     karel_direction += 90;
     karel_direction = karel_direction % 360;
     draw();
}
     
frontIsBlocked()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++ ;           //v            <-y->
      if(karel_direction==180) x--;          //^               x
      if(karel_direction==90) y++;           //>               |
      if(karel_direction==270) y--;          //<               v
if (world[x][y] != EMPTY) return 1;
   else return 0;      
}

frontIsClear()
{    
int x = karel_x;
int y = karel_y;
      if(karel_direction==0) x++;            // v
     else if(karel_direction==180) x--;      // ^
     else if(karel_direction==90) y++;       // >
     else if(karel_direction==270) y--;      // <
if (world[x][y] != WALL) return 1;
   else return 0;
}
   
void movek()
{
    int x,y;
    if (frontIsClear() == 'a')    
     {    
     if(karel_direction==0) karel_x++;       //v            <-y->
     if(karel_direction==180) karel_x--;     //^              x
     if(karel_direction==90) karel_y++;      //>              |
     if(karel_direction==270) karel_y--;     //<              v
     draw();
     
     }
     else printf("\nchyba, je tu stena\n\n");
}

beepersInBag()
{
 if (karel_beepers >= 1) return 1;
    else return 0;
}

noBeepersInBag()
{
 return !beepersInBag();
}

beepersPresent()
{
 if (world[karel_y][karel_x] > 0) return 1;
   else return 0;
}

putBeeper()
{
if (world[karel_y][karel_x] >= 0)
   {
     world [karel_y][karel_x] += 1;          
     karel_beepers--;
   }
   else printf("nie su tu beepre\n");  
   draw();
}

pickBeeper()
{
if (world[karel_y][karel_x] >0)
   {
     world [karel_y][karel_x] -= 1;
     karel_beepers++;  
   }
   else printf("tu nie ju beper");        
   draw();
}





void testSensors()
{
       
 //  printf("suradnice: x:%d y:%d \norientacia %d  \nclear?    %c\nblocked?  %c \n", karel_x, karel_y, karel_direction, frontIsClear(), frontIsBlocked());
   printf("\nma beepre? %c\npocet beeprov v batohu: %d \nje tu beeper? %c\n", beepersInBag(), karel_beepers, beepersPresent());
   printf("tu je %d beeprov\n", world[karel_y][karel_x]);



}

nepíšte mi SS - radšej mi píšte mail. (tá obálka pod mojim avatarom :)))

sulo

1.
if (world[x][y] != WALL) return 1;
Quote from: mirek on  20.04.2010, 02:02:24
skus sa este pozriet na to, ako pracujes s y-ovou a x-ovou osou v poli - ako ich pouzivas pri nacitavani pola v turnOn() a ako ich pouzivas v senzore frontIsClear()

2. Senzor frontIsBlocked by mal vracať opačnú hodnotu ako frontIsClear. Netreba písať podobný kód viackrát - čím viac kódu, tým väčšia náchylnosť na chyby. Môžeš to riešiť podobne ako s beepersInBag a noBeepersInBag.

tommy-sv

#323
dalsia vec:
if (world[x][y] != EMPTY) return 1;
co ak je na pozicii beeper, t.j. kladna hodnota world [ x ] [ y ] ? stena to nie je, a predsa vrati frontIsBlocked() hodnotu 1, ako keby tam bola stena.
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

Shwollo

dorobil som frontIsClear
môže byť?


frontIsClear()
{   
int x = karel_x;
int y = karel_y;
       if(karel_direction==0) x++;            // v
      else if(karel_direction==180) x--;      // ^
      else if(karel_direction==90) y++;       // >
      else if(karel_direction==270) y--;      // <
if (world[x][y] == EMPTY || x <= height || y <= width || x > 0 || y > 0 ) return 1;
    else return 0;
}
   
frontIsBlocked()
{   
return !frontIsClear();


Quote from: mirek on  20.04.2010, 02:02:24
skus sa este pozriet na to, ako pracujes s y-ovou a x-ovou osou v poli - ako ich pouzivas pri nacitavani pola v turnOn() a ako ich pouzivas v senzore frontIsClear()
neviem, čo tam mám zle ???
nepíšte mi SS - radšej mi píšte mail. (tá obálka pod mojim avatarom :)))