Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача на стек 
:(
    Опции темы
Aleche
Дата 15.10.2005, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 4.11.2004
Где: Воронеж

Репутация: нет
Всего: 5



Привет всем! smile Задача следущая: Имеется 2 стека,нужно найти минимум в одном и максимум в другом и поменять их местами без использования дополнительных стр-р данных. Проблема в моем алгоритме:оччень большой,все в циклах! Вот приер алгоритма:1) при условии ,что стек не пуст,нахожу кол-во элементов внем,записывая в другой ,и максимум,запоминаю номер максимального
2)если не пуст другой,перекладываю элементы в перввый,таким образом нахожу общее кол-во элементов,следовательно,кол-во во втором,перекладываю элементы в другой и ищу минимум,запоминаю номер минимального
3)перекладываю элементы в другой до минимального,его запоминаю,перекладываю остальные,далее обратно перекладываю элементы до минимального,его запоминаю,кладу максимальный,перекладываю вместе с максимальным
4)перекладываювсе в другой
5)перекладываю из него же до места максимального,вставляю его,перекладываю оставшиеся элементы
Хех!Надеюсь понятно smile Может есть какой-нибудь менее сложный способ??? Изложите ,пожалуйста!

Что касается уже заданных стеков, можно их задавть rendom?(стек целых чисел)Если да, то получается размеры сттеков известны? Совсем себя запутала! smile
PM MAIL ICQ   Вверх
Alex
Дата 15.10.2005, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: нет
Всего: 162



Aleche, код приведи


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Pakshin A. S.
Дата 15.10.2005, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: нет
Всего: 61



Иришка, лови вариантик... Впринцепе тут нуно только подработать под стандарты Стэков (типа проверки и стандартные процедуры и функции), но логика ясна и циклов поменьше... smile smile smile

Код

type
 TStack = ^TItem;
 TItem = record
  item: integer;
  Next : TStack;
 end;

function Min(S: TStack):TStack;
var
 n: TStack;
 buf: TStack;
begin
 buf:=S;
 n:=S^.Next;
 while n <> nil do
  begin
   if buf^.item > n^.item
    then
     buf:=n;
   n:=n^.next;
  end;
 Result:=buf;
end;

function Max(S: TStack):TStack;
var
 n: TStack;
 buf: TStack;
begin
 buf:=S;
 n:=S^.Next;
 while n <> nil do
  begin
   if buf^.item < n^.item
    then
     buf:=n;
   n:=n^.next;
  end;
 Result:=buf;
end;

procedure Change(var S1, S2: TStack);
var
 buf:integer;
begin
 buf:=S1^.item;
 S1^.item:=S2^.item;
 S2^.item:=buf;
end;

<...>

var
 S1, S2: TStack;
 b1, b2: TStack;
begin
 S1:=nil; S2:=nil;
 CreateStack(S1, S2);
 b1:=Min(S1);
 b2:=Max(S2);
 Change(b1, b2);
<...>

Добавлено @ 22:05
Ты же программистка... Доведи до конца... smile smile smile
Добавлено @ 22:07
Кому интересно, я тестил на Delphi вот так:
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button1: TButton;
    ListBox3: TListBox;
    ListBox4: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
 TStack = ^TItem;
 TItem = record
  item: integer;
  Next : TStack;
 end;

function Min(S: TStack):TStack;
var
 n: TStack;
 buf: TStack;
begin
 buf:=S;
 n:=S^.Next;
 while n <> nil do
  begin
   if buf^.item > n^.item
    then
     buf:=n;
   n:=n^.next;
  end;
 Result:=buf;
end;

function Max(S: TStack):TStack;
var
 n: TStack;
 buf: TStack;
begin
 buf:=S;
 n:=S^.Next;
 while n <> nil do
  begin
   if buf^.item < n^.item
    then
     buf:=n;
   n:=n^.next;
  end;
 Result:=buf;
end;

procedure Change(var S1, S2: TStack);
var
 buf:integer;
begin
 buf:=S1^.item;
 S1^.item:=S2^.item;
 S2^.item:=buf;
end;

procedure ShowStack(S1, S2: TStack);
begin
 with Form1 do
  begin
   while S1 <> nil do
    begin
     ListBox3.Items.Add(IntToStr(S1^.item));
     S1:=S1^.next;
    end;
   while S2 <> nil do
    begin
     ListBox4.Items.Add(IntToStr(S2^.item));
     S2:=S2^.next;
    end;
  end;
end;

procedure CreateStack(var S1, S2: TStack);
var
 n: TStack;
 i:integer;
begin
 with Form1 do
  begin
   for i:=0 to ListBox1.Items.Count-1 do
    begin
     New(n);
     n^.item:=StrToInt(ListBox1.Items[i]);
     n^.next:=S1;
     S1:=n;
    end;
   for i:=0 to ListBox2.Items.Count-1 do
    begin
     New(n);
     n^.item:=StrToInt(ListBox2.Items[i]);
     n^.next:=S2;
     S2:=n;
    end;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
 S1, S2: TStack;
 b1, b2: TStack;
begin
 S1:=nil; S2:=nil;
 CreateStack(S1, S2);
 b2:=Max(S2);
  b1:=Min(S1);
 Change(b1, b2);
 ShowStack(S1, S2);
end;

end.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0497 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.