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

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

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

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


Гость






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


Гуру
*****

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

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


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

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

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

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


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


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

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

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


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



--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 27.11.2006 19:26
Сообщение #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
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 27.11.2006 21:21
Сообщение #45


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

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

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


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


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


Гость






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

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


Гуру
*****

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

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


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

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


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


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

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

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


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


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


Гость






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


Гуру
*****

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

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


А я? 10.gif


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


Гость






А ты - по ссылке, которую я давал раньше, там все написано smile.gif
Ничего к сказанному там я добавить не могу...
 К началу страницы 
+ Ответить 
Bokul
сообщение 29.11.2006 1:56
Сообщение #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 - 29.11.2006 1:56


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


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


Гость






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

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


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


Гуру
*****

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

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


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


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


Гость






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


Гуру
*****

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

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


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


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


Гость






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

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

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

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


Гуру
*****

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

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


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

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

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

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

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


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


Гость






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

Цитата
я вижу три способа:
Если можно - решения для всех трех - в студию smile.gif
 К началу страницы 
+ Ответить 
Bokul
сообщение 1.12.2006 9:42
Сообщение #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

 



- Текстовая версия 18.07.2025 17:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"