Wiam,
chciałbym prosić o pomoc, nakierowanie jak zrobić taką funkcjonalność. Mianowicie mam do zrobienia program formularzowy, który będzie wyświetlał wyniki użytkownikowi w formie tabeli dataGridView w dwóch kolumnach, w pierwszej 'x' a w drugiej 'f(x).
Xd, Xg - dolna i górna granica przedziału x
h - krok (przyrost) zmian wartości x
Do tego wartość funkcji jest obliczana ze wzoru na sumę szeregu potęgowego.
Według tej tabelki:
Problem mam z:
** jak wpisać zmieniające się Xd + h (czyli dolną granicę przedziału x z krokiem h) do wzoru w metodzie SumaSzeregu?*
** czy, żeby program obliczał te nowe sumy aż do górnej granicy przedziału Xg, to wystarczy to for(...) w kodzie poniżej?*
** czy zrobić jeszcze jedną metodę na obliczanie tego wszystkiego specjalnie do tabelki?*
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;
namespace
{
public partial class Form1 : Form
{
void TabelarycznaWizualizacjaSumySzeregu(ref float[,] T, float db_Xd, float db_h, float db_SumaSzeregu, float db_Xg)
{
float db_Xp; //pierwszy x
float db_WarFunkcji; //obliczona wartości f(x)
db_Xp = db_Xd; //początkowy x to x odpowiadający górnej granicy przedziału
db_WarFunkcji = db_SumaSzeregu; //wartość funkcji obliczana z metody SumaSzeregu
for(int i =0; i <= db_Xg; i++) //tutaj nie wiem czy dobrze, ale zamysł jest żeby brało następne x aż do ostatniego xd dla którego (Xd + h) <= Xg
{
T[i, 0] = db_Xp; //w 1 kolumnie tabeli będą zmienne x
T[i, 1] = db_WarFunkcji; //w 2 kolumnie będą obliczone f(x)
}
db_Xp = db_Xp + db_h; //tutaj do następnego x ma być dodany krok h
//???
}
bool PobierzDaneWejściowe(out float db_x, out float db_Eps, out float db_Xd, out float db_Xg, out float db_h)
{
db_x = 0.0f; //zmienna x
db_Eps = 0.0f; //dokładność obliczeń Epsilon
db_Xd = 0.0f; //dolna granica przedziału dla x
db_Xg = 0.0f; //górna granica przedziału dla x
db_h = 0.0f; //krok (przyrost) zmian wartości zmiennej x
if (string.IsNullOrEmpty(txtX.Text))
{
errorProvider1.SetError(txtX, "ERROR: proszę podać wartość zmiennej niezależnej x");
return false;
}
else
errorProvider1.Dispose();
if (!float.TryParse(txtX.Text, out db_x))
{
errorProvider1.SetError(txtX,
"ERROR: w zapisie wartości zmiennej niezależnej x wystąpiły niedozwolone znaki");
return false;
}
else errorProvider1.Dispose();
txtX.Enabled = false;
if (string.IsNullOrEmpty(txtEps.Text))
{
errorProvider1.SetError(txtEps,
"ERROR: proszę podać wartość dokładności obliczeń Eps");
return false;
}
else
errorProvider1.Dispose();
if (!float.TryParse(txtEps.Text, out db_Eps))
{
errorProvider1.SetError(txtEps,
"ERROR: w zapisie wartości dokładności obliczeń Eps wystąpiły niedozwolone znaki");
return false;
}
else errorProvider1.Dispose();
if ((db_Eps <= 0) || (db_Eps >= 1))
{
errorProvider1.SetError(txtEps,
"ERROR: proszę podać dokładność obliczeń Eps z przedziału (0,1)");
return false;
}
else errorProvider1.Dispose();
txtEps.Enabled = false;
if (string.IsNullOrEmpty(txtH.Text))
{
errorProvider1.SetError(txtH,
"ERROR: proszę podać wartość kroku h zmian wartości zmiennej niezależnej x ");
return false;
}
else errorProvider1.Dispose();
if (!float.TryParse(txtH.Text, out db_h))
{
errorProvider1.SetError(txtH,
"ERROR: w zapisie wartości kroku h zmian wartości zmiennej niezależnej x wystąpiły niedozwolone znaki");
return false;
}
else
errorProvider1.Dispose();
txtH.Enabled = false;
if (string.IsNullOrEmpty(txtXd.Text))
{
errorProvider1.SetError(txtXd,
"ERROR: proszę podać wartość dolnej granicy przedziału");
return false;
}
else
errorProvider1.Dispose();
if (!float.TryParse(txtXd.Text, out db_Xd))
{
errorProvider1.SetError(txtXd,
"ERROR: w zapisie dolnej granicy przedziału wystąpiły niedozwolone znaki");
return false;
}
else
errorProvider1.Dispose();
txtXd.Enabled = false;
if (string.IsNullOrEmpty(txtXg.Text))
{
errorProvider1.SetError(txtXg,
"ERROR: proszę podać wartość górnej granicy przedziału");
return false;
}
else
errorProvider1.Dispose();
if (!float.TryParse(txtXg.Text, out db_Xg))
{
errorProvider1.SetError(txtXg,
"ERROR: w zapisie wartości górnej granicy przedziału wystąpiły niedozwolone znaki");
return false;
}
else
errorProvider1.Dispose();
txtXg.Enabled = false;
return true;
}
static void db_SumaSzereguFunkcyjnego(float db_x, float db_Eps, out float
db_SumaSzeregu, out int db_LicznikWyrazówSzeregu)
{ //deklaracje lokalne
float db_a;//wyraz szeregu funkcyjnego
int db_k;//nr wyrazu szeregu funkcyjnego
//ustawienie początkowego stanu obliczeń
db_a = 2 - db_x;//wartość 1. wyrazu
db_k = 1;//licznik wyrazów
db_SumaSzeregu = db_a;
//wyznaczenie sumy szeregu funkcyjnego
do
{
//wyznaczenie indeksu(numeru) kolejnego wyrazu szeregu
db_k++;
//wyznaczenie k-tego wyrazu szeregu
db_a *= (float)Math.Sqrt(1 - (1 / db_k)) * (2 - db_x);
//obliczenie sumy k wyrazów szeregu
db_SumaSzeregu += db_a;
} while (Math.Abs(db_a) > db_Eps);
//przekazanie liczby zsumowanych wyrazów szeregu przez
//parametr wyjściowy (out) LicznikWyrazówSzeregu
db_LicznikWyrazówSzeregu = db_k;
}
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void wykresToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
float db_x, db_Eps, db_Xd, db_Xg,db_h;
float db_SumaSzeregu;
int db_LicznikZsumowanychWyrazów;
if(!PobierzDaneWejściowe(out db_x, out db_Eps, out db_Xd, out db_Xg, out db_h))
{
errorProvider1.SetError(btnObliczWartośćFunkcji,
"ERROR: błąd w pobieraniu danych wejściowych");
return;
}
db_SumaSzereguFunkcyjnego(db_x, db_Eps, out db_SumaSzeregu, out db_LicznikZsumowanychWyrazów);
txtWynik.Text = db_SumaSzeregu.ToString();
txtWynik.Enabled = false;
}
private void dgvTabela_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
}
private void txtWynik_TextChanged(object sender, EventArgs e)
{
}
private void kolorTłaToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void kolorLiniiWykresuToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void chartWykres_Click(object sender, EventArgs e)
{
}
private void btnGraficzna_Click(object sender, EventArgs e)
{
}
private void oProgramieToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Program", "Informacja o programie", MessageBoxButtons.OKCancel, MessageBoxIcon.Information);
}
private void pictureBox1_Click(object sender, EventArgs e)
{
}
private void btnTabela_Click(object sender, EventArgs e) //metoda obsługi kliknięcia 'Tabelaryczna Wizualizacja Funkcji'
{
/*float db_x, db_Eps, db_Xd, db_Xg, db_h, db_SumaSzeregu;
if (!PobierzDaneWejściowe(out db_x, out db_Eps, out db_Xd, out db_Xg, out db_h))
return;
float[,] TRL = new float [] ------------> ???
*/
}
}
}