Palindromtest

Online-tutorials.net Forenübersicht/C++ / C#/Palindromtest

Antworten Neues Thema Bottom Seite 1 

Autor | Nachricht      nächster / vorheriger Thread

freak2003
Einsteiger

avatar

Registriert seit: 11.2007
Beiträge:3

Palindromtest
Hi,
ich will in meinem kleinen Programm einen Palindromtest machen. Aber es funktioniert irgendwie nicht. Kann mir irgendjemand helfen?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

int quer(int a);
double potenz(double, int);
int ggt(int, int);
int pal(char);

void main(void)
{ char c;
int a, e, wahr;
double b;

do
{
printf("Bitte angeben: 'q'uersumme, 'p'otenz, 'g'gt oder 'P'alindrom oder 'e'xit: ");
scanf("%c", &c);
fflush(stdin);
switch (c)
{ case 'q': {printf("Bitte geben sie eine ganze Zahl ein: ");
scanf("%d", &a);
printf("Die Quersumme ist %d\n", quer(a));
break;}
case 'p':
{ printf("Bitte geben sie die Basis ein: ");
scanf("%lf", &b);
printf("Bitte geben sie den Exponenten ein: ");
scanf("%d", &e);
printf("Das Ergebnis ist: %lf\n", potenz(b,e)); break;
}
case 'g':
{ printf("Bitte geben sie die erste ganze Zahl ein: ");
scanf("%d", &a);
printf("Bitte geben sie die zweite ganze Zahl ein: ");
scanf("%d", &e);
printf("Der GGT der beiden Zahlen ist %d\n", ggt(a,e)); break;
}
case 'P':
{ char ze[50];
printf("Bitte Zeichenkette eingeben: ");
scanf("%c", &ze[50]);
wahr = pal(ze[50]);
if(wahr=1) printf("Zeichenkette ist ein Palindrom.");
else printf("Zeichenkette ist kein Palindrom.");
break;
}
case 'e': exit(0);
default: printf("Falsches Zeichen eingegeben!\n");
}
}while(c!='e');
}

int quer(int a)
{ int summe=0;
fflush(stdin);
while(a>0)
{ summe=summe+ a%10;
a = a/10;
}
return(summe);
}

double potenz(double b, int e)
{ double p =1.0;
if(e>0)
{ while(e>0)
{ p=p*b;
e=e-1;
}
}
else
{ while(e<0)
{ p=p/b;
e=e+1;
}
}
fflush(stdin);
return p;
}

int ggt(int a, int b)
{ int ggt;
while(a!=b)
{ if(a>b) a=a-b;
else b=b-a;
}
ggt=a;
fflush(stdin);
return(ggt);
}

int pal(char s[50])
{ int n=0;
int palindrom;
int i=0;
fflush(stdin);
while(s[i]> 0)
{ switch(s[i])
{ case '\142': case '\132': {s[n]='\142'; n=n+1; break;}
case '\153': case '\148': {s[n]='\153'; n=n+1; break;}
case '\154': case '\129': {s[n]='\154'; n=n+1; break;}
default:
{ if((s[i]>=97)&&(s[i]<=122)) s[i]=s[i]-32;
else s[n]=s[i];
}
}
}
n=n+1;
i=0;
while((i<n) && (s[i]=s[n]))
{ i++;
n--;
}
palindrom = (i>=n);
return(palindrom);
}

Es geht mir hauptsächlich um das Unterprogramm pal, hier wird überprüft ob die zeichen die eingegeben ein palindrom sind oder nicht und dann der Wahrheitswert zurückgegeben.

Weiß jemand was für ein Fehler da drin steckt?

Danke schon mal.

freak2003

14.11.2007 18:31Profil >> Zitat >> IP gespeichert 
Keywords:C++

Simon
Online-tutorials.net Administrator

avatar

Registriert seit: 01.1970
Wohnort:Dornbirn
Beiträge:1181

Palindromtest
Hallo freak03, Willkommen im Forum.

Wieso machst du das nicht so, das du zuerst die Zeichenkette teilst, und dann alle buchstaben mitteinander vergleichst.

Bsp:

ANNA

1.) Teilen: n = 4/2 = 2

int n = strlen(ze);

2.) Testen ob Zeichenanzahl gerade oder nicht

int gerade = 0;

if(strlen(ze) % 2 == 0)
gerade = 1;

//wenn ungerade zeichen in der mitte entfernen
//Todo: musst du machen, bin zu faul laugh, oder du machst den test unter 3) abhängig von gerade und ungerade, bei ungerade wird vom zeichen in der mitte weg überprüft

3) Testen

int return = 1;

int i = 0;
for(i = 0; i < n; i++)
if(ze[i] != ze[(n-1)+i])
return = 0;

return return;

4.) Ende

return liefert 0 bei keinem pallindrom, 1 bei einem

Ich hoffe das hilft dir. Lachend

Dieser Beitrag wurde zuletzt am 15.11.2007 11:18 von Simon editiert.


-------------------

http://www.online-tutorials.net/wiki/funktionsname

Für was Personal Firewalls GnuGP emails verschlüsseln C++ Tutorial Sicherheits Tutorials



15.11.2007 11:12Homepage >> icq status >>Profil >> Zitat >> IP gespeichert 
Keywords:Palindromtest
                   nächster / vorheriger Thread

Antworten Neues Thema Top Seite 1