Kezdőoldal » Számítástechnika » Programozás » Hol rontottam el?

Hol rontottam el?

Figyelt kérdés

Szóval a következő a feladat:


Egy vitorlás hajó által megtett útról egy olyan adathalmaz keletkezett, amelyben minden bejegyzés egy pozícióból és egy időtartamból áll. A pozíció egy kétdimenziós pont, melyen a hajó áthaladt, az időtartam pedig az az idő, ami alatt az előző pozíciótól az aktuális pozícióig elért. A pozíciók között (megfelelő közelítéssel) a hajó egyenesen haladt. A pontok euklideszi térben értelmezettek (laposföldön...), a koordináták méterben vannak megadva (azonban nem feltétlenül egész számok). Az időtartam óra, perc és másodperc tagból áll.


Hozd létre a bejegyzések tárolásához szükséges struktúrákat az alábbi azonosítókkal:


point

x (valós)

y (valós)

time

hour (egész)

minute (egész)

second (egész)

record

position (point)

interval (time)

Írj függvényt in_seconds névvel, mely egy time típussal megadott időintervallumot átvált az eltelt másodpercek számára!


Írd meg a distance nevű függvényt, mely két point típusú pont közötti távolsággal tér vissza!


Írj függvényt average_speed névvel, mely record típusú elemekből álló tömböt kap paraméterként, és visszatér az utazás átlagsebességével m/s mértékegységben (az átlagsebesség a szakaszok összhosszának és az összes eltelt időnek a hányadosa). A tömb első elemének interval tagja irreleváns, hiszen az első pont elérése előtti eseményekre nem vagyunk kíváncsiak.


És ezt a kódot írtam:


#include <stdio.h>

#include <math.h>


typedef struct point

{

double x;

double y;

} point;


typedef struct time

{

int hour;

int minute;

int second;

} time;


typedef struct record

{

point position;

time interval;

} record;


int in_seconds (time a)

{

int b;

b = a.hour * 3600 + a.minute * 60 + a.second;

return b;

}


double distance (point a, point b)

{

double t;

t = sqrt ((a.x - a.y) * (a.x - a.y) + (b.x - b.y) * (b.x - b.y));

return t;

}


double average_speed (record t[], int n)

{

double hossz = 0.0;

int ido = 0;

double sebatl = 0.0;

for (int i = 1; i < n; i++)

{

ido += in_seconds (t[i].interval);

hossz += distance (t[i-1]. position,t[i].position);

}

sebatl = hossz/ido;

return sebatl;

}



Valamire működik, valamire nem, és nem értem mi a baj vele, C nyelv.



2022. okt. 25. 14:17
 1/2 anonim ***** válasza:
90%

Hirtelenjében ránézve, nekem ez tünt fel:

double distance (point a, point b) {

double t;

t = sqrt ((a.x - a.y) * (a.x - a.y) + (b.x - b.y) * (b.x - b.y));

return t;

}


Ugyanis hogyan szól a Pitagorasz-tétel?

a ^ 2 + b ^ 2 = c ^ 2

(a "^" jelen esetben a hatványozás jele)

ebből következőleg

c = sqrt (a ^ 2 + b ^ 2)

vagyis

c = sqrt (a * a + b * b)


Tegyük fel, hogy az "a" szakasz a két pont (jelöljük "A" és "B" névvel) "x" koordinátájának ("A.x" és "B.x") különbsége, a "b" szakasz a két pont "y" koordinátájának ("A.y" és "B.y") különbsége, vagyis

a = B.x - A.x

illetve

b = B.y - A.y


vagyis az előzőekbe behelyettesítve:

c = sqrt((B.x - A.x) * (B.x - A.x) + (B.y - A.y) * (B.y - A.y))

vagy ha már használjuk a math.h könyvtárat:

c = sqrt(pow((B.x - A.x), 2) + pow((B.y - A.y), 2))


Bővebben:

[link]

2022. okt. 25. 14:51
Hasznos számodra ez a válasz?
 2/2 A kérdező kommentje:
Köszi, na így már jó lett.
2022. okt. 25. 14:57

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!