Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
Geschrieben am: 24.04.2007 um 20:38 Uhr
Zuletzt editiert am: 24.04.2007 um 20:40 Uhr
|
|
Hi@
ich verzweifel hier demnächst =)
Ich schreib die Aufgabe einfach mal so fast ganz ab ^^, vllt kann mir ja einer helfen
Schreiben Sie ein Programm, das ein Wort einliest (max.63 Buchstaben) und prüft, ob es sich bei dem Wort um ein Palidrom handelt (Palidrom: Wort das man sowohl von vorne als auch hinten lesen kann und gleich bleibt, otto, reliefpfeiler, rentner,...).
Gliedern Sie das Programm in drei Funktionen verteilt auf drei Dateien:
- 1. Datei: Main-Funktion: Eingabe und Ausgabe
- 2. Datei: a) Funktion isPalidrom(...): Prüft, ob ein String ein Palidrom ist. Wenn ja gibt die Funktion den Wert 1 zurück, ansonsten 0.
b) Funktion lengthOfString(...): Liefert die Nutz-Länge eines Strings (d.h. die Anzahl der Bytes vom Beginn des Strings, bis zum ersten Byte mit Wert 0). Diese Funktion benötigen Sie vermutlich innerhalb der Funktion isPalindrom(...). Verwenden Sie NICHT die Funktion strlen().
- 3. Datei: Header-Datei für die 2.Datei: Enthält die Prototypen der Funktion
isPalindrom(...).
Verwenden Sie für die Funktion isPalindrom() folgendes Gerüst:
int isPalindrom(char line[])
{
int i;
int length;
..........
}
Definieren Sie keine weiteren Parameter oder lokale Variablen.
VIELEN DANK SCHONMAL IM VORAUS
|
|
Teargas - 38
Champion
(offline)
Dabei seit 06.2006
2196
Beiträge
|
Geschrieben am: 24.04.2007 um 20:43 Uhr
Zuletzt editiert am: 24.04.2007 um 20:45 Uhr
|
|
Mach doch ne Schleife, nimmt den ersten und letzten Buchstaben und wenn die gleich sind gehts einen Schritt weiter. Zweiter und Vorletzer ....usw Wenn nicht Rückgabe = keine Palindrom.
Eventuell die einzelnen Buchstaben noch in ein Array schreiben, wenn das geht.
... so daß wir eine Weile hingerissen das Leben spielen, nicht an Beifall denkend.
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
Geschrieben am: 24.04.2007 um 20:45 Uhr
Zuletzt editiert am: 24.04.2007 um 20:47 Uhr
|
|
Zitat von Teargas: Mach doch ne Zähl Schleife, nimmt den ersten und letzten Buchstaben und wenn die gleich sind gehts einen Schritt weiter. Wenn nicht Rückgabe = keine Palindrom.
joa also erstmal danke... so hatte ichs gemacht aber ich versteh das mit den 3 dateien kein bisschen, hatte das vorher noch nie, scheint denen aber egal zu sein ^^
das mit array musst du sogar, sonst kannst du ja nich zählen.... wenn ich das richtig in erinnerung hab
halt dann immer mit ....for(i = 0; i < lengthOfString / 2; i++).... AAAAAHHHHHHHHHHHHHHHHH, mein kopf will nich mehr :(
|
|
Teargas - 38
Champion
(offline)
Dabei seit 06.2006
2196
Beiträge
|
|
Geschrieben am: 24.04.2007 um 20:46 Uhr
|
|
Vielleicht musst die dann includieren, also die Funktionen in extra Dateien speichern.
... so daß wir eine Weile hingerissen das Leben spielen, nicht an Beifall denkend.
|
|
Frau-B
Fortgeschrittener
(offline)
Dabei seit 02.2005
32
Beiträge
|
Geschrieben am: 24.04.2007 um 20:57 Uhr
Zuletzt editiert am: 24.04.2007 um 20:59 Uhr
|
|
Das mit den 3 Dateien ist kein Problem, schau dir mal das Stichwort "extern" an
Außerdem musst du in der main.c die Prototypen der Funktionen definieren, die in den externen Dateien sind. Das ist eigentlich schon alles. Und je nachdem welche Entwicklungsumgebung du verwendest natürlich alles zusammenlinken lassen, eh klar.
EDIT:
Hab nicht gesehen dass in der Vorgabe steht:
3. Datei: Header-Datei für die 2.Datei: Enthält die Prototypen der Funktion
isPalindrom(...).
Aber das ist auch kein Problem, dann schreibst du die Prototypen halt nicht direkt in die main.c sondern in die Headerdatei und includierst diese.
|
|
Caarcrinolas - 41
Profi
(offline)
Dabei seit 02.2006
909
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:00 Uhr
|
|
Zitat von Teargas: Vielleicht musst die dann includieren, also die Funktionen in extra Dateien speichern.
Ich versteh das so
1. Datei ist das main Konstrukt
2. Datei ist die Methode definiert, das tratra drumrum
3. Datei ist der Header von Datei 2, d.h. die Prototypen sind hier definiert
Das bedeutet das in der 1. Datei die ganzen includes der ausgelagerten Files auftauchen müssen.....
Zur Vorgehensweise bei der Überprüfung, würde ich spontan....
die Eingabe mit 2 Zeigern abgrasen....Einer vom Anfang und einer vom Ende.....
Bei Übereinstimmung solange weitermachen bis keine Übereinstimmung mehr auftritt....
Du hast ja als Schleifeneinschränkung die Anzahl der Zeichen
Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:10 Uhr
|
|
danke für eure tipps.... aber bei mir fehlts nich an der idee sondern an der durchführung =) hätte ich vllt erwähnen sollen... und zeiger hatten wir noch nich ^^
|
|
gaucho - 41
Halbprofi
(offline)
Dabei seit 10.2004
120
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:53 Uhr
|
|
Zeiger muss man für dieses Beispiel nicht zwingend beherschen. Denk Dir einfach char[] als Array, dessen Länge Du nicht kennst. Bestimmen lässt sich die Länge mit strlen(). Die Funktion findest Du in der string.h wenn ich mich nicht irre. Danach die schon erwähnte Methode um zu sehen, ob ein Palindrom übergeben wurde.
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:54 Uhr
|
|
Zitat von gaucho: Zeiger muss man für dieses Beispiel nicht zwingend beherschen. Denk Dir einfach char[] als Array, dessen Länge Du nicht kennst. Bestimmen lässt sich die Länge mit strlen(). Die Funktion findest Du in der string.h wenn ich mich nicht irre. Danach die schon erwähnte Methode um zu sehen, ob ein Palindrom übergeben wurde.
strlen darf ich leider auch nich verwenden :(
|
|
gaucho - 41
Halbprofi
(offline)
Dabei seit 10.2004
120
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:58 Uhr
|
|
Auch kein Problem. Lässt sich relativ einfach selbst erstellen.
Du schreibst Deine Funktion lengthOfString(...) mit Rückgabeparameter int. Als Übergabe nimmst Du char[] (also das Wort). Nun durchläufst Du den Array vom ersten Buchstaben (char[0]) bis zum Ende. Ein String in C wird stets mit '\0' abgeschlossen. Folglich ist der Index an dem '\0' steht die Länge Deines Worts. Palindrombestimmung sollte dann auch nicht das Problem sein.
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
|
Geschrieben am: 24.04.2007 um 21:59 Uhr
|
|
yeah fett, danke.... '\0' das ist gut..... =)
|
|
Da4H³ad - 38
Experte
(offline)
Dabei seit 11.2003
1092
Beiträge
|
|
Geschrieben am: 24.04.2007 um 22:17 Uhr
|
|
Zitat von gaucho: Auch kein Problem. Lässt sich relativ einfach selbst erstellen.
Du schreibst Deine Funktion lengthOfString(...) mit Rückgabeparameter int. Als Übergabe nimmst Du char[] (also das Wort). Nun durchläufst Du den Array vom ersten Buchstaben (char[0]) bis zum Ende. Ein String in C wird stets mit '\0' abgeschlossen. Folglich ist der Index an dem '\0' steht die Länge Deines Worts. Palindrombestimmung sollte dann auch nicht das Problem sein.
das hätt ich auch noch gewusst :d
aber alles andere hat mein kopf erfolgreich verdrängt :D
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
|
Geschrieben am: 24.04.2007 um 22:24 Uhr
|
|
ihr dürft mir jedoch immernoch gerne lösungsvorschläge posten
|
|
rufinus - 37
Anfänger
(offline)
Dabei seit 04.2007
2
Beiträge
|
Geschrieben am: 24.04.2007 um 23:06 Uhr
Zuletzt editiert am: 24.04.2007 um 23:07 Uhr
|
|
char[] strrev(char[] str)
{
int i, len = strlen(str);
char* rev = (char*)malloc(sizeof(char)*(len+1));
for (i = 0; i < len; i ++) {
rev[i] = str[len-i];
}
rev[len] = '\0';
return rev;
}
bool palyndrome(char[] str)
{
char[] rev = strrev(str);
bool r = strcmp(str, rev) == 0;
free(rev);
return r;
}
|
|
Moritz - 39
Halbprofi
(offline)
Dabei seit 10.2002
158
Beiträge
|
|
Geschrieben am: 24.04.2007 um 23:18 Uhr
|
|
Zitat von Moritz: Zitat von gaucho: Zeiger muss man für dieses Beispiel nicht zwingend beherschen. Denk Dir einfach char[] als Array, dessen Länge Du nicht kennst. Bestimmen lässt sich die Länge mit strlen(). Die Funktion findest Du in der string.h wenn ich mich nicht irre. Danach die schon erwähnte Methode um zu sehen, ob ein Palindrom übergeben wurde.
strlen darf ich leider auch nich verwenden :(
|
|
Rifleman - 40
Experte
(offline)
Dabei seit 09.2003
1540
Beiträge
|
|
Geschrieben am: 24.04.2007 um 23:59 Uhr
|
|
Zitat von rufinus: char[] strrev(char[] str)
Mh...das sieht sehr eigenartig aus und sollte eigentlich einen Fehler zur Compilierzeit ergeben...die alte Array-Problematik.
Ich denke es sollte heißen:
char *strrev(char str[])
Zitat von Moritz: strlen darf ich leider auch nich verwenden :(
Und? Du musst zu dem Code nur noch eine fkt hinzufügen, die eben strlen ersetzt. Dabei kannst du von der Nullterminierung ausgehen....
Es sind die kleinen Dinge, die einen zum Wahnsinn treiben.
|
|