Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2011, 20:39   #1
aleksandrbol
 
Регистрация: 30.11.2011
Сообщений: 5
Вопрос Pascal. Сортировка в стеке

Здравствуйте коллеги!

Помогите решить задание по Паскалю, скорей всего оно не очень сложное но я в тупике.

Вот само задание:
В текстовом файле F1 задан список фамилий (по одной на стpоке, не более 15 символов). Разpаботать пpоцедуpы:
1. P1 - фopмиpования стека с элементом типа string[15];
2. P2 - соpтиpовки стека S по алфавиту пpостым выбоpом, перемещая информацию;
3. P3 - вывода содеpжимого стека в порядке записи в него элементов (первый записанный в стек элемент должен выгружаться первым) с целью пpовеpки пpавильности pеализации пpоцедуp P1 и P2 .
С помощью этих пpоцедуp отсоpтиpовать исходный файл, записав содеpжимое отсоpтиpованного стека в текстовый файл F2.

спс.
aleksandrbol вне форума Ответить с цитированием
Старый 01.12.2011, 09:08   #2
aleksandrbol
 
Регистрация: 30.11.2011
Сообщений: 5
По умолчанию

не ужели это действительно трудная задачка??
aleksandrbol вне форума Ответить с цитированием
Старый 01.12.2011, 10:07   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, во-первых, задачка достаточно сложная (точнее объёмная). За 10-15 минут её не сделаешь (если нет готовой "болванки", которую можно подкорректировать).

во-вторых, непонятен Ваш подход. это что, типа "Вы мне решите, а я пойду сдам! СПС." ?!
Где Ваши наработки, задание стека, чтение в него текстового файла, процедура вывода элементов из стека?!

в-третьих, рекомендую воспользоваться поиском. Реализации стека на Паскале на форуме точно были (и не раз). Начать решение можно с изучения/адаптации чужого кода...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.12.2011, 23:20   #4
aleksandrbol
 
Регистрация: 30.11.2011
Сообщений: 5
По умолчанию

верные замечания...
aleksandrbol вне форума Ответить с цитированием
Старый 02.12.2011, 23:21   #5
aleksandrbol
 
Регистрация: 30.11.2011
Сообщений: 5
По умолчанию

У меня вот такой вот код ни черта не работает
Код:
Program za8;
type
    next=^zap;
    zap=record
    fio:string[15];
    sled:next;
    end;
var
    UKSTR:next;
	i: byte;
procedure p1(var ukstr:next; var i:byte);
var
ukzv:next;
begin
 new(ukzv);
 ukstr:=ukzv;
 ukzv^.sled:=nil; 
 i:=1;
 while not eof do
  begin
  new(ukzv);
  readln(ukzv^.fio);
  ukzv^.sled:=ukstr;
  ukstr:=ukzv;
  i:=i+1;
  end;
      
 writeln;     writeln('start');writeln;
while ukzv^.sled<>nil do
  begin
  writeln(ukzv^.fio);
  ukzv:=ukzv^.sled;
  end;
 writeln;
 writeln('na vyxod');
end;
procedure p2 (var ukstr:next; i:byte);
var
U,U2,U3:next;
j,k,kk:byte;
Begin
  U:=ukstr;
  for j:=1 to (i-1) do
 begin
  U:=ukstr;
  While U^.sled^.sled^.sled <> nil do
    Begin
      if (U^.fio > U^.sled^.fio) then
        Begin
        U2:=U^.sled; 
        U3:=U^.sled^.sled^.sled;
        U^.sled:=U^.sled^.sled;
        U^.sled^.sled:=U2;
       U^.sled^.sled^.sled:=U3 ;
              u:=U^.sled^.sled;
      end;
         u:=u^.sled;
   end;
 end;
end;
procedure p3 (var ukstr:next);
var
ukzv:next;
begin
 writeln;
 writeln;
 ukzv:=ukstr;
 while ukzv^.sled^.sled<>nil do
    begin
        writeln (ukzv^.fio);
		dispose(ukstr);  
		ukstr:=ukzv;
		ukzv:=ukzv^.sled;
    end;
end;
         Begin
        assign(input,'vhod3.inp');
        reset(input);
        assign(output,'res3.out');
        rewrite(output);
        p1(UKSTR,i);
       p2(UKSTR,i);
        p3(UKSTR);
            close (input);
            close (output);
        end.
aleksandrbol вне форума Ответить с цитированием
Старый 04.12.2011, 20:10   #6
aleksandrbol
 
Регистрация: 30.11.2011
Сообщений: 5
По умолчанию

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

Код:
Program za8;
type
    next=^zap;
    zap=record
    fio:string[15];
    sled:next;
    end;
var
    UKSTR:next;
	i: byte;
procedure p1(var ukstr:next; var i:byte);
var
ukzv:next;
begin
 new(ukzv);
 ukstr:=ukzv;
 ukzv^.sled:=nil; 
 i:=1;
 while not eof do
  begin
  new(ukzv);
  readln(ukzv^.fio);
  ukzv^.sled:=ukstr;
  ukstr:=ukzv;
  i:=i+1;
  end;

 writeln;     writeln('start');writeln;

 while ukzv^.sled<>nil do
  begin
  writeln(ukzv^.fio);
  ukzv:=ukzv^.sled;
  end;
 writeln;
 writeln('na vyxod');
end;

procedure p5(nach:next);
var
  tmp,rab:next;
  tmps:string[15];
begin
  GetMem(tmp,SizeOf(zap)); {выделяем память для рабочего "буфера" обмена}
  rab:=nach; {рабочая ссылка, становимся на вершину стека}
  while rab^.sled<>nil do {пока мы не дойдём до конца стека делать}
  begin
    tmp:=rab^.sled; {перейдём на следующий элемент}
    while tmp<>nil do {пока не конец стека делать}
    begin
      if tmp^.fio<rab^.fio then {проверяем следует ли менять элементы}
      begin
        tmps:=tmp^.fio; {стандартная замена в 3 операции}
        tmp^.fio:=rab^.fio;
        rab^.fio:=tmps
      end;
      tmp:=tmp^.sled {переход к следующему элементу}
    end;
    rab:=rab^.sled {переход к следующему элементу}
  end
end;



procedure p3 (var ukstr:next);
var
ukzv:next;
begin
 writeln;
 writeln;
 ukzv:=ukstr;
 while ukzv^.sled^.sled<>nil do
    begin
        writeln (ukzv^.fio);
{		dispose(ukstr);  }
		ukstr:=ukzv;
		ukzv:=ukzv^.sled;
    end;
{dispose(ukstr);    }
end;

{Процедура вывода стека}
procedure Print(stek1:next);
begin
  if stek1=nil then {проверка на пустоту стека}
  begin
    writeln('‘⥪ Їгбв. new_vyvod');
    exit;
  end;
  writeln('');
  while stek1^.sled<>nil do {пока указатель stek1 не станет указывать в пустоту}
  begin   {а это произойдёт как только он перейдёт по ссылке последнего элемента}

    Writeln(stek1^.fio, ' '); {выводить данне}
    stek1:=stek1^.sled  {и переносить указатель вглубь по стеку}
  end;
end;

         Begin

        assign(input,'vhod3.inp');
        reset(input);
        assign(output,'res3.out');
        rewrite(output);

        p1(UKSTR,i);
      p5(UKstr);

        Print (UKSTR);

            close (input);
            close (output);
        end.

Всем за ранее спс.
aleksandrbol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка(PASCAL) Cas01 Помощь студентам 3 27.02.2011 10:00
Проверка наличия указателей в стеке TStack ImmortalAlexSan Общие вопросы Delphi 13 27.07.2010 22:03
Массивы переменного размера в стеке Voyager Общие вопросы C/C++ 3 10.04.2008 11:33