Помощь - Поиск - Пользователи - Календарь
Полная версия: Гитарный табулятор на паскаль
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Yar{Rouk}
Всем привет! =)
Начал писать прогу по выводу табов аккорда...



program tabs;
uses crt;
var
x:array [1..6] of integer;
akk:string[4];
prov:string;
pr:byte;
c:char;
begin
clrscr;
repeat
writeln ('vvedite nazvanie akkorda');
readln(akk);
prov:='ambmcmdmemfmgmhmAmBmCmDmEmFmGmHm';
pr:=pos(akk,prov);
writeln(' ');
if pr=0 then begin
writeln ('vveden nesushestv.akkord');
end
else
if (akk='Am') or (akk='am') then begin
x[1]:=0;
x[2]:=1;
x[3]:=2;
x[4]:=2;
x[5]:=0;
x[6]:=0;
writeln('tsiframi pokazani ladi, kotorie nado zajimat na gitare');
writeln(' ');
writeln(#195,x[6],#180);
writeln(#195,x[5],#180);
writeln(#195,x[4],#180);
writeln(#195,x[3],#180);
writeln(#195,x[2],#180);
writeln(#195,x[1],#180);
end
else
writeln('net takogo akkorda v base');
writeln(' ');
writeln(' ');
writeln('najmite ESC dlya vixoda ili lyubuyu klavishu dlya prodoljeniya',c);
c:= readkey;
if c=#0 then begin
c:=readkey;
readln;
end;
until c=#27;
end.



Это мой код
Затруднение вызвали след.проблемы:
Во-первых, хз как (кроме if else) проверять, какой аккорд введен. Незнаю, с помощью чего проверять
во-вторых, нужно аккорд выводить по-другому, т.е. не как у меня, один столбец и выводит номер лада, который нужно зажимать, а вывести три лада (либо графикой, либо псевдографикой) и точками помечать, что нужно зажимать.... Я пока новичёк и не могу построить алгоритм решения.... Нужна помощь.. Хоть какая-нибудь.
Lapp
Цитата(Yar{Rouk} @ 18.04.2010 20:34) *
writeln(' ');
Для пропуска строки незачем выводить пробел:
WriteLn;


Цитата
writeln(#195,x[6],#180);
writeln(#195,x[5],#180);
writeln(#195,x[4],#180);
writeln(#195,x[3],#180);
writeln(#195,x[2],#180);
writeln(#195,x[1],#180);
for i:=6 downto 1 do writeln(#195,x[i],#180);
?

Цитата
Во-первых, хз как (кроме if else) проверять, какой аккорд введен.
Имеет смысл сделать запись, примерно так:
var
tAccord: record
name: string[5]; {название аакорда, типа Em7}
tab: array[1..nStr]of byte; {номер зажатого лада на каждой струне}
end;

Потом проходишься в цикле по массиву записей и ищешь совпадение. Это логичнее, чем хранить все аккорды в одной строке: если нужно будет добавить аккорд - ты замучишься.

Выводить - дело несложное. В графике - совсем понятно, но я бы советовал начать с псевдографики (и даже лучше просто текст - минусы, нолики..) Ты постарайся отделить вывод от самой базы (сделай процедурку Show(a) ), тогда потом перейти на графику не составит труда (или иметь обе возможности и переключаться).

Давай, делай и показывай, что выходит.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.