我对Pascal很新,还在学习。我必须编写一个代码:
我只能写1到3,剩下的对我来说仍然模糊不清。帮助表示赞赏。
(我还想在没有很多for
循环的情况下改进它。有什么想法吗?)
program TransposeString;
var
melody : Array[1..24] of String[2] = ('c.', 'c#', 'd.', 'd#', 'e.', 'f.', 'f#', 'g.', 'g#', 'a.', 'a#', 'b.', 'C.', 'C#', 'D.', 'D#', 'E.', 'F.', 'F#', 'G.', 'G#', 'A.', 'A#', 'B.');
songstring, transposedstring : String;
transposevalue : byte;
function Transpose(song : String; transposevalue : byte): String;
var
songsnippet : String[2];
iter_song, iter_index, index : byte;
begin
for iter_song := 1 to length(song) do
begin
if iter_song mod 2 = 0 then continue;
songsnippet := song[iter_song] + song[iter_song + 1]; //Split the string into 2 characters each
for iter_index := 1 to 24 do
begin
if melody[iter_index] = songsnippet then
begin
index := iter_index; //Get Index
break;
end;
end;
//Check Transpose + Index
//Transpose Snippet
//Append Snippet to Result String
end;
end;
begin
readln(songstring);
readln(transposevalue);
transposedstring := transpose(songstring, transposevalue);
writeln(transposedstring);
end.
答案 0 :(得分:0)
作为你工作的首选,而不仅仅是用勺子喂答:
索引中包含代码段(注释)的索引。假设笔记是有序的,你需要从它上面的数组位置返回笔记,所以
result := result + melody[iter_index + transposevalue];
在尝试读取数组之前,您需要检查数组的长度,否则它会崩溃(步骤5)。这只是一个if
声明。
我不会太担心循环 - 2深度嵌套并不是那么糟糕。如果你想将它分开一点,那么GetTransposedNote(const note:string): string;
可以作为新函数拆分。
您可能想要考虑的事情是:
尽管如此,你已经离开那里了。