Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-1104403165
Руслана
2004-12-30 13:39
2005.01.16
Подскажите где можно посмотреть хороший пример применения


1-1104141336
SbtON
2004-12-27 12:55
2005.01.16
Идентификатор потока.


9-1096003204
Rem
2004-09-24 09:20
2005.01.16
Перпендикуляр


14-1103875670
ALexA
2004-12-24 11:07
2005.01.16
окраска DbMemo1


1-1104298826
Laymer
2004-12-29 08:40
2005.01.16
Перехват запуска программ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский