-
program exercise
integer a,b,sum
integer,external::addprint*,"請輸入兩個整數,a,b"
read*,a,b
sum=add(a,b)
print*,'sum=',sum
endfunction add(x1,x2)integer::x1,x2
integer::add
add=x1+x2
returnend
-
program exercise
implicit none
integer:: a,b,sum
print*,"請輸入兩個整數,a,b"
read*,a,b
sum=add(a,b)
print*,'sum=',sum
endinteger function add(a,b)implicit none
integer::a,b
add = a+b
return
endfunction
如上圖所示,為了保證程式的嚴謹性,建議在宣告變數之前新增隱式的 none 語句
-
你的 fortran 程式有兩個問題,1len=11 寫成 len-11
2weekday 寫成週末
完整過程如下(有關更改,請參閱注釋)。
program weekday_weekend
implicit none
character(len=11)::c_day
character(len=11)::c_type !這裡將 (len-11) 更改為 (len=11)。
write(*,enter the name of the day:'
read(*,c_day
select case(c_day)
case('monday','tuesday','wednesday','thursday','friday')
c_type='weekday' !在這裡,我們將週末更改為工作日
case('saturday','sunday')
c_type='weekend'
case default
c_type='invalid day'
end select
write(*,day type=',c_type
end program weekday_weekend
-
澄清一下,你想要什麼格式?
是尾部 0 不輸出嗎? 而且沒有空格?
如果是這樣,則無法對齊。
**不複雜,等有時間再進行電腦測試後貼上。
寫一篇可以插入到原文中的文章。 該演算法的要點:首先將輸出寫入字串變數,然後將第乙個變數(你似乎只需要這個變數)替換為 0 末尾的空格; 然後格式化字串以刪除空格; 最後,檔案以字串格式編寫。
希望對你有所幫助!
附:Fortran**。
-
**手部剩餘。 該演算法在橋茶、綠色字型注釋和閩土豆出售中看到。
附錄:計算示例。
-
這通常不是由不同的計算機引起的,而是由不同的編譯器和作業系統引起的。
每個編譯器都有不同級別的語法檢查,並且分配堆疊的方式也不同。
此錯誤是堆疊溢位,通常發生在具有大量迴圈的大型程式中,尤其是對於遞迴函式呼叫或具有大型陣列的應用程式。
有兩種方法可以解決它:
1.減少堆疊使用量。 這主要是通過將固定大小的陣列更改為可分配的陣列來解決的。
2.增加堆疊的大小。 這是對編譯器的操作。 您需要檢視您正在使用的編譯器的手冊(幫助文件)以確定要執行的操作。
以 Compaq Visual Fortran 為例:
選擇專案 => 設定 => 鏈結 => 類別:輸出 =>
stack allocations
reserve:在此處輸入新值(預設值為 1m,如果需要 10m,則為 10000000)。
如果您使用其他編譯器,也可以向我詢問您的編譯器品牌和版本。 我看看我是否熟悉它。
-
堆疊溢位是指堆疊溢位錯誤,通俗地稱為記憶體不足。 對於不同的計算機,它可能有所不同。 如果怕麻煩,可以將原始碼中的堆疊調整到更大的大小,然後重新編譯exe程式。
-
你好! 您的安裝目錄可能空間不足,因此您可以在其他安裝目錄中嘗試
-
在主程式中,沒有對 SE 型別的描述。
解決辦法:在主程式標頭 integer(8) :se<> 中新增一行
這將編譯並通過。
但是需要指出的是,se=10*k**m 的取值遠遠超出了 integer(8) 的範圍,結果是乙個負數,實際上是乙個整數溢位。
使用對數方法,我們可以得到 se= *10 7520388406這是乙個超過 75.2 億位的大整數。
希望對你有所幫助!
-
1 你基本上是對的。 但是,它不必是 6 個數字,並且還包括小數點等符號。
2 你有那麼多病態的句子,我不知道你想問什麼。 3a 表示一行輸出三個變數,因此 str1、str2 和 str3 都在一行中輸出。
3 病態的判決... 我不知道你在問什麼。
4 30e+01 不對。 如果值是3,就應該輸出,如果是30,就應該輸出,如果你不相信,你可以程式設計試一試。 小數部分當然是兩位數,所以它是。
5 不是 a(a,b)=b(b,a)。
a(2,3) 儲存在記憶體中的列中,即 a11->a21->a12->a22->a13->a23。
在子例程中建立 b(3,2) 時,它也會在列中讀取,即 b11->b21->b31->b12->b22->b32。
主程式傳遞給子例程的不是陣列本身,而是指標,指標是陣列的第乙個位址。 所以 A11 和 B11 位址是相同的。
所以陣列 a 和 b 之間的對應關係是:
a11 a21 a12 a22 a13 a23
b11 b21 b31 b12 b22 b32
如果您遵循您所說的更改,那麼引數 x 應該對應於 A 陣列的前 3 個元素(注意它們在列中的儲存順序),即
a11 a21 a12
x1 x2 x3
-
這個誤差是無法執行的數學計算,提示是sqrt,也就是說平方不能開,原因可能是需要平方的數字是負數,或者是無限大的正數或無限小的負數,因為fortran沒有說當有無窮大或無限小的數字時, 會是錯誤,所以在執行這一步之前,數字可能已經錯了,這個錯誤不是語法錯誤,而是邏輯錯誤,你需要耐心除錯,談談我除錯的一些常見技巧:
1.首先要做的就是在程式中查詢錯誤,因為程式提示sqrt計算錯誤,所以可以在程式中搜尋**使用了開啟操作,然後設定一些前後標記,例如。
write(*,'aaa'
write(*,'bbb'
依此類推,根據這些輸出是否執行,確定程式執行的哪個步驟出錯了。
2.跟蹤變數值的變化,例如,如果檢測到變數 x 的值變為負數或無限大,則可以在程式的不同位置輸出 x 的值,最好是在乙個檔案中,以便於檢查。
open(5,file='')
write(5,*)x
. **。write(5,*)x
. **。一些編譯器(如 MATLAB 和英特爾 Fortran)提供了一種更方便的方式來跟蹤變數的值,但想法是一樣的。
說白了,就這兩個招式,但是一般的bug都是這樣發現的,關鍵是要有耐心和細心,不要怕浪費時間,乙個程式除錯的時間遠遠比寫乙個程式的時間長,是正常的,祝你好運。
能夠做一些簡單的氣缸動作控制,意味著你對PLC有一定的了解,對做一些開關控制有一定的基礎。 接下來要學習比較複雜的序列控制,可以做一些序列啟動,生產線過程裝置控制,後面可以學習一些模擬控制程式設計,後面學習一些聯網工程,伺服控制不是太複雜,只要了解伺服控制器所需的資訊, 通過PLC給它。