Palindrome
-
Hallo ich hab heute in der schule in proggen ne arbeit geschrieben. in der arbeizt sollten wir ein programm schreiben das palindrome erkennt also wörter die man rückerts und vorwerts gleich lesen kann. da ich es in der schule nich hinbekommen hab bin ich zimli8ch verweifelt nach hause und hab versucht den fehler zu finden aner ich finde nix könnt ihr mir helfen???
hier mein code
[code]
// KA.cpp : Defines the entry point for the console application.
//#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <windows.h>
#include <string>
#include <stdlib.h>char wort[100];
int lang,y;void einlesen();
void laenge();
void pruefen();
void ausgabe();int main()
{int repeat;
do{
y=0;
lang=0;
einlesen();
laenge();
pruefen();
ausgabe();printf("Nochmal?\n1Ja\n2=nein\n ");
scanf("%i",&repeat);
}while(repeat==1);return 0;
}void einlesen()
{
printf("Bitte gebnsie das wort ein \t=");
gets(wort);
}void laenge()
{int i;
for(i=0;i<100;i++)
{
if(wort[i]!='\0')
lang++;
}}
void pruefen()
{
int i,j=0;j=lang;
for(i=0;i<=lang;i++)
{
if(wort[i]!=wort[j])
{
y=1;
}
j=lang-i;
}}
void ausgabe()
{if(y=1)
{
printf("\n\n%s ist kein Palindrom und besteht aus %i Zeichen \n\n",wort,lang);
}if(y=0)
{
printf("%s ist ein Palindrom und besteht aus %i Zeichen",wort,lang);
}
}
-
if(y == 1) // == { printf("\n\n%s ist kein Palindrom und besteht aus %i Zeichen \n\n",wort,lang); }
-
danke für den hinweis dabe das programm klappt trozdem nicht
-
Mit ordentlicher Formatierung hätten bestimmt schon mehr geantwortet.
EDIT: ...und mit einer ausführlicheren Frage ("klappt nicht" ist keine ausreichende Fehlerbeschreibung)void laenge() { int i; for(i=0;i<100;i++) { if(wort[i]!='\0') lang++; } }
Die Funktion beendet sich nicht beim '\0', also werden alle Zeichen hinter dem '\0', die selbst nicht '\0' sind, mitgezählt (das sind vermutlich alle, da Dir keiner garantiert dass wort mit Nullen initialisiert wird).
Tipp: Du solltest lang in laenge initialisieren, nicht vor dem Aufruf von laenge (wenn's denn schon global sein muss)void pruefen() { int i,j=0; j=lang; for(i=0;i<=lang;i++) { if(wort[i]!=wort[j]) { y=1; } j=lang-i; } }
Hier gehst Du eins zu weit über das Wort. Mach in der for-Bedingung i<lang, wie in laenge() auch. Auch j ist falsch definiert. Das letzte Zeichen ist (lang-1) statt (lang), und das jeweils "gegenüberliegende" Zeichen zu i ist (lang-i-1) statt (lang-i).
Tipp: Du kannst die Schleife beenden sobald Du festgestellt hast, dass es kein Palindrom ist.
Tipp 2: Du brauchst nicht das gesamte Wort zu durchlaufen sondern nur bis zur Mitte des Wortes.Den dritten Fehler hat immigrant ja schon bemerkt, und dass das, was für (y == 1) gilt natürlich auch für (y == 0) gilt, hast Du sicher selbst bemerkt.
-
du könntest auch in der pruefen() funktion das wort einfach umdrehen und dann mit strncmp() das alte und neue wort vergleichen...