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

Programovanie

Started by esperian, 18.02.2011, 22:35:36

« predchdzajce - alie »

hardest

#100
Danix ... daj sem aspon jedno riesenie :D



edit esperian // alebo ak niekto uz mal cviko a robil to tak to sem hodte dik

Danix

#101
keby si aspoň poprosil :/
no nech sa páči http://www.sdilejkod.cz/kod/1912



// edit: to druhé riešenie s použitím presunu beeprov na vedľajšie miesto som už vymazal, lebo sa mi to zdalo príliš dlhé a neefektívne  ;D (ale funkčné)

// edit2:


void doubleBeeper() {
   if (beepersPresent()) {
      pickBeeper();
      doubleBeeper();
      putBeeper();
      putBeeper();
   }
}
neprišiel som sám na to, no funguje to, ale nechápem ako to môže fungovať. Ako vlastne vykonáva jednotlivé príkazy kompilátor? Napr. ak sa nachádza 1 beeper, tak ho zdvihne a znovu sa zavolá funkcia doubleBeeper() v ktorej sa overuje, ci tam je beeper, ale ked uz nie je, tak sa konštrukcia if vyhodnotí ako false, resp. 0 a sa nevykoná nič. ?!? kedy sa vykonajú putBeeper() ?

orsi

co bolo na bleskovke ak ste už niekto mali cviko ???? ze co si mame pozret.

RiTChi

Quote from: orsi on  03.03.2011, 02:41:48
co bolo na bleskovke ak ste už niekto mali cviko ???? ze co si mame pozret.

pozri si, co je to break a continue a druhu otazku som mal nakodit jednu jednoduchu f-ciu

Rado123

Quote from: Danix on  02.03.2011, 17:27:07

void doubleBeeper() {
   if (beepersPresent()) {
      pickBeeper();
      doubleBeeper();
      putBeeper();
      putBeeper();
   }
}
neprišiel som sám na to, no funguje to, ale nechápem ako to môže fungovať. Ako vlastne vykonáva jednotlivé príkazy kompilátor? Napr. ak sa nachádza 1 beeper, tak ho zdvihne a znovu sa zavolá funkcia doubleBeeper() v ktorej sa overuje, ci tam je beeper, ale ked uz nie je, tak sa konštrukcia if vyhodnotí ako false, resp. 0 a sa nevykoná nič. ?!? kedy sa vykonajú putBeeper() ?

ja by som to napisal skor....

void doubleBeeper()
{
     pickBeeper();                      // hned dvihnes lebo tato funkcia sa vola iba ked karel stoji na znacke a teda mozes dvihnut znacku
     if( beepersPresent() )         // ak sa nachadza znacka volas opat doublebeeper
     {
           doubleBeeper();
     }
     putBeeper();
     putBeeper();
}


funguje to asi takto zavolas funkciu doubleBeeper(), dvihne znacku a skontroluje sa ci sa nachadza na pozicii karla dalsia znacka, ak ano opat sa zavola funkcia doubleBeeper().... takto to pojde dovtedy kym sa nedvihne posledna znacka, potom nebude platit podmienka a telo if sa nevykona teda prestane sa vnaranie a zacnes sa vynarat s tym ze polozis dve znacky.  funkcia tym padom konci a beh programu sa vracia tam kde sa prerusil v tomto pripade v tele if predchadzajucej funkcie doubleBeeper() ktora volala prave ukoncenu doubleBeeper(). prikaz if sa vykonal a tak sa vykonava dalej t.j. polozia sa znacky a konci sa funkcia, beh programu sa vracia tam kde bola funkcia zavolana t.j. opat do tela if predchadzajucej funkcie doubleBeeper() az kym sa nevratis do main() alebo akej funkcie z ktorej sa povodne prvykrat volala doubleBeeper()....ked si to zratas na kazdu dvihnutu znacku karel polozi dve znacky ;-)

orsi

vidis rado, bol si až moc múdri  :D a mas pravdu ze sa to vykonava len ked stoji na beepri, ale googlu treba veriť v tomto prípade  :D

BuliWyf

B2:
na co sluzi break a continue
kolko krat mozno pouzit else v podmienke if
ktory log. cyklus zarucuje iteraciu
napisat formalnu syntax dvojcestneho vetvenia
rozdiel medzi while a do-while
vykona sa prikaz, ked ma vyraz hodnotu -1 ?

orsi

nahodte sem niekto algoritmus na najdenie pokladu rekurzivne. dakujem

Rado123

Quote from: eminkaa on  03.03.2011, 03:58:22
ten druhy kod nielen zdvojnasobi pocet znaciek, ale navyse tam este polozi dva.
ten kod vyssie je teda spravny -> vyskusaj a uvidis

Asi som moc tvrdohlavy ale neviem preco by moja varianta nemala fungovat korektne?
Na kazde dvihnutie pripadaju dve polozenia a neviem najst kde su tie dve polozenia navyse. Samozrejme ze tento kod bol vyskusany este kym so ho tu napisal a funguje ako ma.... ??? hmmmm

orsi

hej funguje ti to. otestoval som to teraz.

hardest

hodte sem prosim niekto ak mate zrobene z 3. cvicenia niektore ulohy od druhej ulohy dalej (prvu sme spravili na cviku), aj doplnujuce, diky

BuliWyf

3.2
#include <karel.h>

int main()
{
turnOn("treasuremap1.kw");
setStepDelay(250);
while (frontIsClear() || beepersPresent())
{
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
turnOff();
}
else
while (notFacingEast())
{
turnLeft();
}
while (noBeepersPresent())
{
movek();
}
}
else
while (notFacingSouth())
{
turnLeft();
}
while (noBeepersPresent())
{
movek();
}
}
else
while (notFacingWest())
{
turnLeft();
}
while (noBeepersPresent())
{
movek();
}
}
else
while (notFacingNorth())
{
turnLeft();
}
while (noBeepersPresent())
{
movek();
}
}
else
movek();
}
return 0;
}


3.3
#include <karel.h>

void turnRight()
{
setStepDelay(0);
turnLeft();
turnLeft();
setStepDelay(200);
turnLeft();
}

void turnBack()
{
turnLeft();
turnLeft();
}

void jedna()
{
putBeeper();
}

void dva()
{
putBeeper();
putBeeper();
}

void tri()
{
jedna();
dva();
}

void styri()
{
dva();
dva();
}

void pat()
{
styri();
jedna();
}

void sest()
{
pat();
jedna();
}

void sedem()
{
sest();
jedna();
}

void osem()
{
sedem();
jedna();
}

void devat()
{
osem();
jedna();
}

int main()
{
turnOn("stairsbuilder1.kw");
setStepDelay(200);
movek();
turnRight();
while (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
while (beepersPresent())
{
movek();
}
putBeeper();
turnBack();
while (frontIsClear())
{
movek();
}
turnBack();
continue;
}
else
putBeeper();
while (beepersPresent())
{
movek();
}
turnBack();
movek();
movek();
while (frontIsClear())
{
if (beepersPresent())
{
pickBeeper();
movek();
putBeeper();
turnBack();
movek();
turnBack();
}
else
movek();
}
putBeeper();
turnBack();
break;
}
while (beepersPresent())
{
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
pickBeeper();
if (beepersPresent())
{
devat();
movek();
devat();
}
else
devat();
movek();
osem();
}
else
osem();
movek();
sedem();
}
else
sedem();
movek();
sest();
}
else
sest();
movek();
pat();
}
else
pat();
movek();
styri();
}
else
styri();
movek();
tri();
}
else
tri();
movek();
dva();
}
else
dva();
movek();
}
movek();
break;
}
}
turnOff();
return 0;
}

psicho

Quote from: RiTChi on  19.02.2011, 06:26:04
Moje riesenie (pocita aj so zmenenou velkostou mapy :) ):

#include <karel.h>
int main() {
 turnOn("empty1.kw");
 for(int i=0; i<4; i++) {
   while(frontIsClear()) {
     movek();
   }
   if (i!=3) {
     turnLeft();
   }
   if(noBeepersPresent()) {
      putBeeper();
   }
 }
 turnOff();
 return 0;
}


THIS IS NOT A FUCKING C code
read my blog> www.codemazing.com <read my blog

psicho

zadania uz su nejake rozdane ? :D
read my blog> www.codemazing.com <read my blog

hardest

este nie, preco ? ... chces si zarobit ? :D

darktemplar999

tu je este henten stred sveta v skratenej forme co som slubil

#include<karel.h>

void turnRight()
{
   setStepDelay(0);
   turnLeft();
   turnLeft();
   turnLeft();
   setStepDelay(100);
}

void go()
{
      turnLeft();
      while(frontIsClear())
      {
         movek();
      }
   
}

void roh()
{
   while(frontIsClear())
   {   
      movek();
   }   
   while(notFacingSouth()||frontIsClear()||rightIsClear())
   {
      go();
   }
   turnLeft();
   
}

void priamka()
{
   do
   {
      putBeeper();
      turnLeft();
      movek();
      turnRight();
      movek();
   }
   while(frontIsClear());
   putBeeper();
}

void najdiStred()
{
   turnLeft();
   go();
   turnLeft();
   while(noBeepersPresent())
   {
      movek();
      turnLeft();
      movek();
      turnRight();
   }
}

int main()
{
   turnOn("middleearth2.kw");
   setStepDelay(100);
   roh();
   priamka();
   najdiStred();
   turnOff();
   return 0;
}

darktemplar999

a este doplnkova 7 z druheho cvika, aj ked to zvladol asi kazdy

#include <karel.h>

void turnAround()
{
   turnLeft();
   turnLeft();
}

void go()
{
   while(frontIsClear())
   {
      movek();
   }      
}
int main()
{
   turnOn("walls2.kw");
   while(frontIsClear&&frontIsBlocked)
   {
      go();
      turnAround();
   }
}


hardest

ked budete niekto robit doplnkove z tretieho cvika mozte aj to sem hodit, diky

Danix

Quote from: darktemplar999 on  05.03.2011, 19:48:05
....
   while(frontIsClear&&frontIsBlocked)
   {
      go();
      turnAround();
   }
}

To má byť čo za podmienka??!  :evica:

darktemplar999

#119
tak chceli tam nekonecny cyklus, tak to robi donekonecna chodi z jednej strany na druhu :D ja tie ulohy nevymyslal :D

stacilo tam hocijaky drist napisat do tej podmienky, ktory by bol syntakticky blbo abo ja nevim, vela ma toho nenapada :D

AnvilOfFury

Quote from: darktemplar999 on  05.03.2011, 20:21:24
tak chceli tam nekonecny cyklus, tak to robi donekonecna chodi z jednej strany na druhu :D ja tie ulohy nevymyslal :D

stacilo tam hocijaky drist napisat do tej podmienky, ktory by bol syntakticky blbo abo ja nevim, vela ma toho nenapada :D
Nekonecny cyklus: for( ; ; ){ ... }
Keep information to yourself - Knowledge is power. Think job security. Never provide documentation.
Use Real Tools - No "fancy-pancy" IDEs. Real developers only use vi.
Compiled = Ship It - User acceptance testing is an absolute waste of time.

darktemplar999

ta mne aj tak to fungovalo :D ale dik :D

darktemplar999

uloha1

#include <karel.h>

void zdvojnasob()
{
   if(beepersPresent())
   {
      pickBeeper();
      zdvojnasob();
      putBeeper();
      putBeeper();
   }
}

void turnRight()
{
   setStepDelay(0);
   turnLeft();
   turnLeft();
   turnLeft();
   setStepDelay(200);
}

void riadok()
{
   while(frontIsClear())
   {
      if(noBeepersPresent())
      {
         movek();
      }
      else
      {
         zdvojnasob();
         movek();
      }

   }
   if(beepersPresent())
   {
      zdvojnasob();
   }
   if(facingEast())
   {
      turnLeft();
      if(frontIsClear())
      {
         movek();
         turnLeft();
      }
   }
   else
   {
      turnRight();
      if(frontIsClear())
      {
         movek();
         turnRight();
      }
   }   
}

int main()
{
   turnOn("multiplier1.kw");
   setStepDelay(200);
   while(((frontIsClear())||(leftIsClear()))&&((frontIsClear())||(rightIsClear())))   
   {
      riadok();
   }
   turnOff();
   return 0;
}

jano32

 :ropebanana: :ropebanana:   za peniazky vam urobim zadania piste PM dohodneme sa  :)

darktemplar999

na zadania si spravte vlastnu temu, lebo tu to bude neprehladne pre tych co chcu len tie ulohy tu riesit.