Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 10

Обработка Стека. Развернуть (дно-вверху, вершина-внизу)

29.09.2013, 16:13. Показов 5186. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите доработать программу, нужно вывести стек "задом на перед"
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
uses crt;
type
    pitem = ^item;
    item = record
        data: integer;
        prev: pitem
    end;
 
var
    top, p: pitem;
    i,v,m,n, k: integer;
 
procedure add(x:integer);
begin
    new(p);
    p^.data := x;
    p^.prev := top;
    top := p
end;
procedure del;
begin
    if top<>nil then begin
        p := top^.prev;
        dispose(top);
        top := p
    end;
end;
procedure wstack;
begin
    writeln('Содержимое стека: ');
    p := top;
    while p <> nil do begin
        write(p^.data, ' ');
        p := p^.prev;
    end;
    writeln;
end;
begin
    top := nil;
    writeln('Введите кол-во элементов в стеке');
    readln(m);
    for k := 1 to m do
        add(k);
    wstack;
    writeln('Введите количество элементов необходимых для добавления в стек');
    readln(v);
    writeln('Введите добавляемое в стек значение: ');
    for i:=1 to v do
    begin
    readln(n);
    add(n);
    end;
    wstack;
    writeln('Количество элементов стека для удаления? ');
    readln(n);
    for k:=1 to n do
        del;
    wstack;
readln
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.09.2013, 16:13
Ответы с готовыми решениями:

Создать стек из случайных целых чисел. Развернуть стек, т.е. «дно» стека сделать вершиной, а вершину – «дном»
Создать стек из случайных целых чисел. Развернуть стек, т.е. «дно» стека сделать вершиной, а вершину – «дном».

Вверху и внизу экрана черные полосы
Я задавал уже этот вопрос.. мне отвечали, но все нетак, у меня вверху и внизу экрана когда смотриш видео от игр и фильмы черные полоски. И...

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

4
 Аватар для newyork7776
351 / 344 / 279
Регистрация: 21.05.2013
Сообщений: 1,312
29.09.2013, 17:57
У меня вопрос как ты хочеш перевернуть стек эсли когда с него достать 1 цыфру(только верх) и показать + достать 2 цыфру и показать то 1 цыфра будет потеряна
мой вариант решение задание создать масив на N количество елементов в стеку,запихнуть в него все елементи стека(пока ты будеш переписивать елементи стека в масив,то стек в результате будет пустим),записуеш елементи в обратном порядке(число брать с масива for i:=n downto 1 do).
Стек (англ. stack — стопка) — структура данных, представляющая из себя список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).Если вышет,то потерялся =)
Понятен алгоритм или нет?
1
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
29.09.2013, 20:00
Это задача на переливание между стеками. Добавили элементы в первый стек - там они в одном порядке. Потом перелили элементы из первого стека - во второй. Во втором стеке элементы окажутся в обратном порядке.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
program Project1;
 
type
  {Основные данные элемента стека.}
  TData = Integer;
  {Указатель на элемент стека.}
  TPElem = ^TElem;
  {Элемент стека.}
  TElem = record
    Data : TData;   {Основные данные.}
    PNext : TPElem; {Указатель на следующий элемент стека.}
  end;
  {Для стека отдельный тип можно не создавать. Стек будет представлен в виде
  указателя на элемент, расположенный на вершине стека. Поэтому, переменная
  представляющая стек, будет иметь тип TPElem.}
 
{Добавление элемента на вершину стека.}
procedure Push(var aPSt : TPElem; const aData : TData);
var
  PElem : TPElem;
begin
  New(PElem);
  PElem^.Data := aData;
  PElem^.PNext := aPSt;
  aPSt := PElem;
end;
 
{Изъятие элемента с вершины стека.
Если стек не пуст, то с вершины стека изымается элемент и его значение
(основные данные) возвращается через параметр aData. В этом случае, функция
возвращает значение True. Если стек пуст, то операция отменяется, а функция
возвращает значение False.}
function Pop(var aPSt : TPElem; var aData : TData) : Boolean;
var
  PElem : TPElem;
begin
  Result := False;
  if aPSt = nil then Exit;
 
  PElem := aPSt;
  aPSt := PElem^.PNext;
  aData := PElem^.Data;
  Dispose(PElem);
  Result := True;
end;
 
{Распечатка элементов стека в направлении вершина - дно.}
procedure StWriteln(aPSt : TPElem);
var
  i : Integer;
begin
  if aPSt = nil then
    Writeln('Стек пуст.')
  else begin
    i := 0;
    while aPSt <> nil do begin
      Inc(i);
      if i > 1 then Write(', ');
      Write(aPSt^.Data);
      aPSt := aPSt^.PNext;
    end;
    Writeln;
  end;
end;
 
{Освобождение памяти, выделенной для стека (очистка стека).}
procedure StFree(var aPSt : TPElem);
var
  Data : TData;
begin
  while Pop(aPSt, Data) do;
end;
 
var
  PSt1, PSt2 : TPElem;
  Data : TData;
  i, Code : Integer;
  S : String;
begin
  {Начальная инициализация стеков.}
  PSt1 := nil;
  PSt2 := nil;
 
  repeat
    {Добавление элементов в первый стек.}
    Writeln('Добавление элементов в первый стек.');
    Writeln('Чтобы прекратить ввод, оставьте пустую строку и нажмите Enter.');
    i := 0; {Счётчик введённых элементов.}
    repeat
      Write('Элемент ', i + 1, ': ');
      Readln(S);
      if S <> '' then begin
        Val(S, Data, Code);
        if Code = 0 then begin
          Push(PSt1, Data); {Добавление элемента в стек.}
          Inc(i);
        end else
          Writeln('Неверный ввод. Должно быть задано целое число. Повторите.');
      end;
    until S = '';
 
    {Распечатка стеков.}
    Writeln('Начальное состояние стеков.');
    Writeln('Первый стек (вершина - дно):');
    StWriteln(PSt1);
    Writeln('Второй стек (вершина - дно):');
    StWriteln(PSt2);
 
    {Переливаем элементы из первого стека во второй стек.}
    while Pop(PSt1, Data) do Push(PSt2, Data);
 
    {Распечатка стеков.}
    Writeln('Состояние стеков после переливания:');
    Writeln('Первый стек (вершина - дно):');
    StWriteln(PSt1);
    Writeln('Второй стек (вершина - дно):');
    StWriteln(PSt2);
 
    {Освобождение памяти, выделенной для стеков.}
    StFree(PSt1);
    StFree(PSt2);
    Writeln('Память, выделенная для стеков, освобождена.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 10
29.09.2013, 21:47  [ТС]
чёт намудренно сильно .. просто вывести стек зеркально... например 10,9,8...,1 и 1,2,3...10. В обычном массиве можно было бы просто for i:=n downto 1 do и оператор вывода, а как записать это с динамическими переменными и указателями я хз ..
0
 Аватар для Mawrat
13116 / 5897 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
29.09.2013, 23:10
Цитата Сообщение от AAtrox Посмотреть сообщение
чёт намудренно сильно .. просто вывести стек зеркально...
Смена порядка следования элементов - это одна строка:
Pascal
1
2
    {Переливаем элементы из первого стека во второй стек.}
    while Pop(PSt1, Data) do Push(PSt2, Data);
А дальше уже распечатка:
Delphi
1
2
3
4
5
6
    {Распечатка стеков.}
    Writeln('Состояние стеков после переливания:');
    Writeln('Первый стек (вершина - дно):');
    StWriteln(PSt1);
    Writeln('Второй стек (вершина - дно):');
    StWriteln(PSt2);
Можно не 2 стека сразу распечатывать, а по одному. Вначале распечатываем первый стек. А потом, после переливания - распечатываем второй стек. Во второй распечатке элементы будут следовать в обратном порядке.

Добавлено через 3 минуты
В общем, если из одного стека перелить элементы в другой стек - то во втором стеке элементы расположатся в обратном порядке.
Если надо элементы в одном и том же стеке расположить в обратном порядке - здесь придётся очередь использовать. Сначала записываем элементы в стек - это один порядок следования элементов. Потом - переливаем элементы из стека в очередь. А затем, из очереди опять переливаем элементы в стек. И тогда в стеке элементы окажутся в обратном порядке.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.09.2013, 23:10
Помогаю со студенческими работами здесь

Чёрные поля вверху и внизу youtube видео
Кто знает как убрать чёрные поля вверху и внизу youtube видео? Резиновыми их сделал таким решением: &lt;div...

вершина стека
когда запускаешь отладку в вершине стека 7D4E6E1A это что значит?

Нужно создать диалоговое окошко, вверху ListBox, внизу дерево
Добрый день/утро/вечер.... Сразу скажу - в Visual C++ вообще и в MFC я полный чайник, так что сильно не бейте. Имеется следующая...

QwtPlot. Как создать график, чтобы ось Х была вверху, а не внизу?
Собственно, как?

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru