Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Кто поможет перенести исходник с Паскаля на С++


Автор: Fumoffu 20.5.2006, 19:05
Программа печатает все перестановки чисел от 1 до n . Это неотъемлемая часть моей курсовой...которую надо скоро сдавать. Буду очень благодарен.   smile 

 program Perestanovki;
      type Pere=array [byte] of byte;
      var N,i,j:byte;
      X:Pere;
      Yes:boolean;
      procedure Next(var X:Pere;var Yes:boolean);
    var i:byte;
    procedure Swap(var a,b:byte);  {обмен переменных}
      var c:byte;
    begin c:=a;a:=b;b:=c end;
      begin
    i:=N-1;
    {поиск i}
    while (i>0)and(X[i]>X[i+1]) do dec(i);
    if i>0 then
      begin
        j:=i+1;
        {поиск j}
        while (j<N)and(X[j+1]>X[i]) do inc(j);
        Swap(X[i],X[j]);
        for j:=i+1 to (N+i) div 2 do Swap(X[j],X[N-j+i+1]);
        Yes:=true
      end
    else Yes:=false
      end;
    begin
      write('N=');readln(N);
      for i:=1 to N do X[i]:=i;
      repeat
    for i:=1 to N do write(X[i]);writeln;
    Next(X,Yes)
      until not Yes
    end.

 

Автор: Foley 20.5.2006, 23:53
есть специальные проги, их можно найти через яндыкс (но все-равно они работают кривовато, хотя основа все-таки остается правильной необходимо вносить лишь небольшие измененения), а так самый простой способ это вручную перепечатать с исправлениями под си. Тем более код небольшой. 

Автор: Droll 21.5.2006, 01:04
Думаю, должно получиться так:
Код

#include <cstdlib>
#include <iostream>

using namespace std;

inline void Swap(int &a, int &b)
{
    a ^= b;
    b ^= a;
    a ^= b;
}

bool Next(int *X, int N)
{
    int i, j;

    i = N - 1;
    // поиск i
    while ((i > 0) && (X[i] > X[i + 1])) i--;
    if (i > 0)
    {
        j = i + 1;
        // поиск j
        while ((j < N) && (X[j + 1] > X[i])) j++;
        Swap(X[i], X[j]);
        for (j = (i + 1); j <= (N + i)/2; j++)
        {
            Swap(X[j], X[N - j + i + 1]);
        }
        return true;
    } else return false;
}

int main(int argc, char *argv[])
{
    int N = 2;
    int *X;
    int i;
    
    cout << "N = ";
    cin >> N;
    X = new int[N + 1];
    for (i = 1; i <= N; i++) X[i] = i;
    
    do    {
        for (i = 1; i <= N; i++) cout << X[i];
        cout << endl;
    } while (Next(X, N));
    delete [] X;

   system("PAUSE");
   return EXIT_SUCCESS;
}


PS
Вообще, этот вопрос стоило задавать в разделе http://forum.vingrad.ru/index.php?showforum=92

Удачи! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)