x-ios Ответов: 1

Как использовать математические функции потолка , пола | VB.NET


Еще раз здравствуйте, мне нужно использовать эти математические функции в моей задаче.

Прежде всего, у меня есть список значений, которые сначала я использую математические функции abs и log10.
Теперь мне нужно использовать эти 2 уравнения в этом массиве.

1. x=ceil(30*log10 (arrData))+1
2. y=floor (30*log10(arrData))

И тогда мне нужно сделать такой расчет : newsetdata=y-x+1

Я создаю 2 списка, 1-й-это arrData, который я использовал в потолке, а arrData2-это пол.

теперь я хочу создать новый список, в котором я могу использовать это уравнение - > arrData2-arrData+1, и я не могу этого сделать...какая-то помощь?

Что я уже пробовал:

Dim strFileName = IO.File.ReadAllLines("C:\Users\x-ios\Desktop\1234.txt")
Dim cu As Globalization.CultureInfo = Globalization.CultureInfo.CreateSpecificCulture("en-US")
Dim style As Globalization.NumberStyles = Globalization.NumberStyles.Number Or Globalization.NumberStyles.AllowCurrencySymbol

Dim arrData = strFileName _
.Select(Function(x) New With _
{
.FirstCol = Math.Ceiling(Math.log10(Math.Abs(Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(0), style, cu))), _
.SecondCol = Math.Ceiling(Math.log10(Math.Abs(Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(1), style, cu)))) _
}) _
.ToList()


Dim arrData2 = strFileName _
.Select(Function(x) New With _
{
.FirstCol = Math.Floor(Math.log10(Math.Abs(Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(0), style, cu)))), _
.SecondCol = Math.Floor(Math.log10(Math.Abs(Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(1), style, cu)))) _
}) _
.ToList()

OriginalGriff

И что же?
В чем проблема?
Где ты застрял?
Какая помощь вам нужна?
Вы просмотрели официальную документацию, и если да, то почему это вам не помогло?

x-ios

Да, вы правы. Я уточняю вопрос...

Maciej Los

arrData2-arrData+1 ???
arrData - это набор данных: FirstCol и SecondCol. Какой именно расчет вам нужен?

x-ios

Да, anewsetdata=arrData2-arrData+1.
Как я могу это сделать?

Maciej Los

Прости, но ты что, слепой? arrData-это набор данных. Пожалуйста, прочтите мой предыдущий комментарий.

x-ios

Я хочу: (sub The FirstCol of arrData2 from FirstCol of arrData) +1 (sub The SecondCol of arrData2 from SecondCol of arrData)+1 и сохранить их в новом наборе данных. Я выполнил только 1D, а не 2D.

Maciej Los

Что sub() значит? вычитание?
x = sub(Floor(FirstCol) ? Ceiling(FirstCol))+1
y = sub(Floor(SecondCol) ? Ceiling(SecondCol))+1

но вы упомянули:
x=ceil(30*log10(arrData))+1
y=floor(30*log10(arrData))

Что такое правильный расчет? Пожалуйста, предоставьте полное уравнение!

x-ios

Да, я упомянул, что Х=Сэл(30*log10 коп(arrData))+1 , г=пол(30*log10 коп(arrData)), и я выполнил их (arrData является X ,а y-arrData2) . А теперь мне нужно: newdataset=y-x+1
(Я обновляю вопрос, потому что забыл упомянуть его по ошибке)

x-ios

Теперь, как добавить каждый результат из этого уравнения (y-x-1) в новый набор данных? Но в том же измерении, что и arrData? Это означает, что в новом наборе данных 22x2.

Maciej Los

Если вы хотите создать 2-мерный массив, я бы посоветовал прочитать это: Как инициализировать многомерный массив Это тоже может быть полезно: VB.Net -Массивы.

Dim destArray(,) As Integer = New Integer(arrData.Length, 2);
Dim i As Integer = 0
For i = 0 To arrData.Length-1
    Dim x = Math.Ceiling(30*Math.Log10(d.a))+1
    Dim y = Math.Floor(30*Math.Log10(d.b))
    destArray(i,0) = x
    destArray(i,1) = y
Next

x-ios

Здравствуйте, спасибо за ответ. Это не работает, у меня была ошибка: потому что длина не является членом list(). http://tinypic.com/r/242zdqw/9
И у меня есть проблема.Все мои выходные числа не 0,07, а 7. И знаете почему ?

1 Ответов

Рейтинг:
11

Maciej Los

Цитата:
Да, я упомянул, что Х=Сэл(30*log10 коп(arrData))+1 , г=пол(30*log10 коп(arrData)), и я выполнил их (arrData является X ,а y-arrData2) . А теперь мне нужно: newdataset=y-x+1
(Я обновляю вопрос, потому что забыл упомянуть его по ошибке)


Все, что вам нужно для расчета результата, это:
Dim arrData = strFileName _
	.Select(Function(x) New With _
		{
			.a = Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(0), style, cu), _
			.b = Double.Parse(x.Split(New String(){Microsoft.VisualBasic.vbTab}, StringSplitOptions.RemoveEmptyEntries)(1), style, cu) _
		}) _
	.ToList()

	For Each d In arrData
		Dim x = Math.Ceiling(30*Math.Log10(d.a))+1
		Dim y = Math.Floor(30*Math.Log10(d.b)) 
		Console.WriteLine("{0}-{1}+1={2}", y, x, y-x+1)
	Next


Результат:
-11--38+1=28
-8--35+1=28
-5--33+1=29
-3--31+1=29
-1--30+1=30
0--29+1=30
...


Измените код в соответствии с вашими потребностями, если я вас неправильно понял.