nowawieza Temat założony przez niniejszego użytkownika |
Napisz program który oblicza podaną sumę z wektorami [C] » 2017-02-15 15:49:24 Zdjęcie zadania: https://scr.hu/XGqGPW Treść zadania: Napisz program który oblicza s x,y to wektory n elementowe l. rzeczywistych.
s= pierwiastek z modułu, a w module jest znak sumy (sigma?) od i=1 do n (xi-yi).
Proszę o pomoc w zrobieniu tego albo nawet zrobienie tego za mnie jeśli ktoś wie jak to szybko zrobić. Taki typ zadania dostanę na kolokwium, a totalnie nie wiem jak się zabrać za takie zadanie z wektorami itd.
Dodam, że to pierwszy semestr informatyki i programowania w języku C. Więc fajerwerków powinno tu nie być. Pewnie klasyczne zadanie ;/
|
|
hit |
» 2017-02-15 16:17:18 Prosta implementacja wzoru.
"Taki typ zadania dostanę na kolokwium, a totalnie nie wiem jak się zabrać za takie zadanie z wektorami itd." To co robiłeś(aś) cały semestr?
Będziesz potrzebował informacji o tablicach (użycie jako wektor), pętlach (np. for) oraz bibliotekę cmath do obliczenia pierwiastka. Lepiej zacząć cokolwiek samemu, wtedy można liczyć na pomoc.
Edit: I jeszcze abs do obliczenia wartości bezwzględnej, ale to jest również w cmath.
Edit2:
http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Tablice-jednowymiarowe/292 http://cpp0x.pl/kursy/Kurs-C++/Poziom-2/Petla-for/294 |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-02-15 22:12:20 Postarałem się coś napisać ale robię na pewno wiele błędów. Proszę, pomóżcie to zrobić :( #include <stdio.h> #include <stdlib.h> #include <time.h> #include <math.h> const int N = 1000; float dim( float[], float[], int );
int main() { float x, y, iks[ N ], igr[ N ], xd; int n, i; do { printf( "Podaj ilosc wymiarow przestrzeni: " ); scanf( "%d", & n ); } while( n < 1 ); for( i = 0; i < n; i++ ) { printf( "\nPodaj wspolrzedna x punktu: " ); scanf( "%f", & iks[ i ] ); printf( "\nPodaj wspolrzedna y punktu: " ); scanf( "%f", & igr[ i ] ); printf( "\n\t\t %.1f,%.1f", iks[ i ], igr[ i ] ); } xd = dim( iks, igr, n ); printf( "\n%f", xd ); return 0; }
float dim( float iks[], float igr[], int n ) { int i; float s = 0; for( i = 0; i < n; i++ ) { s += sqrt( abs( iks[ i ] - igr[ i ] ) ); } return s; }
|
|
maly7 |
» 2017-02-15 22:29:52 Co do twojej funkcji diff: for( i = 0; i < n; i++ ) { s += sqrt( abs( iks[ i ] - igr[ i ] ) ); } Teraz masz sumę pierwiastków, najpierw dodaj wszystkie różnice, a dopiero po skończeniu pętli spierwiastkuj moduł tej sumy :) Czyli: for( i = 0; i < n; i++ ) s += iks[ i ] - igr[ i ]; s = sqrt(abs(s));
|
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-02-15 22:44:26 Ok, dzięki wielkie za to. Ale cała reszta jest dobra? Na początku kodu jest printf( "Podaj ilosc wymiarow przestrzeni: " ); scanf( "%d", & n );
To powinienem zostawić? Mi się wydaje, że tu odgórnie powinno być ustalone const int n=2 |
|
maly7 |
» 2017-02-15 22:48:13 Ilość wymiarów przestrzeni jest w tym wypadku stała (2), a ty pobierasz ile elementów ma dany wektor (x i y). Po prostu zmień tekst wyświetlany przy pobieraniu zmiennej n :D |
|
nowawieza Temat założony przez niniejszego użytkownika |
» 2017-02-15 22:57:35 No ale nawet jeśli to dam n=4
Wtedy do wpisania mam 4 punkty.
Przecież wektor nie będzie obliczony przechodząc przez 4 punkty. No chyba, że totalnie nie rozumiem tego xD
Bo przecież jak już to liczymy odległość między dwoma punktami, a nie między trzema :/ |
|
maly7 |
» 2017-02-15 23:02:58 Kieruje się zdjęciem tablicy. Jest napisane, że wektory x oraz y mają n elementów. Podane jest również, żeby obliczyć s z tego wzoru. Nie jest wyjaśnione dokładnie co to jest s więc może to być wszystko :p A jeśli s byłoby odległością, to wzór wyglądałby tak: sqrt( (x2-x1)^2 - (y2-y1)^2 ) |
|
« 1 » 2 |