| Задача о клавиатуре |
|
|
Sunday, 26 March 2006 | Зэев Фрайман для раздела Ученье – свет Существует одна очень интересная задача о «несчастной машинистке», которую мы хотим предложить вашему вниманию на следующей неделе – а сегодня одна предварительная задачка. В ней очень интересно отследить различия и сходства в подходах написания программ на PASCAL’е и на Java. С одной стороны, со стороны учеников, «публики», как всегда – дилеммы особой нет, поскольку ученик же не сравнивает «а как это пишется на таком и на другом языке».С другой, со стороны преподавателей, «обремененных» годами вполне серьезного и успешного преподавания на определенном языке (в нашем случае – на PASCAL’е) – дилемма существует, да еще какая...
Так что сравнение такое для того, кому предстоит учить, кажется нам очень даже полезным. Следует иметь в виду еще один очень и очень (опять же – на наш личный и собственный взгляд) момент: Java, по сравнению с PASCAL’ем, «обогащена» даже в самом что ни на есть стандартном варианте весьма значительным количеством возможностей – во всяком случае, гораздо и несравненно большим, чем PASCAL. И, соответственно, возникает вопрос: чем, каким набором ограничиться, что следует давать ученикам, а что – нет; учить их или не стоит – пользоваться Интернет-источниками, вроде SUN’овского сайта с информацией про API? Сама по себе эта проблема – предмет для серьезного исследования и обсуждения.
Итак – задача. Сначала – в наипростейшем варианте.
Следует построить массив для «минимальной клавиатуры», которая должна содержать только английские маленькие буквы. При этом «надписью» на клавише должен быть индекс ячейки массива, а «буква», генерируемая при «нажатии» на клавишу, должна быть содержимым соответствующей ячейки. Для проверки программа должна принимать строковое значение, представляющее собой набираемые текст (без пробелов) и проверять, соответствует ли генерируемый текст «нажатиям» на «клавиши».
Комментарий: разумеется, что несложно «расширить» задачу на моделирование полноценной клавиатуры – это, как вы понимате, непринципиально для программы.
Вариант на PASCAL’е.
Program klava;
Var I, letter : char;
Slovo : string;
J : integer;
Kbd : array[‘a’..’z’] of char;
BEGIN
For I := ‘a’ to ‘z’ do
Kbd [i]:= I;
Readln(slovo);
Long := length(slovo);
For j := 1 to long do
Begin
Letter := slovo [ I ];
Write(kbd[letter]);
End;
END.
Вариант на Java.
class klava{
public static void fill(char[] kbd){
for (char i='a';i<='z';i++){
kbd[i]=i;
}
}
public static void view(char[] kbd){
for (char i='a';i<='z';i++){
IO.writeln("kbd["+i+"]="+kbd[i]);
}
}
public static void go(char kbd[], String slovo){
String novoslovo="";
int how=slovo.length();
for (int i=0;i
char letter=slovo.charAt(i);
novoslovo=novoslovo+kbd[letter];
}
IO.writeln(novoslovo+"------");
}
public static void main (String args[]){
char kbd[]=new char[255];
fill(kbd);
view(kbd);
String slovo=IO.readString();
go(kbd,slovo);
}
}
Как видите, особой разницы нет – да и вообще принципиальной разницы. Собственно, программа на Java побольше только за счет нескольких сервисных прибавок.
|