Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
ВнизКалькулятор Найти похожие ветки
← →
Григорьев Антон © (2004-07-26 10:33) [40]
> GrayFace (26.07.04 10:26) [39]
> >Больше всего я боюсь, что вы введёте 1+-5 и вылетит ошибка.
> Это неверное выражение - ошибка должна вылетать. (хотя у
> меня не вылетит)
С какой это радости оно неверное?
← →
Думкин © (2004-07-26 10:37) [41]> [40] Григорьев Антон © (26.07.04 10:33)
Так ведь пока ничего не описано у него. А нет формализации - нет ошибок, или все что угодно - ошибка.
← →
Dmitriy O. © (2004-07-26 10:51) [42]Зачем калькулятор если есть Excel ?
Другое дело калькулятор скажем для мобилы. Вещь бы была полезная но там на Java писать надо.
← →
Григорьев Антон © (2004-07-26 11:18) [43]
> Думкин © (26.07.04 10:37) [41]
> > [40] Григорьев Антон © (26.07.04 10:33)
>
> Так ведь пока ничего не описано у него. А нет формализации
> - нет ошибок, или все что угодно - ошибка.
А это - очень спорный вопрос. Формализация грамматики - это половина теории конечных автоматов. ИМХО, лучший вариант был бы таким: автор, представляющий своё творение на суд Юрию Зотову, сам описывает грамматику, которая является допустимой. Описывает, как умеет. И проверка осуществляется в рамках этой грамматики. Если грамматика сама по себе противоречива - это тоже жирный минус автору. Вот тогда и станет очевидной необходимость теории: она нужна даже для того, чтобы просто грамотно сформулировать то, что будет делать программа, не говоря уже о том, чтобы эту программу реализовать.
← →
Ertong © (2004-07-26 11:21) [44]
> Это прикол? Ни приоритетов операций, ни скобок.
Блин! Косяк в коде. Читать такfunction term:real;
var
n:real;
begin
n:=factor;
while s[p] in ["*","/"] do
begin
inc(p);
if s[p-1]="*" then n:=n*factor else n:=n/factor;
end;
term:=n;
end;
Там и приоритеты и скобки :)
← →
GrayFace (2004-07-26 11:37) [45]Григорьев Антон © (26.07.04 10:33) [40]
>С какой это радости оно неверное?
Возможно, верное. Мне казалось, что надо 1+(-5). Вполне возможно я перепутал сложение с умножением. Мне показалось, что нас так учили писать при сложении.
>автор, представляющий своё творение на суд Юрию Зотову, сам описывает грамматику, которая является допустимой.
Возможно такое:sin5, sin-5, 1+---+5(но 1++5 - нет), 2pi, 2sin2, 2 2 2=8(побочный эффект).
Исключение:|5|-6|| - долно быть |5*|-6||
>Зачем калькулятор если есть Excel?
Ты используешь Excel как калькулятор??!! Это же тормознутый запуск, черти-что вместо названий функций (в русском Excel). А вообще этот калькулятор создавался, можно сказать, специально для этого спора, хотя я его еще как-нибудь использую.
>Прошло много рах по 3,5 часа а калькулятора все нет!
Меньше двух рах.unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Math;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type TOperator=function(v1,v2:extended):extended;
TFunction=function(v:extended):extended;
TFunc=record
f:pointer;
name:string;
end;
TConst=record
v:Extended;
name:string;
end;
TBracketFunc=record
f:pointer;
left:string;
right:char;
end;
TOper=record
f:pointer;
name:string;
prior:integer;
end;
function Mul(v1,v2:extended):extended;
begin
Result:=v1*v2;
end;
function Div1(v1,v2:extended):extended;
begin
Result:=v1/v2;
end;
function Add(v1,v2:extended):extended;
begin
Result:=v1+v2;
end;
function Dec(v1,v2:extended):extended;
begin
Result:=v1-v2;
end;
function Stepen(v1,v2:extended):extended;
begin
Result:=exp(ln(v1)*v2);
end;
function Sin1(v:extended):extended;
begin
Result:=sin(v);
end;
function Cos1(v:extended):extended;
begin
Result:=cos(v);
end;
function Tg(v:extended):extended;
begin
Result:=tan(v);
end;
function Ctg(v:extended):extended;
begin
Result:=CoTan(v);
end;
function aSin(v:extended):extended;
begin
Result:=arcsin(v);
end;
function aCos(v:extended):extended;
begin
Result:=arccos(v);
end;
function aTg(v:extended):extended;
begin
Result:=arctan(v);
end;
function aCtg(v:extended):extended;
begin
if v=0 then Result:=pi/2
else Result:=arcTan(1/v);
end;
function Modul(v:extended):extended;
begin
Result:=abs(v);
end;
const Opers:array[0..4] of TOper=((f:@Add; name:"+"; Prior:10),(f:@dec; name:"-"; prior:10),(f:@Mul; name:"*"; prior:20),(f:@Div1; name:"/"; prior:20),(f:@stepen; name:"^"; prior:30));
OpMul:TOper=(f:@Mul; name:"*"; prior:20);
Funcs:array[0..7] of TFunc=((f:@sin1; name:"sin"),(f:@cos1; name:"cos"),(f:@tg; name:"tg"),(f:@ctg; name:"ctg"),(f:@asin; name:"arcsin"),(f:@acos; name:"arccos"),(f:@atg; name:"arctg"),(f:@actg; name:"arcctg"));
BracketFuncs:array[0..0] of TBracketFunc=((f:@Modul; left:"|"; right:"|"));
Consts:array[0..0] of TConst=((v:pi; name:"pi"));
function IsDigit(c:char):byte;
begin
if (c=".") or (c=DecimalSeparator) or (c="e") or (c="E") or ((ord(c)>=$30) and (ord(c)<=$39))
then result:=1 else if (c="-") or (c="+") then Result:=2 else Result:=0;
end;
procedure DoString(From,Tom:PChar; var s:string);
var i:integer;
begin
SetLength(s,integer(tom)-integer(from)+1);
for i:=1 to length(s) do
begin
if from^="." then s[i]:=DecimalSeparator
else s[i]:=from^;
inc(from);
end;
end;
function cmp(const s:string; p:PChar):boolean;
var s1:string; l:integer;
begin
l:=length(s);
SetLength(s1,l);
CopyMemory(@s1[1],p,l);
Result:=AnsiCompareText(s,s1)=0;
end;
function GetOper(var s:PChar; sep:Char; prior:integer; var done:byte; v1:extended):extended; forward;
{----------------------------------------------}
← →
GrayFace (2004-07-26 11:37) [46]
var s1:string; i:integer; Len:integer; from,tom:PChar;
step:integer;// vloz:integer=0;
function GetValue(var s:PChar; sep:Char; prior:integer; var done:byte):extended;
var fu:pointer;
begin
// inc(vloz);
try
// Application.MessageBox(PChar("Íà÷àëî. Vloz:"+IntToStr(vloz)+" "+s+" Prior:"+IntToStr(prior)+" Sep:"+sep),"");
while s^=" " do inc(s);
if s^="(" then
begin
inc(s);
Result:=GetValue(s,")",-MaxInt,done);
done:=0;
exit;
end;
if s^="-" then
begin
inc(s);
Result:=-GetValue(s,sep,MaxInt,done);
exit;
end;
len:=0;
for i:=low(BracketFuncs) to high(BracketFuncs) do
begin
if (length(BracketFuncs[i].left)>len) and cmp(BracketFuncs[i].left,s) then
begin
step:=ord(BracketFuncs[i].right);
fu:=BracketFuncs[i].f;
len:=length(BracketFuncs[i].left);
end;
end;
if len<>0 then
begin
inc(s,len);
Result:=TFunction(fu)(GetValue(s,chr(step),-MaxInt,done));
done:=0;
exit;
end;
for i:=low(Funcs) to high(Funcs) do
begin
if (length(Funcs[i].name)>len) and cmp(Funcs[i].name,s) then
begin
fu:=Funcs[i].f;
len:=length(Funcs[i].name);
end;
end;
for i:=low(Consts) to high(Consts) do
begin
if (length(Consts[i].name)>len) and cmp(Consts[i].name,s) then
begin
fu:=nil;
Result:=Consts[i].v;
len:=length(Consts[i].name);
end;
end;
if len<>0 then
begin
inc(s,len);
if fu<>nil then
begin
Result:=TFunction(fu)(GetValue(s,sep,MaxInt,done));
end;
exit;
end;
from:=s;
tom:=nil;
step:=0;
if s^="+" then inc(s);
while true do
begin
if IsDigit(s^)=0 then break;
if (s^="e") or (s^="E") then if step<1 then step:=1 else break;
if (s^="-") then if step=1 then inc(step) else break;
if (s^="+") then if step=1 then inc(step) else break;
if IsDigit(s^)=1 then tom:=s;
inc(s);
end;
if tom=nil then
begin
raise Exception.Create("Syntax error");
end;
s:=tom;
inc(s);
DoString(from,tom,s1);
try
Result:=StrToFloat(s1);
except
raise Exception.Create("Syntax error");
end;
finally
// Application.MessageBox(PChar("Vloz:"+IntToStr(vloz)+" "+s+" Prior:"+IntToStr(prior)+" Sep:"+sep),"");
if done<>2 then
begin
done:=0;
while done=0 do
begin
Result:=GetOper(s,sep,prior,done,Result);
end;
if done=1 then done:=0;
end;
// vloz:=vloz-1;
end;
end;
function GetOper(var s:PChar; sep:Char; prior:integer; var done:byte; v1:extended):extended;
var op:TOper;
begin
while s^=" " do inc(s);
if (s^=sep) or (s^=#0) then
begin
if s^<>sep then raise Exception.Create("Syntax error: ""+sep+"" wasn""t found");
if s^<>#0 then inc(s);
done:=2;
Result:=v1;
exit;
end;
len:=0;
for i:=low(opers) to high(opers) do
begin
if (length(Opers[i].name)>len) and cmp(Opers[i].name,s) then
begin
op:=Opers[i];
len:=length(Opers[i].name);
end;
end;
if Len=0 then op:=OpMul;
if op.prior>prior then
begin
inc(s,Len);
Result:=TOperator(op.f)(v1,GetValue(s,sep,op.prior,done))
end else
begin
Result:=v1;
done:=1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var b:byte; p:PChar; s:string; i:integer;
begin
// vloz:=0;
b:=0;
s:=Edit1.text;
p:=PChar(s);
try
Edit2.Text:=FloatToStr(GetValue(p,#0,-MaxInt,b));
Edit1.SetFocus;
Edit1.SelLength:=0;
Edit1.SelStart:=length(s);
except
on E: Exception do
begin
if s="" then i:=0 else i:=integer(p)-integer(@s[1]);
Edit2.Text:=E.Message+" at offset "+IntToStr(i);
Edit1.SetFocus;
Edit1.SelStart:=i;
Edit1.SelLength:=0;
end;
end;
end;
end.
← →
Григорьев Антон © (2004-07-26 11:57) [47]
> >автор, представляющий своё творение на суд Юрию Зотову,
> сам описывает грамматику, которая является допустимой.
> Возможно такое:sin5, sin-5, 1+---+5(но 1++5 - нет), 2pi,
> 2sin2, 2 2 2=8(побочный эффект).
> Исключение:|5|-6|| - долно быть |5*|-6||
На описание грамматики это не тянет. Например, из этого описания неясно, как трактуется строка sin2pi - как sin(2*pi) или как sin(2)*pi. Или sin1+2 - sin(1)+2 или sin(1+2).
А вообще, сам факт попытки реализовать калькулятор, распознающий выражения без знаков умножения и аргументы функций без скобок, является весьма показательным. Человек, знакомый с теорией, никогда бы такую глупость не сделал. Потому что слишком хорошо понятно, к чему это приведёт. Захотите вот ввести переменные - и как тогда трактовать pi? Как число pi или как p*i? А arcsin(s)? Может быть, это вообще a*r*c*sin(x)? А log105 - это log(105) или log10(5)? Вы даже не смогли придумать непротиворечивую грамматику, которую должен понимать ваш калькулятор, а без этого его писать просто не стоит.
← →
Юрий Зотов © (2004-07-26 12:01) [48]> Огромное Кулясищще © (25.07.04 17:53) [20]
> А предъявите требования к выражению? Какие операции должны
> поддерживаться?
Они были изложены в предыдущей ветке. Обычный набор - унарные плюс и минус, 4 действия арифметики, возведение в степень, скобки с любым уровнем вложенности и несколько любых функций (каких и сколько - неважно, ну пусть, например sin и cos).
> Alx2 © (25.07.04 17:54) [21]
> Можно и без теории. В этом частном случае.
Могу предложить Вам доказать Ваше утверждение, написав свой вариант такого калькулятора. Требования: он должен правильно вычислять ЛЮБОЕ синтаксически правильное арифметическое выражение, при вычислении которого не возникает деления на ноль, переполнения и др. математических ошибок.
Думаю, что без теории это не получится и у Вас тоже. И неважно, примените ли Вы готовую теорию, или придумаете свою - все равно без теории Вы такую программу тоже не напишете.
> Огромное Кулясищще © (25.07.04 18:18) [23]
> Кроме того, Зотов употребил модуль ввиде |a|. Думается, надо
> бы либо запретить и говорить, чтобы юзало abs(x), либо самому
> менять.
Это не я употребил, а автор программы САМ ввел такую фичу (что однозначно видно из кода). Как тестировщик, а просто обязан был ее проверить. :о)
> Огромное Кулясищще © (25.07.04 18:27) [25]
> Вы н абумажке посчитать пример можете? Думаю да. Значит, и
> комп может.
Странно. Мне казалось, что уж кто-кто, а ПРОГРАММИСТ должен был бы прекрасно понимать что комп не умеет абсолютно НИЧЕГО, кроме как исполнять программы, написанные ЧЕЛОВЕКОМ. И если человек некую задачу пока еще не смог формализовать и запрограммировать, то комп бессилен.
> Ertong © (25.07.04 18:34) [26]
> Ertong © (25.07.04 19:56) [30]
> Может я чего не понимаю, но помойму это задачка из ряда
> школьных оллимпиад! Я всегда решал ее. Там не очень сложный
> рекурсивный алгоритм. Если кому интересно, то где-то через
> часик сюда кину простейшую реализацию.
Код, который Вы привели в [30] - можно сказать, классический. Он совершенно ЯВНО построен на основе строгого формального описания арифметического выражения в виде форм Бэкуса-Наура - то есть, реализует самую что ни на есть классическую теорию. Я ничуть не сомневаюсь, что такой код мог быть САМОСТОЯТЕЛЬНО написан ТОЛЬКО человеком, имеющим торетическую подготовку. Сам алгоритм и даже названия функций (expr, term, factor) ОДНОЗНАЧНО говорят о том, что ПЕРВОНАЧАЛЬНО это код писал человек, ЗНАЮЩИЙ теорию (по крайней мере, хотя бы основы).
← →
Думкин © (2004-07-26 12:51) [49]> [43] Григорьев Антон © (26.07.04 11:18)
Я про это и намекал уже.
Надо вначале самому четко определиться, а не сразу же хвататься за клавиатуру. Чем больше пишу, тем стараюсь долше отттянуть собственно стучание для кода.
← →
GrayFace (2004-07-26 12:54) [50]>Григорьев Антон [47]
sin2pi=sin(2)pi sin2+3=sin(2)+3
Если надо выбрать между трактовкой вашего выражения, как arccos и как a*r*c*cos, то выбирается самое длинное - arccos.
← →
Alx2 © (2004-07-26 13:01) [51]>Юрий Зотов © (26.07.04 12:01)
>Думаю, что без теории это не получится и у Вас тоже. И неважно,
>примените ли Вы готовую теорию, или придумаете свою - все равно
>без теории Вы такую программу тоже не напишете.
Тавтология имхо. Очевидно, что так любая корректно работающая программа станет следствием теории, даже если этой теории не было "до того". Вопрос что таковой называть. Ведь достаточно назвать теорией то, на базе чего что-либо пишется (даже не важно как) и Вы окажетесь правы.
← →
Думкин © (2004-07-26 13:01) [52]> [50] GrayFace (26.07.04 12:54)
> sin2pi=sin(2)pi
А вот математики первое трактуют иначе, отсюда некое вольное трактование чего-то. Не лучше ли чем вникая каждый раз в частности, написать нечто более общее? Чтобы таких вопросов не возникало.
← →
Юрий Зотов © (2004-07-26 13:08) [53]> Alx2 © (26.07.04 13:01) [51]
Никакой тавтологии. Речь идет о том, что Вы сделаете раньше - родите теорию, не думая о программе и ПОТОМ на ее основе напишете программу, или же напишете программу, не думая о теории, а уже потом сформулируете теорию на основе ГОТОВОЙ программы.
← →
Ertong © (2004-07-26 13:14) [54]
> Он совершенно ЯВНО построен на основе строгого формального
> описания арифметического выражения в виде форм Бэкуса-Наура
> - то есть, реализует самую что ни на есть классическую теорию
Я не читал ничего по теории языков и даже впервые слышу, что это форма записи Бэкуса-Наура :) Хотя вы правы, я использовал иммено эту форму описания синтаксиса (незная названия:).
P.S. Я сначала подумал, что тут обсуждают написание калькулятора, а не потребнось(или непотребность) знания хоть некоторой теории:)
> И неважно, примените ли Вы готовую теорию, или придумаете
> свою - все равно без теории Вы такую программу тоже не напишете.
А разве придумать свою теорию для написаня алгоритма - это не написания программы без применения готовых теорий?:)
← →
Ertong © (2004-07-26 13:17) [55]
> а уже потом сформулируете теорию на основе ГОТОВОЙ программы.
Зачем формулировать теорию по готовой программе? В большенстве случаев это не нужно!
← →
вразлет © (2004-07-26 13:23) [56]ИМХО, теория конечно доложна быть первичной, но оно всегда должна идти рука об руку с практикой. Ошибка в теории выявится только на практике. Иногда это может привести к очень нежелательным последствиям,вплоть до пересмотра всей теории на корню.
← →
Думкин © (2004-07-26 13:24) [57]> [55] Ertong © (26.07.04 13:17)
Речь примерно вот о чем:
Вот математики в Др.Греции могли решать сложные задачи. Но почти любая сложная задача сводилась придумыванию нового, к какому-нибудь трюку. Это было сложно и непродуктивно.
Но вот пришла аналитическая геометрия, анализ, проективная геометрия и т.д. и т.п. Теория двинулась. И сейчас вы можете решить многие задачи древности не расписывая многостраничных тркататов, а просто выписав ряд формул. Тот же объем сложной фигуры и т.д и т.п.
Без этих теорий можно конечно тоже что-то сделать - но вы со скрипом посчитаете объем шара, пирамиды, не говоря о более сложных моментах.
Так вот написание калькулятора на коленке занятие плодотворное, но возможно долгое и глючное. И еще не факт что вы вынесите оттуда пользу большую. Ведь у греков так и не родилось диф. и инт. исчисление.
← →
Alx2 © (2004-07-26 13:27) [58]>Юрий Зотов © (26.07.04 13:08) [53]
Мне довольно трудно понять это. Видимо, разный менталитет :)
Вот что я хотел сказать:
Когда я пишу программы на базе теории, то они, как правило, "рабочие лошадки" - призванны просто облегчить рутину.
А для разработки новой теории (довольно помпезно звучит, но, думаю, понятно что имеется в виду) я пишу программы, с помощью которых проверяю правильность идеи. То есть в этом случае я создаю исследовательский инструмент. Но новая теория в данном случае не создается на основе готовой программы. Готовая программа здесь есть нечто вспомогательное. Инструмент.
← →
Григорьев Антон © (2004-07-26 13:27) [59]
> GrayFace (26.07.04 12:54) [50]
Теперь осталось сформулировать эту грамматику не в виде конкретных примеров, а в виде, позволяющем алгоритмизировать разбор. Например, как формализуется запись числа с плавающей десятичной точкой
Знак="+"/"-"
Цифра="0"/"1"/"2"/"3"/"4"/"5"/"6"/"7"/"8"/"9"
Экспонента="e"/"Е"
Точка="."
Число=[Знак]{Цифра}[Точка{Цифра}][Экспонента[Знак]{Цифра}]
Здесь / - "или"
[] - необязательная часть
{} - повторение 1 или более раз
← →
Kerk © (2004-07-26 13:30) [60]Народ, вам делать совсем не чего?
Полно готовых алгоритмов (та же польская запись), зачем свое придумывать???
← →
calm © (2004-07-26 13:32) [61]
> Полно готовых алгоритмов (та же польская запись), зачем
> свое придумывать???
ты не понял сабжа :))
Речь идет как раз о том, что изучать готовые теории/алгоритмы не нужно.
Оно ведь всё можно с наскоку одолеть за 2 часа.
← →
Anatoly Podgoretsky © (2004-07-26 13:33) [62]И при этом не лукавить, не брать готовый код.
← →
Kerk © (2004-07-26 13:36) [63]
> Оно ведь всё можно с наскоку одолеть за 2 часа.
не согласен.. :))
у меня, например, на изучение некоторых готовых алгоритмов уходило куда больше времени. вероятно, я тормоз... :(
← →
calm © (2004-07-26 13:42) [64]
> не согласен.. :))
Да многие не согласны :))
Но Огромное Кулясищще ©, GrayFace © и co
не только согласны, но и пытаются это доказать с помощью написания калькулятора без соответсвтующей теор. подготовки.
Процесс длится, если не ошибаюсь, четверты день.
P.S. Их бы энергию да в мирных целях :))
← →
GrayFace (2004-07-26 13:45) [65]>Речь идет как раз о том, что изучать готовые теории/алгоритмы не нужно.
Нужно, но не слишком много.
>Оно ведь всё можно с наскоку одолеть за 2 часа.
О 2 часах речи не идет. Речь, скорее, о дне. ЮЗ вообще говорит о вечности.
← →
Anatoly Podgoretsky © (2004-07-26 13:50) [66]calm © (26.07.04 13:42) [64]
Нет не первый день, эта ветка была вычоенена из другой более ранней, где он начал кидаться кривым кодом.
← →
calm © (2004-07-26 13:56) [67]
> эта ветка была вычоенена из другой более ранней, где он
> начал кидаться кривым кодом.
Я помню, читал.
Кажется калькулятор начинали писать в пятницу...
← →
Сергей Суровцев © (2004-07-26 14:01) [68]>Юрий Зотов © (26.07.04 12:01) [48]
>Думаю, что без теории это не получится и у Вас тоже. И неважно,
>примените ли Вы готовую теорию, или придумаете свою - все равно
>без теории Вы такую программу тоже не напишете.
Ну это все же не совсем честно. :)) Вы загнали его в диалектический тупик и если принять Ваше выражение то становится абсолютно неважно - напишет он свой калькулятор или нет. Ибо он уже заранее проиграл. По определению.
Честнее будет так - может ли человек, не изучивший теорию предмета заранее создать ее при необходимости самостоятельно, естественно не всеобъемлющую, но универсальную в рамках поставленной задачи.
>GrayFace (26.07.04 12:54) [50]
>Если надо выбрать между трактовкой вашего выражения, как arccos
>и как a*r*c*cos, то выбирается самое длинное - arccos.
При таком подходе Юрий может спать спокойно. Ибо вместо простого парсинга по 7 знакам Вы выбрали головную боль с произвольной трактовкой выражения. Это путь в лежачую восьмерку, даже без всяких переменных. Незнание теории не освобождает от необходимости ее придумать. :))
← →
Думкин © (2004-07-26 14:05) [69]> [68] Сергей Суровцев © (26.07.04 14:01)
> Честнее будет так - может ли человек, не изучивший теорию
> предмета заранее создать ее при необходимости самостоятельно,
> естественно не всеобъемлющую, но универсальную в рамках
> поставленной задачи.
Начало было в другой ветке. Там говорилось, что можно обходиться весьма малым багажом. А если что и возникнет проблемное, то решается быстро и просто.
← →
NeyroSpace © (2004-07-26 14:14) [70]IMHO
А почему изпользуется только процедурный язык? Может использовать объекты? Например каждая операция это объект, операнды это свойсва объекта. А дальше в 2а прохода, сначала парсим и создаем объекты, потом строим дерево связей, которое задает последовательность вычисления операций и раскручиваем его с концов веток. Хотя это экспромт, может не заработать :-).
Я бы за 2а часа ничего не стал придумывать, не изучив все шишки, набитые другими людьми в этом вопросе. Польская запись самое простое :-).
← →
calm © (2004-07-26 14:26) [71]
> А почему изпользуется только процедурный язык? Может использовать
> объекты?
процедуры, объекты... Не в этом же суть
← →
Юрий Зотов © (2004-07-26 14:32) [72]> Сергей Суровцев © (26.07.04 14:01) [68]
> А также для всех желающих уяснить суть сабжа.
Ссылка на исходную ветку есть выше. Там довольно много, поэтому позволю себе привести здесь очень краткую историю вопроса - и да, простят меня модераторы.
:о)
Первоначально речь зашла о том, сколько времени нужно начинающему программисту, чтобы сравняться с опытным - столько же, сколько на это потратил опытный, или гораздо меньше. Я высказался в том смысле, сам кодинг действительно можно освоить быстро, но львиная доля времени опытного программиста ушла не на это, а на изучение теории. Чтобы его догнать, начинающему придется изучить ту же самую теорию в том же объеме - и, значит, потратить примерно столько же времени.
Далее было вот что (привожу только выдержки, относящиеся к сабжу).
=====================================
GrayFace © (22.07.04 16:53) [159]
> Юрий Зотов [156]
Если у вас львинная доля времени ушла на теорию, то вы - странный человек. Я не представляю, как можно больше любить изучение программирования, чем само программирование.
=====================================
Юрий Зотов © (22.07.04 17:38) [160]
> GrayFace © (22.07.04 16:53) [159]
Напишите калькулятор. Просто калькулятор. <skipped>
Когда напишете - сравните, сколько времени у Вас ушло на кодинг и отладку, а сколько - на все остальное. И задумайтесь над двумя вопросами:
1. Смогли бы Вы вообще написать такую программу без теории?
2. А что же такое есть программирование?
=====================================
GrayFace © (22.07.04 19:26) [161]
Программирование - это кодинг и придумывание структуры программы, как я и говорил
=====================================
Юрий Зотов © (22.07.04 19:55) [166]
А я Вам ответил - напишите калькулятор. Быть может, после этого Ваша уверенность и поколеблется.
=====================================
GrayFace © (23.07.04 09:56) [179]
На днях напишу калькулятор и покажу вам.
=====================================
Юрий Зотов © (23.07.04 11:36) [183]
ОК. Заодно и увидим, можно ли без знания теории языков написать безглючный строчный калькулятор "на днях".
=====================================
Далее пошло написание и тестирование калькулятора - но в той ветке это был оффтопик и сабж перехал сюда.
← →
NeyroSpace © (2004-07-26 14:34) [73]>процедуры, объекты... Не в этом же суть
образ мышления разный, и соответственно возможности в построениии алгоритмов.
← →
Огромное Кулясищще © (2004-07-26 14:39) [74]2 Юрий Зотов:
>Они были изложены в предыдущей ветке. Обычный набор - унарные плюс и минус, 4 действия арифметики, возведение в степень, скобки с любым уровнем вложенности и несколько любых функций (каких и сколько - неважно, ну пусть, например sin и cos).
Модуль ввиде |a| вам нужен?
И ещё. Например, я считаю запись 2^-2 недопустимой (нужно 2^(-2)). Вы согласны?
← →
Юрий Зотов © (2004-07-26 14:59) [75]> Огромное Кулясищще © (26.07.04 14:39) [74]
Модуль вообще не обязателен. Хотите - делайте его (в любом виде), хотите - не делайте совсем. Возьмите пару-тройку ЛЮБЫХ функций, хоть с модулем, хоть без него - этого будет вполне достаточно.
2^-2 - синтаксически вполне допустимое выражение. 2^(-2) - тоже. Следовательно, оно должно правильно вычисляться в любой форме.
← →
Сергей Суровцев © (2004-07-26 15:32) [76]>Юрий Зотов © (26.07.04 14:32) [72]
>Ссылка на исходную ветку есть выше.
Спасибо. Я читал, за исключением ну совсем уж мокрых мест.
На тему:
>сколько времени нужно начинающему программисту, чтобы
>сравняться с опытным - столько же, сколько на это потратил
>опытный, или гораздо меньше.
Конечно меньше, иногда намного ибо иначе не было бы движения вперед вообще. Новое поколение успевало бы только усвоить те же знания, что и предыдущее. За доказательство теоремы Пифагора в 14м веке давали звание магистра. А разрыв в объеме знаний в пределах начала и конца 20го века - несколько порядков. Другое дело, что подобная скорость и достигается путем освоения в теории (быстро и четко) того, что предыдущее поколение вымучило практикой (и созданием, собственно, этой теории). Поэтому не изучать теорию глупо.
Но Вы сами поставили вопрос о калькуляторе, как о неком мериле истины, :) поэтому дайте уж ему шанс съиграть на равных, хотя бы теоретическую возможность выиграть. Судя по его словам "придумывание структуры программы" - это и есть ее теоретическая подготовка, описание задач и методов их решения, обдумывание алгоритмов, увязка и т.д. Ибо это и есть основа программирования, а без этого стучать по клавиатуре бессмысленно, если только не получать удовольствие от самого звука это стука.
>Огромное Кулясищще © (26.07.04 14:39) [74]
>Модуль ввиде |a| вам нужен?
>И ещё. Например, я считаю запись 2^-2 недопустимой (нужно 2^(-
>2)). Вы согласны?
Было бы неплохо остановиться на каком-то одном нике. А Вам не приходило в голову, что раз для модуля во всех языках программирования используется функция, то это не просто так? :))
Если Вы будете описавыть КАЖДОЕ недопустимое выражение, то мы все уйдем в мир иной задолго до того как Вы занчите. Есть правило - два знака подряд идти не могут. Этого достаточно.
А вот список этих правил должен быть обнародован ПЕРЕД калькулятором. А уже сам калькулятор должен соответствовать заявленной спецификации. Тогда не придется спрашивать согласие на каждое действие в отдельности. :))
← →
Igorek © (2004-07-26 15:38) [77]
> Юрий Зотов © (26.07.04 12:01) [48]
> И если человек некую задачу пока еще не смог формализовать
> и запрограммировать, то комп бессилен.
Неа.
← →
Огромное Кулясищще © (2004-07-26 15:42) [78]2 Сергей суровцев:
>А вот список этих правил должен быть обнародован ПЕРЕД калькулятором. А уже сам калькулятор должен соответствовать заявленной спецификации. Тогда не придется спрашивать согласие на каждое действие в отдельности. :))
А я так и сделал.
>2^-2 - синтаксически вполне допустимое выражение. 2^(-2) - тоже. Следовательно, оно должно правильно вычисляться в любой форме.
Не согласен. В обычной записи на бумаге мы можем написать, например, основание 2 и показатель -2*3. Как же вы эту запись запишите строчкой без скобок?
← →
Игорь Шевченко © (2004-07-26 15:45) [79]
> Как же вы эту запись запишите строчкой без скобок?
Скобки вводятся тогда, когда необходимо явно указать приоритет операций. Скобки тоже имеют приоритет...
← →
Anatoly Podgoretsky © (2004-07-26 15:46) [80]унарный минус имеет более высокий приоритет
Страницы: 1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18
19 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.11.07;
Скачать: [xml.tar.bz2];
Память: 0.68 MB
Время: 0.065 c