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


#2240

Можно код вставить в форматированном виде? Желательно, также привести полный код, чтобы можно было самому его запустить и посмотреть.


#2241

Project33.rar (10,0 КБ)


#2242

string нельзя ни явно, ни неявно преобразовать в char. Можно, например, попробовать взять первый символ строки s[1]


#2243

А, ещё можно System.Convert использовать

System.Convert.ToChar(' ').Print;

Только он выдаст исключение, если длина строки будет больше единицы.


#2244
  1. @ahtam, первый символ строки при наличии директивы {$string_nullbased+} будет 0-евым её элементом. Если же использована {$string_nullbased-}, то эффект противоположный, и индексация начинается с 1-цы. По умолчанию (без явного указания данных директив) используется индексация с 1-цы. Дополнительную информацию о директивах компилятора можно посмотреть в: Справка > Справочник по языку > Директивы компилятора.

  2. Если ничего не вводить в поле, то Ваша программа упадёт с ошибкой: Unit1.pas(30) : Ошибка времени выполнения: Индекс находился вне границ массива. Требуется проверка на выход индекса за границы строки:

procedure Form1.button1_Click(sender: Object; e: EventArgs);
begin
  var  c:=textbox1.Text;
  if c.Length < 1 then
    exit;
  
  label1.Text := c[1];
end;

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

Ссылки:


#2245

Очень интересная информация.


#2246

Приятно было узнать, что она оказалась интересной кому-то.


#2247

Только что понял что форум выдал мне права переноса даже админских тем в другие разделы (раньше только созданные не_админами разрешало). И вот помнится эту тему хотели перенести в раздел паскаля, но @Admin не нашёл как…

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


#2248

Вау… очередной админ…))))))


#2250

Думаю, надо.


#2251

Все указанные вами способ я уже до этого экспериментировал, использовал другие функции COPY, SUBSTR, … Но результата для меня то, чтобы можно было затем использовать другие функции, например ord. label1.Text := ord(c[1]) или другая форма вҷдаёт тоже самую ошибку.


#2252

Потому что типы надо преобразовывать! Copy и s.Substring возвращают строку, а не символ. А вот Convert.ToChar или обращение к символу через индексатор строки как раз вернёт char. Обратно присвоить строке символ вроде можно без преобразований, там есть неявное приведение Но если так нужно, можно использовать c.ToString.


#2253

Во первых, спасибо Всем, кто оказал помощь и написал комментарий. Во вторых, сделал его чуть по другому и получилось. Project33.rar (11,2 КБ)


#2254

Ну и зачем вы преобразовываете всё в массив, когда вам надо только взять 1 символ? Если делать так - то просто textbox1.Text[1].


#2255

Спасибо Сергей за консультации.


#2256

Часто переключаюсь между языками программирования и довольно часто попадается задачка по переворачиванию числа Х без строк/символов на подобии

if x=0...
if x<0 then begin минус:=true; x:=abs(x) end;
...
  var y := 0;

  while x > 0 do
  begin
    y := (y * 10) + (x mod 10);
    x := x div 10;
  end;
// if минус then y:=-y;

где нужно учитывать как переполнение, так и запятую.

Но вот как можно упростить

var i := pi.ToString.Reverse;

чтобы возвращало не перечисление через foreach var v in i do write(v), а просто строку ? Предопределение i:string:=… естественно выбивает ошибку, а i:=string(…) молча очищает консоль, игнорируя следующую строку println(i,i.Length)


#2257

.JoinIntoString(’’) или определить метод Reverse для строки


#2258

Это звучит странно, как будто вы недотестировали. Приведите код, потому что должно выводить ошибку а не консоль очищать.

А вот что касается реализации:

У метода с Array.Reverse, похоже, лучший баланс простоты и скорости.


#2259

Собственно, текст в те две строки между begin-end.

Результаты отличаются: особенности конкретной версии Net, архитектуры и ОС ? В PascalABC Net также ?

Как привести хотя бы в функцию:

Function Rev(x:string)Lstring;
begin
 var arr:= x.ToCharArray();
 &Array.Reverse(arr);
 // return new string(arr); // <-- ошибка
end;

#2260

Насколько и как отличаются?

Данный код не пройдёт компиляцию, поскольку перед типом возвращаемого значения функции, метода или свойства требуется ставить :.

Для возврата значения из функции или метода (без применения var параметров) в PascalABC.NET можно использовать один из способов:

  1. Result := returnValue;
  2. FunctionName := returnValue;, однако, данный вариант признан устаревшим.