Newsgroup: it.comp.lang.c++
Titolo: Richiesta

Salve
sono un appassionato della programmazione in generale, con particolare 
riguardo alla elaborazione di problemi numerici, purtroppo le mie conoscenze 
si limitano al Power Basic.
E' ammesso in genere postare qui un algoritmo in C, o C++, e chiedere che 
gli venga restituito trasformato almeno in pseudocodice, magari con qualche 
correzione-adattamento ?
La quasi totalità degli snippets è in C++, qualcosina sono riuscito a 
tradurre in Basic, ma a volte è molto difficile.
Grazie 
 
 


Provaci e vediamo!
Ma dovresti pazientare...questo ng purtroppo (come molti altri ng 
tecnici) si è lentamente svuotato...
 
Maurus

 Maurus
--------------
ti ringrazio per l'attenzione e vengo al dunque.
Avendo ripreso a programmare uso l'ottimo Power Basic Console Compiler 5.
Ma pur avendo certe capacit� di creare algoritmi, in questo caso
affascinante delle permutazioni, non ho avuto la calma di crearne uno,
e d'altra parte ormai credo di aver letto su internet tutto quello che
esiste in materia.
Purtroppo non si trova un algoritmo che enumera NON le permutazioni
semplici, BENSI' la permutazioni con ripetizione.
Permutazioni semplici di 4 elementi (a,b,c,d) = 4! = 24, ma permutazioni con
ripetizioni di 4 elementi (a,a,b,c) = 4! / 2! = 12.
L'algo seguente, fra i pi� noti ed efficienti, sono riuscito con un po' di
pazienza a trasportarlo in Basic, e funziona alla perfezione.
Ora, cercando il pi� possibile di non stravolgerlo o rallentarlo, quali
istruzioni potrebbero completarlo in modo che *mentre* crea le permutazioni
scarti i doppioni, tipo "aabc", che si creerebbero con la permutazione degli
elementi uguali, in questo caso "a,a" ?
E' evidente che invece di creare quasi 40 milioni di permutazioni di 11
elementi diversi, ne potrebbe creare anche solo poche migliaia se uno o pi�
elementi fossero ripetuti 2 o pi� volte ciascuno.
Nel primo post ho chiesto aiuto per trasportare in Basic, ma non voglio
annoiart(v)i con diversi possibili algoritmi da tradurre, mi basterebbe il
completamento
di questo algo in C o C++, possibilmente con l'evidenziazione commentata
delle istruzioni aggiunte, e se necessario, la traduzione di esse in Basic o
pseudocodice discorsivo, in modo che io possa eseguire il programma sia in
Power Basic, che in Dev C++, che ho installato solo per prova (e poi per
addentrarmi), visto che di C sono completamente a digiuno.
 
-------------------------
 
//QuickPerm - Head Permutations Using a Linear Array Without Recursion
// NOTICE:  Copyright 1991-2008, Phillip Paul Fuchs
 
#define N    12   // number of elements to permute.  Let N > 2
void QuickPerm(void)
{
   unsigned int a[N], p[N+1];
   register unsigned int i, j, tmp; // Upper Index i; Lower Index j
 
   for(i = 0; i < N; i++)   // initialize arrays; a[N] can be any type
   {
      a[i] = i + 1;   // a[i] value is not revealed and can be arbitrary
      p[i] = i;
   }
   p[N] = N; // p[N] > 0 controls iteration and the index boundary for i
   //display(a, 0, 0);   // remove comment to display array a[]
   i = 1;   // setup first swap points to be 1 and 0 respectively (i & j)
   while(i < N)
   {
      p[i]--;             // decrease index "weight" for i by one
      j = i % 2 * p[i];   // IF i is odd then j = p[i] otherwise j = 0
      tmp = a[j];         // swap(a[j], a[i])
      a[j] = a[i];
      a[i] = tmp;
      //display(a, j, i); // remove comment to display target array a[]
      i = 1;              // reset index i to 1 (assumed)
      while (!p[i])       // while (p[i] == 0)
      {
         p[i] = i;        // reset p[i] zero value
         i++;             // set new index value for i (increase by one)
      } // while(!p[i])
   } // while(i < N)
} // QuickPerm()
 
 
//QuickPerm - Function to Display Permutations (Optional)
 
void display(unsigned int *a, unsigned int j, unsigned int i)
{
   for(unsigned int x = 0; x < N; x++)
      printf("%d ",a[x]);
   printf("   swapped(%d, %d)\n", j, i);
   getch();  // press any key to continue...
} // display()
--------------- 
 
 
 
 
 

 esiste in materia.
 
Io credo di no. Sono convinto che ci siano versioni dell'algoritmo in
altri linguaggi per te piu' semplici da leggere e potenzialmente in
pseudo-codice, piu' la descrizione dell'algoritmo. Parti da li, no?
 
-- 
-riko
http://www.enrico-franchi.org/
 
http://rik0-techtemple.blogspot.com/