Здравствуйте, у меня не получается написать программу, которая могла бы считывать с файла два числа и знак, например (3 + 4) и исходя из знака делать арифметические действия.
Что я только не перепробовал, но ничего не получалось…Помогите пожалуйста.
4 ноября 2009 в 20:00
var
f:text;
a,b:integer;
p1,p2,p3:char;
begin
assign(f,'in.txt');
reset(f);
read(f,a,p1,p2,p3,b);
assign(f,'out.txt');
rewrite(f);
if p2='+' then
begin
writeln(f,a+b);
end;
if p2='-' then
begin
writeln(f,a-b);
end;
if p2='*' then
begin
writeln(f,a*b);
end;
if p2='/' then
begin
writeln(f,a/b);
end;
close(f);
writeln('Htpekmnfn в файле OUT.тхт');
readln;
end.
Код по которому заработала программа.
4 ноября 2009 в 18:00
а как же защита от дурака?
4 ноября 2009 в 17:05
to Антон
ЗЫ кстати, если прочитать READ(x) где x – интегер, то при чтении из файла "56+66" в x будет положено 56, а остальная часть строки потеряется. Так работает чтение из текстового файла в паскале.
а если их пробелами разделить "56 + 66"то все нормально прочитается integer, char, integer
4 ноября 2009 в 15:01
Расул, это ты про типизированные файлы говоришь, а тут речь о текстовом
3 ноября 2009 в 20:01
Помню, я в программе на Дельфи (консольная была программа) из файла пытался число ввести. Все что получал – непонятное число 8… вместо 16. Оказалось: программа просто брала четыре байта и клала в переменную типа integer (тоже 4 байта). Я забыл про директиву {APP-CONSOLE}. Или что-то вроде этого.
3 ноября 2009 в 17:03
Ооууу…Все сработало!Спасибо большое!
3 ноября 2009 в 17:03
так не получится.
только парсить
читаем всю строку, ищем знак
ЗЫ кстати, если прочитать READ(x) где x – интегер, то при чтении из файла "56+66" в x будет положено 56, а остальная часть строки потеряется. Так работает чтение из текстового файла в паскале.
Например если во входном файле
45+45 5645/54 324
то чтение read(f, A,B,C) даст A=45, B=5645, C=324
3 ноября 2009 в 16:02
в таком случае тебе нужно подряд считывать read(Ч, С, С, С, Ч), где Ч – число, а С – символ. Про пробелы нельзя забывать – это тоже символы.
3 ноября 2009 в 15:01
Я просто пробовал считывать знак путем символьным CHAR, а числа как INTEGER
3 ноября 2009 в 13:02
#2 правильно сказал. ищи знак. потом от этого знака ищешь слева число и справа. ну а дальше case. Делай)
3 ноября 2009 в 13:01
Покажи, что именно ты перепробовал. Пока что ниоткуда не следует, что ты перепробовал хоть что-нибудь, кроме "спросить в группе Программисты".
3 ноября 2009 в 10:02
нету нету
а формат строки заранее определен?
3 ноября 2009 в 10:01
а на паскале нету ничего типа eval? не помню… давно уже в руки паскаль не брал…
3 ноября 2009 в 9:01
поправка – лучше пробел ищи
3 ноября 2009 в 8:00
Читаешь строку, с помощью pos находишь место знака в строке, разбиваешь её на три строки, ну а дальше case – определяешь знак и пишешь результат