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

Agamemnon

ja som take nieco napisal? :) "...vo vseobecnosti..."
All code is crap.

42

radix

neviem ako by som oznacil cloveka "vo vseobecnosti" len ze ma dve nohy ruky oci usi...ale davat cloveku obecnemu(mozno su aj nadludia a podludia) lenivost a hlupost... :) ale zas kto je dnes idealny? :D

Safyia

Nehadajte sa! :D
Radsej mi povedze, ci existuje nejaky prikaz, aby sa ten Karel tak nevliekol jak sopel z nosa. Nejaky RedBull(); alebo tak  ;D

revelc

Čo môžeš urobiť dnes odlož na pozajtra a ziskaš deň voľna.

"I'm a man of simple tastes. I enjoy dynamite...and gunpowder...and gasoline! "

dEVIANT

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

revelc

Čo môžeš urobiť dnes odlož na pozajtra a ziskaš deň voľna.

"I'm a man of simple tastes. I enjoy dynamite...and gunpowder...and gasoline! "

cenki

Ináč dostal už niekto zadanie? Nech máme predstavu o čom bude?

psicho

ano xem aj ja mat predstavu ocom bude :D
read my blog> www.codemazing.com <read my blog

vojto

Zevraj vlastna implementacia Karla da Robota, ci?

a000000

vie niekto kod ako dostalenm karola dostrebu hocijakeho sveta ?
nejak mi to nechce ist, ten movekAll ma vratit pocet krokov ale nejako nevracia , respektive vrati vzdy 2 hm...

Safyia


a000000


Tu to mas :   :ropebanana:
http://www.vlacik.sk/index.php?page=download&file=ef3cdcb53f7bcf001ee3d0748d96419f


Safyia

/*
* main.c
*/

#include "impl/karel.h"
#include "pomocne-prikazy.h"

/* tu si pisete svoje funkcie */



/* preskoci akukolvek prekazku */
void preskoc() {
    turnLeft();
    /* vylez hore */
    while(rightIsBlocked()) {
        movek();
    }
    turnRight();
    movek();
    turnRight();
    /* zlez */
    movekAll();
    turnLeft();
}

void behaj() {
    /* opakuj pokial karel nenajde beeper */
    while(!beepersPresent()) {
        if(frontIsBlocked()) {
            /* ked je prekazka, preskoc ju */
            preskoc();
        } else {
            /* ked nie je prekazka, chod dopredu */
            movek();
        }
    }
}

/* behaj spat na zaciatok */
void behajSpat() {
    /* dorobit */
}






void akeSiroke() {
     turnWest();
     movekAll();
     turnEast();
     movekAll();
     turnWest();
     }

void akeVysoke() {
     turnSouth();
     movekAll();
     turnNorth();
     }

int main(){
    int kolko;
    nemamCas();
    turnOn("worlds/middleearth2.kw");
   
    turnNorth();
    movekAll();
    akeSiroke();
    kolko = kolko/2;
    while(kolko>0){
                  movek();
                  kolko=kolko-1;
                  }
    akeVysoke();
    kolko = kolko/2;
    while(kolko>0){
                  movek();
                  kolko=kolko-1;
                  }
    turnOff();
}


Taakto... Po prvé, netuším aké príkazy máš v pomocne-prikazy.h, takže s tým movekAll() ti nepomôžem asi.  ;D Možno to máš zle tam.  ??? Skús to urobiť cez premennu  ako napr. :

void moveVerticaly() {
     while (frontIsClear()) {
           movek();
           pocet_krokovV++;
           }
           }


Takto by si to mal mať nejak aj v tej knižnici...
A potom ho len otočíš a prikážeš mu nech spraví movek() pocet_krokovV/2 a bude v polovici vertikálne. To isté pre moveHorizontaly a bude v strede.

stricky


Safyia

Quote from: stricky on  13.03.2010, 20:12:35
salafatka ty sa nezdas :D
Taa, sak na co som na tej skole? Studujem!  ;D  ;D

a000000

#215
moje movekAll
int movekAll() {
   int kolko = 0;
   while(frontIsClear()) {
       movek();
       kolko = kolko + 1;
   }
   return kolko;
}

a nefunguje to ajtak :(((((( aaaaaaaaaaaaaaa  bp bp bp

Safyia

napíš to ako


void movekAll() {
    int kolko;
    while(frontIsClear()) {
        movek();
        kolko++;
    }
}


a isto to pojde. :D

tommy-sv

#217
Quote from: Safyia on  14.03.2010, 01:59:15
napíš to ako


void movekAll() {
   int kolko;
   while(frontIsClear()) {
       movek();
       kolko++;
   }
}


a isto to pojde. :D

ale on pouziva tu funkciu na zistovanie poctu krokov, nemoze pouzit void. jedine keby mal premennu definovanu globalne - co by bolo ale od veci.

to a000000: nepuzivaj zapisy typu x = x + 1, ale unarny operator x++ (resp. x--). nema zmysel pisat navyse tolko znakov ;)

skus toto:

/* @return int the width/height of the world
*/
int countSpan()
{
   int span;
   while(frontIsClear())
   {
      movek();
      span++;
   }
   return ++span; // pretoze zaciname na pozicii 1
}



to a000000: este k tym unaries, zamerne som nepisal int span = 1 ale na konci ++span. oba inkrementuju span o 1 ale span++ vracia hodnotu pred zvysenim pokym span++ hodnotu po zvyseni o 1.
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

a000000

takze , tu je cely kod zdrojovy ... a ajtak to nefunguje  :xmas: a je to aj s timy ++
/*
* main.c
*/

#include "impl/karel.h"
#include "pomocne-prikazy.h"

/* tu si pisete svoje funkcie */



/* preskoci akukolvek prekazku */
void preskoc() {
   turnLeft();
   /* vylez hore */
   while(rightIsBlocked()) {
       movek();
   }
   turnRight();
   movek();
   turnRight();
   /* zlez */
   movekAll();
   turnLeft();
}

void behaj() {
   /* opakuj pokial karel nenajde beeper */
   while(!beepersPresent()) {
       if(frontIsBlocked()) {
           /* ked je prekazka, preskoc ju */
           preskoc();
       } else {
           /* ked nie je prekazka, chod dopredu */
           movek();
       }
   }
}

/* behaj spat na zaciatok */
void behajSpat() {
   /* dorobit */
}


int movekAll() {
   int kolko;
   while(frontIsClear()) {
       movek();
       kolko++;
   }
   return ++kolko;
}



void akeSiroke() {
    turnWest();
    movekAll();
    turnEast();
    movekAll();
    turnWest();
    }

void akeVysoke() {
    turnSouth();
    movekAll();
    turnNorth();
    }

int main(){
   int kolko;
   nemamCas();
   turnOn("worlds/middleearth2.kw");
   
   turnNorth();
   movekAll();
   akeSiroke();
   kolko = kolko/2;
   while(kolko>0){
                 movek();
                 kolko++;
                 }
   akeVysoke();
   kolko = kolko/2;
   while(kolko>0){
                 movek();
                 kolko++;
                 }
   turnOff();
}


je to podla spravene podla tvojho prikladu a malo y to ist ale nejde :D

cenki

Tolko tu babarania s najdenim stredu... pekne sa da cez jednu premennu a par cyklov. Moje riesenie spred tyzdna.

#include <stdio.h>
void (turnRight()){
     turnLeft();
     turnLeft();
     turnLeft();
     }
void (turnAround()){
     turnLeft();
     turnLeft();
     }
     
int main()
{
  setStepDelay(50);
  turnOn("middleearth1.kw");
  int a; /* premenna na pocitanie krokov */
 
  /* Dojde ku jednej zo stien */
  while(frontIsClear()){
  movek();
  }
 
  /* Otoci sa a dojde k opacnej stene, pricom zrata kolko spravil krokov */
  a=1;
  turnAround();
  while(frontIsClear()){
  movek();
  a++;
  }
 
  /* Otoci sa a podla poctu krokov ktore spravil prejde len polovicu */
  a=(a/2);
  turnAround();
  while (a!=0){
  movek();
  a--;
  }
 
  /* Otoci sa vlavo a dojde ku druhej stene */
  turnLeft();
  while(frontIsClear()){
  movek();
  }
 
  /* Otoci sa a dojde k opacnej stene, pricom zrata kolko spravil krokov */
  a=1;
  turnAround();
  while(frontIsClear()){
  movek();
  a++;
  }
 
  /* Otoci sa a podla poctu krokov ktore spravil prejde len polovicu */
  a=(a/2);
  turnAround();
  while (a!=0){
  movek();
  a--;
  }

  turnOff();
  system("PAUSE");
  return 0;
}

tommy-sv

#220
takto, ty si sice implementoval kod do funkcie movekAll (ktorej nazov je ale tiez troska nepresny, lebo robi to ze spocita sirku resp. vysku sveta, preto som ja nazval countSpan) ale...
volas ju z void funkcie akeSiroke, bez ulozenia navratovej hodnoty cize ty vobec nepouzivas zistenu informaciu
v prilohe postu mas kod s 3 funkciami vratane main ktory ti najde stred, asi najjednoduchsia implementacia riesenia ktora je este stale lahko citatelna, pls prestuduj si tok programu.
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."

dEVIANT

Musíš si zadeklarovať funkciu private void FindCenterOfTheWorld() { .. }

A definíciu ponechávam na čitatela...
Nie je nič nákazlivejšie ako rozhodný a presvedčením sa vyznačujúci život.

vojto

Najenie stredu

No pozeram, ze zdielate kod (ktory nebudem komentovat) tak pridam aj svoj:

http://pastie.org/868356

Safyia

Quote from: tommy-sv on  14.03.2010, 03:24:18
ale on pouziva tu funkciu na zistovanie poctu krokov, nemoze pouzit void. jedine keby mal premennu definovanu globalne - co by bolo ale od veci.

Ja som si to voidla, osobitne pre verikalne a pre horizontalne, pripadalo mi to prehladne :D Kod nejdem pastovat je ich tu milion :D Vlastne ja pisem a ked to ide, tak sa uz so zjednodusovanim nebabrem :D:D

Eeej ale pekne riesenie mas :D Nabuduce budem zjednodusovat... Ale to vseetko pride praxou! :D

Quote from: dEVIANT on  14.03.2010, 05:06:35
Musíš si zadeklarovať funkciu private void FindCenterOfTheWorld() { .. }

A definíciu ponechávam na čitatela...

Spamer  :P ;D

tommy-sv

Quote from: dEVIANT on  14.03.2010, 05:06:35
Musíš si zadeklarovať funkciu private void FindCenterOfTheWorld() { .. }

pozor, "private" jazyk C (ANSI) nepozna ;) ako ani "public" alebo "protected". platne su v C++, Java, C# a vo vseobecnosti v jazykoch ktore podporuju enkapsulaciu clenov
"Čím skôr zomrieš, tým dlhšie budeš mŕtvy."
"Radšej viac vypiť, ako menej zjesť."