Ребят,пожалуйста, помогите решить задачи в среде PASCAL: 1) Написать простенький...

0 голосов
125 просмотров

Ребят,пожалуйста, помогите решить задачи в среде PASCAL:
1) Написать простенький калькулятор через ввод строки, который на входе получает строку вида "число1 знак операции число2" (например, "2 + 5" или "3 / 42"), а выводит значение этого выражения.
Числа - любые целые неотрицательные, знаки - +. -. *, /
2) Написать программу, которая на входе получает строку под кодовым названием "загрязненное число" (вида "4km-549_ffb)5)6") состоящую из символов, а на выходе выводит удвоенное число из изначальной строки (а именно, 454956*2 = 909912)


Информатика (17 баллов) | 125 просмотров
0

По сути нужно только выделить два числа и знак

0

Может быть последнее, что я написал или и самое первое тоже?

0

Ну теперь поздно.... мой вариант вычисляет любые

0

Я снова уточнил,да они не отрицательные...

0

У Вас комментарии противоречат заданию. В задании написано, что числа неотрицательные, а в комментариях Вы написали, что они могут быть и отрицательными.

0

да,4

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

(142k баллов)
0

А вот это решение Ваших задач на Паскале. Если Вы его не понимаете, это вовсе не означает, что оно неверное. Запустите в указанной версии Паскаля - и увидите сами, что все работает.

0

не работает

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

а вот это вы что прислали?

0

Это то же самое по сути. В Geany используют Фри Паскаль. И глупо это делать пытаться, когда первой же строкой указано, что написано и отлажено в среде PascalABC.NET 3.0

0 голосов
(2.2k баллов)
0

Откуда это следует?

0

Почему они должны ОБЯЗАТЕЛЬНО БЫТЬ?

0

в примере есть пробелы я и себе их приделал

0

будет 0 т.к. расчитано что будут пробелы

0

введите просто 2*5

0

Да у Вас времени в достатке, можете не торопиться. Решение 2 часа доступно для правки.

0

Я Вам могу только посоветовать читать входную строку и если там "не хватает" пробелов, их всталять принудительно, чтобы Ваш алгоритм не ломался.

0

я сейчас доделаю.

0

Вы правы , ниоткуда . Я лиш посмотрел на пример и решил что должны быть пробелы.

0

Обычно делают наоборот: если входная строке в примере пробелов не содержит, возможность их появления на всякий случай предусматривают. А вот требовать обязательно пробелы указывать, причем, неясно где именно и в каком количестве - это неправильно.