Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

голова кругом   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
9-1094706205
Wasp
2004-09-09 09:03
2005.01.16
Как сделать след от объекта


1-1104606072
Arnold
2005-01-01 22:01
2005.01.16
Почему необрабатывается VK_LEFT, RIGHT, UP,DOWN


14-1103982756
OneFragLeft
2004-12-25 16:52
2005.01.16
Войти на другой комп


14-1104237136
Чеширский_Кот
2004-12-28 15:32
2005.01.16
Присоветуйте хорошую утилиту, плиз...


14-1103778461
AZ
2004-12-23 08:07
2005.01.16
Руководитель предприятия