Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12

Как можно оптимизировать?

28.11.2013, 11:25. Показов 2893. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста. Имеется форма на которой находятся 20 edit'ов, как можно через цикл записать из них данные в массив.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.11.2013, 11:25
Ответы с готовыми решениями:

Можно ли оптимизировать, что бы работало побыстрее?
Сделал софтинку для конвертации дбфки в текстовый файл в определенном формате. В дбф файле может быть примерно 20-30к строк. Для...

Как можно еще оптимизировать код?
Как еще можно оптимизировать данный код? Если вкратце, то он выводит значение АВ, если ключ = вводу пользотвателя. #include...

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

35
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 15:21  [ТС]
Студворк — интернет-сервис помощи студентам
я просто в мемо вывел сам массив. а если выводить так
Цитата Сообщение от nick42 Посмотреть сообщение
for (int i=0;i<Form1->ComponentCount;i++) Memo1->Lines->Add(Components[i]->Name);
то выводится
Label1
Label2
Label3
Label4
Label5
Label6
Label7
Label8
Label9
Label10
Label11
Label12
Label13
Label14
Label15
Label16
Label17
Label18
Label19
Label20
Label21
Label22
Label23
Edit1
Edit2
Edit3
Edit4
Edit5
Edit6
Edit7
Edit8
Edit9
Edit10
Edit11
Button1

Добавлено через 8 минут
а с какого элемента счет в массиве начинается с 1 или 0?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 15:23
Цитата Сообщение от nick42 Посмотреть сообщение
эдит1 будет во второй ячейке, эдит2 - в третьей и т.д.?
Не понимаю. %)
Я использую обращение к элементам формы для их динамического распределения. То как я реализовал распределение даёт однозначное расположение эдитов. Соответсвенно вводимые в эдиты значения далее в программе распределяются по целевым переменным без перетасовок.




Цитата Сообщение от postal2024 Посмотреть сообщение
а с какого элемента счет в массиве начинается с 1 или 0?
С нуля разумеется.
Вы же сказали у Вас на форме
Цитата Сообщение от postal2024 Посмотреть сообщение
находятся 20 edit'ов
А оказывается у Вас их Всего 11.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 15:24
Ну, правильно. В начале списка идут лэйблы, шейпы... - "не контролы"; но индексы под себя они забирают. Схема Kulgar'а еще будет работать, если располагать эдиты последовательно (не удаляя). Но если их порядок нарушится, то выйдет ерунда. Поэтому я и "вклинился"..., не привыкайте писать нелогично, даже если в отдельные моменты это и работает как надо.
2
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 15:28  [ТС]
ну эдиты еще будут добавляться)
а если выводить массив в мемо с 1 а не 0 то тогда все получается нормально)

Добавлено через 3 минуты
можете подсказать что почитать хорошего по программированию, сейчас почитываю Архангельского... но до конца понимания еще очень далеко. Вот и решил программку с делфи портировать, а заодно и оптимизировать, чтобы как то к синтаксису привыкнуть
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 15:32
Цитата Сообщение от Kulgar Посмотреть сообщение
То как я реализовал распределение даёт однозначное расположение эдитов
Предположите, что пришлось один (первый) эдит удалить. В дизайн-режиме. А затем в процессе доработки вы вновь добавили эдит; Edit1. В списке компилятора он будет последним, а по вашему методу в цикле ищется эдит1, вслед за ним эдит2 и т.д. В результате работы вашего цикла будет обнаружен единственный компонент Edit1.
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 15:43
Цитата Сообщение от nick42 Посмотреть сообщение
не привыкайте писать нелогично, даже если в отдельные моменты это и работает как надо.
Не могу понять что нелогичного в моём коде.
Приведённый мною модуль дописан. Изменяться не будет. Да даже если будет, изменится только количество итераций 1го цикла.
А вероятность, "случайного" изменения имени эдита мне представляется весьма сомнительной.


postal2024, если у Вас нет и не будет эдитов с именами
Цитата Сообщение от nick42 Посмотреть сообщение
VasjaPupkin#3
, то Вам подойдёт предложенный мною вариант в сообщении #15.

Цитата Сообщение от nick42 Посмотреть сообщение
Предположите, что пришлось один (первый) эдит удалить. В дизайн-режиме. А затем в процессе доработки вы вновь добавили эдит; Edit1. В списке компилятора он будет последним, а по вашему методу в цикле ищется эдит1, вслед за ним эдит2 и т.д. В результате работы вашего цикла будет обнаружен единственный компонент Edit1.
А циклов то два. Первый идёт по конечному количеству эдитов на форме. Второй по количеству компонентов.
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 15:47  [ТС]
а можно поинтересоваться как вообще работает сторока

ish[Components[i]->Name.SubString(5,2).ToIntDef(0)]
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 15:52
Цитата Сообщение от postal2024 Посмотреть сообщение
а можно поинтересоваться как вообще работает сторока

ish[Components[i]->Name.SubString(5,2).ToIntDef(0)]
F1 HELP
int __fastcall ToIntDef(int defaultValue) const;

Description

ToIntDef converts the given string to an integer value and returns the integer. If the string doesn't contain a valid value, the value given by defaultValue is returned.

Для i-го компонента поле Name содержимое обрезать с 5го символа по 6й. Попытаться преобразовать в целое число: не получится - вернуть 0.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 15:53
Цитата Сообщение от postal2024 Посмотреть сообщение
как вообще работает сторока
ish[Components[i]->Name.SubString(5,2).ToIntDef(0)]
делается попытка преобразовать часть строки имени i-го компонента формы, а именно 2 символа (или сколько получится, но до 2), начиная с 5-го - в целое. В случае успеха возвращается это число; если не получилось - возвращается число в скобках ToIntDef - 0.
1
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
28.11.2013, 15:53
Лучший ответ Сообщение было отмечено как решение

Решение

Сейчас я все разрулю.
nick42 говорит правильно, он говорит как надо делать. Kulgar, вы же настаиваете, что у вас сделано по другому и работает, следовательно ничего менять не нужно. И вы тоже правы. Когда вы напоретесь на ошибку подобного рода, озарение правильности подхода наступит молниеносно.

P.S. Чисто персональное мнение, Kulgar, знаете в чем ошибка в вашем рассуждении? В том, что поля ввода в нормальном, не учебном приложении не могут называться Edit1, Edit2...
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 16:05
Цитата Сообщение от Kulgar Посмотреть сообщение
А циклов то два.
Два, да вложены они наоборот. Вот если бы по каждому компоненту крутился цикл поиска эдита с инкрементом текущего индекса - тогда да.

Добавлено через 8 минут
П.С. Хотя, тут я не прав. Отвлекли от темы (черти на работе)...
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 16:05
Цитата Сообщение от SatanaXIII Посмотреть сообщение
P.S. Чисто персональное мнение, Kulgar, знаете в чем ошибка в вашем рассуждении? В том, что поля ввода в нормальном, не учебном приложении не могут называться Edit1, Edit2...
Вот вообще ничего против не имею. Полностью согласен. В моём конкретном не учебном приложении все эдиты однотипны. Так что даже с учётом адекватного переименоdания звались бы они Paramert1, Parametr2...

Цитата Сообщение от nick42 Посмотреть сообщение
Два, да вложены они наоборот. Вот если бы по каждому компоненту крутился цикл поиска эдита с инкрементом текущего индекса - тогда да.
Да нет же.
Я ищу Edit1 и не важно какой у него там индекс в компонентах. Мне именно 1й эдит нужно поставить на определённое место на форме. Нашёл. Поставил. Ищу 2й. И т.д.


Я защищаю своё решение, осозновая его локальность. В рамках локальности другой код не нужен. Будет необходимость в другом приложении обращаться к компонентам, испльзую другой способ.
0
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 16:05  [ТС]
а почему при этом методе
C++
1
2
3
4
 for (int i=0;i<Form1->ComponentCount;i++)
      if (Components[i]->ClassNameIs("TEdit"))
        ish[Components[i]->Name.SubString(5,2).ToIntDef(0)] =
          StrToInt(((TEdit*)Components[i])->Text);
в нулевой элемент записывается какойто мусор
а при этом все нормально
C++
1
2
3
4
5
6
for (int i=0,j=0;i<Form1->ComponentCount;i++)
      if (Components[i]->ClassNameIs("TEdit"))
      {
        ish[j] = StrToInt(((TEdit*)Components[i])->Text);
        j++;
      }
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.11.2013, 16:10
Цитата Сообщение от postal2024 Посмотреть сообщение
в нулевой элемент записывается какой-то мусор
Сюда, скорее всего, ничего не записывается, если у вас нет компонента Edit0. Просто массив не инициализирован, и в нулевой ячейке - мусор из памяти компа.
1
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
28.11.2013, 16:11
postal2024, я же Вам объяснил:
Цитата Сообщение от Kulgar Посмотреть сообщение
...если у Вас нет и не будет эдитов с именами
Цитата Сообщение от nick42 Посмотреть сообщение
VasjaPupkin#3
...
По скольку у Вас все эдиты называются Edit#, то каждый раз функция ToIntDef(0) возращает целочисленное значение номера эдита. И для ish[0] не вызывается присвоение. Как следствие нет инициализации - в переменной мусор.
1
0 / 0 / 0
Регистрация: 14.02.2013
Сообщений: 12
28.11.2013, 16:17  [ТС]
ага, все понял) спасибо всем)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.11.2013, 16:17

Как можно оптимизировать CSS
Собственно так случилось что человек который занимался версткой оказался недоступен. И верстать пришлось мне. Но CSS я знаю посредственно. ...

Ну и как тогда можно оптимизировать
Что бы вы посоветовали оптимизировать в http://HeroesV.net.ru ?

Как можно оптимизировать запрос?
Подскажите пожалуйста, можно ли как то объединить эти три запроса в один ? SELECT brand, count(*) as num FROM food where type =...

Как можно оптимизировать код?
Здравствуйте! Столкнулся с проблемой. VBA стал ругаться на сильно длинный код. Надо его оптимизировать, а как сделать не знаю....

Как можно оптимизировать код?
#include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;vector&gt; using namespace std; int main() { int n, temp; cin&gt;&gt;n; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru