Palindrom Programm
Hey Leute,
lerne grade für ne C++ Klausur morgen und bin jetzt an dem letzten zu überprüfenden und zu verstehenden Programm angelangt. Thema ist Paldindrom. Also ob das Wort vorne genauso auch von hinten lesbar ist. Finde leider keinen Ansatz wie ich dran gehen soll. Sehe nämlich nur Felder, Felder, Felder^^.
Wäre nett wenn mir jmd. helfen könnte.
Hier das Programm:
Vielen Dank schonmal im Vorraus
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv)
{
char meinwort[50];
int palindrom, i, laenge, k;
cout<<"Bitte geben Sie ein Wort ein \n";
cin>>meinwort;
i=0;
while (meinwort[i]!='\0') {
i++;}
laenge = i-1;
palindrom = 1;
k = 0;
do {
if (meinwort[k]==meinwort[laenge-k]){
}
else {
palindrom = 0;}
k++;
while (k<=laenge/2 && palindrom != 0);
if (palindrom == 0) {
cout<<"Das Wort ist kein Palindrom \n";}
else {
cout<<"Das Wort "<<meinwort<<" ist ein Palindrom \n";}
system("PAUSE");
}
Vielen Dank schonmal im Vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-Key: 141199
Url: https://administrator.de/contentid/141199
Ausgedruckt am: 28.03.2024 um 17:03 Uhr
5 Kommentare
Neuester Kommentar
Ok, bin kein C++ Crack, aber ich denke erklären kann ichs dir:
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv)
{
char meinwort[50];
int palindrom, i, laenge, k;
cout<<"Bitte geben Sie ein Wort ein \n";
cin>>meinwort;
i=0;
Bis hierhin sollte alles klar sein, es werden nur Variablen initialisiert und der String eingelesen
while (meinwort[i]!='\0') { #### Hier wird die Länge des eingelesenen Wortes ermittelt und in i gespeichert
i++;}
laenge = i-1; #### Die Länge ist i-1, weil der Array bei 0 beginnt, ist nacher wichtig
palindrom = 1; #### Palindrom wird auf true gesetzt
k = 0;
do { ######### Hier wird geschaut, ob der erste Charakter des Wortes und der letzte charakter des Wortes derselbe sind, falls ja passiert nichts und die while-schleife läuft weiter bis alle Charakter des Wortes verglichen sind, logischerweise ist die ANzahl vergleiche so gross wie die hälfte der Charakter des Wortes. Falls der vergleich scheitert, wird Palindrom auf 0, also false gesetzt
######### Beispiel: hallo: meinwort[k] wäre = h und meinwort[laenge-k] wäre = o
if (meinwort[k]==meinwort[laenge-k]){
}
else {
palindrom = 0;}
k++;
while (k<=laenge/2 && palindrom != 0); ###### Wie bereits gesagt muss nur bis zur Mitte des Wortes getestet werden (es wird ja die eine Hälfte mit der anderen Hälfte des Wortes verglichen)
if (palindrom == 0) { ##### Das wars schon, hier wird nur noch gefragt, ob es ein Palindrom ist oder nicht....
cout<<"Das Wort ist kein Palindrom \n";}
else {
cout<<"Das Wort "<<meinwort<<" ist ein Palindrom \n";}
system("PAUSE");
}
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv)
{
char meinwort[50];
int palindrom, i, laenge, k;
cout<<"Bitte geben Sie ein Wort ein \n";
cin>>meinwort;
i=0;
Bis hierhin sollte alles klar sein, es werden nur Variablen initialisiert und der String eingelesen
while (meinwort[i]!='\0') { #### Hier wird die Länge des eingelesenen Wortes ermittelt und in i gespeichert
i++;}
laenge = i-1; #### Die Länge ist i-1, weil der Array bei 0 beginnt, ist nacher wichtig
palindrom = 1; #### Palindrom wird auf true gesetzt
k = 0;
do { ######### Hier wird geschaut, ob der erste Charakter des Wortes und der letzte charakter des Wortes derselbe sind, falls ja passiert nichts und die while-schleife läuft weiter bis alle Charakter des Wortes verglichen sind, logischerweise ist die ANzahl vergleiche so gross wie die hälfte der Charakter des Wortes. Falls der vergleich scheitert, wird Palindrom auf 0, also false gesetzt
######### Beispiel: hallo: meinwort[k] wäre = h und meinwort[laenge-k] wäre = o
if (meinwort[k]==meinwort[laenge-k]){
}
else {
palindrom = 0;}
k++;
while (k<=laenge/2 && palindrom != 0); ###### Wie bereits gesagt muss nur bis zur Mitte des Wortes getestet werden (es wird ja die eine Hälfte mit der anderen Hälfte des Wortes verglichen)
if (palindrom == 0) { ##### Das wars schon, hier wird nur noch gefragt, ob es ein Palindrom ist oder nicht....
cout<<"Das Wort ist kein Palindrom \n";}
else {
cout<<"Das Wort "<<meinwort<<" ist ein Palindrom \n";}
system("PAUSE");
}
Und was bedeutet !=\0 ? Das '\0' ist das Ende eines Strings, es ist also das Ende deines Wortes. Du hast ja denn Char-Array ( char meinwort[50]; ), und wenn du das Wort "HALLO" einliest, dann sieht dein Array so aus:
meinwort = 'H'
meinwort[1] = 'A'
meinwort[2] = 'L'
meinwort[3] = 'L'
meinwort[4] = 'O'
meinwort[5] = '\0'
Und die länge des Wortes wird so ermittelt:
i=0;
while (meinwort[i]!='\0') { ### Während kein '\0' erscheint, wird i hochgezählt, und sobald H A L L O gezählt wurde und '/0' erscheint, bricht die while-Schleife ab, i ist dann = 5 (da Hallo 5 Charakter hat)
i++; Bedeutet dasselbe wie i = i + 1;
}
Für das Wort "HALLO" macht die while-Schleife folgendes:
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort = 'H' , also wird i um eins hochgezählt (i++), i = 1
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[1] = 'A' , also wird i um eins hochgezählt (i++), i = 2
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[2] = 'L' , also wird i um eins hochgezählt (i++), i = 3
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[3] = 'L' , also wird i um eins hochgezählt (i++), i = 4
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[4] = 'O' , also wird i um eins hochgezählt (i++), i = 5
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[5] = '\0' , die Bedingung ist nicht mehr erfüllt, die Schleife wird also abgebrochen, i ist = 5
meinwort = 'H'
meinwort[1] = 'A'
meinwort[2] = 'L'
meinwort[3] = 'L'
meinwort[4] = 'O'
meinwort[5] = '\0'
Und die länge des Wortes wird so ermittelt:
i=0;
while (meinwort[i]!='\0') { ### Während kein '\0' erscheint, wird i hochgezählt, und sobald H A L L O gezählt wurde und '/0' erscheint, bricht die while-Schleife ab, i ist dann = 5 (da Hallo 5 Charakter hat)
i++; Bedeutet dasselbe wie i = i + 1;
}
Für das Wort "HALLO" macht die while-Schleife folgendes:
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort = 'H' , also wird i um eins hochgezählt (i++), i = 1
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[1] = 'A' , also wird i um eins hochgezählt (i++), i = 2
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[2] = 'L' , also wird i um eins hochgezählt (i++), i = 3
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[3] = 'L' , also wird i um eins hochgezählt (i++), i = 4
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[4] = 'O' , also wird i um eins hochgezählt (i++), i = 5
- meinwort[i] != '\0' ## meinwort[i] ist = meinwort[5] = '\0' , die Bedingung ist nicht mehr erfüllt, die Schleife wird also abgebrochen, i ist = 5