Hol rontottam el?
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.
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:
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!