Struktury, chodzenie po płaszczyźnie

Odpowiedz Nowy wątek
2017-12-02 15:14
0

Cześć,
Poniżej umieszczam polecenie które muszę wykonać.
Czytałem zarówno na wikibooks, jak i na tutejszym forum co to są konkretnie te struktury, jednakże nie mam pomysłu, narzędzi merytorycznych do wykonania tego zadania.

  1. Zdefiniuj w pliku agents.h typ struct agent do reprezentowania agenta oraz
    wpisz deklaracje poniższych funkcji.
  2. Zdefiniuj funkcję struct agent newagent(int x, int y), która tworzy nowego
    agenta znajdującego się w zadanym miejscu.
  3. Zdefiniuj funkcję void north(struct agent *a), która wykonuje danym agen-
    tem krok na północ.
    4.Zdefiniuj funkcję double distance(struct agent a1, struct agent a2), która
    oblicza odległość euklidesową między dwoma agentami a1 i a2.
    // jest ich więcej ale wystarczą te 4 główne

Odnośnie punktu (1.) mój plik wygląda tak:

struct agent;
struct agent newagent(int x, int y);
void north(struct agent *a);
void south(struct agent *a);
void east(struct agent *a);
void west(struct agent *a);
double distance(struct agent a1, struct agent a2);

Odnośnie punktu (2.) drugiego to mam coś takiego, nie wiem czy poprawnie:

struct agent newagent(int x, int y)

{ 
   struct agent Bob;

   Bob.x = x;
   Bob.y = y;
   return Bob;

}

Pozostało 580 znaków

2017-12-02 15:16
kq
1

To co na razie zrobiłeś wygląda poprawnie. Dziwne, że distance ma działać na kopiach, ale jak tak mówi zadanie to tak rób.


Pozostało 580 znaków

2017-12-02 16:24
0

Tylko jest problem bo nie wiem jak ma szię ruszać nasz "agent" co zrobić

edytowany 1x, ostatnio: aolo23, 2017-12-02 16:37

Pozostało 580 znaków

2017-12-02 19:45
Brunatny Szczur
1
void north( struct agent* a )
{
  if ( a != NULL )
  {
    ++(a->y);     // albo --(a->y), zależy w którą "stronę" współrzędne mają rosnąć
  }
}
to jak tu policzyć dystans między agentami? - aolo23 2017-12-02 19:48

Pozostało 580 znaków

2017-12-02 20:51
Wesoły Kret
0
aolo23 napisał(a):

to jak tu policzyć dystans między agentami?

Pitagorsa?

Pierwiastek z pitagorasa daje odległość czyli przekątną, a ta potocznie zwana odległością :P

Pozostało 580 znaków

2017-12-02 21:40
0

Ja rozumiem, że dla was to jest trywialne zagadnienie, ale sprecyzuje się.Ja nie "czuję " tych struktur i nie wiem za bardzo co gdzie jak jest zmienną co z czym połączyć itd.
Co do rzeczy matematycznych to nie ma problemów, jednakże jak to ująć w kod źródłowy.

Pozostało 580 znaków

2017-12-02 21:55
Wesoły Kret
0

Zbyt bardzo przejmujesz się, programowanie to istna matematyka, ja nie rozumiałem matematyki, ale dzięki programowaniu tzn. praktycznemu wykorzystaniu matematyki w programowaniu zrozumiałem.

To jest piękne żeby matematykę zrozumieć same podstawy pythona starczą i możan kombinować, wykresy generować itp.

Pozostało 580 znaków

2017-12-02 21:57
0

No to u mnie to wygląda potrafię robić skomplikowane rzeczy na zwykłej kartce ale jestem na początkującym poziomie programowania i nie umiem niektórych rzeczy robić;)
Ale nie uciekając od tematu, potrzebuję funkcji która liczy odległość między agentami :/

Pozostało 580 znaków

2017-12-02 21:59
Wesoły Kret
0

Ile razy mam ci tłumaczyć.

masz odległość x od obu postaci, i podległość y od obu postaci z tego liczysz pitagorasa i masz odległość.

Łatwiej się nie da !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Pozostało 580 znaków

2017-12-03 12:54
Minister Spawalnictwa
1
float CalcDistance(const Point* p1, const Point* p2)
{
   float dist;
   if ( p2->x == p1->x ) { dist = abs( p2->y - p1->y ); }         // jeśli punkty mają identyczną wartość w osi X to odległość wynosi |y2-y1|
   else if ( p2->y == p1->y ) { dist = abs( p2->x - p1->x ); }    // jeśli punkty mają identyczną wartość w osi Y to odległość wynosi |x2-x1|
   else {
      Point p3;                  // tworzysz tymczasowy punkt, który utworzy nam trójkąt prostokątny
      p3.x = p1->x;
      p3.y = p2->y;
      int a = abs( p2->x - p3.x );     // długość pierwszej przyprostokątna
      int b = abs( p1->y - p3.y );     // długość drugiej przyprostokątna
      dist = sqrtf( a * a + b * b );   // przeciwprostokątna czyli odległość między punktami
  }
  return dist;
}
Czemu abs? I czemu nie hypot? - kq 2017-12-03 13:08
Całą funkcję CalcDistance można sprowadzić do: return sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - b.y)); Jest w c++ hypot który nie liczy od punktu zerowego? - czaffik 2017-12-04 17:13
Mowa o C. I nie, nie ma, ale co to za problem? hypot(p1.x-p2.x, p1.y-p2.y) - kq 2017-12-04 17:15
Fakt tak też można. Co za różnica czy c czy c++, obie mają podobną bibliotekę z funkcjami matematycznymi. - czaffik 2017-12-04 17:23
C++ ma też trójwymiarowy i przeładowany hypot ;​) Ale fakt, nie robi to tu wielkiej różnicy, przy czym mimo wszystko warto rozmawiać o C i C++ jako o różnych językach, bo takimi są. - kq 2017-12-04 17:26
niezaprzeczalnie, po prostu nie zwróciłem dokładnie uwagi czy to c czy c++ :) - czaffik 2017-12-04 17:28

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0