binder0101
Grünschnabel
Schreiben Sie ein Programm, welches eine Folge p von n natürlichen Zahlen einliest und, falls es sich dabei um eine Permutation der natürlichen Zahlen 1, 2, ..., n handelt, prüft, ob die Permutation gerade oder ungerade ist.
Anmerkung: Steht in einer Permutation eine größere Zahl vor einer kleineren, so liegt eine "Inversion" dieser beiden Zahlen vor. Ist die Anzahl der Inversionen gerade, so heißt auch die Permutation gerade, entsprechend bei ungerader Anzahl von Inversionen.
Beispiel:
Eingabe: 1 2 6 3 4
Keine Permutation
Programm wiederholen(j/n)?
Einabe: 2 4 1 3
Ungerade Permutation
Programm wiederholen(j/n)?
Eingabe: 4 1 3 2
Gerade Permutation
Programm wiederholen(j/n)?
Eingabe: 3 5 2 1
Keine Permutation
Pogramm wiederholen (j/n)?
Hallo, Leute ich bin gerade am herumtüffteln dieser Aufgabenstellung, jedoch mach ich irgendetwas falsch und komme nicht weiter vielleicht könnte ja jemand einen Blick drüberwerfen und schauen was da falsch ist. PS: ich bekomm das mit den einlesen von n natürlichen Zahlen nicht hin deswegen Konstante mit ANZAHL 5 und ich hab so garkeinen Plan wie ich das schaffe überhaupt eine Permutation zubestimmen also:
Eingabe: 3 5 2 1
Keine Permutation
Pogramm wiederholen (j/n)?
Danke schon mal im vorraus
Anmerkung: Steht in einer Permutation eine größere Zahl vor einer kleineren, so liegt eine "Inversion" dieser beiden Zahlen vor. Ist die Anzahl der Inversionen gerade, so heißt auch die Permutation gerade, entsprechend bei ungerader Anzahl von Inversionen.
Beispiel:
Eingabe: 1 2 6 3 4
Keine Permutation
Programm wiederholen(j/n)?
Einabe: 2 4 1 3
Ungerade Permutation
Programm wiederholen(j/n)?
Eingabe: 4 1 3 2
Gerade Permutation
Programm wiederholen(j/n)?
Eingabe: 3 5 2 1
Keine Permutation
Pogramm wiederholen (j/n)?
Hallo, Leute ich bin gerade am herumtüffteln dieser Aufgabenstellung, jedoch mach ich irgendetwas falsch und komme nicht weiter vielleicht könnte ja jemand einen Blick drüberwerfen und schauen was da falsch ist. PS: ich bekomm das mit den einlesen von n natürlichen Zahlen nicht hin deswegen Konstante mit ANZAHL 5 und ich hab so garkeinen Plan wie ich das schaffe überhaupt eine Permutation zubestimmen also:
Eingabe: 3 5 2 1
Keine Permutation
Pogramm wiederholen (j/n)?
Danke schon mal im vorraus
C++:
#define ANZAHL 5
void ausgabe(const int array[], int laenge, int stellen);
int inversion(int *werte, int len);
int main(void){
//Variablendeklaration
int feld[ANZAHL];
int i; int n;
int ergebnis = 2;
for (i = 0; i<ANZAHL; i++) {
printf("Zahl: ");
fgets(feld, sizeof(feld), stdin);
zahl = strtol(feld, &eptr, 10);
}
n = sizeof(feld) / sizeof(feld[0]);
printf("das feld lautet:");
ausgabe(feld, n, 4);
putchar('\n');
inversion(feld, n);
return EXIT_SUCCESS;
}
void ausgabe(const int array[], int n, int breite){
int i;
for (i = 0; i<n; i++)
printf("%*d", breite, array[i]);
}
int inversion(int *werte, int len){ /* len ist die Länge des Arrays, wo man
die Werte eingegeben hat */
int j = 0, k = 0, count = 0;
for (j = 0; j<len; j++)
for (k = j+1; k<len; k++)
if (werte[j]>werte[k])
count++; /* count wird stets erhöht, wenn*/
printf("es musste %d mal getauscht werden!!\n", count); //ein Element im Array > als einer der nachfolgenden ist
if ((count % 2) == 0)
printf("es liegt eine gerade permutation vor!\n\n");
else
printf("es liegt eine ungerade permutation vor!\n\n");
return 0;
}