PDA

View Full Version : حرفه ای: چگونه میانگین گیری از داده های دینامیک کنم ؟



jblaox
یک شنبه 06 شهریور 1390, 01:14 صبح
درود

پیش زمینه :
من یک برنامه دارم برای خودم مینوسیم ، این برنامه از یک سنسور فشار داده ها را میگیره و محاسباتی انجام میده و نتیجه ای نمایش میدهد

برای دریافت اطلاعات و نمایش ان و ... مشکلی ندارم ، مشکلی که دارم این که من باید در یک بازه زمانی 5 دقیقه ای از اطلاعات میانگین گیری کنم یعنی چی :

زمان صفر فشار 10 است و بعد 1 ثانیه بعد 10.1 است بعد ..... (داده ها به غیر زمان که هر یک ثانیه یک بار است هیچ رابطه ریاضی با هم ندارند )

اول سوالم این که من داده ها را در این 5 دقیقه چگونه ذخیره کنم ؟ و چگونه بازیابی کنم ؟

خروجی سنسور من یک همچین چیزی که هر یک ثانیه یک بار برای من اطلاعات میفرسته :

$,29.6,45,16.5,12.3192,29.6,7.4,0.00,*

هر کدام از این عدد مربوط به یک چیزی (فشار دما رطوبت و ... ) ، من برای تجزیه این ها از این دستور استفاده کردم :

string[] string_Split_str_ReceiveData = str_ReceiveData.Split(new char[] { ',' });

خوب بعد هر کدوم اینجوری دادم به یک متغییر :

str_temperature = string_Split_str_ReceiveData[1];


خوب این تا اینجا هیچ مشکلی نداره ، حالا من میخواهم از این آرایه شماره 1 در زمان میانگین گیری کنم یعنی میانگین این عدد در 5 دقیقه بدست بی آورم ...

1- اما چه جوری بفهم این داده در هر ثانیه چه عددی بوده ؟ (یعنی با زمان چگونه ذخیره کنمش)
2- یا مثلا با هر بار تغییر این متغییر آن چگونه ذخیره کنمش ؟ تا بتوان میانگین این متغییر در 5 دقیقه بدست بی آورم ؟؟
3- یا مثلا هر یک ثانیه یک بار آن چگونه ذخیره کنم ؟


پیش آپیش متشکرم از شما دوستان

navidkhalilian
یک شنبه 06 شهریور 1390, 05:49 صبح
سلام دوست عزیز.اول اینکه خیلی بد سوال پرسیدی ، تقریباً سوالت جمله بندی نداره و اصلا نمیشه فهمید چی گفتی.دوم اینکه اگر می خوای از آرایه ای که ساختی میانگین بگیری از کد زیر استفاده کن:

private void button2_Click(object sender, EventArgs e)
{
int[] array = {34, 56, 100, 45, 23, 12};
array.Average();
}
public static float Average(this System.Array array)
{
float average = 0;
for (int i = 0; i < array.Length; i++)
{
average += (int)array.GetValue(i);
}
return average / array.Length;
}
تا اونجایی هم که من متوجه شدم شما فشار و دما و .... را داخل یک آرایه میریزی که این کار اشتباهه و باید هر کدوم را داخل آرایه جداگانه قرار بدی.
موفق باشید

quantomquery
یک شنبه 06 شهریور 1390, 12:17 عصر
اگه فقط به میانگین تو بازه های خاص احتیاج داری : یه متغیر به نام count از نوع int بساز هر بار که سنسور بهت یه رشته اعداد میده count++ ; کن و اونا رو توی یه آرایه بریز و جمع کن یعنی اول بهت 1,2,3,4,5,6 داد count=1 باشه و بعد اون اعداد رو تو ارایه بریز و اعداد بعدب مثلا 2,3,5,9,8,3 باشه count =2 می شه و این رشته split شده و تو ارایه متناظر قبلی جمع می شه یعنی الان تو ارایه داریم 3,5,8,13,13,9 حالا برای میانگین هرخونه اونو تقسیم بر count کن

jblaox
یک شنبه 06 شهریور 1390, 12:57 عصر
اگه فقط به میانگین تو بازه های خاص احتیاج داری : یه متغیر به نام count از نوع int بساز هر بار که سنسور بهت یه رشته اعداد میده count++ ; کن و اونا رو توی یه آرایه بریز و جمع کن یعنی اول بهت 1,2,3,4,5,6 داد count=1 باشه و بعد اون اعداد رو تو ارایه بریز و اعداد بعدب مثلا 2,3,5,9,8,3 باشه count =2 می شه و این رشته split شده و تو ارایه متناظر قبلی جمع می شه یعنی الان تو ارایه داریم 3,5,8,13,13,9 حالا برای میانگین هرخونه اونو تقسیم بر count کن

سلام

متشکرم از اینکه پاسخ دادید ، و پوزش به خاطر بد سوال پرسیدن !

jblaox
یک شنبه 06 شهریور 1390, 13:06 عصر
تا اونجایی هم که من متوجه شدم شما فشار و دما و .... را داخل یک آرایه میریزی که این کار اشتباهه و باید هر کدوم را داخل آرایه جداگانه قرار بدی.
موفق باشید

سلام

بله متاسفانه خروجی سنسور همه چی با هم میفرسته و دست من نیست ، یعنی فشار و دما و رطوبت و ... وقتی من دریافت میکنمش همه را داخل یک ارایه میرم سپس جدا جدا میکنم هر کدام .

راه حلی که به نظرم رسیده با توجه به صحبت شما :

در رویداد تکست چنج مثلا فشار یک آرایه ایجاد کنم که با هر بار تغییر فشار یک مقدار به آرایه اضافه کنه یا اینکه یک دیتا بیس درست کنم آن ذخیره کنه بعد اینجوری میتوانم مثلا در یک بازه خاص از آن میانگین گیری کنم .

باز هم تشکر از این که ایده دادید به من

موفق پیروز باشید