0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 16
1

Из одного стека, хранящего символы, создать два новых стека

23.01.2018, 18:50. Показов 1942. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Из одного стека, хранящего символы, создать два новых стека: один с латинскими буквами, удвоив каждую из них, другой со всеми остальными символами, не удаляя исходные стеки (создавать копии элементов).
Хелпаните
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.01.2018, 18:50
Ответы с готовыми решениями:

Из одного стека, хранящего символы, создать два новых стека
Из одного стека, хранящего символы, создать два новых стека: один с латинскими буквами, удвоив...

Создать два новых стека, переместив в первый из них
Дан указатель P1 на вершину непустого стека. Создать два новых стека, переместив в первый из них...

Создать два новых стека, переместив в первый из них все элементы исходного стека с четными значениями
Дан указатель P1 на вершину непустого стека. Создать два новых стека, переместив в первый из них...

Создать два новых стека, с четными и нечетными элементами первоначального стека
Дано указатель P1 на вершину непустого стека. Создать два новых стека , переместив в первый из них...

4
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
24.01.2018, 20:00 2
Взято отсюда: Задан указатель P1 на вершину непустого стека. Создать два новых стека
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
type
  {Основные данные элемента стека.}
  TData = char;
  {Указатель на элемент стека.}
  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
  begin
    PElem := aPSt;
    aPSt := PElem^.PNext;
    aData := PElem^.Data;
    Dispose(PElem);
    Result := True;
  end;
end;
 
{Распечатка элементов стека в направлении вершина - дно.
Здесь мы будем работать со структурой не как со стеком, а как со списком.}
function StackToStr(const aPSt: TPElem): String;
var
  P: TPElem;
begin
  P := aPSt;
  if P = nil then
    Result := 'Стек пуст.'
  else
    repeat
      if P <> aPSt then {Если этот элемент не в начале списка, то ставим перед ним запятую.}
        Result := Result + ', ';
      Result := Result + (P^.Data); {Распечатываем основные данные элемента.}
      P := P^.PNext;  {Получаем указатель на следующий элемент списка.}
    until P = nil;    {Если достигли конца списка, то перебор закончен.}
end;
 
{Освобождение памяти, выделенной для элементов стека (очистка стека).}
procedure StFree(var aPSt: TPElem);
var
  Data: TData;
begin
  while Pop(aPSt, Data) do;
end;
 
const
  M = 10;//Наибольшее количество элементов в первом стеке.
 
var
  PSt1, PSt2, PSt3, Temp: TPElem;
  Data: TData;
  ch: char;
  i: integer;
 
begin
  //Начальная инициализация стеков.
  PSt1 := nil;
  PSt2 := nil;
  PSt3 := nil;
  Temp := nil;
  
  //Записываем случайные элементы в первый  и временный стеки.
  Randomize;
  for i := 0 to M do
  begin
    ch := Chr(Random(127 - 32 + 1) + 32);
    Push(PSt1, ch); //Целые числа из диапазона 0..9.
    Push(Temp, Ch); //Целые числа из диапазона 0..9.
  end;
  //Распечатка стеков.
  Writeln('------------------------------');
  Writeln('Начальное состояние стеков.');
  Writeln('Первый стек (вершина - дно):'#9 + StackToStr(PSt1));
  Writeln('Временный стек (вершина - дно):'#9 + StackToStr(Temp));
  Writeln('Второй стек (вершина - дно):'#9 + StackToStr(PSt2));
  Writeln('Третий стек (вершина - дно):'#9 + StackToStr(PSt3));
  
  {Переливаем элементы из первого стека во второй и третий стеки.}
  while Pop(Temp, Data) do
  begin
    if data in ['A'..'Z', 'a'..'z']  then //
      Push(PSt2, Data)
    else                //Иначе - запимываем элемент в третий стек.
      Push(PSt3, Data);
  end;
  
  //Распечатка стеков.
  Writeln('-----');
  Writeln('Состояние стеков после переливания.');
  Writeln('Первый стек (вершина - дно):'#9 + StackToStr(PSt1));
  Writeln('Второй стек (вершина - дно):'#9 + StackToStr(PSt2));
  Writeln('Третий стек (вершина - дно):'#9 + StackToStr(PSt3));
  
  //Освобождение памяти, выделенной для стеков.
  StFree(PSt1);
  StFree(PSt2);
  StFree(PSt3);
  Writeln('-----');
  Writeln('Память, выделенная для стеков, освобождена.');
  
end.
Добавлено через 10 часов 28 минут
Цитата Сообщение от mors356 Посмотреть сообщение
удвоив каждую из них
Кстати, вот этот момент я не понял. Поясните, пожалуйста.
1
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 16
25.01.2018, 20:12  [ТС] 3
можете дописать пожалуйста, удвоив каждую - вывести каждую букву 2 раза
0
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
25.01.2018, 21:00 4
Лучший ответ Сообщение было отмечено mors356 как решение

Решение

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
128
129
130
type
  {Основные данные элемента стека.}
  TData = char;
  {Указатель на элемент стека.}
  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
  begin
    PElem := aPSt;
    aPSt := PElem^.PNext;
    aData := PElem^.Data;
    Dispose(PElem);
    Result := True;
  end;
end;
 
{Распечатка элементов стека в направлении вершина - дно.
Здесь мы будем работать со структурой не как со стеком, а как со списком.}
function StackToStr(const aPSt: TPElem): String;
var
  P: TPElem;
begin
  P := aPSt;
  if P = nil then
    Result := 'Стек пуст.'
  else
    repeat
      if P <> aPSt then {Если этот элемент не в начале списка, то ставим перед ним запятую.}
        Result := Result + ', ';
      Result := Result + (P^.Data); {Распечатываем основные данные элемента.}
      P := P^.PNext;  {Получаем указатель на следующий элемент списка.}
    until P = nil;    {Если достигли конца списка, то перебор закончен.}
end;
 
{Освобождение памяти, выделенной для элементов стека (очистка стека).}
procedure StFree(var aPSt: TPElem);
var
  Data: TData;
begin
  while Pop(aPSt, Data) do;
end;
 
const
  M = 10;//Наибольшее количество элементов в первом стеке.
 
var
  PSt1, PSt2, PSt3, Temp: TPElem;
  Data: TData;
  ch: char;
  i: integer;
 
begin
  //Начальная инициализация стеков.
  PSt1 := nil;
  PSt2 := nil;
  PSt3 := nil;
  Temp := nil;
  
  //Записываем случайные элементы в первый  и временный стеки.
  Randomize;
  for i := 0 to M do
  begin
    ch := Chr(Random(127 - 32 + 1) + 32);
    Push(PSt1, ch); //Целые числа из диапазона 0..9.
    Push(Temp, Ch); //Целые числа из диапазона 0..9.
  end;
  //Распечатка стеков.
  Writeln('------------------------------');
  Writeln('Начальное состояние стеков.');
  Writeln('Первый стек (вершина - дно):'#9 + StackToStr(PSt1));
  Writeln('Временный стек (вершина - дно):'#9 + StackToStr(Temp));
  Writeln('Второй стек (вершина - дно):'#9 + StackToStr(PSt2));
  Writeln('Третий стек (вершина - дно):'#9 + StackToStr(PSt3));
  
  {Переливаем элементы из первого стека во второй и третий стеки.}
  while Pop(Temp, Data) do
  begin
    if data in ['A'..'Z', 'a'..'z']  then 
    begin
      Push(PSt2, Data);
      Push(PSt2, Data);
    end
    else                //Иначе - запимываем элемент в третий стек.
      Push(PSt3, Data);
  end;
  
  //Распечатка стеков.
  Writeln('-----');
  Writeln('Состояние стеков после переливания.');
  Writeln('Первый стек (вершина - дно):'#9 + StackToStr(PSt1));
  Writeln('Второй стек (вершина - дно):'#9 + StackToStr(PSt2));
  Writeln('Третий стек (вершина - дно):'#9 + StackToStr(PSt3));
  
  //Освобождение памяти, выделенной для стеков.
  StFree(PSt1);
  StFree(PSt2);
  StFree(PSt3);
  Writeln('-----');
  Writeln('Память, выделенная для стеков, освобождена.');
  
end.
1
0 / 0 / 0
Регистрация: 08.10.2017
Сообщений: 16
25.01.2018, 21:27  [ТС] 5
спасибо большое
0
25.01.2018, 21:27
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2018, 21:27
Помогаю со студенческими работами здесь

Задан указатель P1 на вершину непустого стека. Создать два новых стека
Добрый вечер, у меня возникла проблемка с такой программкой. Вывести в компонент Label. ...

Использовать контейнер Stack для создания стека, хранящего символы
Ребят помогите пожалуйста))) Использовать контейнер Stack для создания стека, хранящего символы. В...

Разработать собственный класс для создания стека, хранящего символы
Разработать собственный класс MyStack для создания стека, хранящего символы. В созданном стеке...

Из одного стека - два
Здравствуйте. Задание: Из одного стека, хранящего символы, создать два новых стека: один с...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Как узнать директорию bash-скрипта из самого bash-скрипта
InfoMaster 20.01.2025
При разработке bash-скриптов одной из важных задач является определение директории, в которой находится исполняемый скрипт. Это критически важно для корректной работы с файлами, загрузки конфигураций. . .
В чем разница между let и var в JavaScript
InfoMaster 20.01.2025
JavaScript прошел длинный путь эволюции с момента своего создания в 1995 году. Одним из важнейших аспектов развития языка стало совершенствование механизмов объявления и управления переменными. . . .
Эффективная работа со строками в Go
InfoMaster 20.01.2025
Язык программирования Go предлагает уникальный подход к работе со строками, который существенно отличается от многих других языков программирования. В Go строки представляют собой неизменяемые. . .
Как проверить, что отображение (map) содержит ключ в Go
InfoMaster 20.01.2025
Отображения (maps) в языке программирования Go представляют собой мощные структуры данных, которые позволяют хранить пары ключ-значение и обеспечивают быстрый доступ к данным по уникальным. . .
Как организовать домашнее хранилище фильмов с общим доступом для всей семьи
InfoMaster 20.01.2025
Преимущества домашнего медиасервера В современном мире, где цифровой контент стал неотъемлемой частью нашей жизни, организация домашнего медиасервера становится все более актуальной задачей. . . .
Перспективы развития жестких дисков: есть ли у них будущее?
InfoMaster 20.01.2025
История и эволюция жестких дисков История развития жестких дисков начинается в 1956 году, когда компания IBM представила первое устройство для хранения данных на магнитных пластинах - IBM 350. . .
Распознавание изображений (компьютерное зрение) на C++
InfoMaster 20.01.2025
Введение в компьютерное зрение и основы работы с изображениями Компьютерное зрение представляет собой одну из наиболее динамично развивающихся областей информационных технологий, позволяющую. . .
Какой язык программировани­я лучший для разработки нейронных сетей
InfoMaster 20.01.2025
В современном мире технологий искусственные нейронные сети становятся неотъемлемой частью множества инновационных решений, от распознавания речи до автоматического управления транспортными. . .
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru