IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

6 страниц V < 1 2 3 4 5 > »   
Closed Topic Открыть новую тему 
> Задачи на знание ООП, (только для Турбо-Паскаля 7.0)
сообщение
Сообщение #41


Гость






Угу... Молодец... smile.gif А что произойдет с локальной копией, когда закончится выполнение процедуры, ты мне можешь рассказать? smile.gif Даже не так... Давай начнем с такого вопроса: куда копируется переменная, переданная "по значению"? rolleyes.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #42


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Угу... Молодец...

smile.gif
Цитата
Давай начнем с такого вопроса: куда копируется переменная, переданная "по значению"?

Не знаю... unsure.gif
Добавил: уже знаю, благодаря той ссылке, - в стек.

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #43


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


Передавать как константу?
procedure count_each(const p:PT);



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #44


Гость






Нет, ребята (и девушки тоже smile.gif ) - так не пойдет... Чего вы по одной строке спрашиваете? Я тоже могу сказать, что менять надо одну их этих строк, и что? Помогло это вам? Нисколько... Мне тоже вот этот момент
Цитата
Передавать как константу?
ничего не сказал... Где объяснение, что изменится в таком случае? Что будте происходить, чего происходить не будет... Полную программу в студию smile.gif Которая не дает утечек... Только проверяться она будет на моих тестах smile.gif Вот эти части:

var
(***** Начиная отсюда *****)
obj_int: ^Tint;
obj_float: ^Tfloat;
(***** Заканчивая здесь *****)

any_arr: TArr;

begin
any_arr.init;

(***** Начиная отсюда *****)
obj_int := new(PTint);
obj_int^.Create;
obj_int^.value := 3;
any_arr.set_index(1, obj_int);
obj_float := new(PTfloat);
obj_float^.create;
obj_float^.value := 3.5;
any_arr.set_index(2, obj_float);
(***** Заканчивая здесь *****)

any_arr.count_each(new(PTfloat));

(* Здесь будет добавлен некоторый код !!! *)
end.
я изменю... Так, как позволяет синтаксис и описания объектов... А потом сравню размер свободной памяти ДО начала выполнения программы с размером ПОСЛЕ окончания работы, договорились? Естественно, программа должна реализовывать и основные функции: печать любого из элементов кортежа, проверку количества элементов того или иного типа...

smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #45


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


запрет на пользование компилятором в силе?
если нет - где можно размер свободной памяти проверить?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #46


Гость






Нет, теперь на пользование компилятором нет запрета... Сейчас закрыт только код, который будет добавляться мной для теста smile.gif

Но компилироваться программа должна в TP (и менять настройки среды для того, чтобы она заработала, пользователь не должен... Если нужно изменить режимы компиляции, или еще какие вещи - пользуемся директивами компилятора) smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #47


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Выходит мы получаем два указателя на один объект - один локальный (копия) и второй - который мы не знаем. Мне интересно, что делает Паскаль с этим неизвестным?

Так что же компилятор делает потом с неизвестным указателем?


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #48


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


...и как посмотреть, сколько памяти свободно?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #49


Гость






writeln(memavail);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #50


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


А я? 10.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #51


Гость






А ты - по ссылке, которую я давал раньше, там все написано smile.gif
Ничего к сказанному там я добавить не могу...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #52


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Так?

type
PT = ^T;
T = object
constructor create;
destructor done;{добавляем деструктор}
end;




destructor T.done;{который ничего не делает}
begin
end;




procedure TArr.count_each(const p: PT);
var i, count: integer;
begin
count := 0;
for i := 1 to maxSize do
if (arr[i]<>nil) and (typeof(arr[i]^) = typeof(p^))
then inc(count);
writeln('count = ', count);
dispose(p,done);{------------свобождаем память}
end;



var
obj_int: PTint;
obj_float:PTfloat;
any_arr: TArr;
mem:longint;
begin
clrscr;
mem:=memavail;{замеряем память до начала свалки}
any_arr.init;
obj_int := new(PTint,create);
obj_int^.value := 3;
any_arr.set_index(1, obj_int);
obj_float := new(PTfloat,create);
obj_float^.value := 3.5;
any_arr.set_index(2, obj_float);
any_arr.count_each(new(PTfloat,create));
dispose(obj_float,done);{чистим за собой}
dispose(obj_int,done);{и это тоже}
writeln('Difference : ',mem-memavail);{вроде так как и было...}
readln;
end.


Полный код:

Сообщение отредактировано: Bokul -


Прикрепленные файлы
Прикрепленный файл  Objects.PAS ( 1.75 килобайт ) Кол-во скачиваний: 202


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #53


Гость






Цитата
Так?
no1.gif

Добавление 3-х строк в те участки, в которые я показал - результат в аттаче... Не все утечки убраны... blum.gif


Эскизы прикрепленных изображений
Прикрепленное изображение
 К началу страницы 
+ Ответить 
сообщение
Сообщение #54


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Что ж там за строки blink.gif У меня максимальная утечка была 16 байт, у тебя -320 mega_chok.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #55


Гость






Bokul, в моем скриншоте содержится скрытая подсказка smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #56


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Все, сдаюсь... Не вижу, где убегают драгоценные байты... Идей нету, может только еще один деструктор для TArr сделать, но это уже гадание... так что прошу показать правильное решение. smile.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #57


Гость






Цитата
Не вижу, где убегают драгоценные байты...
Хорошо... Подсказываю. Вот тут:

procedure TArr.set_index(i: integer; p: PT);
begin if i <= maxSize then arr[i] := p; end;

Что будет, например, если я запишу 4 раза подряд в первую ячейку заново инициализированный объект? Я имею в виду, что будет с тем объектом, адрес которого там был записан РАНЬШЕ? Он останется висеть в памяти, а указатель на него ты потеряешь smile.gif

Теперь понятно, что надо поправить?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #58


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Аааа... Мелькала такая мысль, ну только я ее сразу почему-то отбросил.
Цитата
Теперь понятно, что надо поправить?

Ага yes2.gif Но я вижу три способа:
1 удалять с кучи прежний объект
2 не допускать этого
3 самому назначать индексы
Цитата
Я имею в виду, что будет с тем объектом, адрес которого там был записан РАНЬШЕ?

но смотря как передавать... если инициализировать объект прямо в методе
any_arr.set_index(1,new(PTfloat,create));

то действительно потеряем, если же через известный указатель, то не вижу никаких проблем.

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #59


Гость






Цитата
если же через известный указатель, то не вижу никаких проблем.
Да? Зато я вижу: допустим, тебе надо создать кортеж из 500 элементов... Будешь создавать 500 переменных-указателей? Тогда зачем, извини, тебе кортеж... Работать-то будешь все равно через одну (максимум - две, потому что есть 2 разных типа реальных объектов, которые ты можешь создать) переменные. И все равно потеряешь старое значение при инициализации нового экземпляра...

Цитата
я вижу три способа:
Если можно - решения для всех трех - в студию smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #60


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

Репутация: -  11  +


Цитата
Если можно - решения для всех трех - в студию

Сделаем, но только через часиков 10 - сейчас спать, а завтра в школу не идти smile.gif

P.S. Я конечно понимаю, что достал уже, но я так и не понял, что Паскаль делает с этим неизвестным указателем wub.gif


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

6 страниц V < 1 2 3 4 5 > » 
Closed Topic Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 2:37
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name