download.bg
 Вход Списание  Новини  Програми  Статии  Форум  Чат   Абонамент  Топ95   Архив 

Задача на Excel и vb

Автор
Съобщение
anonymous
Съб, 04.12.10, 14:28
Здравейте всички.
Имам да правя курсова задача на excel + vb и сериозно забих. Мисля си че съм почти готов с основната част пробвам да въведа някои случайни числа и краш - "unable to get acos property of WorsheetFunctions class".

Задачата е да се вземат координатите на точки от файл, да се изкарат на Sheet 1. От ъглите между правите минаващи през началото O(0,0) и точките да се направи матрица:

"Да се състави матрица А, чиито елементи Aij представляват ъглите между правите 0Pi и 0Pj. "

А също така и няколко други глупости.

Моята идея е матрицата А(N, N) да съдържа ъглите, а самите ъгли да изчислява функцията angle(i, j, koord())
koord() съдържа координатите на ъглите.
'формиране на матрицата А
For i = 1 To N
        For j = 1 To N
            A(i, j) = Angle(i, j, koord())
        Next j
    Next i

Function Angle(i As Integer, j As Integer, k() As Single) As Double
 
    Dim a1 As Single, a2 As Single, b1 As Single, b2 As Single
    Dim cosF As Double
        
    a1 = k(i, 1)
    a2 = k(i, 2)
    b1 = k(j, 1)
    b2 = k(j, 2)
    
    cosF = (a1 * b1 + a2 * b2) / (Sqr(a1 ^ 2 + a2 ^ 2) * Sqr(b1 ^ 2 + b2 ^ 2))
    
    Angle = Application.WorksheetFunction.Acos(cosF)
 
End Function

Самият ъгъл се изчислява по форумулата за скаларно произведение на два вектора
аb = |a||b|cos (F)
Проблема е че като вкарам едни данни и acos не ще да работи (поне това разбирам от съобщението). Прилагам файла с координатите и целият excel файл(програмата трябва да се стартира от vb едитора)
koordinati.txt
piis.xls
Просто не мога да разбера от къде идва проблема. Знам че си е доста работа да се намери грешка, но все пак се надявам, че някои ще даде идея.

anonymous
Съб, 04.12.10, 22:15
Благодаря много! Сам никога нямаше да се справя с такъв пробле
Все пак може ли малко пояснение по въпроса Забелязах, че cosF не надвишва 0.999999999 в никоя от стойностите си а все пак проверките поправят грешката
И още нещо което ме побърква
Това работи
If cosF >= -0.999999999 And cosF <= 0.999999999 Then
    Angle = Application.WorksheetFunction.Acos(cosF)
End If

А само това не
Angle = Application.WorksheetFunction.Acos(cosF)

А това е просто един if който не би трябвало да променя нищо в случая(else-овете съм ги махнал в примера)
Просто се опитвам да рабера за какво става дума, че има шанс и да ме препитват по програмката - кое какво защо.

редактиран от anonymous на 04.12.10 22:16
stoqncho
Съб, 04.12.10, 22:55
Това не трябва ли да е...
If cosF >= -0.999999999 And cosF <= 0.999999999 Then
    Angle = Application.WorksheetFunction.Acos(cosF)
End If

Така... ???
If cosF > -1 And cosF <1 Then
    Angle = Application.WorksheetFunction.Acos(cosF)
End If

Защото по памет cos(косинус) е между -1 и 1 и ако не точно така според мен ще му го зачетат за грешка?!

Извинявам се, ако има нещо.

anonymous
Съб, 04.12.10, 23:23

RE: RE: Задача на Excel и vb

” Майстори от твоята величина не се нуждаят от разяснения. „
Надявам се че не съм разбран погрешно. Не оспорвам че работят корекциите ви, просто се опитвам да разбера защо работят.

Коментар

за нас | за разработчици | за реклама | станете автори | in english  © 1998-2024   Experta Ltd.