Dev Pascal 1.9.2~

2012-04-07 3:28 am
我用呢個軟件做一d數學的程式
當我寫到總和and乘積公式如下:

6:writeln('Sum or Product of Sequence');
writeln;
writeln('(1)Sum');
writeln('(2)Product');
write('Type applied is ');
readln(seq);
If (seq=1) then goto Sum;
If (seq=2) then goto Prod;
Sum: writeln('Type 1 applying');
write('i= ');
readln(V);
write('n= ');
readln(N);


Mem:=0;
Repeat W:=V;
Mem:=W+Mem;
V:=V+1;
until V>N;
writeln('The sum of the sequence=',Mem:0:8,'.');
write('Finished? ');
readln(Last);
If ((Last = finished)or(Last = finish)) then exit
else goto Start;
Prod: writeln('Type 2 applying');
write('i= ');
readln(V);
write('n= ');
readln(N);


Mem:=1;
Repeat W:=V;
Mem:=W*Mem;
V:=V+1;
until V>N;
writeln('The product of the sequence=',Mem:0:8,'.');
write('Finished? ');
readln(Last);
If ((Last = finished)or(Last = finish)) then exit
else goto Start;
這是我一個非常大的程式中的一部份~關於Lbl,:real果d無任何問題。我發覺每次想計一個數列的總和or乘積都要更改以上紅色的位置。究竟可否在執行此程式前輸入
N N
Σ(W) orΠ(W) 的W的定義,即係V V*V果d
i(V) i(V)



回答 (2)

2012-04-07 6:19 am
✔ 最佳答案
不明白你所每次都要改的原因,如果不能通過編譯,那麼你改成什麼??或者如果改完之後都係咁,咁你改左乜??

意見:
(1) Repeat W:=V;
Mem:=W+Mem;
V:=V+1;
until V>N;
既然 W:=V,為什麼不直接用V ?? 即寫成 Mem := V+Mem; ??
況且亦是你的問題所在
(2) 不要用 GOTO
GOTO是由BASIC所流下的垃圾指令
可以寫成極之好的 spaghetti code,好難跟。寫左廿年PASCAL一次都未用過。
以你的CODE可以改成一個IF包住,IF不成功就會跳過成個BLOCK。
例如
If (seq=1) then
begin .... end;
If (seq=2) then
begin .... end;
清清楚楚。我初寫都覺得有O的麻煩,但係十分有結構。(因為PASCAL叫做STRUCTURAL LANGUAGE)
你呢個CASE,可能用 CASE再好一點,更清楚。
(2b)你那個要重複的GOTO START可能麻煩少少。
可以用一個最大的REPEAT UNTIL包住曬。跟住諗下點選擇退出。
2012-04-11 8:41 am
對於 Lee 所寫的意見我十分同意,而發問者所寫的程式我也是不太明白紅色處的問題,會否是程式沒有提供的部分出了問題而影響了此程式? 我建議你提供整個程式以供參考。另外,你可否指出你怎樣更改紅色的位置?


收錄日期: 2021-04-13 18:36:46
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20120406000051KK00692

檢視 Wayback Machine 備份