2016-03-22 4 views
0

Ich versuche ein Programm zu schreiben, das alle Palindrom in Reichweite [a, b] drucken würde. Ich habe dies bisher geschrieben, aber nichts wird gedruckt, nachdem ich die Werte für a, b eingegeben habe. Was fehlt?Drucken aller Palindromzahlen in einem bestimmten Bereich

#include "stdafx.h" 
#include <iostream> 
using namespace std; 

int t = 0, rmd, z, a, b; 

int reverse() { 
    while (z != 0) { 
     rmd = z% 10; 
     t = t * 10 + rmd; 
     z/= 10; 
     } 

    return t; 
} 

int palin() { 
    if (a == reverse()) { 
     return 1; 
    } 
    else 
     return 0; 

} 

int main() { 

    cout << "a: "; cin >> a; 
    cout << "b: "; cin >> b; 

    while (a <= b) { 
     z = a; 
     if (palin()) 
      cout << a << endl; 
     a++; 
    } 
    system("pause"); 
    return 0; 
} 
+0

es kein Skript ist es ein Programm ist –

+1

Sie Neuinitialisierung 't' nicht vor jedem Aufruf' reverse() ' –

+0

Wenn Sie Schleife' while (a <= b) ', wenn tun Sie erwarte 'b molbdnilo

Antwort

1

Ihre Verwendung von Variablen ist, was Sie verwirrt. Das eigentliche Problem besteht nicht darin, t jedes Mal, wenn Sie den Rückwärtsgang wählen, auf Null zu setzen, sondern Sie sollten darüber nachdenken, wie Sie das variable Scoping verwenden und welche Funktionen tatsächlich ausgeführt werden. Im Moment haben Sie 2 Prozeduren, die Aktionen für globale Daten ausführen. Versuchen Sie stattdessen, das Problem mithilfe von Funktionen zu formulieren, die Argumente akzeptieren, und geben Sie ein Ergebnis zurück.

#include <iostream> 

using namespace std; 

int reverse(int z) { 
    int t = 0; 

    int rmd; 
    while (z != 0) { 
     rmd = z % 10; 
     t = t * 10 + rmd; 
     z/= 10; 
    } 

    return t; 
} 

int palin(int z) { 
    return z == reverse(z); 
} 

int main() { 
    int a, b; 

    cout << "a: "; cin >> a; 
    cout << "b: "; cin >> b; 

    while (a <= b) { 
     if (palin(a)) { 
      cout << a << endl; 
     } 
     a++; 
    } 
    system("pause"); 
    return 0; 
} 
2

Das Problem ist, dass die Variable tnicht lokal für Ihre reverse() Funktion ist. Ihr Wert bleibt bis zum folgenden Aufruf erhalten, so dass das Ergebnis des Reverse zu Junk wird, das nicht mit dem tatsächlichen Aufruf zusammenhängt.

Sie müssen t lokal zu reverse() machen, um dieses Problem zu beheben.

Im Allgemeinen ist es eine gute Idee, die Variablen so zu deklarieren, dass sie in den innersten Bereich passen, zu dem sie gehören könnten, ohne den Code zu beschädigen. In diesem Fall wäre dies der Gültigkeitsbereich der reverse()-Funktion für t und der Gültigkeitsbereich von main für die verbleibenden Variablen; palin sollte a als Parameter verwenden.