IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Гитарный табулятор на паскаль, Юзер вводит аккорд - прога выводит его табулатуру
Yar{Rouk}
сообщение 18.04.2010 19:34
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской
Реальное имя: Ярослав

Репутация: -  0  +


Всем привет! =)
Начал писать прогу по выводу табов аккорда...



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) проверять, какой аккорд введен. Незнаю, с помощью чего проверять
во-вторых, нужно аккорд выводить по-другому, т.е. не как у меня, один столбец и выводит номер лада, который нужно зажимать, а вывести три лада (либо графикой, либо псевдографикой) и точками помечать, что нужно зажимать.... Я пока новичёк и не могу построить алгоритм решения.... Нужна помощь.. Хоть какая-нибудь.

Сообщение отредактировано: Yar{Rouk} - 18.04.2010 19:37
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 19.04.2010 2:21
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(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) ), тогда потом перейти на графику не составит труда (или иметь обе возможности и переключаться).

Давай, делай и показывай, что выходит.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 7:10
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"