Страница 1 из 1

Проблемы с использованием Case of, Val[Pascal]

Добавлено: 14 мар 2008, 19:52
Stream
Задача такая нужно подсчитать скоко раз нажмёт некто на кнопку телефона чтобы получить определенную букву проверка проверка проходит так вводится текст(транслит мал. буквы) нужно подсчитать скоко сделано кликов на циферки на сотке как бы пишеш смс.
у меня такой не замысловатый код и не правельный разумеется т.к мне надо решить задачу именно через case of но думаю что также приёдется использовать val
прога:

Код: Выделить всё

var i,z,a1,a2,a3:integer; n:string;    a,c,b:integer;  nomer:string;
begin
read(nomer);
a:=0;
For i:= 1 to length(nomer) do
begin
case nomer[i] of
'a','d','j','m','p','s','v','y','.',' ':val(nomer[i],a,b);a=a+1;
'b','e','h','k','n','q','t','w','z',',':val(nomer[i],a,b); a:=a+2;
'c','f','i','l','o','r','u','x','!': val(nomer[i],a,b);a:=a+3;
end;
end;
end.
В программе уже как вы заметили указано скоко кликов на каждую букву к примеру a,d,j это 1 клик итд...Я эту задачу решил с лёгкостью через If (nomer='a') of )nomer='d') ...THen a:=a+1; итд...
Но суть проблемы я выложил выше у меня трудности с case of и хотелось бы понять как её решить через case of.
ПРоверка:"pokupaite gvozdi tolko v kompanii gvozdederov i tovarischi!" кажется это 114 нажатий.

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 14 мар 2008, 20:04
MOTOCoder
Обязательно испрользовать Case по условию задачи?
Вот решение без Case:
[syntax='Delphi']
program Key;

const
KeyMap:array[1..9]of string=(' ','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz');

var
Txt:string;
Keys:array[1..9]of integer;
i,kn,kp:integer;
b:boolean;

begin
writeln('Введите текст');
readln(Txt);
for i:=1 to Length(Txt) do
begin
kn:=0;

b:=false;
repeat
inc(kn);
kp:=0;
repeat
inc(kp);
if KeyMap[kn][kp]=Txt then
begin
b:=true;
inc(Keys[kn],kp);
end;
until kp=Length(KeyMap[kn]);
until b;
end;

for i:=1 to 9 do
writeln(i,'-',Keys);

readln;

end.
[/syntax]

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 14 мар 2008, 21:03
Medved
Проблемма в том,что case можнщ передавать только численные значения.

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 14 мар 2008, 23:16
Serge_Bliznykov
простите, или я чего-то не до понял, или Вы написали готовое решение!!
Правда, я абсолютно не понял, зачем нужно val(буква, a,b) ?!!
вот Ваше решение.

Код: Выделить всё

var 
  i,z,a1,a2,a3:integer; 
  n:string;    
  a,c,b:integer;  
  nomer:string;
begin
  {read(nomer);}
  {для отладки строчку присвоим} 
  nomer := 'pokupaite gvozdi tolko v kompanii gvozdederov i tovarischi!';
a:=0;
For i:= 1 to length(nomer) do
begin
case nomer[i] of
  'a','d','j','m','p','s','v','y','.',' ': begin a:=a+1 end;
  'b','e','h','k','n','q','t','w','z',',': begin a:=a+2 end;
  'c','f','i','l','o','r','u','x','!':  begin  a:=a+3 end;
end;
end;
WriteLn(a);
end.
&quot писал(а):Проблемма в том,что case можнщ передавать только численные значения.
;) ))) Вы хотели сказать - только перечисляемые типы ;-)))


MOTOCoder, не смог разобраться в Вашем коде ;-((( видно старею, теряю хватку ;-((
и при отладочной строчке
Txt := 'pokupaite gvozdi tolko v kompanii gvozdederov i tovarischi!'; программа вообще ушла в бесконечный цикл...

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 15 мар 2008, 02:01
MOTOCoder
Serge_Bliznykov писал(а): MOTOCoder, не смог разобраться в Вашем коде ;-((( видно старею, теряю хватку ;-((
и при отладочной строчке
Txt := 'pokupaite gvozdi tolko v kompanii gvozdederov i tovarischi!'; программа вообще ушла в бесконечный цикл...
Дело в том, что я забыл про знаки препинания.
Внешний цикл идет фактически до тех пор, пока нужный символ не будет найден в массиве KeyMap, а в данном случае восклицательного знака в масссиве нет(хотя любые символы можно просто добавить в нужные строки массива KeyMap.

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 15 мар 2008, 04:33
Stream
Спасибо всем, оказывается просто надо было добавить begin end;(Как показалSerge_Bliznykov) в case в этом была моя ошибка.
Моя проблема была в том что всё всемя выдавал ошибка паскаль а если поставить begin end; они проподают =)

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 15 мар 2008, 10:24
Serge_Bliznykov
Stream, так поясните, пожалуйста, что в вашем коде делает
val(nomer,a,b);
Не обижайтесь, но, имхо, это БРЕД!!!
1) он выполняется в любой ветке CASE - т.о. его надо выносить за case
2) Вы тем самым СРАЗУ теряете значение в переменной a (VAL - это преобразовать числовое значение из строчки в число (переменную числовую)
3) для букв VAL в переменную a будет возращать 0

Что Вы хотели добиться этим кодом?!?!

Re: Проблемы с использованием Case of, Val[Pascal]

Добавлено: 15 мар 2008, 17:02
Stream
Val я добавил от безвыходности и.к прога не работала и я думал в этом и есть проблема.