Funktionsrückgabewert ein Array
-
Hi,
ich bräuchte nochmal eure Hilfe
Die Aufgabe lautet:
Schreiben Sie ein C++-Programm, welches eine Funktionsschablone namens vergleicher
enthalt und als Parameter zwei Arrays a und b, sowie deren Lange (die Arrays sollen
die gleiche Lange haben) ubergeben bekommt. Die Schablone soll uber die Arrays iterieren
und samtliche Array-Elemente miteinander addieren, welche den gleichen Wert
haben. Ist a[i] < b[i] wird fur diese Elemente nichts berechnet. Ist a[i] > b[i], so
soll die Dierenz a[i] - b[i] gebildet werden. Die Ergebnisse sollen in einem dritten
Array gespeichert und anschlieend von der Funktionsschablone zuruckgegeben werden
(0,5 Punkte).
Beachten Sie hierbei, dass die Funktionsschablone beliebige Typen von Zahlen verarbeiten
konnen soll. Die als Parameter ubergebenen Arrays mussen somit nicht bei jedem
Funktionsaufruf den gleichen Datentyp haben (0,5 Punkte).
Da nicht fur alle Elemente der Eingabe ein Wert berechnet wird, muss das Array mit den
Ergebnissen nicht die gleiche Lange haben wie die Eingabe. Implementieren Sie die Funktionsschablone
so, dass das Array mit den Ergebnissen und dessen Lange in sinnvoller Art
und Weise an den Aufrufer der Funktionsschablone zuruckgegeben werden (0,5 Punkte).
Fuhren Sie Ihr Programm mit der vorgegebenen Testeingabe aus und geben Sie die Arrays
mit den Ergebnissen elementweise aus. Fugen Sie die Ausgaben als Kommentar an das
Ende der Datei. Aufgabe 06 1b.cpp an (0,5 Punkte).
# include <iostream >
using namespace std ;// *****************************************
// Hier bitte die Funktionsschablone
// vergleicher () erganzen
// *****************************************int main () {
int const laenge = 15;
int eingabe1A [ laenge ] = {0, 15, 5, 7, 4, 90, 37, 11, 13,
19, 101 , 333 , 459 , 233 , 87};
int eingabe1B [ laenge ] = {0, 15, 25, 37, 74, 3, 7, 101 , 3,
14, 101 , 333 , 459 , 233 , 87};
double eingabe2A [ laenge ] = {0. , 10. , 5., 7., 13. , 90. , 37. ,
11. , 13. , 99. , 101. , 33. , 48. , 233.};
double eingabe2B [ laenge ] = {0. , 11. , 4., 7., 3., 9., 327. ,
121. , 13. , 911. , 101. , 33. , 48. , 233.};
long eingabe3A [ laenge ] = {0, 0, 15, 7, 33, 90, 37, 21,33, 99, 101 , 33, 458 , 23};
long eingabe3B [ laenge ] = {0, 10, 25, 7, 33, 90, 37, 11,
33, 99, 1001 , 333 , 4598 , 23};// *****************************************************
// Hier bitte die Definition der Funktionsschablone
// mit den drei Paaren von Arrays nacheinander
// aufrufen und die Ergebnisse ausgeben.
// ****************************************************return 0;
}Mein Programmcode sieht so aus:
# include <iostream >
using namespace std ;// ******************************************************
// Hier bitte die Funktionsschablone vergleicher () erganzen
// ******************************************************template <typename T>
T vergleicher (T a[], T b[], int const laenge){
int i=0
T c[];
int f=0for(i=0;i<laenge;i++){
if(a[i]==b[i]){
a[i]+b[i]=c[f];
f++;
}
if(a[i]>b[i]){
a[i]-b[i]=c[f];
f++;
}
}return
}int main () {
int const laenge = 15;
int eingabe1A [ laenge ] = {0, 15, 5, 7, 4, 90, 37, 11, 13, 19, 101 , 333 , 459 , 233 , 87};
int eingabe1B [ laenge ] = {0, 15, 25, 37, 74, 3, 7, 101 , 3, 14, 101 , 333 , 459 , 233 , 87};
double eingabe2A [ laenge ] = {0. , 10. , 5., 7., 13. , 90. , 37. ,11. , 13. , 99. , 101. , 33. , 48. , 233.};
double eingabe2B [ laenge ] = {0. , 11. , 4., 7., 3., 9., 327. ,121. , 13. , 911. , 101. , 33. , 48. , 233.};
long eingabe3A [ laenge ] = {0, 0, 15, 7, 33, 90, 37, 21, 33, 99, 101 , 33, 458 , 23};
long eingabe3B [ laenge ] = {0, 10, 25, 7, 33, 90, 37, 11, 33, 99, 1001 , 333 , 4598 , 23};cout<<"eingabe 1a und 1b: "<<vergleicher<int>(eingabe1A, eingabe1B, laenge)<<endl;
cin.get();
return 0;
}Mein Frage ist nun wie ich das c[] an die mainfunktion übergeben soll.
Das mit Referenzen gearbeitet wird bei den Arrays ist mir bewusst, nur muss ich ja ein Array zurückgeben da c[] nicht in der mainfunktion existiert.MfG Andy
PS: Schon mal Danke für eure Hilfe

-
Schon mal was von Containern gehört?
Guck dir mal die STL-Container, genauer denstd::vectoran!
-
leider dürfen wir keine andere Bibliothek benutzen
-
andydroid schrieb:
leider dürfen wir keine andere Bibliothek benutzen
Warum verwendest du dann <iostream>?
-
weil die in der aufgabe vorgegeben war. Das habe ich nicht mit kopiert, falls das für Verwirrung gesorgt hat tut es mir leid. Die einzige Bibliothek die wir benutzen dürfen ist iostream
-
Was glaubst du tut das?
a[i]+b[i]=c[f];Du wirst wohl ein auf dem Heap allokiertes Array (Stichwort new[]) per Pointer zurückgeben müssen. Die Größeninformation gibst du über einen Referenzparameter der Funktion zurück. (Es sind deine Hausaufgaben, ich gebe dir hier nur ein paar Hinweis)
-
Ist das alles statisch? Dann kannst du die Type-Deduktion zur Hilfe nehmen
template <typename T, std::size_t N> void fun (T (&array)[N]) { // ... do stuff }