Size: a a a

2020 September 11

СП

Сергей Пятыгин... in Delphi & Lazarus
Renat Suleymanov
j индекс же у тебя внутри метода, а FX массив-поле в приватной секции. Вопрос непонятен
В какой ситуации j может быть больше FX?
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
Добрый день! Прошу помочь.
Имеется свойство массив Х с методом сет вида
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 SetLength(FX, Length(FX) + 1);
 FX[j] := AValue;
end;
Есть функция Culc с результатом типа array of extended;
Как правильно скопировать массив из Culc в Х?
Копирование типа Х := Copy(Culc(), 0, Length(Culc)); выдает ошибку компилятора-неверное число параметров для сет.
Копирование типа
for j := 0 to N do
 X[j] := Culc()[j]; ошибки не выдает, но мне кажется что это грязно.
А тот метод правильней было бы сделать примерно так
procedure TSomeClass.SetX(j: integer; AValue: extended);
begin
 if (j>Length(FX)) or (j<0) then
   Exit; // Exit можно заменить на генерацию ошибки, либо на увеличение массива. Зависит от ситуации
 FX[j] := AValue;
end;
источник

Y

YuS in Delphi & Lazarus
  SomeClass := TSomeClass.Create;
 SomeClass.AddValue(10); // добавится один элемент массива и в него ляжет 10 (обращение к FX[0])
 SomeClass.AddValue(5); // добавится еще один элемент массива и в него ляжет 5 (обращение к  FX[1])
 Writeln(x[0]); // собственно напечатает тебе самы первый элемент массива
 Writeln(x[5]); // а вот здесь будет ошибка - так как у тебя всего 2 элемента а ты обращаешся к 6-ому (обращение к FX[5])
 SomeClass.Free;
источник

A

Anthony in Delphi & Lazarus
Пропустил, насчёт copy разбирались? Тем нужно было указать system.copy(...
Сергей
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
О Лист видел, но понимания его применения пока нет. Что лучше применить листа TFPList или TList ( сточки зрения НЕОБХОДИМОСТИ обработки ошибок)?
Лучше изучить: полезные классы. Также TCollection. Также есть удобный дженерик класс TFPGList, когда ты сможешь получить сразу готовый список с подставленным типом элемента списка. Я думаю в твоем случае не так важно TFPList или TList...
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Ок, всем спс.
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Очень много информации сразу, надо ее обдумать
источник

Y

YuS in Delphi & Lazarus
Просто задачку себе придумай с массивами/списками. Думаю понимание лучше придет.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Сергей Пятыгин
В какой ситуации j может быть больше FX?
Непонятен вопрос. j - это Integer, FX - это массив. Имелось ввиду в каких ситуациях j может оказать больше размерности массива FX? Не знаю что значит может в твоем вопрос. Может ли к массиву быть обращение с любым индексом к массиву свойства, это зависит от твоей программы, в общем случае может. Или можно ли обратится к элементу массива-переменной за пределом размерности? Нет, будет сгенерирована ошибка. В случае класса, такое обращение обрабатывается программистом и либо генерируешь ошибку, либо игноририруешь, либо другая обработка
источник

СП

Сергей Пятыгин... in Delphi & Lazarus
Renat Suleymanov
Непонятен вопрос. j - это Integer, FX - это массив. Имелось ввиду в каких ситуациях j может оказать больше размерности массива FX? Не знаю что значит может в твоем вопрос. Может ли к массиву быть обращение с любым индексом к массиву свойства, это зависит от твоей программы, в общем случае может. Или можно ли обратится к элементу массива-переменной за пределом размерности? Нет, будет сгенерирована ошибка. В случае класса, такое обращение обрабатывается программистом и либо генерируешь ошибку, либо игноририруешь, либо другая обработка
По коду YuS понял, спс!
источник

АВ

Александр В... in Delphi & Lazarus
Renat Suleymanov
Перечислением/циклом присвоить не грязно. Негрязно возможно было бы добавить функцию метод, типа Assign, в котором будет происходить копирование элементов массива. А лучше отказаться от массива и использовать либо Collection, либо наследники TObjectList. Там куча готовых методов и свойств у этих объектов-списков.... Массиву на самом деле мало места в объектном паскале. Лучше использовать списки
Ну не правда же. Массивы это вообще основы и база, на котором почти все контейнеры работают. А уж в задачах кодирования, декодирования, чтения приборов без них вообще никуда. Да и вообще, если человек с алгоритмами на массивах не может - тогда какие ему списки и коллекции.
источник

Y

YuS in Delphi & Lazarus
Кстати задачка :). разделить число X на число N, чтоб соответственно получилось N целочисленных  чисел с округлением, чтоб в сумме давало число X. Например математически 350/4=87,5.  Но на выходе надо получить массив из 4-х целых чисел 87, 87, 88, 88 (сумма этих чисел =350). Т.е. итоговые числа должны быть максимально приближены к друг другу. Например 87, 87, 87, 89 - не правильно.
источник

RS

Renat Suleymanov in Delphi & Lazarus
Александр В
Ну не правда же. Массивы это вообще основы и база, на котором почти все контейнеры работают. А уж в задачах кодирования, декодирования, чтения приборов без них вообще никуда. Да и вообще, если человек с алгоритмами на массивах не может - тогда какие ему списки и коллекции.
Ну основа в том смысле, что внутри это массивы. Я про то, что в объектном программировании массивы как минимум надо прятать под капот или стараться использовать готовые списки
источник

АР

Александр Сергеевич ... in Delphi & Lazarus
YuS
Кстати задачка :). разделить число X на число N, чтоб соответственно получилось N целочисленных  чисел с округлением, чтоб в сумме давало число X. Например математически 350/4=87,5.  Но на выходе надо получить массив из 4-х целых чисел 87, 87, 88, 88 (сумма этих чисел =350). Т.е. итоговые числа должны быть максимально приближены к друг другу. Например 87, 87, 87, 89 - не правильно.
нуу, делим число на 4, нечетный элемент будет trunc(87), четный trunc + 1, затем сортируем по возрастанию. ну это в первом приближении)
источник

Y

YuS in Delphi & Lazarus
а 19/7 :)
источник

Y

YuS in Delphi & Lazarus
Не не получается
источник

Y

YuS in Delphi & Lazarus
19/7 = (2, 2, 3, 3, 3, 3, 3)
источник

АР

Александр Сергеевич ... in Delphi & Lazarus
YuS
19/7 = (2, 2, 3, 3, 3, 3, 3)
чет много троек, 2+3+2+3+2+3+2=17
источник

Y

YuS in Delphi & Lazarus
Ну так должно то 19 получиться
источник

АР

Александр Сергеевич ... in Delphi & Lazarus
а стоп
источник