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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
#1

C Pascal'я на С++ - C++

13.09.2009, 16:00. Просмотров 1892. Ответов 14
Метки нет (Все метки)

Помогите пожалуйсто Pascal не изучал совсем необходимо переделать прогу на c++, как смог сделал но чето она не фурычит.

вот есть даже блок схема:http://img7.imageshost.ru/imgs/09091...8a23/26032.jpg

Цель проги:Построение отображений и транзитивных замыканий в графе

Обозначения:
X - номер вершины для которой ищется транзитивное замыкание;
T(N) - массив транзитивного замыкания;
С - счетчик добавления вершин в транзитивное замыкание ;
P - признак: P = 1 при формировании Т+ , P = 0 при формировании Т-.
A-матрица смежности

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
USES CRT;
label n1,n2;
var
A : array[1..15,1..15]of integer;  
b, t : array[1..15]of integer;
n,l,x,c,i,j : integer;
Begin
clrscr;
writeln('введите количество вершин графа n ');
read(n);
writeln('введите матрицу смежности ');
for i:=1 to n do
for j:=1 to n do read(A [ i, j ] );
writeln('введите номер вершины графа х ');
read(x);
l:=1;
t [ x ]:=l;
n1: writeln ('Прямое отображение ‘,l,’-ого порядка ');
c:=0;
for i:=1 to n do
begin
         if t [ i ]=l then
     begin
          for j:=1 to n do
        begin
             if A[J,I ]=1 then
          begin
              writeln (j,' ');
              if t [ j ]=0 then
                  begin t [ j ]:=l+1; c:=c+1; 
                  end;
          end;
      end; 
   end; 
end;
if c<>0 then begin l:=l+1; goto n1; end;
l:=1; b[ x ]:=l;
n2: writeln ('Обратное отображение ‘ ,l,’-ого порядка’);
c:=0;
for i:=1 to n do
begin
if b[ i ]=1 then
begin
for j:=1 to n do
begin
if A [ i, j ]=1 then begin write (' ',j);
if b[ j ]=0 then begin
b[ j ]:=l+1; c:=c+1;
end; end;
end;
end;
if c<>0 then begin l:=l+1; goto n2; end;
writeln(‘Транзитивные замыкания:’);
for i:=1 to n do
begin
for j:=1 to n do
write (‘ ‘,A[ i,j ] );
writeln (‘ ‘,t[ i ] );
end;
writeln (‘ ‘);
for i:=1 to n do write (‘ ‘,b[i] );
end.
Вот че получилось правда без ввода кол-ва вершин их я указал в n=4; и без ввода матрицы смежности она у меня в m[4][4]
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
 
int main(void)
{
   int n = 4;
   int x;//nomer versini
  int l=1,i,j,c;
  
   int m[4][4]={0, 1, 1, 1,
                1, 0, 1, 1,
                1, 1, 0, 1,
                1, 1, 1, 0};
  int t[50];
  int b[50];
 
 
  cout<<"vvedite nom vershini"<<endl;
  cin>>x;
 
 t[x]=l;
  n1:cout<<"premoe otobraj poreaddka "<<l<<endl;
  c=0;
 
 for(i=1;i<=n;i++)
 {
   if(t[i]==l)
   {
     for(j=1;j<=n;j++)
     {
       if(m[j][i]==1)
        {
         cout<<j<<endl;
 
          if(t[j]==0)
           {
           t[j]=l+1;c=c+1;
           }
         }
       }
     }
 }
 if(c!=0)
 {
  l=l+1; goto n1;
 }
 l=1;
 b[x]=l;
 n2:cout<<"obratnoe otobraj poreaddka "<<l<<endl;
 c=0;
  for(i=1;i<=n;i++)
  {
    if (b[i]==1)
    { 
      for(j=1;j<=n;n++)
      {
        if (m[i][j]==1)
        {
         cout<<j<<endl;
         if(b[j]==0)
          {
            b[j]=l+1; c=c+1;
          }
       
         }
        }
     }
  }
  
 if(c!=0)
  {
   l=l+1; goto n2;
  }
 
  cout<<"Tranzit zamikania"<<endl;
 
 for(i=0;i<=n;i++)
 { 
  for(j=1;j<=n;j++)
   cout<<m[i][j]<<endl;
   cout<<t[i]<<endl;
   
 }
 for(i=1;i<=n;i++)
  cout<<b[i]<<endl;
 
 getch();
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2009, 16:00     C Pascal'я на С++
Посмотрите здесь:

Из множества выбрать три различные точки по условию -из Turbo Pascal во Free Pascal - Turbo Pascal
Даны 2 множества точек на плоскости. Выбрать три различные точки первого множества так, чтобы круг ограниченный окружностью , проходящий...

ACP Pascal – автоматическое создание исходных кодов программ для решения массивов на языке Pascal
ACP Pascal (Automatic Creation of Programs Pascal) – программа для автоматического создания исходных кодов программ на языке Pascal,...

Пишу программы на С++, С#, VB.Net, Pascal (Pascal ABC)
Пишу программы на С++, С#, VB.Net,Pascal (Pascal ABC). Немного знаю Sql (TSql), Excel, Vba, Assembler. Сам студент 4 курса так что...

Чем отличаются Turbo Pascal и Pascal ABC? - Pascal
Чем отличаются турбо паскаль и abc? Просто у меня windows7 последняя теперь стоит, и там турбо паскаль не идет, а нам по нему задания...

Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET - в чем разница? - Pascal
Всем привет, решил изучать Паскаль, но на форуме увидел 4 его версии - Turbo Pascal, Pascal ABC, Free Pascal, PascalABC.NET и не понял, в...

Различия трансляторов Pascal ABC.Net и Turbo/Borland Pascal - Pascal
Пожалуйста, объясните различия между компиляторами Pascal ABC.Net и Turbo/Borland Pascal

Список слов распечатать в алфавитном порядке. В Turbo Pascal или Pascal ABC - Turbo Pascal
Дана непустая последовательность слов, в каждом из которых содержится от 1 до 6 заглавных латинских букв; соседние слова разделены запятой,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
14.09.2009, 22:27  [ТС]     C Pascal'я на С++ #2
неужели никто не поможет?(
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.09.2009, 03:27     C Pascal'я на С++ #3
Брат, я бы помог. Код плёвый, отсюда вижу. Но транзитивные замыкания... Это как-то не того... Не то, чтобы я впервые это слышал...
Не поленись, объясни на пальцах, что такое транзитивные замыкания и я попытаюсь тебе помочь.
Сюда, например
http://www.intuit.ru/department/ds/discrmath/9/3.html

меня отсылать не надо. Слишком уж там... Заумно. Извини.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.09.2009, 09:01     C Pascal'я на С++ #4
Цитата Сообщение от kravam Посмотреть сообщение
Но транзитивные замыкания... Это как-то не того...
Цитата Сообщение от kravam Посмотреть сообщение
Не поленись, объясни на пальцах,
для того, чтобы найти транзитивные замыкания в графе нужно решить задачу связности.
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
15.09.2009, 09:23     C Pascal'я на С++ #5
Индексация массивов в С/С++ начинается с 0.
Поменяйте все свои циклы по такой схеме:
C++
1
  for (j=0; j<n; j++)
то есть начиная с 0 и строго меньше n.

Если не заработает, пишите, что конкретно не так работает - будем дальше смотреть.
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.09.2009, 09:38     C Pascal'я на С++ #6
Цитата Сообщение от Sergeymd Посмотреть сообщение
n1: writeln ('Прямое отображение ‘,l,’-ого порядка ');
мда, переводишь ты классно.
Цитата Сообщение от Sergeymd Посмотреть сообщение
n1:cout<<"premoe otobraj poreaddka "<<l<<endl;
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
15.09.2009, 16:29  [ТС]     C Pascal'я на С++ #7
kravam, вобщем основная моя цель разбить граф на сильно связанные подграфы методом Мальгранжа - ( http://www.intuit.ru/department/algorithms/ingrth/7/ )

а этот метод уже включает нахождение транзитивныx замыканий - ( http://www.intuit.ru/department/algo...ngrth/3/2.html )
там вроде просто обьяснено , это как бы расстояние от вершины(кол-во связывающих ребер) до других вершин ну это вообщем

вот в этой книжке в главе приложения есть эта прога на паскале и для транзитиыных замыканий и для мальгранжа:
http://window.edu.ru/window_catalog/...chenskaya2.pdf

Alexiski, если так изменить то у меня зациклилось все

zim22, главное суть
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.09.2009, 16:34     C Pascal'я на С++ #8
Цитата Сообщение от Sergeymd Посмотреть сообщение
zim22, главное суть
замени n1:cout на cout
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
15.09.2009, 16:39  [ТС]     C Pascal'я на С++ #9
zim22, так это же вроде бы ссылка для goto
zim22
depict1
276 / 141 / 2
Регистрация: 11.07.2009
Сообщений: 606
15.09.2009, 16:43     C Pascal'я на С++ #10
Sergeymd, действительно. был не прав.
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
15.09.2009, 20:31     C Pascal'я на С++ #11
Цитата Сообщение от Sergeymd Посмотреть сообщение
Alexiski, если так изменить то у меня зациклилось все
Если НЕ изменить, то точно будет неправильно. Надо изменить и разбираться дальше.

Зацикливается она потому, что массивы b и t в начале надо обнулить.
C++
1
2
3
4
5
 for(i = 0; i < n; i++)
 {
   t[i] = 0;
   b[i] = 0;
 }
Значит так:
1) Вносите все изменения, что я написал
2) Публикуете последний вариант текста
3) Публикуете, что выдается и что должно быть
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
15.09.2009, 20:54  [ТС]     C Pascal'я на С++ #12
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
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
   
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
 
int main(void)
{
   int n = 4;
   int x;//nomer versini
  
  
   int m[4][4]={0, 1, 1, 1,
                1, 0, 0, 1,
                1, 0, 0, 1,
                1, 1, 1, 0};
 
  int t[50];
  int b[50];
  int l=1,i,j;
   for(i = 0; i < =50; i++)
 {
   t[i] = 0;
   b[i] = 0;
 }
 
 
 
cout<<"vvedite nom vershini"<<endl;
cin>>x;
 
t[x]=l;
n1:cout<<"premoe otobraj poreaddka "<<l<<endl;
int c=0;
 
for(i=0;i<n;i++)
 {
   if(t[i]==l)
   {
     for(j=0;j<n;j++)
     {
       if(m[j][i]==1)
        {
         cout<<j<<endl;
 
          if(t[j]==0)
           {
           t[j]=l+1;c=c+1;
           }
         }
       }
     }
 }
  if(c!=0)
  {
    l=l+1; goto n1;
  }
 l=1;
 b[x]=l;
 n2:cout<<"obratnoe otobraj poreaddka "<<l<<endl;
 c=0;
  for(i=0;i<n;i++)
  {
    if (b[i]==1)
    { 
      for(j=0;j<n;n++)
      {
        if (m[i][j]==1)
        {
          cout<<j<<endl;
          if(b[j]==0)
           {
             b[j]=l+1; c=c+1;
           }
         }
       }
     }
  }
  
 if(c!=0)
  {
   l=l+1; goto n2;
  }
 
  cout<<"Tranzit zamikania"<<endl;
 
 for(i=0;i<n;i++)
 { 
  for(j=0;j<n;j++)
   cout<<m[i][j]<<endl;
   cout<<t[i]<<endl;
   
 }
 for(i=0;i<n;i++)
  cout<<b[i]<<endl;
 
 
 
 
   getch();
 
 
   return 0;
}
изменения внес все равно зацикливается выводит бесконечно 0

Я не уверен в правельности циклов for тоесть их области дествия { }

А в паскале выводит следующие http://img7.imageshost.ru/imgs/09091...6e8c/c579a.jpg
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
16.09.2009, 02:36     C Pascal'я на С++ #13
Строка 21 - поставьте строго меньше, иначе выход за границу (в массиве t[50] элементы от 0 до 49)
Строка 68 - главная ошибка: замените n++ на j++
Строки 92, 97 - лишние <<endl
Код
vvedite nom vershini
0
premoe otobraj poreaddka 1
1
2
3
premoe otobraj poreaddka 2
0
3
0
3
0
1
2
obratnoe otobraj poreaddka 1
1
2
3
obratnoe otobraj poreaddka 2
1
2
3
Tranzit zamikania
01111
10012
10012
11102
1222
Sergeymd
0 / 0 / 0
Регистрация: 13.09.2009
Сообщений: 45
16.09.2009, 23:56  [ТС]     C Pascal'я на С++ #14
только вот результаты не очень совпадают с теорией в обеих прогах))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2009, 01:02     C Pascal'я на С++
Еще ссылки по теме:

Нужно перевести код с Pascal ABC на Turbo Pascal - рисование работающей мельницы - Turbo Pascal
Вот код, он должен рисовать работающею мельницу. uses graphABC,crt; type point=record x,y:integer; end; ...

Можно как-то переделать код из Turbo Pascal чтобы он работал в pascal abc.net? - PascalABC.NET
Сделайте пожалуйста, я просто не вникаю uses Graph, Crt; var grDriver: integer; grMode: integer; ErrCode: integer; ...


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

Или воспользуйтесь поиском по форуму:
Alexiski
Любитель давать советы
339 / 131 / 2
Регистрация: 12.01.2009
Сообщений: 511
17.09.2009, 01:02     C Pascal'я на С++ #15
Я в теорию не очень вдумывался
Расскажите на словах алгоритм - поищем расхождения с теорией
Yandex
Объявления
17.09.2009, 01:02     C Pascal'я на С++
Ответ Создать тему
Опции темы

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