Shana_a Temat założony przez niniejszego użytkownika |
Sumowanie ciągów » 2021-01-24 23:26:52 Cześć. Potrzebuje wykonać sumę tak jak na pierwszym zdjęciu. Jednak czy da się zautomatyzować, aby nie wpisywać kolejnych deltaH(kolejny numer)? Ponieważ takich danych z deltaH mam kilkadziesiąt i nie zawsze jest to ta sama liczba. https://zapodaj.net/de7891058ce71.jpg.htmlA tutaj kolejne zdjęcie, jak ma mniej więcej wyglądać wzór po rozwinięciu. https://zapodaj.net/8f95a047a69fd.jpg.html Tutaj próbka programu, kiedy ilość danych jest wiadoma. #include <iostream> #include <math.h> #include <cstdlib> using namespace std; float h[ 4 ] = { 0, 0.570, 1.371, 1.781 }; float hd[ 4 ] = { 0, 1.4, 1.6, 2.1 }; float Q[ 4 ]; int main() { for( int i = 0; i < 4; i++ ) { Q[ i ] = h[ i ] * hd[ 1 ] + h[ i - 1 ] * hd[ 2 ] + h[ i - 2 ] * hd[ 3 ]; } for( int i = 0; i < 4; i++ ) { cout << "Q:" << Q[ i ] << "\n"; } return 0; }
|
|
DejaVu |
» 2021-01-25 00:38:28 Tak. po prostu trzeba zapisać wzór w pętli. Przykład: double wynik = 0.0; for( int i = 0; i < 10; ++i ) { int k = i; int j = i + 1; wynik += h[ k ] * hd[ j ]; } |
|
Shana_a Temat założony przez niniejszego użytkownika |
» 2021-01-25 21:18:20 Tylko, że w danym wierszu, liczba działań jest inna i inne dane są brane pod uwagę. Niestety tylko w podanym przeze mnie przykładzie liczy mi dobrze. https://zapodaj.net/f4ba1ac69499a.jpg.html takie powinny być wyniki. Nie wiem czy faktycznie da się to zautomatyzować. |
|
pekfos |
» 2021-01-25 22:40:28 A jak wygląda ten niedziałający kod? Szkoda zachodu na zgadywanie problemów. |
|
Shana_a Temat założony przez niniejszego użytkownika |
» 2021-01-25 23:11:57 Wygląda tak i jestem świadoma dlaczego nie działa, ale nie wiem jak sobie poradzić z tym, aby działalo jak w pierwszej wiadomości, ale było uniwersalne. Może trzeba kombinować z zagnieżdżeniem pętli? #include <iostream> #include <math.h> #include <cstdlib> using namespace std; double h[ 4 ] = { 0.576, 1.381, 1.781, 1.917 }; double hd[ 4 ] = { 0, 1.4, 1.6, 2.1 }; double Q[ 4 ]; double Sum = 0.0;
int main() { for( int i = 0; i <= 4; i++ ) { int j = i + 1; int k = i - j + 1; Sum += h[ k ] * hd[ j ]; Q[ i ] = Sum; } for( int i = 0; i < 4; i++ ) { cout << "Q:" << Q[ i ] << "\n"; } return 0 }
|
|
pekfos |
» 2021-01-26 17:52:56 Może trzeba kombinować z zagnieżdżeniem pętli? Powinny być dwie pętle. Schemat kodu podany przez DejaVu powinien być wewnątrz pętli iterującej po kolejnych wyrazach Q_i do policzenia. Włącznie z definicją zmiennej wynik. Zmieniając jej położenie wprowadziłaś do kodu dodatkowe błędy, nie wspominając już o tym, że używanie zmiennych globalnych bez powodu to bardzo zła praktyka. |
|
Shana_a Temat założony przez niniejszego użytkownika |
» 2021-01-26 22:59:44 Prawie wychodzi, ostatni wynik się różni. Nie jestem pewna czy akurat takie zmienne w j i k powinny być, ale są najbliższe rozwiązaniu, które wychodzi. Sadze, ze raczej w obu powinna to byc zmienna x, ale nie wychodzi. Może coś innego powinno być przed lub poza pętlą? #include <iostream> #include <math.h> #include <cstdlib> using namespace std;
int main() { double h[ 4 ] = { 0.576, 1.381, 1.781, 1.917 }; double hd[ 4 ] = { 0, 1.4, 1.6, 2.1 }; double Q[ 4 ]; double wynik = 0.0; for( int i = 0; i < 4; i++ ) { for( int x = 0; x <= i; x++ ) { int j = x + 1; int k = i - j + 1; wynik += h[ k ] * hd[ j ]; Q[ i ] = wynik; } wynik = 0.0; } for( int i = 0; i < 4; i++ ) { cout << "Q:" << Q[ i ] << "\n"; } Q:0.8064 Q:2.855 Q:5.9126 Q:8.89799
|
|
pekfos |
» 2021-01-27 16:02:46 Po pierwsze trzymaj się spójnego indeksowania. i zaczyna od zera, j od 1, w praktyce robisz Q[ 0 ] = h[ 0 ] * hd[ 1 ] , gdzie oba mnożone parametry powinny mieć ten sam indeks. Swoją drogą h[0] masz 0.576, a na obrazkach jest 0.570. Jeśli indeksowanie od zera to problem, to dodaj na początek tablic jeden nieużywany element i indeksuj od 1. Później możesz to pozamiatać na działającym kodzie. |
|
« 1 » 2 |