Предмет: Информатика,
автор: vitolegoman
Ребят,пожалуйста, помогите решить задачи в среде PASCAL:
1) Написать простенький калькулятор через ввод строки, который на входе получает строку вида "число1 знак операции число2" (например, "2 + 5" или "3 / 42"), а выводит значение этого выражения.
Числа - любые целые неотрицательные, знаки - +. -. *, /
2) Написать программу, которая на входе получает строку под кодовым названием "загрязненное число" (вида "4km-549_ffb)5)6") состоящую из символов, а на выходе выводит удвоенное число из изначальной строки (а именно, 454956*2 = 909912)
Ответы
Автор ответа:
0
PascalABC.NET Версия 3.0. сборка 1041
Приложения:
Автор ответа:
0
Я Вам могу только посоветовать читать входную строку и если там "не хватает" пробелов, их всталять принудительно, чтобы Ваш алгоритм не ломался.
Автор ответа:
0
Вы правы , ниоткуда . Я лиш посмотрел на пример и решил что должны быть пробелы.
Автор ответа:
0
Обычно делают наоборот: если входная строке в примере пробелов не содержит, возможность их появления на всякий случай предусматривают. А вот требовать обязательно пробелы указывать, причем, неясно где именно и в каком количестве - это неправильно.
Автор ответа:
0
я сейчас доделаю.
Автор ответа:
0
Да у Вас времени в достатке, можете не торопиться. Решение 2 часа доступно для правки.
Автор ответа:
0
// PascalABC.NET 3.0, сборка 1128
uses
System.Text.RegularExpressions;
begin
var s:=' - 32 / - 21 ';
s:=RegEx.Replace(s,'s','');
var a:=RegEx.Matches(s,'(-{0,1}d+)|[+-*/]');
var n:=a.Count;
var x,y:integer;
var c:char;
case n of
3:begin
x:=StrToInt(a[0].ToString); y:=StrToInt(a[2].ToString);
c:=a[1].ToString[1]
end;
2:begin
x:=StrToInt(a[0].ToString); var s1:=a[1].ToString;
c:=s1[1]; s1[1]:='0'; y:=StrToInt(s1)
end;
else
begin Writeln('Недопустимое выражение'); exit end
end;
WriteFormat('{0} {1} {2} = ',x,c,y);
case c of
'+':Writeln(x+y);
'-':Writeln(x-y);
'*':Writeln(x*y);
'/':Writeln(x/y)
end
end.
Тестовое решение:
-32 / -21 = 1.52380952380952
// PascalABC.NET 3.0, сборка 1128
begin
var s:='4km-549_ffb)5)6';
var t:=s.Where(x->x in ['0'..'9']).JoinIntoString('');
var n:int64;
if TryStrToInt64(t,n) then Writeln(2*n)
else Writeln('Не удалось выделить число')
end.
Тестовое решение:
909912
uses
System.Text.RegularExpressions;
begin
var s:=' - 32 / - 21 ';
s:=RegEx.Replace(s,'s','');
var a:=RegEx.Matches(s,'(-{0,1}d+)|[+-*/]');
var n:=a.Count;
var x,y:integer;
var c:char;
case n of
3:begin
x:=StrToInt(a[0].ToString); y:=StrToInt(a[2].ToString);
c:=a[1].ToString[1]
end;
2:begin
x:=StrToInt(a[0].ToString); var s1:=a[1].ToString;
c:=s1[1]; s1[1]:='0'; y:=StrToInt(s1)
end;
else
begin Writeln('Недопустимое выражение'); exit end
end;
WriteFormat('{0} {1} {2} = ',x,c,y);
case c of
'+':Writeln(x+y);
'-':Writeln(x-y);
'*':Writeln(x*y);
'/':Writeln(x/y)
end
end.
Тестовое решение:
-32 / -21 = 1.52380952380952
// PascalABC.NET 3.0, сборка 1128
begin
var s:='4km-549_ffb)5)6';
var t:=s.Where(x->x in ['0'..'9']).JoinIntoString('');
var n:int64;
if TryStrToInt64(t,n) then Writeln(2*n)
else Writeln('Не удалось выделить число')
end.
Тестовое решение:
909912
Приложения:
Автор ответа:
0
four.pas(2, ";" expected but "identifier S" found и four.pas(2,3) Error: Illegal expression
Автор ответа:
0
Не работает - значит версия не та. Проверьте для начала в ВЕБ-среде на официальном сайте: http://pascalabc.net/WDE/:
Автор ответа:
0
А Вы запускаете, наверно, в этой уродливой допотопной DOS-среде Free Pascal
Автор ответа:
0
нет,в джинни
Автор ответа:
0
Это то же самое по сути. В Geany используют Фри Паскаль. И глупо это делать пытаться, когда первой же строкой указано, что написано и отлажено в среде PascalABC.NET 3.0
Похожие вопросы
Предмет: Українська мова,
автор: Glebushka1209
Предмет: Қазақ тiлi,
автор: aubakirovaz96
Предмет: Физика,
автор: alkovsky75
Предмет: Информатика,
автор: Undertaker86