000
11.04.2007, 21:20 Uhr
~power
Gast
|
Hi! Ich muss folgende Aufgaben bearbeiten, aber komme völlig ins tüdeln
Schreiben Sie eine Funktion partition, die als Parameter ein Feld von ganzen Zahlen (integer) und die effektive Feldgroesse erwartet und als Ergebnis zwei neue integer - Felder und ihre Groessen ueber den "call by reference" - Mechanismus zurueckliefert. Das erste Feld soll alle geraden Zahlen enthalten, das zweite Feld soll alle ungerade Zahlen enthalten. Das uebergebene Feld soll unveraendert bleiben.
void Partition (int array[], int n, int **evens, int *numEvens, int **odds, int *numOdds) { // Bestimmung der Anzahl gerader und ungerader Zahlen // Ergaenzen das Programm an dieser Stelle gemäß der Aufgabenstellung! }
Mein Anfang sieht so aus (die main-funktion war so vorgegeben und der Funktionskopf der Funktion "Partition" auch):
C++: |
#include<stdio.h> #include<stdlib.h>
/*void CountEvensAndOdds ( int array[], int n, int *numEvens, int *numOdds); */ void Partition (int array[], int n, int **evens, int *numEvens, int **odds, int *numOdds) { int i; for(i=0;i<n;i++) { if(array[i]%2==0) (*numEvens)++; else (*numOdds)++; } /* Ab hier komme ich durcheinander (dieser verdammte zeiger auf den zeiger*/
(*evens)=(int*)malloc((*numEvens)*sizeof(int)); (*odds)=(int*)malloc((*numOdds)*sizeof(int));
/* Und hier stimmt irgendwas mit der for-schleife nicht, denn so wird nicht vernünftig die ungerade und geraden Zahlen den Feldern richtig zugeordnet! */ for(i=0;i<n;i++) { if(array[i]%2==0) *evens[i]=array[i]; else *odds[i]=array[i]; }
}
void main ( void ) { int arr[] = {7,4,13,8}; int *evens, *odds; //Zeiger 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 enthaelt %d gerade und %d ungerade Zahlen\n", 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]);
// Felder fuer die geraden und ungeraden Zahlen liegen auf dem Heap und // muessen freigegeben werden. free(evens); free(odds); }
|
Zwei Fragen bzw. Probleme habe ich: 1. Ich komme mit dem doppelten Zeiger nicht klar und weiß nicht, wie oder wo ich sterne in der Funktion setzen muss! 2. Ich habe noch keine Lösung für for-schleife gefunden, wie ich jedem Element der beiden dynamischen Felder die Werte genau zuweise! Also, dass sie nicht doppelt in ein Feld gelangen! |