selektive Kopierfunktion für Arrays in C

Gast #6951297
Lesenswert?

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
Gast #6951385
Lesenswert?

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?
#6951405
Lesenswert?

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.
Gast #6951678
Lesenswert?

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.
Gast #6951688
Lesenswert?

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.
Gast #6951707
Lesenswert?

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.
Gast #6951741
Lesenswert?

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
}
Gast #6951840
Lesenswert?

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!
Gast #6952212
Lesenswert?

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.
Gast #6952221
Lesenswert?

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.
#6952320
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren