• 06.07.2025, 14:23
  • Registrieren
  • Anmelden
  • Sie sind nicht angemeldet.

 

Lieber Besucher, herzlich willkommen bei: Aqua Computer Forum. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

Eikman

Moderator

Listen in C

Donnerstag, 23. Januar 2003, 22:46

Hat mal jemand kurz Zeit mir einige Aufgaben hiervon zu zeigen oder zu machen oder so?
Wär voll lieb

http://home.eplus-online.de/speedburner/cant.swf

Wurzelsepp

God

Re: Listen in C

Donnerstag, 23. Januar 2003, 22:48

? wasn das? ein singender rosa Hund?

Eikman

Moderator

Re: Listen in C

Donnerstag, 23. Januar 2003, 22:51

LiquidAcid

unregistriert

Re: Listen in C

Freitag, 24. Januar 2003, 00:45

Was ist das Problem Eiki? Ich versteh die Problematik net so ganz...

Listen in C -> STL benutzen, guck bei SGI, die haben die komplette Referenz dazu. Bestimmt ist auch was nützliches für dich dabei.
Das mit den void-Pointern in der PDF ist gannnnzzzz schlecht, würde lieber mit Templates arbeiten, das ist wesentlich sicherer... ;)

cya
liquid

Eikman

Moderator

Re: Listen in C

Freitag, 24. Januar 2003, 00:55

sag das nicht mir
schreib das an manace@gmx.de *g*

kann da wer schnell ne lösung für kritzeln? büdde

LiquidAcid

unregistriert

Re: Listen in C

Freitag, 24. Januar 2003, 01:16

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void* add(char typ, void* a, void* b)
{
void* res = NULL;

switch (typ)
{
case 'i':
res = new int(*(int*)a + *(int*)b);
break;
case 'f':
res = new double(*(double*)a + *(double*)b);
break;
case 's':
// insert string concatenation code here
break;
}

return res;

}


Hab das jetzt nicht durchgetestet, eventuell musste bei der Heap-Erstellung den Ptr nochmal casten. Auf jeden Fall musste bei dieser Implementierung den Speicher nachher wieder freigeben, wenn die Funktion aufgerufen wurde und ihren void-Ptr zur�ckgegeben hat. Also den void-Ptr casten und deleten, sonst haste nen Mem-Leak.

Eikman

Moderator

Re: Listen in C

Freitag, 24. Januar 2003, 01:17

ja ne, ich versteh davon nix *g* kann bisher nur java und auch da nichts großartiges...

LiquidAcid

unregistriert

Re: Listen in C

Freitag, 24. Januar 2003, 01:20

Aha, nun weiß ich immer noch nicht was du eigentlich willst? Soll ich dir die Aufgaben machen, die in der PDF beschrieben stehen, oder wie?

cya
liquid

LiquidAcid

unregistriert

Re: Listen in C

Freitag, 24. Januar 2003, 01:40

Also, ich interpretiere das jetzt mal als JA. Sagen wir so, ich setz mich morgen nach der Schule gleich dran und schick dir den Code dann per eMail zu, sollte ja nicht allzu lange dauern. K?

cya
liquid

LiquidAcid

unregistriert

Re: Listen in C

Freitag, 24. Januar 2003, 17:09

Das kann man noch beim vorherigen Code einfügen (dort wo die String Concatenation stattfinden soll)
Also...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
case 's':
{
int a_len = strlen((char*)a); // länge von a ermitteln
int b_len = strlen((char*)b); // länge von b
int sum = a_len + b_len + 1; // länge des neuen strings (+1 wegen der zero-termination)
res = malloc(sizeof(char) * sum); // speicher für den neuen string allokieren

// string a in allokierten speicher kopieren
memcpy(res, a, sizeof(char)*(a_len+1)); // wir kopieren den zero-terminator mit
// selbiges für string b (diesmal mit strcat)
strcat(res, b); // strcat löscht den terminator und fügt den kompletten string b an
break;
}
......


Den Code für die sub Funktion kannste dir ja selbst zusammenbasteln. sub ist dazu etwas schwammig definiert, besonders was das "Ausschneiden" von Substrings angeht. Was ist wenn der Substrings mehrmals in dem String vorhanden ist? Wird dann nur der erste ausgeschnitten oder gleich alle zusammen?

cya
liquid

PS: Keine Garantie für den Code, habe den während der Religionsstunde zusammengehackt, verlass dich also nicht darauf, dass es perfekt funzt bzw. überhaupt läuft.

EDIT: Das sollte dir weiterhelfen, wenn es Probleme geben sollte. Drück mich (ganz fest *g*)
Wenn ich Zeit habe dann schreib ich dir noch den Code für sub... ;)

SumSi

Senior Member

Re: Listen in C

Dienstag, 28. Januar 2003, 21:53

Danke das war schonmal ne rinchtig großé hilfe.... ;D
leider baruche ich noch mehr lösungen ;D ;D
cih bin da im moment echt unfähig was c angeht....leider also wenn noch jemand was weis dann bitte posten oder an manace@gmx.de
oder nachricht an eikman.....thx
(bracuhe das echt dringend)....
eat more meat:)

LiquidAcid

unregistriert

Re: Listen in C

Dienstag, 28. Januar 2003, 22:53

OK, wenn ihr es unbedingt wollt. Hab mir folgendes für die Subtraktion ausgedacht...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
void* sub(char typ, void* a, void* b)
{
void* res = NULL;
 
switch (typ)
{
case 'i':
res = new int(*(int*)a - *(int*)b);
break;

case 'f':
res = new double(*(double*)a - *(double*)b);
break;

case 's':
{
int a_len = strlen((char*)a); // länge von a
int b_len = strlen((char*)b); // länge von b
int new_len = a_len - b_len + 1; // voraussichtliche länge des neuen strings bei entfernung des substrings

res = strstr((char*)a, (char*)b); // substring suchen, wir nehmen mal res als ergebnis, es enthält ja sonst nix

if (res == NULL)
return a; // ist vielleicht nicht ganz optimal, man sollte es vielleicht vorher in einen neuen speicherbereich kopieren - ist dann sicherer wegen des mem-management

// wenn wir hier ankommen ist der substring wirklich in a enthalten

res = malloc(sizeof(char) * new_len); // speicher für den neuen string allokieren

// achtung: pointer arithmetik, das kann in die hose gehen, überlegt euch lieber eine bessere methode

int rel_pos = int(a - res); // relative position des substrings vom anfang des strings a errechnen
// ist auch gleichzeitig die anzahl der zeichen, die sich vor dem substring befinden, den es zu entfernen gilt - die müssen kopiert werden!

// soviel von string a in den neu allokierten speicher kopieren, bis wir die stelle des substrings (relative position) ereicht haben
memcpy(res, a, sizeof(char) * rel_pos);

// den rest ohne den substring kopieren
memcpy(res + rel_pos, a + rel_pos + b_len, sizeof(char) * (new_len - (rel_pos + b_len)));

// erklärung zum o.g. aufruf
// ziel: res + rel_pos (res zeigt immer noch auf den anfang des allokierten blocks, wenn wir jetzt dahin kopieren überschreiben wir gleich wieder da, was wir vorher geschrieben haben. deshalb zählen wir auf die startadresse die anzahl der schon kopierten bytes drauf (rel_pos))
// quelle: a + rel_pos + b_len (quelle ist wie man sieht der string a, allerdings überspringen wir zuerst den schon kopierten bereich (+ rel_pos) und danach den substring, den wir ja nicht mitkopieren wollen (+ b_len))
// count: sizeof(char) * (new_len - (rel_pos + b_len))
// anzahl der zu kopierenden bytes (das wäre die länge des neuen strings (schon oben berechnet) minus der substring-länge (b_len) und natürlich des schon kopierten strings aus a (rel_pos))

// thats all I think... *g*

break;
}

default:
cout << "error! no valid type for calculation supplied!\n";


}

return res; // ergebnis der berechnung zurückliefern

}


And... don't try this at home!

Und Achtung, die String-Substraktion entfernt nur EINMAL den vorkommenden String. Falls dieser mehrere Male im String a enthalten sein sollte (sagen wir mal n mal), dann ist er nach dem Aufruf von sub nur noch n-1 mal dort enthalten. Mehrmaliges Aufrufen ist nötig, um den String ganz zu "säubern". Das ist nicht besonders effizient, aber das Umbasteln der Funktion traue ich dir zu (While-Schleife, die solange läuft bis strstr nur noch NULL zurückgibt).

Und Achtung2, wie gesagt die Pointer Arithmetik. Ich habe den Code NICHT getestet, habe den grad in 5 Minuten auf ein Blatt zusammengeschmiert, also erhofft euch keine Wunder davon. Und wenn Pointer wild werden, dann kann es lustig werden. Also immer mit NULL initialisieren, dann kackt immer das Programm ab, ist jedenfalls besser als einen BlueScreen oder plötzliche Aktivitäten auf der Festplatte ("Hilfe, wo sind meine Daten!").

Achtung3: Speicherverwaltung... Was die Funktion zurückgibt (alle beide: sub und add) muß wieder gelöscht werden. Also immer schön gucken, dass ihr auch irgendwo ein delete zusammen mit entsprechendem Casting (sonst könnte es zu Probleme kommen, da der Mem-Manager nicht weiß wieviel Bytes denn nun von diesem void-Pointer allokiert worden sind) eingebaut habt. Wenn man add mit double aufgerufen hat, dann lieber vorher den void-Pointer als double casten und delete zuführen.

Sonst viel Spaß damit! ;)

EDIT: Sonst quak mich im ICQ an, ich versuch dann noch zu helfen.

SumSi

Senior Member

Re: Listen in C

Dienstag, 28. Januar 2003, 23:22

danke....jetzt bin ich grettet....aber wenn noch jemand lust auf eine aufgabe hat ........ich nehem jedes ergebnis mit .... ;D
eat more meat:)

LiquidAcid

unregistriert

Re: Listen in C

Dienstag, 28. Januar 2003, 23:40

Gibt dir das in irgendeiner Form Punkte (bei was auch immer) ?

SumSi

Senior Member

Re: Listen in C

Mittwoch, 29. Januar 2003, 00:11

wie man es nimmt...ich muss halt meinen schein in info noch mahcen...es ist natürlich einfacher eine aufgabe an die tafel zu schreiben als zum fachgespräch zu gehen.... ;D
eat more meat:)

LiquidAcid

unregistriert

Re: Listen in C

Mittwoch, 29. Januar 2003, 00:23

Aha, so einer bist du! ;D

EDIT:
2 Halbjahre Informatik als Grundkurs (Logo, Locad, WinNiki, Turbo Pascal) - C/C++ selbst beigebracht

Und einer der es studiert hat kein Ahnung vom Thema... Hmm, da kann doch irgendwas nicht richtig sein ;D :o

Eikman

Moderator

Re: Listen in C

Mittwoch, 29. Januar 2003, 01:18

doch, so muss das *g*

LiquidAcid

unregistriert

Re: Listen in C

Mittwoch, 29. Januar 2003, 13:46

Na wenn du das sagst... Dann muß es ja stimmen! ;D

michi_mw

Senior Member

Re: Listen in C

Mittwoch, 29. Januar 2003, 14:25

daraus könnte man jetzt´n calculator basteln, war bei mir Aufgabe 3 ;D (studiere Wirtschaftsinfo, Softwareentwicklung in C is´n schönes Fach :))
Verkaufe Twinplex G mit ultraheller blauer LED im Plexi! Verkaufe TCS! bei Interesse KM oder Email an mich.

SumSi

Senior Member

Re: Listen in C

Mittwoch, 29. Januar 2003, 19:20

ICh studiere etechnik.....informatik ist nebenfach...wir haben da in letzter zeit richtig fiel gelernt..aber in info habe ich im moment noch net so den plan.....aber ich werde mir das in den semester ferien aneignen....habe ine fettes buch und die grundlagen aus den vorlesungen...dann kann nich das sicher auch bald..... ;D
eat more meat:)