Muss das Thema doch nochmal schnell aufrollen 🙂
Soll nun das Programm noch soweit erweitern, dass die ungeraden bzw. geraden Zahlen in ein jeweils eigenes Feld sortiert werden.
#include<stdio.h>
#include<stdlib.h>
//Prototypen
void CountEvensAndOdds ( int array[], int n, int *numEvens, int *numOdds);
void Partition (int array[], int n, int **evens, int *numEvens, int **odds, int *numOdds);
//Anzahl der (un)geraden Zahlen im Array zählen
void CountEvensAndOdds(int array[], int n, int *numEvens, int *numOdds)
{
int i;
for (i=0; i < n; i++) {
if (array[i]%2 == 0) {
(*numEvens)++;
}
else {
(*numOdds)++;
}
}
}
//die (un)geraden Zahlen sortieren
void Partition (int array[], int n, int **evens, int *numEvens, int **odds, int *numOdds)
{
CountEvensAndOdds(array, 4, numEvens, numOdds);
*evens = (int *) malloc (sizeof(int));
*odds = (int *) malloc (sizeof(int));
int i,j,k;
for (i=0, j=0, k=0; i < n; i++){
if (array[i]%2 == 0){
(*odds[j] = array[i]);
j++;
}
else {
(*evens[k] = array[i]);
k++;
}
}
}
Und das war gegeben:
int main ( void )
{
int arr[] = {7,4,13,8};
int *evens, *odds; //Felder mit den ungeraden und geraden Zahlen.
int numEvens = 0;
int numOdds = 0, i = 0;
Partition(arr, 4, &evens, &numEvens, &odds, &numOdds);
printf("Das Feld enthält %d gerade und %d ungerade Zahlen", numEvens, numOdds);
printf("Ausgabe der geraden Zahlen: \n");
for(i=0; i < numEvens; i++)
printf("%d\n", evens[i]);
printf("Ausgabe der ungeraden Zahlen: \n");
for(i=0; i < numOdds; i++)
printf("%d\n", odds[i]);
free(evens);
free(odds);
return 0;
}
Leider bekomm beim kompilieren keine Fehlermeldung (trotz gcc -Wall ...) aber beim ausführen einen Speicherzugriffsfehler.