Antwort schreiben

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

Antwort schreiben
Username: Username: Passwort: Password vergessen?
Beitragssymbol:   Kein Symbol    
Funktionen:
Weitere Smiley's
                       
Lachend attention cry keep cool question happy laugh tongue Lachend attention cry keep cool question happy laugh tongue
Betreff:
Keywords: (Stichworte, die das Thema beschreiben)
Beitrag:
Optionen: E-Mail Benachrichtigung
BBCode benutzen
Datei anhängen: Erlaubt: rar zip pdf txt gif bmp jpg jpeg png

Bearbeitungshilfe...
Schauen Sie am besten in der wikipedia nach, falls Sie sich über einen Begriff nicht im klaren sind.

Mit einem klick auf Send bestätigen Sie, das Sie die Nutzungsbedingungen gelesen haben, und das Sie damit einverstanden sind.

Themenübersicht
(absteigend nach Datum sortiert)
Author Beitrag
Simon HechtHallo 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. :-)

freak2003Hi,
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