Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
wazler
2 / 2 / 0
Регистрация: 04.12.2011
Сообщений: 119
#1

Перевожу программу с Pascal, проверьте правильность перевода - C++

11.10.2013, 19:17. Просмотров 222. Ответов 0
Метки нет (Все метки)

Вот код на PAscal
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
{Dan spisok iz n celih chisel a1, a2, ..., an. Naiti samuyu dlinnuyu neubivayushuyu
 posledovaelnost' elementov spiska}
program prog1324;
 
uses crt;
 
type PList=^TList;
     TList = record
       info: integer;
       pred, next: PList;
     end;
 
Var
   head, tail: PList;
   mylist_head, mylist_tail: PList;
 
procedure MakeList(Var head, tail: PList);
Var k: integer;
    p: PList;
begin
  new(head);
  new(tail);
  head^.next:= tail;
  tail^.pred:= head;
  readln(k);
  while k <> 0 do
  begin
    new(p);
    p^.info:= k;
    p^.next:= tail;
    p^.pred:= tail^.pred;
    p^.pred^.next:= p;
    tail^.pred:= p;
    readln(k);
  end;
end;
 
procedure PrintList (head, tail: Plist);
Var p: PList;
begin
  p:= head^.next;
  while p <> tail do
  begin
    write(p^.info:4);
    p:= p^.next;
  end;
  writeln;
end;
 
procedure SuperPuperMegaDuperProcedura(head, tail: PList; Var mylist_head, mylist_tail: PList);
var Top: PList;
    k, max, i: integer;
begin
  Top:= head^.next^.next;
  k:= 1;
  max:= 1;
  while Top <> tail do
  begin
    if Top^.info >= Top^.pred^.info then
    begin
      inc(k);
      if k > max then
      begin
        max:= k;
        if (top^.next^.info < top^.info) then
        begin
          mylist_head:= Top;
          for i:= 1 to max do
            mylist_head:= mylist_head^.pred;
        end;
      mylist_tail:= Top^.next;
      end
    end
    else
      k:= 1;
    Top:= Top^.next
  end;
end;
 
Begin
  clrscr;
  writeln('‚ўҐ¤ЁвҐ зЁб«* ¤® 0 :' );
  MakeList(head, tail);
  clrscr;
  writeln('Ќ*и бЇЁб®Є');
  PrintList(head, tail);
  writeln;
  SuperPuperMegaDuperProcedura(head, tail, mylist_head, mylist_tail);
  writeln('‘*¬*п ¤«Ё***п *ҐгЎлў*ой*п Ї®б«Ґ¤®ў*⥫м*®бвм');
  writeln;
  Printlist(mylist_head, mylist_tail);
  readkey;
End.
Вот на С++
C++
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
#include <iostream>
#include <locale.h>
 
using namespace std;
 
struct PList
{
    int info;
    PList *pred, *next;
};
 
void MakeList (PList *&head, PList *&tail)
{
    int k;
    PList *p;
    head = new PList;
    tail = new PList;
    head -> next = tail;
    tail -> pred = head;
    cin >> k;
    while (k!=0)
    {
        p = new PList;
        p -> info = k;
        p -> next = tail;
        p -> pred = tail -> pred;
        p -> pred -> next = p;
        tail -> pred = p;
        cin >> k;
    }
}
void PrintList (PList *&head, PList *&tail)
{
    PList *p;
    p = head -> next;
    while (p!=tail)
    {
        cout << p -> info;
        p = p -> next;
    }
    cout << endl;
}
void SuperPuperMega (PList *&head, PList *&tail, PList *&mylist_head, PList *&mylist_tail)
{
    PList *Top;
    int k, max, i;
    Top = head -> next -> next;
    k = 1;
    max = 1;
    while (Top!=tail)
    {
        if (Top -> info >= Top -> pred -> info) k++;
        
        if (k > max) max = k;
        
        if (Top -> next -> info < Top -> info)
            mylist_head = Top;
        
            for (i = 1; i < max; i++)
                mylist_head = mylist_head -> pred;
        }
        mylist_tail = Top -> next;
        k = 1;
        Top = Top -> next;
    }
 
void main()
{
    setlocale(LC_CTYPE, "Russian");
    PList *head, *tail, *mylist_head, *mylist_tail;
    cout << "Вводите числа до 0: " << endl;
    MakeList (head, tail);
    cout << "Наш список: " << endl;
    PrintList (head, tail);
    cout << endl;
    SuperPuperMega (head, tail, mylist_head, mylist_tail);
    cout << "Самая длинная неубывающая подпоследовательность: ";
    PrintList(mylist_head, mylist_tail);
}
Мне кажется ошибка здесь:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SuperPuperMega (PList *&head, PList *&tail, PList *&mylist_head, PList *&mylist_tail)
{
    PList *Top;
    int k, max, i;
    Top = head -> next -> next;
    k = 1;
    max = 1;
    while (Top!=tail)
    {
        if (Top -> info >= Top -> pred -> info) k++;
        
        if (k > max) max = k;
        
        if (Top -> next -> info < Top -> info)
            mylist_head = Top;
        
            for (i = 1; i < max; i++)
                mylist_head = mylist_head -> pred;
        }
        mylist_tail = Top -> next;
        k = 1;
        Top = Top -> next;
    }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2013, 19:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевожу программу с Pascal, проверьте правильность перевода (C++):

проверьте на правильность - C++
Нужно удвоить нечётные элементы (количество строк m - 4, а столбцов n - 3) #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using...

проверьте на правильность - C++
Вычислить значения функции у=4х3-2х2+5 для значений х, изменяющихся от -3 до 1, с шагом 0.1. #include &lt;stdio.h&gt; #include &lt;iostream&gt; ...

Проверьте правильность - C++
Создайте условный оператор (if), который присваивал бы x значение x/y, если y не равно 0. #include &lt;iostream&gt; using namespace std; ...

Проверьте правильность - C++
Структурная схема алгоритма (метод вставки) http://i032.***********/0912/0c/f5e0e7e1959c.jpg Программа ...

Проверьте правильность кода - C++
Здравствуйте. Задали рассчитать площадь треугольника по заданным параметрам: сторонам треугольника ABC и радиусу описанной окружности....

Проверьте правильность кода - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;iostream&gt; int main() { setlocale(LC_ALL, &quot;Russian&quot;); int p; float q, n,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 19:17
Привет! Вот еще темы с ответами:

Проверьте правильность программы - C++
Она должна переводить дробную часть десятичного числа в двоичную, она переводит но не правильно. КоД: ...

Проверьте правильность пожалуйста - C++
Правильно ли я реализовал задание? Задание: В массиве Z(m) найти число чередований знака, то есть число переходов с минуса на плюс или с...

Проверьте правильность работы в С++ - C++
Решите уравнение указанным в варианте методом. Функцию передать как параметр с помощью указателя. e^x + sqrt(1+e^(2*x)) - 2 = 0 ...

Проверьте код на правильность. - C++
Вот код на Delphi: procedure TForm1.Button4Click(Sender: TObject); var i: integer; begin for i:=0 to 20 do if...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru