Главная страница
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.173 c
14-1103887030
pasha_golub
2004-12-24 14:17
2005.01.16
Manual ZeosDBO


14-1103997443
Хакер
2004-12-25 20:57
2005.01.16
НЛП - Вы накомы с наукой, позволяющей управлять своим сознанием?


11-1085626346
hammer
2004-05-27 06:52
2005.01.16
Как выключить, перезагрузить ПК прогой на kol


4-1101384391
OlegTrubin
2004-11-25 15:06
2005.01.16
MapViewOfFile - ошибка


1-1104403450
clickmaker
2004-12-30 13:44
2005.01.16
есть ли способ узнать номер колонки в листбоксе,