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

А теперь по русски, не проглатывая 70% своей мысли.

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

Даже если вы не знаете что такое return, если не можете догадаться что делать с полученным new string - поможет уже только морг.

Если я правильно понял машинный перевод, у разных пользователей результаты отличаются и у одних быстрее Array, у других StringBuilder, а у третьих разница непринципиальна. В статье на stackoverflow указано иначе ?

Советую Вам пользоваться следующими ресурсами для изучения английского, вместо чтения машинных переводов, которые могут изменять смысл изначально заложенный в статьи и иные материалы:

Зубрить слова и грамматику не требуется, при частом чтении материалов на английском языке новые слова постепенно будут запоминаться сами, просто обращайте внимание на проблемные для Вас места в лексике и грамматике.

1 лайк

Смотрите ещё на размер строк, это много на что влияет. Что вижу я - в той теме на StackOverflow слишком разорванные данные, некоторые тесты были для больших, некоторые для маленьких строк. А в некоторых вообще не сказали какой размер.

Ну, могу предположить что дело в первую очередь в версии .Net . Потому что раньше StringBuilder работал точно так же как List<char>, за исключением пары полюшек. А сейчас у него внутри вроде как связный список, в котором каждая следующая нода - содержит array of char, размером в 2 раза больше массива предыдущей ноды.

Вот только если указать размер буфера при создании StringBuilder - и раньше и сейчас создаётся всего 1 внутренний массив, сразу правильного размера. Поэтому если указывать размер - разницы скорости между Array.Reverse и StringBuilder практически не должно быть (единственное - StringBuilder сразу заполняется в правильном порядке, а в случае с массивом надо ещё вызывать сам Array.Reverse).

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

Если переводить весь сайт программно - большая часть смысла всё равно теряется, даже если использовать что то лучше гугл переводчика.

Перевод - лишний шаг, который можно избежать, если учиться мыслить на английском и понимать сразу на нём. Трудности - будут, но трудности не испытывает тот, кто ничему новому не учится.

Ого! Хотя суть передана верно: результаты по скорости могут отличатся в зависимости от версии Net, OС, конфигурации и выборки. Понятно.

Описка в заглавии очевидна: Function Rev(x:string):string; //не Lstring

А вот присвоить или преобразовать конечный результат как в примере не получается, так как любой из предложенных вариантов возвращает

Program19.pas(5) : Нельзя преобразовать тип array of char к string

Какой любой? Вы не выложили ничего что пытались, кроме тупого копирования C# кода.
По моему вы попробовали только тупо Result := arr (потому что ничего больше такую же ошикбу не даст) и решили “ну всё, я достаточно постарался, пусть остальное за меня делают”.

Array of char – это и правда не string. Можно вот так:

function Rev(x: string): string;
begin
  var arr := x.ToCharArray();
  &Array.Reverse(arr);
  result := arr.JoinIntoString;
end;

.JoinIntoString - метод последовательностей. Для массивов лучше использовать конструктор string, про который уже говорилось в этой теме:

Да, лучше, только зачем так раздражаться-то? Человек пишет в “Помощь новичкам”, здесь можно задавать самые разные вопросы, в том числе и “тупые”. Вы уже три экрана написали, и всё не по теме. Помогли бы человеку, да и закрыли вопрос. А если очень не хочется, то и промолчать можно… По-моему, так (с)

1 лайк

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

@Sun_Serega, если не хотите отвечать, или так бесит, что кто-то не знает того, чего знаете Вы, то отвечать в таком тоне спрашивающему не стоит, на мой взгляд, поскольку ответы в стиле

могут спровоцировать конфликт между Вами и тем, кто спросил интересующий его вопрос. Поверьте, не всем нравится, что его публично осуждают (или что хуже быть может - оскорбляют за то, что он чего-то не знает), более того, из-за этого может возникнуть защитная реакция у Вашего собеседника, что повлечёт за собой то, что сейчас называется “срач”. Лично мне понятны Ваши эмоции, но я не разделяю подход в общении, при котором негатив выливается на собеседника только из-за того, что собеседник чего-то не знает.

Кроме того, если человек (абстрактно) не хочет сам разбираться, то Вы его насильно не заставите.

1 лайк

Без Вашего кода (в общем случае), достаточно трудно сказать в чём проблема и указать на ошибку. Поэтому лучше всегда его прикладывать.

Решение:

function Reverse(self: string): string; extensionmethod;
begin
  var a := self.ToCharArray();
  &Array.Reverse(a);
  Result := new string(a);
end;

begin
  'ab'.Reverse().Print();
end.

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

Да никаких обид и ничего личного - индивидуум тоже занят и устал, да и детей своих, видимо, пока нет, но всё поправимо (“Папа, почему вода мокрая, рыбка плавает и бабочка летает, а солнце всё равно светит? Почему они все разные?”))

С другой стороны, вроде никто никого не силует ответить или подсказать хотя бы личку.

3 лайка
begin
  var x: Text;
  if x = nil then // Program1.pas(3) : Cannot convert nil-type to value type
end.

, хотя тип текстового файла описывается следующим образом:

type
  /// Тип текстового файла
  Text = class
  private 
    fi: FileInfo;
    sr: StreamReader;
    sw: StreamWriter;
  public 
// and so on

Правильно ли я понимаю, что Text - особый тип и такое поведение сделано, в частности, для совместимости с другими диалектами Pascal?

Правильно.

2 лайка

В текстовом файле слова в квадратных нужно поменять местами со словами в круглых скобках, например:

а 222 бв где жзи [йклди м] нгщ 123 (иклывь) 90 вавыва

преобразовать в

а 222 бв где жзи (иклывь) нгщ 123 [йклди м] 90 вавыва

Порядок посрочен (без разрывов) и фиксирован - сначала квадратные скобки.

Или же традиционно: найти первое вхождение Й="[", записать вхождение в переменную А до “]”, найти позицию Ц="(" и аналогично записать в переменную Б до “)”, а затем составить новую строку, вырезая и заменяя фрагменты.

Что мешает найти позиции целиком подстрок и обменять эти подстроки местами? Используйте шаблоны регулярных выражений, к примеру.

Помогаю делать школьное задания и заодно практикую память и навыки в PascalABC . NET, но регулярные выражение они пока не проходили, так что наверно решение в лоб и через тот же Replace.

Выбор Ваш, конечно, Школьники почти наверняка регулярку и не будут проходить, но с другой стороны, по-моему нет запрета на использования того, что “на уроке не объясняли”, если оно работает в этой же программной среде и не требует никаких дополнительных инсталляций.