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

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

Восстановить пароль Регистрация
 
wazler
2 / 2 / 0
Регистрация: 04.12.2011
Сообщений: 119
11.10.2013, 19:17     Перевожу программу с Pascal, проверьте правильность перевода #1
Вот код на 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;
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2013, 19:17     Перевожу программу с Pascal, проверьте правильность перевода
Посмотрите здесь:

Проверьте правильность программы C++
Проверьте правильность C++
Пожалуйста, проверьте правильность C++
Проверьте код на правильность. C++
Проверьте правильность кода C++
C++ проверьте на правильность
Проверьте правильность C++
C++ проверьте на правильность

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 23:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru