Schreiben Sie eine selektive Kopierfunktion für Arrays
Schreiben Sie eine Funktion namens copy welche die folgenden Parameter
entgegen nimmt:
Zwei Integer Arrays
die Größe der beiden Arrays als Integer
Einen Schwellwert als Integer
Ihre Funktion soll die Werte des ersten Arrays in das zweite Array
kopieren aber Werte die über dem gegebenen Schwellwert sind ignorieren
kann mir jemand helfen dabei
Misel D. schrieb:> Sample Input:> Sample Output:
Was ist das jetzt?
Wenn Du eine Aufgabenstellung hast, dann poste sie hier (Foto,
Copy&Paste).
> habe Schwierigkeiten dabei die Funktion aufzustellen
Hast Du schon mal eine Funktion in C aufgestellt? Falls ja, poste sie
hier.
Weisst Du was ein Array ist? Ein Parameter?
Misel D. schrieb:> habe Schwierigkeiten dabei die Funktion aufzustellen
Na, wie schreibt man denn eine Funktion in C? Damit könntest Du anfangen
und hier posten.
Misel D. schrieb:> habe Schwierigkeiten dabei die Funktion aufzustellen
Weißt du nicht, wie man in C eine Funktion definiert oder hapert es am
Algorithmus?
Misel D. schrieb:> habe Schwierigkeiten dabei die Funktion aufzustellenWelche Schwierigkeiten? Wenn man dir hier einfach eine Lösung
hinschreibt, lernst du nichts. Also zeige deinen Ansatz oder stelle
konkrete Fragen zu den Teilen, wo du nicht weiter kommst, dann kann man
dir helfen.
Generell solltest du mit dem Funktionskopf anfangen. Wie muss er
aussehen? Der Inhalt kommt dann danach.
PS: Die Aufgabe ist leider ziemlich unpräzise formuliert, aber das
wundert mich nicht, wenn die von einem Lehrer kommt.
Schade, dass dieser Thread hierher verschoben wurde. Da wird der
Fragesteller ihn nicht mehr finden.
Aber egal. Ich programmiere schon eine Weile nicht mehr in C, aber es
war nicht schwer, die Aufgabe zu lösen:
Einer schrieb:> while (ss --&& ds)* s ++<= m?* d ++= *(s -1), ds --:0 ;
Boah, bist du fies. Du hättest es wenigstens wie folgt hinschreiben
können:
Dann versteht "man" wenigstens auf Anhieb, was gemeint ist ;-)
while (ss-- && ds) *s++ <= m ? *d++ = *(s-1), ds--: 0 ;
Eine korrekte Ausgabe liefert deine Funktion auch nur, wenn du das
Ausgabearray mit Nullen vorinitialisierst.
Nicht ganz so fies schrieb:> Eine korrekte Ausgabe liefert deine Funktion auch nur, wenn du das> Ausgabearray mit Nullen vorinitialisierst.
Nope. Das war nicht Teil der Aufgabenstellung:
Mitch schrieb:> Ihre Funktion soll die Werte des ersten Arrays in das zweite Array> kopieren aber Werte die über dem gegebenen Schwellwert sind ignorieren
Da steht nichts, von Array mit Nullen auffüllen.
Geliefert wie bestellt.
Einer schrieb:> void copy(int *s, int *d, int ss, int ds, int m)> {> while (ss --&& ds)* s ++<= m?* d ++= *(s -1), ds --:0 ;> }Einer schrieb:> Ich denke, meine Lösung wird dem Lehrer gefallen.
ich vermute, es gibt nur eine Arraygröße. Und nicht addieren, sondern
kopieren. Das wär deutlich einfacher (und ohne Schleifenkörper)
Dirk B. schrieb:> Sinnvoll wäre ein Rückgabewert, der die Anzahl der kopierten Werte> angibt.
Die Aufgabe lautete nicht "die Aufgabenstellung hinterfragen und
verbessern", auch wenn ich ganz bei deinem Verbessrungsvorschlag bin.
Obige Implementationsentwürfe finde ich so toll weil sie den Kern von C
so wunderbar auf den Punkt bringen UND weil sie Gleichzeitig den
Aufgabesteller (Lehrer?) auf die Probe stellen :-)
Wer C unterrichtet/lehrt/lernt/übt MUSS ZWINGEND sowas abkönnen!
Einer schrieb:> Nope. Das war nicht Teil der Aufgabenstellung:>> Mitch schrieb:>> Ihre Funktion soll die Werte des ersten Arrays in das zwemenite Array>> kopieren aber Werte die über dem gegebenen Schwellwert sind ignorieren
Naja, es gibt noch den Sample In&Output. Das letzte Null-Byte von Output
muss ja irgendwoher kommen ;-)
C ist so lustig weil... schrieb:> Wer C unterrichtet/lehrt/lernt/übt MUSS ZWINGEND sowas abkönnen!
Dem würde ich zustimmen.
Einer schrieb:> Ich denke, meine Lösung wird dem Lehrer gefallen.
Die Grösse beider Arrays soll gleich sein und mit nur einem
Integerparameter angegeben werden.
An statt sinnvollerweise die Anzahl der kopierten Elemente des sich
ergebenden Zielarray als Result der Funktion zurückgegeben soll offenbar
der ungenutzte Rest mit 0 gefüllt werden.
A. S. schrieb:> ich vermute
Es soll nicht so werden wie du geschrieben hast, bei 0 abbrechen, immer
Quelle an derselben Position in Ziel kopieren.
MaWin schrieb:> Es soll nicht so werden wie du geschrieben hast, bei 0 abbrechen, immer> Quelle an derselben Position in Ziel kopieren
Ha? Ok, Du meinst so?:
while(n-->0 && (s[n]>l || *d++=s[n] || 1));
MaWin schrieb:> Einer schrieb:>> Ich denke, meine Lösung wird dem Lehrer gefallen.>> Die Grösse beider Arrays soll gleich sein und mit nur einem> Integerparameter angegeben werden.
Davon steht in der Aufgabe nichts, aber man könnte es so interpretieren.
Wie ich oben schon sagte, ist die Aufgabe (nicht nur an dieser Stelle)
fürchterlich unpräzise formuliert.
> An statt sinnvollerweise die Anzahl der kopierten Elemente des sich> ergebenden Zielarray als Result der Funktion zurückgegeben soll offenbar> der ungenutzte Rest mit 0 gefüllt werden.
Das kann ich nun aus der Aufgabe nirgends herauslesen.