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

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

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

 
 Ответить  Открыть новую тему 
> Изменить тип, работа с модулями
Clon
сообщение 30.05.2006 14:44
Сообщение #1


Новичок
*

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

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


Вот написал прогу сортировки Хоора с модулем. Вот только она работает с типом real, но почему-то не хочет признавать перечислимый тип.
Основная прога
program sorting;
uses def24;
var c : char;
    s : stack;
    t : telem;
   
procedure Concat(var s1	: stack;s2:stack);
var s3:stack;
begin
   init(s3);
   while not empty(s2) do begin
      put(s3,top(s2));get(s2);
   end;
   while not empty(s3) do begin
      put(s1,top(s3));
      get(s3)
   end;
end; { Concat }

procedure QuickSort(var s : stack);
var s1,s2 : stack;V,k:telem;
begin
   if not empty(s) then begin
      init(s1);init(s2);
      V:=top(s);get(s);
      while not empty(s) do begin
	 k:=top(s);
	 if k.key< V.key then put(s1,k)
	 else put(s2,k);
	 get(s);
      end;
     QuickSort(s1);
     QuickSort(s2);
      put(s1,V);
      Concat(s1,s2);
      s:=s1;
   end;
end; { QuickSort }
   
Begin
   init(s);
   repeat
    writeln('1=Init 2=Empty 3=Get 4=Top 5=Put 6=Print 7=Kolvo 8=Sort 9=Exit');
      readln(c); case c of
	
	'1' : init(s); 
	
	'2' : writeln(empty(s));
	
	'3' : if not empty(s) then get(s)
	        else writeln('Stack is empty!');
	   
        '4' : if not empty(s) then begin
	           t:=top(s);
	           writeln('Key: ',t.key:1,'. Data: ',t.data,'.');
	      end
	        else writeln('Stack is empty!');
		
        '5' : begin
	        writeln('Input key:'); readln(t.key);
	        writeln('Input data:'); readln(t.data);
	        put(s,t);
	      end;

	'6' : if not empty(s) then print(s)
	        else writeln('Stack is empty!');

	'7' : writeln('Number of elements: ',kolvo(s):1);

	'8' :  if empty(s) then writeln('Stack is empty!')
               else if kolvo(s)>1 then QuickSort(s);
      end;  
   until c='9';
end.


Модуль
unit def24;
interface
const l = 30;
type colors = (red,yellow,green,black);
   type
   telem = record
              key  : integer;
	      data : colors ;
           end;	   
   stack = record m : array[1..l] of telem;
               hill : integer
	   end;
procedure init(var s:stack);
function empty(var s:stack):boolean;
function top(var s:stack):telem;
procedure get(var s:stack);
procedure print(var s:stack);
function kolvo(var s:stack):integer;
procedure put(var s:stack; t:telem);

implementation

procedure init(var s:stack);
begin
   s.hill:=0
end;

function empty(var s:stack):boolean;
begin
   empty:=(s.hill=0)
end;

function top(var s:stack):telem;
begin
   top:=s.m[s.hill]
end;

procedure get(var s:stack);
begin
   s.hill:=s.hill-1;
end;

procedure print(var s:stack);
var i:integer;
begin
   for i:=s.hill downto 1 do
      writeln('Key: ',s.m[i].key:2,'. Data: ',s.m[i].data,'.')
end;

function kolvo(var s:stack):integer;
begin
   kolvo:=s.hill
end;

procedure put(var s:stack; t:telem);
begin
   if s.hill<l then begin s.hill:=s.hill+1; s.m[s.hill]:=t end
   else writeln('Stack is full!')
end; { put }

end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.05.2006 15:46
Сообщение #2


Гость






Цитата
почему-то не хочет признавать перечислимый тип
Ну, начнем с того, что здесь:
procedure print(var s:stack);
var i:integer;
begin
   for i:=s.hill downto 1 do
      writeln('Key: ',s.m[ i ].key:2,'. Data: ',s.m[ i ].data,'.') { <--- }
end;
у тебя происходит попытка распечатать перечислимый тип, а этого делать компилятор тебе не позволит: операции ввода/вывода определены только для встроенных типов ...
 К началу страницы 
+ Ответить 
Clon
сообщение 30.05.2006 22:00
Сообщение #3


Новичок
*

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

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


И что теперь делать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.05.2006 22:23
Сообщение #4


Гость






Цитата(Clon @ 30.05.2006 22:00)
И что теперь делать?

Вот так программа хотя бы компилируется (правильность работы не проверял, но никаких причин, чтоб она НЕ работала - не вижу...):


Прикрепленные файлы
Прикрепленный файл  def24.pas ( 1.32 килобайт ) Кол-во скачиваний: 170
Прикрепленный файл  sorting.pas ( 1.85 килобайт ) Кол-во скачиваний: 150
 К началу страницы 
+ Ответить 
Clon
сообщение 31.05.2006 10:03
Сообщение #5


Новичок
*

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

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


У тебя она точно компилится? У меня она почему-то выдает
Цитата
Invalid function result type

вот здесь
function top(var s:stack):telem;

Это может зависеть от версии Паскаля? Я пишу на Турбо паскале версии 7

Сообщение отредактировано: volvo - 3.11.2006 20:48
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.05.2006 10:21
Сообщение #6


Гость






Цитата
Это может зависеть от версии Паскаля?
Угу... Может. Я компилировал FPC, там функция может вернуть ЛЮБОЙ результат... Сейчас гляну, что в TP происходит...

P.S. Вот так и в TP компилируется:


Прикрепленные файлы
Прикрепленный файл  DEF24.PAS ( 1.34 килобайт ) Кол-во скачиваний: 157
Прикрепленный файл  SORTING.PAS ( 1.85 килобайт ) Кол-во скачиваний: 151
 К началу страницы 
+ Ответить 
Clon
сообщение 31.05.2006 19:56
Сообщение #7


Новичок
*

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

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


Да, спасибо,теперь компилится
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 

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