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

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

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

 
 Ответить  Открыть новую тему 
> ООП. Наследование, а также сортировка
AlonZo
сообщение 14.12.2007 10:11
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


Проблема в том, что программа зависает на сортировке(без работает). Помогите исправить.
А также интересует правильность использования виртуальных методов.
Сама задача: построить объект с полями string, real, integer. Создать массив на основе объекта и отсортировать по полю real. Обязательно использовать виртуальные методы и наследование.
Сам код:
uses crt;
const
	 n=7;
type
	avto=object
			   x:real;
			   y:integer;
			   s:string;
			   constructor init(ss:string; a:real; b:integer);
			   procedure create(ss:string;a:real;b:integer);
			   procedure out;virtual;
			   destructor done;virtual;
	end;
	n_avto=object(avto)
					   constructor init(ss:string; a:real; b:integer);
					   procedure out;virtual;
					   destructor done;virtual;
	end;
	m=array[1..n] of n_avto;
	constructor avto.init(ss:string; a:real; b:integer);
			  begin
				   s:=ss;
				   x:=a;
				   y:=b;
			  end;
	procedure avto.create(ss:string;a:real;b:integer);
			  begin
				   s:=ss;
				   x:=a;
				   y:=b;
			  end;
	procedure avto.out;
			  begin
				   writeln(s:15,x:8:1,y:7);
			  end;
	destructor avto.done;
			   begin
					s:='';
					x:=0;
					y:=0;
			   end;
==============================================================
	constructor n_avto.init(ss:string; a:real; b:integer);
				begin
					 s:=ss;
					 x:=a;
					 y:=b;
				end;
	procedure n_avto.out;
			  begin
				   writeln(s:15,x:8:1,y:7);
			  end;
	destructor n_avto.done;
			   begin
					s:='';
					x:=0;
					y:=0;
			   end;
=======================================================
	procedure sort(var mm:m);
			  var
				 b,i:byte;
				 q:n_avto;
			  begin
				   b:=1;
				   while b=1 do
						 begin
							  b:=0;
							  for i:=1 to n-1 do
							  if mm[i].x>mm[i+1].x
							  then begin
								   q:=mm[i];
								   mm[i]:=mm[i+1];
								   mm[i+1]:=q;
								   b:=1;
							  end;
						 end;
			  end;
==================================================================
var
   mas:m;
   i:byte;
   x1:real;
   y1:integer;
   s1:string;
   f:text;
begin
	 clrscr;
	 assign(f,'input.txt');
	 reset(f);
	 for i:=1 to n do
	 mas[i].init('',0,0);
	 for i:=1 to n do
		 begin
			  readln(f,s1);
			  readln(f,x1,y1);
			  mas[i].create(s1,x1,y1);
		 end;
	 writeln('Ishodnue dannue:');
	 for i:=1 to n do
		 mas[i].out;
	 sort(mas);
	 writeln;
	 writeln('Posle sortirovki:');
	 for i:=1 to n do
		 mas[i].out;
	 for i:=1 to n do
		 mas[i].done;
	 close(f);
	 readkey;
end.


Сообщение отредактировано: volvo - 27.11.2009 16:10
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2007 10:58
Сообщение #2


Гость






У тебя объекты не инициализируются (Create - это НЕ конструктор), а ты пытаешься обращаться к виртуальным методам (out)... Что хотел получить кроме зависания?
 К началу страницы 
+ Ответить 
klem4
сообщение 14.12.2007 11:16
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


код пока не запускал, но volvo, он ведь вызывает конструктор перед вызовом create

for i:=1 to n do
     mas[i].init('',0,0);




--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 14.12.2007 11:36
Сообщение #4


Гость






    procedure sort(var mm:m);
              var
                 b,i:byte;
                 q:n_avto; { <--- Это где инициализируется? }

 К началу страницы 
+ Ответить 
AlonZo
сообщение 14.12.2007 18:57
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 20
Пол: Мужской

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


Сделал в сортировке иницилизацию, теперь работает, спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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