Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sumowanie ciągów

Ostatnio zmodyfikowano 2021-01-28 22:29
Autor Wiadomość
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.html

A 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.
C/C++
#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;
}
P-178007
DejaVu
» 2021-01-25 00:38:28
Tak. po prostu trzeba zapisać wzór w pętli. Przykład:
C/C++
double wynik = 0.0;
for( int i = 0; i < 10; ++i )
{
   
int k = i; //TODO: ustal ile ma wynosić 'k' w każdym przebiegu pętli.
   
int j = i + 1; //TODO: ustal ile ma wynosić 'j' w każdym przebiegu pętli.
   
wynik += h[ k ] * hd[ j ];
}
P-178008
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ć.
P-178017
pekfos
» 2021-01-25 22:40:28
A jak wygląda ten niedziałający kod? Szkoda zachodu na zgadywanie problemów.
P-178021
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?

C/C++
#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;
       
// Sum=0;
   
}
   
for( int i = 0; i < 4; i++ )
   
{
       
cout << "Q:" << Q[ i ] << "\n";
   
}
   
return 0
}
P-178026
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.
P-178036
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ą?

C/C++
#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
P-178041
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.
P-178042
« 1 » 2
  Strona 1 z 2 Następna strona