freak2003 Einsteiger
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
|
Simon Online-tutorials.net Administrator
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 , 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. 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
|