Что нового

[Математика] Не получается посчитать определитель

Blitz

Новичок
Сообщения
3
Репутация
0
Здравствуйте, не получается посчитать определитель, может сам алгоритм неверен, да и еще входные данные не как числа вводятся, а как строки. помогите доделать программу пожалуйста
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=123.exe
#AutoIt3Wrapper_Outfile_x64=1231.exe
#AutoIt3Wrapper_Compression=1
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
HotKeySet("{ESC}","_Exit")

$Numb= InputBox("Подсчет определителя","Порядок определителя равен","3")
GUICreate("Подсчет определителя",50+$Numb*20,60+$Numb*20,@DesktopWidth/4,@DesktopHeight/4,-1)
$Button1 = GUICtrlCreateButton("Exit",10+$Numb*20,-20+$Numb*20,40,40)
$Button2 = GUICtrlCreateButton("GO",10+$Numb*20,-60+$Numb*20,40,40)

GUISetState()
Global $sArray[$Numb+1][$Numb+1]

For $i=1 To $Numb
			For $j=1 To $Numb
				$sArray[$i][$j]=GUICtrlCreateInput("",-20+$i*20,-20+$j*20,20,20)
            Next
Next

$k=1
$det=1

While 1
Switch GUIGetMsg()
	Case $GUI_EVENT_CLOSE
		ExitLoop
	Case $Button1
		ExitLoop
    Case $Button2
		For $i=$k to $Numb
				For $j=$k to $Numb
					$sArray[$i][$j]=StringToBinary($sArray[$i][$j])
				Next
			Next
		For $p=1 to $Numb
			For $i=$k to $Numb
				$det=$det*$sArray[$i][$k]
				For $j=$k to $Numb
					$sArray[$i][$j]= $sArray[$i][$j]/$sArray[$i][$k]
					If $i>$k Then $sArray[$i][$j]=$sArray[$i][$j]-$sArray[$k][$j]
				Next
			Next
		    $k=$k+1
		Next
		$det=BinaryToString($det)
		MsgBox(0,"",$det)
EndSwitch
WEnd

Func _Exit()
	Exit
EndFunc
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
GUICtrlRead($sArray[$i][$j])
 
Автор
B

Blitz

Новичок
Сообщения
3
Репутация
0
я так понял нужно сделать так :
Код:
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=123.exe
#AutoIt3Wrapper_Outfile_x64=1231.exe
#AutoIt3Wrapper_Compression=1
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
HotKeySet("{ESC}","_Exit")

$Numb= InputBox("Подсчет определителя","Порядок определителя равен","3")
GUICreate("Подсчет определителя",50+$Numb*20,60+$Numb*20,@DesktopWidth/4,@DesktopHeight/4,-1)
$Button1 = GUICtrlCreateButton("Exit",10+$Numb*20,-20+$Numb*20,40,40)
$Button2 = GUICtrlCreateButton("GO",10+$Numb*20,-60+$Numb*20,40,40)
$Button3 = GUICtrlCreateButton("GO",10+$Numb*20,20+$Numb*20,40,40)

GUISetState()
Global $sArray[$Numb+1][$Numb+1]

For $i=1 To $Numb
			For $j=1 To $Numb
				$sArray[$i][$j]=GUICtrlCreateInput("",-20+$i*20,-20+$j*20,20,20)
            Next
Next

$k=1
$det=1

While 1
Switch GUIGetMsg()
	Case $GUI_EVENT_CLOSE
		ExitLoop
	Case $Button1
		ExitLoop
    Case $Button2
		For $i=$k to $Numb
				For $j=$k to $Numb
					$sArray[$i][$j]=GUICtrlRead($sArray[$i][$j])
				Next
			Next
		For $p=1 to $Numb
			For $i=$k to $Numb
				$det=$det*$sArray[$i][$k]
				For $j=$k to $Numb
					$sArray[$i][$j]= $sArray[$i][$j]/$sArray[$i][$k]
					If $i>$k Then $sArray[$i][$j]=$sArray[$i][$j]-$sArray[$k][$j]
				Next
			Next
		    $k=$k+1
		Next
		MsgBox(0,"",$det)
EndSwitch
WEnd

Func _Exit()
	Exit
EndFunc


но после запуска и ввода, выводит вместо ответа 1.#INF . Подскажите, где ошибка в алгоритме
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Blitz [?]
выводит вместо ответа 1.#INF
1.#INF - Положительная бесконечность
-1.#INF - Отрицательная бесконечность

Вопрос:
Подскажите, где ошибка
Ответ:


Добавлено:
Сообщение автоматически объединено:

Массив $sArray вы используете для хранения ControlID. Впоследствии, вы записываете в него значения полей! :blink: Зачем?
Используйте один массив для хранения ControlID, а другой (допустим $aData) для хранения значений.
 
Верх