Форум программистов, компьютерный форум CyberForum.ru

Как правильно сделать функцию? (Из Паскаля в С++) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти сумму ряда http://www.cyberforum.ru/cpp-beginners/thread887449.html
Всем приветик. есть условие (фото), первую функцию решила (надеюсь правильно), подскажите пожалуйста как правильно вывести вторую. #include <iostream.h> #include <stdio.h> #include <math.h> int main() { double a, b, x, h, r, s; int n, zn = -1, k; cout << "Input a,b,h,n" << endl; cin >> a >> b >> h >> n;
C++ Написать и протестировать подпрограмму, которая переставляет в обратном порядке элементы главной диагонали квадратной матрицы - вывод всей матрицы Не знаю как сделать чтоб вся матрица была задание Написать и протестировать подпрограмму, которая переставляет в обратном порядке элементы главной диагонали квадратной матрицы. #include "stdafx.h" #include <iostream> #include <math.h> using namespace std; void main() { int erpol (); void star (int); http://www.cyberforum.ru/cpp-beginners/thread887448.html
C++ В MS Visual C++ 2008.2010, сделать, чтобы было несколько условий в блоке if?
Ну типа того: if(m_x >= a_x)&&(m_x <= a_y){ std::cout << "Yes"; } else { std::cout << "No"; }
Тип информационного поля double. Найти количество листьев в дереве C++
Задача №2. Тип информационного поля double. Найти количество листьев в дереве.
C++ Пользовательская функция, выводящая массив на экран. Вывести на экран все четыре массива, используя функцию http://www.cyberforum.ru/cpp-beginners/thread887399.html
Дан код, Надо:• Написать пользовательскую функцию, выводящую массив на экран. Вывести на экран все четыре массива, используя функцию. ПРошу помощи,заранее спс) ifstream in_stream; ofstream out_stream; in_stream.open("c:/N1.txt"); cout << "Massuv N1\n"; int a; for (int i=0;i<10;i++){ in_stream>>a; if (a>10 && a<99){
C++ Создать базу данных склада компьютерного магазина ("base.txt") Доброго времени суток! Так уж вышло, что пытаюсь научиться писать на C++ и для одного из примеров нужно мне написать некоторую программу в Visual Studio(подробнее ниже), но познания мои в этой области равны нулю :wall: . Ваша помощь в этом нелегком(для меня) деле была бы очень кстати. Сабж: Создать базу данных(БД) склада компьютерного магазина . БД содержит наименование запчасти, цена, тип.... подробнее

Показать сообщение отдельно
Nullik
 Аватар для Nullik
43 / 12 / 1
Регистрация: 13.03.2013
Сообщений: 297
Завершенные тесты: 1
01.06.2013, 17:45     Как правильно сделать функцию? (Из Паскаля в С++)
Добрый день, уважаемые программисты! Подскажите пожалуйста вот такое дело:

есть код на Турбопаскале, и надо всё это дело в С++.

Вроде бы переводила, переводила, но вот выплыл такой кусок кода и я не знаю что делать:

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
procedure Delete (X: string; var PNode: TPtrNode; var H: boolean);
//выполняет поиск удаляемого узла и его замену
var Q: TPtrNode; // сохраняет указатель на удаляемый узел
 
procedure Del (var R: TPtrNode; var H: boolean);
begin
//выполняет поиск самого правого узла в левом поддереве
     if R^.Right < > nil then 
     begin //спуск по правому поддереву
         Del (R^.Right, H);
         if H then Balance_R (R, H); {откат по пути спуска по правому поддереву  
         и, если нужно, балансировка}
     end
     else 
     begin
{перенос содержимого самого правого узла в левом поддереве R на место подлежащего удалению узла Q. Поля узла R переписываются на место соответствующих полей "удаляемого" узла Q. В результате структура дерева не нарушается, а реальному удалению из памяти подвергается узел R, для чего переменная Q запоминает ссылку на него}
 
         Q^.Name := R^.Name;
         Q^.Count := R^.Count;
         Q := R; {запоминается ссылка Q на переносимый узел R, который подлежит реальному удалению}
         R := R^.Left; {т.к. переносимый узел R самый правый в поддереве, поэтому у него возможно только левое       
         поддерево и его корень "подтягивается" на место переносимого узла}
         H := true;
     end;
end; //Del
 
// исполняемая часть процедуры Delete
begin
      if PNode = nil then 
         Writeln ('Узла с заданным ключом в дереве нет')
      else
          if PNode^.Name > X then 
          begin
               Delete (X, PNode^.Left, H); //спуск по левому поддереву
               if H then 
               Balance_L (PNode, H) {откат по пути спуска по левому поддереву и, если нужно, балансировка}
          end
          else
               if PNode^.Name < X then 
               begin 
                       Delete (X, PNode^.Right, H); //спуск по правому поддереву
                       if H then 
                             Balance_R (PNode, H); {откат по пути спуска правому поддереву и, если нужно, балансировка}
               end
               else { исключение PNode }
                      if PNode^.Count = 1 then 
                      begin //т.е. дубликатов нет
                              //выполняется удаление узла и перемещение на
                              //его место соответствующего замещающего узла
                              Q := PNode; {переменная Q сохраняет адрес узла, подлежащего физическому удалению}
                              if PNode^.Right = nil then 
                              begin
                              {у удаляемого Q узла имеется только левое поддерево и в результате удаления высота дерева 
                              уменьшается}
                                     PNode := PNode^.Left;
                                     H := true;
                              end
                              else
                              if PNode^.Left = nil then 
                              begin
                              {у удаляемого узла Q имеется только правое поддерево и в результате удаления высота дерева 
                               уменьшается}
                                     PNode := PNode^.Right; 
                                     H := true;
                              end
                              else 
                              begin {у удаляемого узла Q имеются оба поддерева; выполняется поиск самого правого узла в 
                              левом поддереве и его перемещение на место удаляемого узла, после чего, если необходимо, 
                              левая балансировка}
                                    Del (Q^.Left, H); //переменная Q получит адрес самого
                                    //правого узла в левом поддереве
                                    if H then 
                                           Balance_L (PNode, H) 
                              end;
                              Dispose (Q);
                     end
                     else {PNode^.Count > 1}; {Имеются дубликаты}
                           PNode^.Count := PNode^.Count1;
 
end; {Delete}
В функции Del есть переменная Q, а вроде бы вход делали с R. Как тут быть? Надо и Q и R "вводить"? на С++, вроде бы, функцию в функции объявлять нельзя, я не знаю как тут сделать.


Вот, и ещё у меня вопрос по этому коду:

что значат условия:

Pascal
1
 if H then
?

Или здесь не дописали чему равна булевская переменная Н?


Вот, буду очень признательна, кто поможет решить данные вопросы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru