質問編集履歴
6
確認
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
連番ファイルを作成してgnuplotでgifを作ろうと思っています。
|
2
2
|
その為にファイル名out.xxxx.datから例えばz,Reを抜き出してxx.datとしたいのですが自分の書いたプログラムでは1桁番号のとき_0.datのように数字の前にスペースが入ってしまい都合が悪いです。自分のプログラムをどのように修正すれば良いですか?
|
3
|
+
|
4
|
+
また本質とは関係ないのですがgnuplotで 「do for[i=0:21] {plot sprintf("%d.dat",i)}」と入力するとi=0では弾かれてi=1では弾かれないといった現象が起きているのですがこの原因も知っている方がいれば教えてほしいです。
|
3
5
|
|
4
6
|
program replot
|
5
7
|
implicit none
|
5
質問変更
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
連番ファイルを作りたい(fortran)
|
test
CHANGED
@@ -1,36 +1,21 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
連番ファイルを作成してgnuplotでgifを作ろうと思っています。
|
2
|
+
その為にファイル名out.xxxx.datから例えばz,Reを抜き出してxx.datとしたいのですが自分の書いたプログラムでは1桁番号のとき_0.datのように数字の前にスペースが入ってしまい都合が悪いです。自分のプログラムをどのように修正すれば良いですか?
|
3
3
|
|
4
|
-
program
|
4
|
+
program replot
|
5
5
|
implicit none
|
6
|
-
integer
|
6
|
+
integer::i,j
|
7
|
+
real(8)::x,y,z,Re,Im
|
8
|
+
character(len=12) :: filename,outname
|
9
|
+
do j=0,99
|
7
|
-
write(
|
10
|
+
write(filename,'("out.00",i2.2,".dat")')j
|
11
|
+
write(outname,'(i2,".dat")')j
|
12
|
+
open(1,file=filename)
|
13
|
+
open(2,file=outname)
|
14
|
+
do i=1,1000
|
15
|
+
read(1,*)x,y,z,Re,Im
|
8
|
-
re
|
16
|
+
write(2,*)z,Re
|
9
|
-
if(n<=0) then
|
10
|
-
write(*,*)"It isn't natural number"
|
11
|
-
else if(n>10000) then
|
12
|
-
write(*,*)"It is too large number"
|
13
|
-
end
|
17
|
+
enddo
|
14
|
-
m=int(sqrt(dble(n)))
|
15
|
-
do
|
16
|
-
i=2
|
17
|
-
a=1
|
18
|
-
if(m==1) then
|
19
|
-
exit
|
20
|
-
else if (mod(m,i)==0) then
|
21
|
-
a=a//"×"//i
|
22
|
-
m=m/i
|
23
|
-
cycle
|
24
|
-
|
18
|
+
close(1)
|
25
|
-
i=i+1
|
26
|
-
c
|
19
|
+
close(2)
|
27
|
-
endif
|
28
20
|
enddo
|
29
|
-
write(*,*)a
|
30
|
-
end program
|
21
|
+
end program replot
|
31
|
-
|
32
|
-
18 | a=a//"×"//i
|
33
|
-
| 1
|
34
|
-
Error: Operands of string concatenation operator at (1) are INTEGER(4)/CHARACTER(1)
|
35
|
-
|
36
|
-
|
4
補足
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2×2×3と表示したい)コードを書いているのですがどのようにすれば上手くいくのかわかりません。連結(//)を用いる時に通常は文字数を指定するようなのですが、素因数分解の場合は文字数の指定が出来なくてそれがエラーの原因となっている気がします。どのように書き換えれば上手くいくのでしょうか?よろしくお願いします。
|
2
|
+
またwrite,read関数のアスタリスクは何故かプレビューに表示されていないだけで元のコードには書かれています。
|
2
3
|
|
3
4
|
program sosu
|
4
5
|
implicit none
|
@@ -17,7 +18,7 @@
|
|
17
18
|
if(m==1) then
|
18
19
|
exit
|
19
20
|
else if (mod(m,i)==0) then
|
20
|
-
a=a//"
|
21
|
+
a=a//"×"//i
|
21
22
|
m=m/i
|
22
23
|
cycle
|
23
24
|
else
|
@@ -28,7 +29,7 @@
|
|
28
29
|
write(*,*)a
|
29
30
|
end program sosu
|
30
31
|
|
31
|
-
18 | a=a//"
|
32
|
+
18 | a=a//"×"//i
|
32
33
|
| 1
|
33
34
|
Error: Operands of string concatenation operator at (1) are INTEGER(4)/CHARACTER(1)
|
34
35
|
|
3
微修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2
|
1
|
+
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2×2×3と表示したい)コードを書いているのですがどのようにすれば上手くいくのかわかりません。連結(//)を用いる時に通常は文字数を指定するようなのですが、素因数分解の場合は文字数の指定が出来なくてそれがエラーの原因となっている気がします。どのように書き換えれば上手くいくのでしょうか?よろしくお願いします。
|
2
2
|
|
3
3
|
program sosu
|
4
4
|
implicit none
|
2
微修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2*2*3と表示したい)コードを書いているのですがどのようにすれば上手くいくのかわかりません。連結(//)を用いる時に通常は文字数を指定するようなのですが、素因数分解の場合は文字数の指定が出来なくてそれがエラーの原因となっている気がします。どのように書き換えれば上手くいくのでしょうか?よろしくお願いします。
|
1
|
+
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2"*"2"*"3と表示したい)コードを書いているのですがどのようにすれば上手くいくのかわかりません。連結(//)を用いる時に通常は文字数を指定するようなのですが、素因数分解の場合は文字数の指定が出来なくてそれがエラーの原因となっている気がします。どのように書き換えれば上手くいくのでしょうか?よろしくお願いします。
|
2
2
|
|
3
3
|
program sosu
|
4
4
|
implicit none
|
1
入出力の目的の記載
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
入力した自然数(10000以下)を素因数分解をして積の形で表示する
|
1
|
+
入力した自然数n(10000以下)を素因数分解をして積の形で表示する(例えばn=12ならばn=2*2*3と表示したい)コードを書いているのですがどのようにすれば上手くいくのかわかりません。連結(//)を用いる時に通常は文字数を指定するようなのですが、素因数分解の場合は文字数の指定が出来なくてそれがエラーの原因となっている気がします。どのように書き換えれば上手くいくのでしょうか?よろしくお願いします。
|
2
2
|
|
3
3
|
program sosu
|
4
4
|
implicit none
|