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
Klar, gerne. Wo haperts? Was hast Du bisher? Gibt es Begriffe oder Teile in der Aufgabe, die Du nicht verstehst?
Ich habe Sample Input: 42 2 3 7 23 und der Sample Output: 2 3 7 23 0 habe Schwierigkeiten dabei die Funktion aufzustellen
Mitch oder Misel? entscheide dich. Array auf Array kopieren ist klar?
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 aufzustellen Welche 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:
1 | #include <stdio.h> |
2 | |
3 | void copy(int *s, int *d, int ss, int ds, int m) |
4 | {
|
5 | while (ss --&& ds)* s ++<= m?* d ++= *(s -1), ds --:0 ; |
6 | }
|
7 | |
8 | int main() |
9 | {
|
10 | int a[] = {42, 2, 3, 7, 23}; |
11 | int b[] = {0, 0, 0, 0, 0}; |
12 | |
13 | copy(a, b, 5, 5, 33); |
14 | |
15 | for (int i = 0; i < 5; i++) |
16 | printf("%d, ", b[i]); |
17 | |
18 | puts(""); |
19 | }
|
Ich denke, meine Lösung wird dem Lehrer gefallen.
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)
1 | void copy(int *d, int *s, int n, int l) |
2 | {
|
3 | while(n-->0 && (s[n]>l || d[n]=s[n] || 1)); |
4 | }
|
Sinnvoll wäre ein Rückgabewert, der die Anzahl der kopierten Werte angibt.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.