![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Добрый день, так ли я считаю сумму элементов одномерного массива?
Это сообщение отредактировал(а) neweraser - 15.3.2008, 14:48 -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Похоже на правду. 2 некритичных замечания:
1) sum должна быть локальной переменной либо перед подсчетом суммы ее нужно обнулять; 2)
-------------------- |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Для лентяев есть
![]() |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
Спасибо, то что для лентяев мне больше подходит
![]() Добавлено через 6 минут и 25 секунд а есть такая же функция типа SumInt, которая возвращает количество элементов массива? -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Length
|
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
не, length тут мне несовсем подходит, она выдает длину массива (у меня array [0..100] и выдает 100), я имел в виду именно количество элементов, записанных в массив
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
neweraser,
Length(Arr)+1 ![]() -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
||||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
до этого
писал 100 элементов, а Length(mas)+1 пишет 101 элемент, мож это я так сильно туплю и все перепутал... не знаю -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Что должно было "написать"???
|
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
ну у меня массив [0..99], заполняется он не полностью, когда 15 элементов, когда 20 и т.д, вот именно на сколько он заполнен мне и надо узнать...
а может проще создать динамический массив? тогда по идее length будет верно выдавать... -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
||||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
что-то ничего не понимаю, делаю динамический - не заполняется...
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
lukas |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 771 Регистрация: 23.2.2007 Репутация: 3 Всего: 15 |
neweraser,
статистический массив уже заполнен мусором... поэтому нужно использовать динамический массив и использовать процедуру SetLength -------------------- http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
все равно как нужно не получается... в общем мне надо чтоб второй массив (одноместный) заполнялся из первого (двуместного) до тех пор, пока сумма элементов во втором не превысит определенного числа... два дня уже сижу и не могу додуматься как это сделать...
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
даже так пробовал
ошибки пишет Это сообщение отредактировал(а) neweraser - 15.3.2008, 18:41 -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
aktuba |
|
|||
![]() Смышленный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1915 Регистрация: 24.4.2006 Где: Планета Земля Репутация: 7 Всего: 38 |
Ууууууууу.... Как все запущено... Я, честно говоря, не совсем понял задачу, но пример переделал так:
-------------------- ![]() |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
пишет ошибку Access Violation из-за строчки
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
setlength(mas2, i + 1);
Добавлено через 1 минуту и 30 секунд И вообще если i будет больше 99 то выйдем за пределы второго массива. Короче придумай другое решение. Добавлено через 2 минуты и 21 секунду И последнее, перераспределять постоянно пямять (SetLength) не есть гуд |
|||
|
||||
Qu1nt |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 602 Регистрация: 13.1.2007 Репутация: 22 Всего: 50 |
Торможжу... (% Это сообщение отредактировал(а) Qu1nt - 15.3.2008, 20:34 |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
получается так, что в массив вводится только один элемент... не знаю, что тут можно придумать...
VICTAR, объясни пожалуйста, почему -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
THandle |
|
|||
![]() Хранитель Клуба ![]() Награды: 1 Профиль Группа: Админ Сообщений: 3639 Регистрация: 31.7.2007 Где: Moscow, Dubai Репутация: 50 Всего: 372 |
||||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
тогда не знаю, может здесь можно обойтись без массива, а добавлять куда-нибудь в строки типа stringlist или listbox? ну там, по идее, тоже нужно выделять память, как вы думаете тут можно что-нибудь еще сделать?
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Это долгая и не рациональная процедура. Память нужно выделять по возможности с запасом, как например делается в TList (Capacity). Объясни подробней задачу, что ты хочешь получить. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
у меня есть массив с данными о размерах файлов, предназначенных для записи на диск, но размер файлов может быть больше, чем размер диска (их может быть на 1, 2, 3 и т.д. дисков). тут я придумал, что можно сделать так, чтобы размеры файлов из первого массива записывались во второй массив до тех пор, пока их сумма будет меньше размера диска, потом файлы записываются на диск и их данные удаляются из обоих массивов, далее цикл продолжается до тех пор, пока в первом массиве ничего не останется. надеюсь, вы меня поняли -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Вот что-нибудь в этом роде
|
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
VICTAR, трудно так сразу разобраться с кодом, тут много изменений надо внести, если у меня исходный массив двухместный и типа string (в нем размеры и пути к файлам)?
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Если массив из string, то не получится.
Может стоит пересмотреть логику программы? (Если конечно это возможно) ЗЫ не двухместный, а двухмерный =) |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
думаю, можно программу чуть переделать, тогда пути к файлам буду прописывать где-нибудь в листбоксе, а потом сверять с массивом
постоянно путаюсь ![]() -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
||||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
можно сделать комментарии к этому коду? А то чтот никак не могу разобраться, особенно в первый раз встречаю move и inc
![]()
Это сообщение отредактировал(а) neweraser - 16.3.2008, 15:17 -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Это сообщение отредактировал(а) VICTAR - 16.3.2008, 15:36 |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
ага, спасибо, а зачем там SizeOf? И еще, хочу проверить, так ли заполняются массивы, выписывая их в listbox
пишет ошибку Access Violation (Ошибка выделения памяти, мож ошибаюсь, не знаю). до этого со статическими массивами получалось -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Move копирует кол-во байт, я специально выделил БАЙТ.
Массив состоит из Integer. Т.е. Размер всего массива будет кол-во элементов * размер каждого элемента (4 байта). AV возникает из-за того что перебираешь один массив(lSource) а читаешь другой(lDest). Заметь, длины у них разные. ЗЫ Access Violation - это когда читаешь/пишешь туда куда низя =) |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
мда... тупанул я, поторопился ![]() -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
neweraser |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
ничего не понимаю... у меня, оказывается, исходный массив еще и не так заполняется:
вот функция
когда вывожу массив в листбокс выводит вроде все вроде правильно, но 1-й элемент = 0 -------------------- Кто ищет, тот всегда найдет. |
||||
|
|||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Ничего не понял.
1) listbox2.Items.Capacity замени на listbox2.Items.Count 2) for i := 0 to High(lSource) and listbox2.Items.Count do как это? 3) во втором примере i у тебя локальная переменная, изначально имеющая неопределенное значение, а ты через нее обращаешься в элементу массива lSource, тут должно быть стабильное AV. Короче разберись для начала в своем коде. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
получается только так, если делать с каждым по отдельности выдает ошибку, насчет i я действительно тупанул, в прочем, у меня не редко так... записал новую переменную t в глобальные, приравниваю ее к нулю перед тем как обратиться к массиву в функции, а в самой функции еще прописал Inc(t) Это сообщение отредактировал(а) neweraser - 16.3.2008, 23:09 -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
и последний вопрос, если можно.
Можно ли остановить этот цикл в процедуре в определенном месте (т.е. где идет запись на диск) до тех пор, пока, например "пользователь" не нажмет на кнопку еще раз? и чем отличаются counts и capacity? -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Вызвать модальную форму? Count - Кол-во занятых элементов массива Сapacity - Кол-во элементов массива |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
думаю, да, так даже лучше и проще будет, форму создам, как то уже делал модальные формы, только где ее вызвать и как? например
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Смотря что ты хочешь сделать.
Если хочешь выйти из цикла, то break. Если продолжить цикл, то просто WaitForm.ShowModal. |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
VICTAR, я наверно надоел тебе уже
![]() -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
Не сложно, если понимаешь что делаешь.
Мне трудно сообразить что за алгоритм ты придумал =) |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
не знаю, как правильно сравнить
как-то так пытаюсь начать, выдает ошибки -------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
VICTAR |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1108 Регистрация: 6.10.2006 Репутация: 10 Всего: 80 |
listbox3.Items[x]
Это сообщение отредактировал(а) VICTAR - 17.3.2008, 23:39 |
|||
|
||||
neweraser |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 598 Регистрация: 17.2.2008 Репутация: нет Всего: 6 |
вот что получилось, и это, естественно, неправильно...
-------------------- Кто ищет, тот всегда найдет. |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
В offtopic
Нет, народ, все когда-то ламерами были, но когда я увидел тему "Сумма элементов массива, посчитать сумму элементов" в которой уже 4 стр. я накинулся на нее, как на хитрозакрученный детектив. Х) Смеяться не буду, т. к. сам порой дико туплю и глупости спрашиваю. 2 neweraser: Если тебе надо в школе\инсте сделать лабу и забыть про Delphi раз и навсегда, лучше просто приведи точно задание и попроси сделать. Одногрупник отличник сделает его за баллон пива. Если надо понять, то есть книги и великая кнопка, без которой программы не пишутся, называется F1. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |