Помощь новичкам

Этот метод разбивает строку на символы

1 лайк

забавно, что это на выводе никак не отразилось. Вы бы не написали, дак и не заметил бы

Выведите через Write. Print при выводе последовательности символов не делает по умолчанию пробела между ними, у него разделитель при этом - пустая строка.

уже вижу исходник этого метода.

для чего такие ухищрения интересно… да и не написано нигде про это, как я понимаю

для совместимости с Делфи

2 сообщения было перемещено в эту тему: Болталка PascalABC.NET

Подождите ка, а в делфи есть .Print?

Нет. Но идеологически Print - это тот же Write. Вывод. Если нужны совсем уж детали - это к разработчикам, пусть Вам объяснят, почему исторически было принято такое решение. Для меня это просто факт: оно вот так работает. И так работало в РАВС всегда. В свое време мне было полушутя сказано, что если я не могу понять логику чего-то - значит это сделано в целях совместимости [с Delphi].

Уважаемые форумчане! Подскажите, пожалуйста, аналог функции eval() из Python

print(eval('(2+13)*4-28*(329/(23-17))'))
{$reference System.Data.dll}
## Print(System.Data.DataTable.Create.Compute('2+2*2',''))

Если нужно из нескольких мест обращаться, можно сократить немного:

{$reference System.Data.dll}
##
var obj := new System.Data.DataTable;
Println(obj.Create.Compute('2+2*2', ''));
Print(obj.Create.Compute('(2+13)*4-28*(329/(23-17))', ''))

Спасибо, но после такого дети выбирают Python.

Да ради бога, если для детей решающим аргументом в выборе языка является длина записи скрипта для вычисления значения выражения, вводимого с клавиатуры, пусть выбирают хоть Пайтон, хоть волшебную палочку Гарри Поттера.

1 лайк

Ничто не мешает написать простенькую функцию-обертку Eval(expr:string):string + сделать аналогичное расширение для типа string и добавить все это либо в стандартную библиотеку, либо в School.pcu и под ##. Тогда все будет по фэн-шую, даже лучше, чем в Питоне:

## ReadlnString('Введите выражение для расчета:').Eval.Print

Вот только это массово никому не нужно…

Предлагаю

## print((2+13)*4-28*(329/(23-17)))

и не морочить голову

Я полагаю, что идея была все-таки в написании программы для ручного интерактивного ввода детьми произвольного выражения и его расчете, как на продвинутом калькуляторе, а не просто вывод результата в IDE.

Да Верно, хотя в PascalABC.Net можно объединить ввод и вывод.

Эта специфическая задача просто решается учителем информатики - он создаёт простой модуль и в него помещает функцию eval - код был выше. Это - методическое сопровождение.

У Питона eval - глубже и не для того. И его eval возможен только в скриптовых языках.

Я бы сказал, что подобные eval возможны только в интерпретаторах, чтобы не привязываться к ныне весьма расплывчатому определению скриптового языка. Например, популярный некоторое время назад язык СУБД FoxPro (и Visual FoxPro) содержал команду вида &x, где x - символьная строка, содержащая любой корректный оператор языка, в том числе, вычисление и вывод произвольного выражения. Никакой компилятор не в состоянии построить более-менее эффективный код для подобной конструкции уже хотя бы потому, что для этого придется в код поместить фактически дубликат СУБД. Еще пример - оператор FORMAT в Fortran. В нем можно сослаться на любую строку, содержащую формат ввода, т.е. входные данные в состоянии сами определить, каким будет дальнейший формат ввода. И для реализации этого Фортран во время исполнения кода держит в оперативной памяти небольшой интерпретатор форматов.

Нужно ли подобное РАВС? На мой взгляд - однозначно нет.

Я согласен с этим мнением поддерживаю.