Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 04.03.2018
Сообщений: 3

Переработка Pascal кода в код C++

01.10.2018, 15:38. Показов 557. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот код на паскале:
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
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
program Laba2;
{Программа сравнения двух бинарных деревьев.
 ВНИМАНИЕ: входные данные считаются заведомо корректными,
           никакая проверка ошибок не предусмотрена!}
 
{$APPTYPE CONSOLE}
 
{$R *.res}
 
uses
  SysUtils;
 
  const
  TAB = chr(9); {символ табуляции}
 
type
  Element = Integer;
  Tree = ^Node;      {дерево}
  Node = record      {вершина дерева}
    Data:  Element;    {данные}
    Left:  Tree;       {левый сын}
    Right: Tree;       {правый сын}
  end;
 
var
  inFile1, inFile2: Text;  {файлы двух деревьев}
  inTree1, inTree2: Tree;  {сцепленные представления двух деревьев}
 
  procedure ReadTree(var F: Text; var T: Tree);
  {Читает дерево, представленное иерархическим текстом, из файла F
   и строит сцепленное представление дерева T}
 
  var
    level: Integer;
    currLine: String;
    currNumber: String;
    dataStr: String;
    currPos: Integer;
    code: Integer;
 
    function GetWord: String;
    {Выделяет из CurrLine очередную последовательность символов,
     отличных от пробела и табуляции}
 
    var
      _result: String;
 
    begin
      while (currPos <= Length(currLine)) and ((currLine[currPos] = ' ')
            or (currLine[currPos] = TAB)) do
        currPos := currPos + 1;
      _result := '';
      while (currPos <= Length(currLine)) and (currLine[currPos] <> ' ')
            and (currLine[currPos] <> TAB) do begin
        _result := _result + currLine[currPos];
        currPos := currPos + 1;
      end;
      GetWord := _result;
    end; {GetWord}
 
    procedure RecurseRT(var T: Tree; level: Integer);
    {Читает непустое поддерево T из файла.
     Параметр level содержит длину номера корневой вершины поддерева.
     В момент вызова этот номер уже считан из текущей введенной строки.
     В момент возврата считан номер вершины, не принадлежащей введенному
     поддереву}
 
    begin
      T := New(Tree);
      T^.Left := nil;
      T^.Right := nil;
      dataStr := GetWord;  {данные корневой вершины}
      Val(dataStr, T^.Data, Code);
      Readln(F, currLine);
      currPos := 1;
      currNumber := GetWord;
      while Length(currNumber) > level do begin  {это сыновья}
        if currNumber[Length(currNumber)] = '0' then
          RecurseRT(T^.Left, level + 1)
        else
          RecurseRT(T^.Right, level + 1);
      end;
    end; {RecurseRT}
 
  begin {ReadTree}
    if EOF(F) then {пустое дерево}
      T := nil
    else begin
      Readln(F, currLine);
      currPos := 1;
      currNumber := GetWord;
      RecurseRT(T, 1);
    end;
  end; {ReadTree}
 
  procedure PrintTree(Header: String; var T: Tree);
  {Выдает на стандартный вывод текстовое представление дерева T,
   предваряя его заголовком Header}
 
    procedure RecursePT(T: Tree; number: String);
    {Выдает на стандартный вывод текстовое представление поддерева T.
     Параметр number задает номер корневой вершины}
 
    var
      i: Integer;
 
    begin {RecursePT}
      if T = nil then
        Exit;
      {Сначала печать корня}
      for i := 1 to Length(number) do {Отступ}
        Write(' ');
      Write(number + '  ');
      Writeln(T^.Data);
      {Теперь сыновья}
      RecursePT(T^.Left,  number + '0');
      RecursePT(T^.Right, number + '1');
    end; {RecursePT}
 
  begin {PrintTree}
    Writeln;
    Writeln(Header);
    RecursePT(T, '0');
  end; {PrintTree}
 
  function TreeEquRec(T1, T2: Tree): Boolean;
  {Проверяет равенство двух деревьев T1 и T2.
   Рекурсивный вариант}
 
  begin
    if T1 = nil then
      if T2 = nil then
        TreeEquRec := true
      else
        TreeEquRec := false
    else
      if T2 = nil then
        TreeEquRec := false
      else
        if T1^.Data <> T2^.Data then
          TreeEquRec := false
        else
          TreeEquRec := TreeEquRec(T1^.Left,  T2^.Left)
                    and TreeEquRec(T1^.Right, T2^.Right);
  end; {TreeEquRec}
 
  function TreeEquNonRec(T1, T2: Tree): Boolean;
  {Проверяет равенство двух деревьев T1 и T2.
   Нерекурсивный вариант}
 
  var
    Stack: array[1..100, 1..2] of Tree; {Стек для двух деревьев}
    Top: Integer; {Указатель вершины стека}
  begin
    Top := 1;
    Stack[Top, 1] := T1;
    Stack[Top, 2] := T2;
    while Top > 0 do begin {пока в стеке есть нерассмотренные поддеревья}
      T1 := Stack[Top, 1];
      T2 := Stack[Top, 2];
      Top := Top - 1;
      if T1 = nil then
        if T2 = nil then begin
          {В отличие от рекурсивного варианта, здесь еще рано принимать
           решение, потому что Exit будет означать завершение всей работы,
           без рассмотрения оставшихся поддеревьев!}
          {TreeEquNonRec := true;
          Exit;}
        end
        else begin
          TreeEquNonRec := false;
          {Если хоть одно различие есть, то деревья различны}
          Exit;
        end
      else begin
        if T2 = nil then begin
          TreeEquNonRec := false;
          Exit;
        end
        else begin
          if T1^.Data <> T2^.Data then begin
            TreeEquNonRec := false;
            Exit;
          end
          else begin
          {Раз не удалось найти различий в корневой вершине,
           продолжим на поддеревьях}
            Stack[Top+1, 1] := T1^.Left;
            Stack[Top+1, 2] := T2^.Left;
            Stack[Top+2, 1] := T1^.Right;
            Stack[Top+2, 2] := T2^.Right;
            Top := Top+2;
          end;
        end;
      end;
    end;
    {Поддеревья кончились.
     Поскольку различий найти не удалось, деревья равны}
    TreeEquNonRec := true;
  end; {TreeEquNonRec}
var
dir: string;
nblen: Integer;
//lpBuf: Array[0..200] of Char;
begin {Laba2}
dir := GetCurrentDir;
 
  try
    Assign(inFile1, 'Tree1.txt');
    Reset(inFile1);
    ReadTree(inFile1, inTree1);
    PrintTree('Первое дерево:', inTree1);
    Assign(inFile2, 'Tree2.txt');
    Reset(inFile2);
    ReadTree(inFile2, inTree2);
    PrintTree('Второе дерево:', inTree2);
    Writeln;
    if TreeEquRec(inTree1, inTree2) then
      Writeln('  Рекурсивное решение: деревья равны')
    else
      Writeln('  Рекурсивное решение: деревья различны');
    if TreeEquNonRec(inTree1, inTree2) then
      Writeln('Нерекурсивное решение: деревья равны')
    else
      Writeln('Нерекурсивное решение: деревья различны');
    Readln;
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2018, 15:38
Ответы с готовыми решениями:

Переработка Pascal кода в код С++
Вот задача на паскале: program name4; var x:array of integer; z,ser,s,k:real; i:integer; begin s:=0; writeln...

Из кода Pascal в код C++
Var A:array of byte; i,j,n:byte; Begin write('N = ');readln(n); For i:=1 to n do For j:=i to n do ...

Сделать с кода Pascal код C++
Нужно переделать код Паскаля на Си. Я немного сделал не похоже ето не то. program Lab6; uses crt; const nmax=20; var a:array...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2018, 15:38
Помогаю со студенческими работами здесь

Перевести в код Pascal ABC из кода Pascal Delphi
procedure TForm1.Button1Click(Sender: TObject); const n=8; var x:array of real; y,z:array of real; i,j:byte; begin ...

Перевести в код Pascal ABC из кода Pascal Delphi
Помогите перевести в код ABC а то с Delphi вообще не знаком. Задание было такое: Записать в файл последовательного доступа N...

Переработка кода
Помогите пожалуйста переработать данный код: function editor_get_parent(tag) { if (document.selection) { if...

Переработка и чистка кода
Вопрос к более опытным программистам. Как все это написать правильно (чисто, без постоянных повторений самого себя)? Это исходник...

Переработка кода и поиск лучшего решения
Всем привет! Пишу проект который мне помогает в изучении Английского языка. На данном этапе написал так сказать проверку правильности...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru