BBB писал(а):Не уверен, что это корректное сравнение.
А как еще продемонстрировать использование (закрепить на практике) типированных файлов? Дается задание с указанием применить "изучаемый материал" (т.е. в данном случае - типированных файлов).
Еще раз: не путайте учебную задачу (программу) с практической.
Может быть ты и прав, но в данном случае я на стороне
Хыиуду. С фразой "Не перестаю поражаться, как преподаватели дают студентам задачи, полностью убивающие программерский стиль мышления!" - полностью согласен. Наверное, это просто неудачный пример использования типов, - они здесь совсем не нужны. Ну, научит её преподаватель использовать типы к таким задачам - а она и начнёт применять их ко всем "ненуждающимся", тем самым, наполняя код ненужными действиями и затемняя свой разум.
Однажды бывал я на сайте
для начинающих программистов и увидел там нечто очень страшное. "Грязные коды"! Здесь самая простая задача полна совсем ненужных переменных, ненужных функций и прочего. Скорее всего, у автора сайта
http://www.tpxexe.narod ru был примерно такой же преподаватель, как у
Justcle. По его мнению, задача с условием "В строке убрать лишние пробелы" решается так:
Код: Выделить всё
program z1] of string;
begin
clrscr;
readln(a);
i:=1;
n:=1;
for j:=1 to 100 do
begin
x[j]:=''; s[j]:='';
end;
while i<=length(a) do
begin
if a[1]=' ' then goto 3 else goto 2;
2:if (a[i]=' ') and (a[i+1]<>' ') then n:=n+1;
repeat
x[n]:=x[n]+a[i];
i:=i+1;
if a[i]=' ' then goto 2;
if i>length(a) then goto 4;
until a[i]<>' ';
3:repeat
if a[i]<>' ' then goto 2;
i:=i+1;
if i>length(a) then goto 4;
until a[i]=' ';
end;
4:for j:=1 to n do
for i:=1 to length(x[j]) do
if x[j][i]<>' ' then s[j]:=s[j]+x[j][i];
b:='';
for i:=1 to n do
b:=b+s[i]+' ';
writeln(b);
readkey;
end.
Согласитесь, очень страшный код! И автор сайта здесь не хотел объяснить случаи использования меток - здесь все такие решения. Рассмотрим ещё одну задачу с этого же сайта, под названием "Определить, является ли заданное число степенью двойки?" (ссылка
http://www.tpxexe.narod.ru/017.html):
Код: Выделить всё
program z1;
uses crt;
label 1;
var a,i,k:integer;
begin
writeln('Введите число ');
readln(a);
k:=0; i:=0;
while a>1 do
begin
i:=a mod 2;
a:=a div 2;
if i<>0 then begin k:=1; goto 1; end;
end;
1:if k=0 then writeln('yes!')
else
writeln('no');
readkey;
end.
{http://www.tpxexe.narod.ru/017.html}
Опять метки! Ведь эту задачу можно было решить гораздо проще:
Код: Выделить всё
var a,b:integer;
begin
readln(a);
b:=2;
while b<a do b:=b*2;
if b<>a then write('Не является') else write('Является');
readln;
end.
После просмотра этого сайта, у меня сложилось впечатление, что преподаватель автора хотел объяснить ему, что такое лабелы, и в качестве примера давал ему задачи, где они совершенно не уместны! И вот результат... - они всегда и везде!!! Так что, я всеми этими фактами хочу поддержать мнение Хыиуды (надеюсь, это существительное склоняется-)

, а именно, предложение о том, что преподаватели своими "тупыми" примерами использования, в данном случае
типов, убивают программерский стиль мышления.