Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » Rätselecke » 27. Virtual Rästel - Anfänger

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.06.2003, 14:06 Uhr
virtual
Sexiest Bit alive
(Operator)


Hier mal zwei Aufgaben:
1. Aufgabe
Ein Palindrom ist ein Wort oder ein Satz, der von hinten oder vorne gelesen den gleichen Inhalt hat, zB:

Code:
Tarne nie deinen Rat!


Dabei sind Leerzeichen und Satzzeichen irrelevant, lediglich die Buchstabenreihenfolge ist ausschlaggebend.
Schreibe einen Palindromchecker, der zu einem eingebennen Satz prüft, ob es sich um ein Palindrom handelt. Dabei soll das Programm darüberhinaus folgende Mappings automatisch machen:

Code:
ß => ss
ck => kk
ä => ae
ö => oe
ü => ue


Eine Schöne Liste von vielen palindromen findet ihr hier: www.gnudung.de/kram/palindrom.htm

2. Aufgabe
Wem das alles zu Textorientiert ist, hier noch die Mathematiker version:
Schreibe ein Programm welches herausfindet, ob es zu einer Zahl N eine mindestens eine Zahlenbasis B (2<=B<=36) gibt, so daß N in der Zahlendarstellung zur Basis B ein Palindrom darstellt. Also zB:
Die Zahl N=33 ist in Binärerer schreibweise (B=2) ein Palindrom, weil:

C++:
33(10) == 10001 (2)


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)

Dieser Post wurde am 02.06.2003 um 14:06 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.06.2003, 15:26 Uhr
~arkantos
Gast


Hier meine vielleicht ein bisschen umständliche Lösung in C ohne dass Spezialmapping mit ß->ss. Hab keine Lust drauf.
Aber: Wieso einfach wenns auch kompliziert geht.


C++:
#include<stdio.h>
#include<string.h>

main()
{
int len;
char satz1[100], satz2[100], satz3[100];
int j, i;

printf("Gib bitte den zu prüfenden Satz ein!\n");
gets(satz1);
len=strlen(satz1);

/*Wandelt den Satz in Kleinbuchstaben um*/
for(i=0; i<len; i++)
satz1[i]=tolower(satz1[i]);

/*Filtert Satzzeichen und Leerzeichen herraus*/
for(i=0, j=0; i<(len); i++)
{
   if(satz1[i]>0x20 && satz1[i]<=0x40)
       continue;

   if(satz1[i]!=0x20)  
   {
      satz2[j]=satz1[i];
      j++;
   }
}


satz2[j]='\0';
len=strlen(satz2);

/*Schreibt den String "satz2" umgekehrt nach "satz3"*/
for(i=len-1, j=0; i>=0; i--)
   {
      satz3[j]=satz2[i];
      j++;
   }
satz3[j]='\0';

if(strcmp(satz2, satz3)==0)
    printf("Ja, das ist ein Palindrom!\n");
else
    printf("Nein, dass ist kein Palindrom!\n");
}





Grüße arkantos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.06.2003, 15:49 Uhr
virtual
Sexiest Bit alive
(Operator)


Vertue ich mich, oder ist

C++:
for(i=0, j=0; i<(len); i++)
{
if(satz1[ i ]>0x20 && satz1[ i ]<=0x40)
     continue;

if(satz1[ i ]!=0x20)
{
     satz2[j]=satz1[ i ];
     j++;
}
}


nicht identisch mit

C++:
for(i=0, j=0; i<(len); i++)
{
     if(satz1[ i ]>=0x20 && satz1[ i ]<=0x40)
          continue;
     satz2[j]=satz1[ i ];
     j++;
}


Daß das unportabel ist, ist Dir hoffentlich bekannt?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.06.2003, 15:55 Uhr
~0xdeadbeef
Gast


Mal so eben hingekladdet; ich denke, so sollte das gehen:

C++:
int ist_palindrom(char *s, int len) {
    int i=0, j=len-1;
    while(i<j){
        if(s[i] == s[j]) {
            ++i;
            --j;
        } else if ((tolower(s[i]) == 'ä' && tolower(s[j])=='e' && tolower(s[j-1]) == 'a') ||
                      (tolower(s[i]) == 'ö' && tolower(s[j])=='e' && tolower(s[j-1]) == 'o') ||
                      (tolower(s[i]) == 'ü' && tolower(s[j])=='e' && tolower(s[j-1]) == 'u') ||
                      (tolower(s[i]) == 'ß' && tolower(s[j])=='s' && tolower(s[j-1]) == 's')) {
            ++i;
            j -= 2;
        } else if ((tolower(s[j]) == 'ä' && tolower(s[i])=='a' && tolower(s[i+1]) == 'e') ||
                      (tolower(s[j]) == 'ö' && tolower(s[i])=='o' && tolower(s[i+1]) == 'e') ||
                      (tolower(s[j]) == 'ü' && tolower(s[i])=='u' && tolower(s[i+1]) == 'e') ||
                      (tolower(s[j]) == 'ß' && tolower(s[i])=='s' && tolower(s[i+1]) == 's')) {
            ++i;
            j -= 2;
        } else return 0;
    }
    return 1;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.06.2003, 15:57 Uhr
~0xdeadbeef
Gast


Ähm...ich hab wohl vergessen, Leerzeichen zu ignorieren. Naja, füg direkt hinter while(i<j) ein:

C++:
while(isblank(s[i])) ++i;
while(isblank(s[j])) --j;


Dann geht das auch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.06.2003, 16:01 Uhr
~arkantos
Gast




Naja, in der Eile ist mir des passiert, aber wie gesagt beefy, viele wege führen nach Rom!

Grüße arkantos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.06.2003, 19:39 Uhr
Pablo
Supertux
(Operator)


Ich musste die erste Aufgabe schon letztes Semester lösen, Palindrome. Leider war es für Turning Machine und das Ding hatte quasi 10 verschiedene Zustände und 30 Befehle, es war echt der Hammer. Wenn man in Turning Machine machen kann, dann kann man überall machen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.06.2003, 19:45 Uhr
~0xdeadbeef
Gast


Hm, naja. In der wirklichen Welt macht es mehr Sinn, mit einer Registermaschine umgehen zu können.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.06.2003, 19:59 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


der Hass bei den Turing-maschinen ist eigentlich nur das hin und herspulen der Bänder.
Wenn ich mich nicht irre kann man aber davon beliebig viele nehmen, so das man nicht mehr spulen muss. Dann braucht man weniger Zustände, weil man ja immer direkten Zugriff hat.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ Rätselecke ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: