Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Serg Belyaev                         2:5020/400     26 Feb 2002  23:19:18
 To : Oleg I. Khovayko
 Subject : Re: imho нелегкий алгоритм, но нужен...
 -------------------------------------------------------------------------------- 
 
 
 Привет!
 
 OK> Крутые школьники пошли, что ни говори...
 OK>
 OK> Hо согласись, что приведенный тобой пример может написать далеко
 OK> не всякий школьник. А именно школьник, всерьез увлеченный
 OK> программированием.
 
 Школьники, конечно, разные - большинство и в университет не пойдет
 учиться. А некоторые великолепно программируют и без в.о.
 
 OK> А спрашивают решение с человека, увлекавшегося в школьные годы
 OK> физикой, а не программерством (раз он уж на физфак пошел).
 OK> И требовать от физика знания чисто программистских приемов - ну
 OK> явный перебор! Это все равно, если я буду тебе задачки подсовывать
 OK> на расчет тепловых полей, да чтобы решил не численно, а в аналитическом
 OK> виде - что ты скажешь? И правильно скажешь! Потому что программисту
 OK> в матфизику влазить незачем. Тебе дают в школе теплопроводность
 OK> для одномерного случая, чтобы имел понятие - и хватит.
 
 Если продолжать в таком духе, то до точки зрения Митрофанушки
 дойдешь.
 
 OK> Точно так же надо давать программирование для физиков. Общие
 OK> понятия, численные методы, и тп. Обработка же строк и рекурсия
 OK> явно никаким боком к физике не относится. Поэтому для физика
 OK> бесполезна и неинтересна. Так же  как для тебя - постоянная Хаббла,
 OK> диаграммы Феймана, предел Чандарсекера или уравнение Ферми-Дирака.
 
 Hу, про постоянную Хаббла должны знать даже филологи. Про белых
 карликов могут задать вопрос в какой-нибудь игре. Про стат.физику
 можно и не говорить - она вплотную примыкает к теории информации.
 Можно было бы согласиться, что неспециалистам не нужны диаграммы
 Фейнмана. Hо ... они включены в краткий курс теор.физики для
 неспециалистов (Ландау и Лифшиц - маленький 2-х томник)
 
 OK> И пусть каждий занимается своим делом - физик пишет формулы, а
 OK> программист - программы. А требовать от физика знания тезиса Черча
 OK> или от программиста - тензорного анализа прост глупо...
 
 Один мой одноклассник после окончания МФТИ со временем переключился
 на алгебраическую геометрию (сейчас он, вроде, доктор наук). Кто
 знает, чем придется заниматься нынешнему выпускнику универа!
 Американский подход к образованию никогда себя не оправдывал
 (см. статью Арнольда, которая недавно была в ru.math).
 
 OK> Компактно и изящно. Можно, конечно, напрячся и пооптимизиповать - но
 OK> лучше, наверное, употребить свои силы к более "вечным" задачам...
 
 Так-то оно так, но, что считать "вечным"? "Школьные" задачи тем
 и хороши, что они обычно интереснее, часто и сложнее.
 Принятый в данной конференции стиль изложения алгоритмов часто
 очень поверхностен, а черт прячется в деталях.
 Hебольшие изменения приведены ниже - очень неприятно было
 наблюдать в предыдущем варианте строки, забивающие стек.
 Рекурсия хороша, но требует аккуратности.
 Проверка деления на 0 была ошибочной - старый вариант выдавал
 чепуху при исходных данных "6 2002".
 Ошибки переполнения пока остались.
 Скорость выросла примерно в 2 раза, но, "что мешает
 сделать порох непромокаемым"?
 
 ----------------с-----------------
 const ops:array[1..4] of char='+-*/';
 var x,i:integer;s,ss:string;
 
 function solv(sum,term:real;op:char;a:integer):boolean;
 var  i,j,y:integer;ssum,sterm:real;
 begin
      y:=0;ss[a]:=op;
      for i:=a to length(s) do begin
        y:=10*y+byte(s[i])-byte('0');
        if i>a then ss[i]:='_';
        solv:=true;
        if op='+' then begin ssum:=sum+term;sterm:=y end else
        if op='-' then begin ssum:=sum+term;sterm:=-y end else
        if op='*' then begin ssum:=sum;sterm:=term*y end else
        if (op='/') then if (y<>0) then begin ssum:=sum;sterm:=term/y end
        else break;
        if i<length(s) then for j:=1 to 4 do
          if solv(ssum,sterm,ops[j],i+1) then exit else
        else if (ssum+sterm)=0 then exit
      end;
      solv:=false;
 end;
 
 begin
      write('Введи число и строку: ');readln(x,s);
      while s[1]=' ' do delete(s,1,1);
      while s[length(s)]=' ' do dec(s[0]);ss:=s;
      if not solv(-x,0,'+',1) then begin writeln('Hет решения');exit end;
      write(x,'=',s[1]);
      for i:=2 to length(s) do
        if ss[i]='_' then write(s[i]) else write(ss[i],s[i]);
      writeln;
 end.
 ----------------с-----------------
 <SVB>
 --- ifmail v.2.15dev5
  * Origin: Gamma NNTP server Moscow Russia (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 imho нелегкий алгоритм, но нужен...   Sergey Pereslavcev   22 Feb 2002 16:05:02 
 Re: imho нелегкий алгоритм, но нужен...   Oleg I. Khovayko   23 Feb 2002 00:42:25 
 Re: imho нелегкий алгоритм, но нужен...   Serg Belyaev   25 Feb 2002 20:39:46 
 Re: imho нелегкий алгоритм, но нужен...   Oleg I. Khovayko   26 Feb 2002 04:43:00 
 Re: imho нелегкий алгоритм, но нужен...   Serg Belyaev   26 Feb 2002 23:19:18 
 imho нелегкий алгоритм, но нужен...   Andrey Dashkovsky   24 Feb 2002 22:08:34 
 imho нелегкий алгоритм, но нужен...   Ilia Kantor   23 Feb 2002 01:35:26 
Архивное /ru.algorithms/75911cad190a.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional