Здравствуйте! мне очень нужна ваша компетентная помощь! Мне над написать программку, которая может решать простые уравнения типа 5Х+10, которые бы вводил пользователь. Как бы мне это сделать? Пользователь вводит уравнение. Через readln я получаю стринг. Как мне его теперь разделить на отдельные символы, чтобы проверить это цифра или буква. Мне в понедельник её сдавать, помогите мне, очень прошу! Буду примного благодарна!
Автор: volvo 15.06.2007 21:28
Цитата
написать программку, которая может решать простые уравнения типа 5Х+10, которые бы вводил пользователь
Ты видишь здесь уравнение? Я - нет... Уравнение - это что-то со знаком равенства...
Определи, кстати, насколько простым может быть уравнение, и какие арифметические операции надо будет уметь обрабатывать...
Автор: Танюшонка 15.06.2007 22:14
Ну скажем функция а не уравнение. Потом я за Х вставлю значения. Должно быть простое с одной переменной. типа 2Х+3 или 4Х-7.
Автор: volvo 15.06.2007 22:36
То есть, ты хочешь нечто вроде этого:
function eval(X: real; s: string): real; var p, err: integer; st: string; f: real; begin p := pos('X', s); delete(s, p, 1); str(X:0:3, st); insert(st, s, p); val(calc(s), f, err); eval := f; end;
begin { В строке обязательно вводить знак умножения, и буква X должна быть большой... } write('f(x) = '); readln(s); { Тестировалось на строке 10*X+30 } writeln(eval(12.45, s) :10 :5); end.
(функция Calc приведена вот тут: http://forum.pascal.net.ru/index.php?s=&showtopic=4694&view=findpost&p=40351 ) ?
Автор: Танюшонка 17.06.2007 5:22
Сделала вот так. Не обращайте внимание, что переменные по немецки. Что вы об этом думаете?
Код
program funktionsgraf; uses crt; var str, symbol1, symbol2,wertstr1, wertstr2 :string; position, wert, wert1, wert2, fehler, x, y :integer; zeichen : char;
BEGIN TextColor(Black); clrscr; writeln('Geben sie die Funtion f(x) ein'); readln(str); position:=0; wertstr1 := ''; wertstr2 := ''; wert := 0; repeat begin wert1 := wert; position:=position+1; symbol1:=copy(str,position,1); wertstr1:=wertstr1+symbol1; val(wertstr1,wert, fehler); end; until fehler<>0;
repeat begin position:=position+1; symbol2:=copy(str,position,1); wertstr2:=wertstr2+symbol2; val(wertstr2,wert,fehler); wert2 := wert; end; until ((fehler<>0) or (position = length(str)));
writeln(wert2); {WEG}
writeln(' x f(x)');
for x:=1 to 10 do begin case zeichen of
'+' : begin y:=wert1*x+wert2; {writeln(' ',x,' ',y)} Punkt(x,wert1*x+wert2); end;
'-' :
begin y:=wert1*x-wert2; {writeln(' ',x,' ',y)} Punkt(x,wert1*x+wert2); end
else writeln('Fehler!'); end; { case } end; { for } readkey; END.
Автор: мисс_граффити 17.06.2007 7:47
а перевести никак нельзя? лично я не могу общаться с программой, не понимая, что она мне говорит... а форум у нас вроде как русскоязычный. вот тебе приятно было бы, если бы я написала ответ, скажем, на китайском? и в конце - извини, что на китайском... не обращай внимания.
Автор: Танюшонка 20.06.2007 1:56
Извините, я сейчас перквкеду. Ещё вопрос, как в TP вводить степень? Просто 2^2 не работает, посмотрела в инете, а там что-то ничего простого нету. Не ужто TP не умеет просто степени считать.
Автор: volvo 20.06.2007 2:21
Цитата
Ещё вопрос, как в TP вводить степень?
Вот так: http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38227