Ja, das sieht echt clever aus, vor allem die imponierende for-Schleife. Allerdings funktioniert es irgendwie nicht richtig. Da mein asuro die stdio.h nicht richtig anwendet habe ich versucht, das Programm anzupassen:
Die Ausgabe:Code:#include "asuro-probot.h" #include "asuro-probot.c" //#include <stdio.h> //#include <string.h> #define DIGITS "1234567890ABCDEF" int print_perm (unsigned int N, unsigned int n0) { char *l, letters[] = DIGITS; int j, digit[N]; unsigned int n = n0; unsigned int i; // n0 in faktorielle Darstellung umwandeln for (i = 1; i <= N; i++) { digit[i-1] = n % i; n /= i; //while(!(UCSRA & 0x20)); //UDR = digit[i-1]+'0'; } //SerWrite("\r\n\n",3); if (n) return 0; // n0-te Permutation ausdrucken //printf ("#%d: ", n0 + 1); PrintInt(n0+1); SerWrite(": ",2); for (i = N-1; i >= 0; i--) { for (j = -1, l = letters - 1; j < digit[i]; j += *++l != ' '); //printf ("%c", *l); while(!(UCSRA & 0x20)); // Warten bis USART fertig ist //UDR = *l; // Wert an Adresse l senden UDR = *l+'0'; // Wert an Adresse l als Ascii-Zeichen senden //UDR = i+'0'; // i als Ascii-Zeichen senden // Gedruckte Zeichen aus Liste entfernen *l = ' '; } //printf ("\n"); SerWrite("\r\n",2); // neue Zeile return 1; } int main (void) { unsigned int n=0, N=3; /* printf ("\nAnzahl Zeichen: "); scanf ("%u", &N); printf ("\nPermutation Nr. (0 fuer alle): "); scanf ("%u", &n); if (N == 0 || N > strlen (DIGITS)) { printf ("Ungueltige Eingabe: Anzahl Zeichen in 1..%d\n", strlen (DIGITS)); return 1; } */ SerWrite("\r\n\n",3); // neue Zeile if (n) print_perm (N, n-1); else while (print_perm (N, n++)); while(1); return 0; }
Liegts an mir oder am Programm?Code:1 : 123R 6Eƈ "¤ "×" ˆ Cø (usw....)
Gruß
mic
[Edit]
Die Lösung sollte doch so aussehen:
Beispiel mit N = 3, n = 0
#1: 123
#2: 132
...
#720: 098









Lesezeichen