Sprawdź się
Zadanie 3
Napisz program, który obliczy odległość danego punktu od środka układu współrzędnych. Położenie punktu w trójwymiarowym kartezjańskim układzie współrzędnych określone jest za pomocą trzech składowych współrzędnych: . Odległość punktu od początku układu współrzędnych obliczamy ze wzoru:
Zestawy punktów, dla których masz obliczyć odległości od środka układu współrzędnych, znajdują się w pliku dane.txt (współrzędne x, y, z oddzielone są znakami odstępu, każdy zestaw współrzędnych zapisany w osobnej linii). Wyniki zapisz z dokładnością do dwóch miejsc po przecinku w pliku wyniki_3.txt – każda odległość w osobnym wierszu, w porządku odpowiadającym kolejności zestawów współrzędnych w pliku z danymi.
Plik dane.txt zawierający 100 zestawów współrzędnych:
Przycisk do pobrania pliku TXT z treścią zadania. Pobierz załącznik
Dla przykładowych danych:
5.1 4.8 2.1
-2.1 2.5 42.31
-4 2.1 -3.33
-4.9 -2.6 -5.4wyniki powinny wyglądać następująco:
7.31
42.43
5.61
7.74Do oceny oddajesz:
plik
wyniki_3.txtzawierający odpowiedź (odległości od środka układu współrzędnych, zapisane w osobnych liniach, z dokładnością do dwóch miejsc po przecinku),plik(i) z komputerową realizacją zadania (kodem programu).
Rozwiąż zadanie dla danych wejściowych zawartych w pliku. Wykorzystaj w tym celu jeden z języków programowania: C++, Java lub Python. Odpowiedź do zadania znajdziesz pod sekcją ćwiczeń.
JĘZYK C++
Przykładowe rozwiązanie:
#include <iostream>
#include <cmath>
using namespace std;
double f(double x, double n) {
return x * x - n;
}
double fp(double x) {
return 2 * x;
}
double pierwiastek(double n) {
double epsilon = 0.001;
double xk, xk1 = n - f(n, n) / fp(n);
do {
xk = xk1;
xk1 = xk - f(xk, n) / fp(xk);
} while (fabs(xk1 - xk) > epsilon);
return xk1;
}
double odleglosc(double x, double y, double z) {
return pierwiastek(x * x + y * y + z * z);
}
int main() {
int n = 4;
double punkty[][3] = {
{ 5.1, 4.8, 2.1 },
{ -2.1, 2.5, 42.31 },
{ -4, 2.1, -3.33 },
{ -4.9, -2.6, -5.4 }
};
for (int i = 0; i < n; ++i) {
int wynik = (int)(odleglosc(punkty[i][0], punkty[i][1], punkty[i][2]) * 100);
double przyblizenie = (double)(wynik) / 100;
cout << przyblizenie << endl;
}
}JĘZYK JAVA
Przykładowe rozwiązanie:
public class Main {
public static double f(double x, double n) {
return x * x - n;
}
public static double fp(double x) {
return 2 * x;
}
public static double pierwiastek(double n) {
double epsilon = 0.001;
double xk, xk1 = n - f(n, n)/fp(n);
do {
xk = xk1;
xk1 = xk - f(xk, n)/fp(xk);
}
while (Math.abs(xk1 - xk) > epsilon);
return xk1;
}
public static double odleglosc(double x, double y, double z) {
return pierwiastek(x*x + y*y + z*z);
}
public static void main(String[] args) {
int n = 4;
double[][] punkty = {
{ 5.1, 4.8, 2.1 },
{ -2.1, 2.5, 42.31 },
{ -4, 2.1, -3.33 },
{ -4.9, -2.6, -5.4 }
};
for (int i = 0; i < n; ++i) {
int wynik = (int) (odleglosc(punkty[i][0], punkty[i][1], punkty[i][2]) * 100);
double przyblizenie = (double) (wynik)/100;
System.out.println(przyblizenie);
}
}
}JĘZYK PYTHON
Przykładowe rozwiązanie:
import math
def f(x, n):
return x * x - n
def fp(x):
return 2 * x
def pierwiastek(n):
epsilon = 0.001
xk = n - f(n, n)/fp(n)
xk1 = xk - f(xk, n) / fp(xk)
while math.fabs(xk1 - xk) > epsilon:
xk = xk1
xk1 = xk - f(xk, n) / fp(xk)
return xk1
def odleglosc(x, y, z):
return pierwiastek(x*x + y*y + z*z)
n = 4
punkty = [
[ 5.1, 4.8, 2.1 ],
[ -2.1, 2.5, 42.31 ],
[ -4, 2.1, -3.33 ],
[ -4.9, -2.6, -5.4 ]
]
for punkt in punkty:
wynik = int(odleglosc(punkt[0], punkt[1], punkt[2]) * 100)
przyblizenie = wynik/100
print(przyblizenie)Odpowiedź
Odpowiedź dla danych z pliku dane.txt:
Przycisk do pobrania pliku TXT z wynikiem zadania. Pobierz załącznik