Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Din C++ in Pascal  (Citit de 1742 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
ilgrandere
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« : Martie 20, 2014, 14:34:03 »

Salut!
Cine ma poate ajuta cu o rescriere al acestui algoritm in pascal?
Manualul il prezinta in C++ dar la scoala studiem pascal.
 
Cod:
#include<cstdio>
int a[19],b[19];
 
void back(int k,int len,int max)
{
     if(k-1 == max) //afisam solutia
     {
         for(int i = 1; i <= max;i++)
           printf("%d ",a[i]);
         printf("\n");
     }    
     else
     {
         for(int  i = 1; i <= len; i++)
            if(!b[i] && a[k-1] < i)  //ne asiguram ca generam solutiile crescatoare si unice
           {
                 a[k] = i;
                 b[i] = 1; //o folosim
                 back(k+1,len,max); //trecem la pasul urmator
                 b[i] = 0;   //o eliberam
           }
     }
}
 
int main()  
{  
    freopen("combinari.in","r",stdin);
    freopen("combinari.out","w",stdout);
    int n,k;
    scanf("%d %d",&n,&k);
    back(1,n,k);  
    fclose(stdin); fclose(stdout);  
    return 0;
}

Multumesc anticipat!
Memorat
ilgrandere
Strain


Karma: 4
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #1 : Martie 20, 2014, 15:31:26 »

Adaptarea facuta de mine, pare sa functioneze:
Cod:
type sir=array[1..100]of integer;
     int=integer;
var a,b:sir;
    n,k,max:int;
procedure tip(max:int;a:sir);
  var i:int;
  begin
     for i:=1 to max do write(a[i],' ');
  end;

procedure aranj(k,len,max:int);
  var i:int;
  begin
     if (k-1) = max then begin
        tip(max,a);
        writeln;
     end
        else
  for i:=1 to len do
      if  (a[k-1] >= i) then begin
              a[k]:=i;
      b[i]:=1;
      aranj(k+1,len,max);
      b[i]:=0;
      end;
  end;
Begin{PP}
   readln(n,k);
   aranj(1,n,k);
End.
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines