Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Внизголова кругом Найти похожие ветки
← →
syte_ser78 © (2004-12-24 16:28) [0]Обьясните плиз.
Функция А с параметром Б вызывает самуже себя с параметром С
В функции А есть некая переменная Д
Какой срок жизни этой переменной?
При выходе из вызванной функции А в ееже цикл значение Д будет тоже что и до вызова функции А с параметром Б ?
← →
Суслик © (2004-12-24 16:30) [1]
> При выходе из вызванной функции А в ееже цикл значение Д
> будет тоже что и до вызова функции А с параметром Б ?
локальные переменные хранятся в стеке, при каждом новом вызове локальные переменные новые.
← →
vecna © (2004-12-24 16:30) [2]а то!
← →
TUser © (2004-12-24 16:30) [3]При каждом вызове функции локальные переменные инициализируются заново. При возврате из функции (пусть даже в саму себя) - все переменные восстанавляваютт свои прежние значения. Короче говоря, неважно, как функция вызывается - ее локальные переменные сохраняют свои значения в течении данного сеанса работы.
← →
syte_ser78 © (2004-12-24 16:31) [4]Спасибо!
← →
begin...end © (2004-12-24 16:32) [5]> syte_ser78 © (24.12.04 16:28)
> При выходе из вызванной функции А в ееже цикл значение Д
> будет тоже что и до вызова функции А с параметром Б ?
О каком Д может идти речь до вызова А с параметром Б? Может, не Б, а С?
← →
syte_ser78 © (2004-12-24 16:34) [6]
> О каком Д может идти речь до вызова А с параметром Б? Может,
> не Б, а С?
С - описАлся.
← →
begin...end © (2004-12-24 16:35) [7]> [6] syte_ser78 © (24.12.04 16:34)
Тогда ответ - да. В общем, уже написали... :)
← →
syte_ser78 © (2004-12-24 16:40) [8]тогда вопрос
А(путь)
до тех пор пока есть файлы
начать
найти файл
колво_файлов+1;
если то что нашли - директория то
А(путь+имя директории)
кончить
Как правильно подсчитать колво всех найденных файлов не храня гджето промежуточное значения каждого входа в функцию ?
← →
begin...end © (2004-12-24 16:42) [9]> [8] syte_ser78 © (24.12.04 16:40)
Передавать количество найденных файлов в функцию как var-параметр.
← →
syte_ser78 © (2004-12-24 16:50) [10]минутку.
Если функция Х раз вызовет сама себя у меня будет Х значений переменной Д доступ к которым я смогу получить только вернувшись в нужный уровень вхождения функции?
← →
begin...end © (2004-12-24 17:03) [11]> [10] syte_ser78 © (24.12.04 16:50)
Причём здесь уже Д? Я же сказал - через var-параметр. еред первым вызовом функции обнуляем его, потом в функции после нахождения очередного файла увеличиваем его на единицу. Если нашли каталог, то этот же параметр передаём в следующую функцию - при этом он не обнуляется, и его можно увеличивать в рекурсивно вызванной функции.
Но вот я сейчас написал другой вариант:function FilesCount(BeginDir: String): Cardinal;
var
FindData: TWin32FindData;
FindHandle: THandle;
begin
Result := 0;
FindHandle := FindFirstFile(PChar(BeginDir + "\*.*"), FindData);
if FindHandle = INVALID_HANDLE_VALUE then Exit;
repeat
if FindData.dwFileAttributes and faDirectory = 0 then
Inc(Result)
else if (String(FindData.cFileName) <> ".") and (String(FindData.cFileName) <> "..") then
Result := Result + FilesCount(BeginDir + "\" + FindData.cFileName);
until not FindNextFile(FindHandle, FindData);
Windows.FindClose(FindHandle)
end.
Не проверял, но вроде должно работать.
← →
syte_ser78 © (2004-12-24 17:07) [12]тю блин. Понял.
Спасибо. Просто начал отлаживать свой вариант и почувствовал что мозги закипают.
В принципе после else резулт можно не трогать.
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c