2010-03-18 14 views
6

Ciò di cui sono confuso riguarda la funzione isNumPalindrome(). Restituisce un valore booleano sia vero che falso. Come suppongo di usarlo, così posso mostrarlo se è un palindromo o meno. Per es. if (isNumPalindrome == true) cout << "Your number is a palindrome"; else cout << "your number is not a palindrome.";Ho appena saputo delle funzioni C++; posso usare se le istruzioni sui valori restituiti dalla funzione?

#include "stdafx.h" 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
return 0; 
} 

#include <iostream> 
#include <cmath> 

using namespace std; 

int askNumber(); 
bool isNumPalindrome(); 

int num, pwr; 

int main() 
{ 
askNumber(); 

return 0; 
} 

bool isNumPalindrome() 
{ 
int pwr = 0; 

if (num < 10) 
    return true; 
else 
{ 
    while (num/static_cast<int>(pow(10.0, pwr)) >=10) 
    pwr++; 
    while (num >=10) 
    { 
    int tenTopwr = static_cast<int>(pow(10.0, pwr)); 

    if ((num/tenTopwr) != (num% 10)) 
    return false; 
    else 
    { 
    num = num % tenTopwr; 
    num = num/10; 
    pwr = pwr-2; 
    } 
    } 

    return true; 
} 
} 

int askNumber() 
{ 
cout << "Enter an integer in order to determine if it is a palindrome: " ; 
cin >> num; 
cout << endl; 

if(isNumPalindrome(num)) 
{ 
cout << "It is a palindrome." ; 
cout << endl; 
} 
else 
{ 
cout << "It is not a palindrome." ; 
cout << endl; 
} 
return num; 
} 
+7

Wow, per qualcuno solo imparare a conoscere le funzioni si sta già scrivendo molto carino codice C++. Molto bene. –

+0

Haha grazie. Ho solo questa lezione quindi trascorro le mie giornate semplicemente praticando il codice -_-... – Sagistic

+0

Modificato: Funziona ora, ma devo ancora correggere la parte della variabile globale. – Sagistic

risposta

11

Il valore di ritorno di una funzione può essere utilizzata come una variabile di lo stesso tipo

Il vostro programma dovrebbe apparire qualcosa di simile:

int main() 
{ 
    int num=askNumber(); 
    bool isPal=isNumPalindrome(num); 
    if (isPal) 
    { 
    //do something 
    } 
    else 
    { 
    //do something else 
    } 

    return 0; 
} 

o si potrebbe essere ancora più succinta:

int main() 
{ 
    if (isNumPalindrome(askNumber())) 
    { 
    //do something 
    } 
    else 
    { 
    //do something else 
    } 

    return 0; 
} 

Quello che non si vuole fare è utilizzare le variabili globali definite . Nei programmi più complicati che saranno una ricetta per il disastro.

Edit: si vorrà fare in modo di modificare la funzione isNumPalindrome per accettare il numero sta lavorando con:

bool isNumPalindrom(int num) 
{ 
    ... 
} 
+0

dovrei inserire quelle variabili all'interno di int main()? Lo farebbe in una variabile non-module/globale e localizzata. – Sagistic

+0

sì, metti le variabili come locali a main, e poi main le passerebbe alle funzioni che ne hanno bisogno. – miked

+0

+1 per mostrare come assegnare il valore di una funzione a una variabile –

8

Sì, puoi fare una cosa del genere.

In realtà si potrebbe fare solo ...

if (isNumPalindrome()) { ... } 
2

quando una funzione restituisce un tipo si può pensare che funzionano come di essere sostituito dal valore di ritorno e tipo. così per voi:

isNumPalindrome() -> {true/false}

modo da poter scrivere ad esempio:

if(isPalindrome()) 
    cout<<"it is!"<<endl; 
else 
    cout<<"it is not :("<<endl; 
4
if(isNumPalindrome()) 
{ 
    cout << "Your number is a palindrome"; 
} 
else 
{ 
    cout << "Your number is not a palindrome"; 
} 
0

Si può chiamare isNumPalindrome() all'interno askNumber(), e hanno il il valore restituito da isNumPalindrome() deve essere utilizzato in un test condizionale. E 'meglio passare num come argomento per isNumPalindrome però: isNumPalindrome (int num)

int askNumber() 
{ 
cout << "Enter an integer in order to determine if it is a palindrome: " ; 
cin >> num; 
if(isNumPalindrome(num)){ 
    cout << "it is a palindrome"; 
} 
cout << endl; 

return num; 
} 

allora principale può chiamare solo askNumber()

2

In primo luogo, si shouldn't use globals per num e pwr; si dovrebbe passarli come argomenti alle funzioni:

bool isNumPalindrome(int num); 
... 
num = askNumber(); 
isNumPalindrome(num); 

In secondo luogo, non v'è necessità di confrontare un valore booleano con true (o false); usa semplicemente il valore booleano.

È difficile stabilire quale sintassi esatta si sta tentando di utilizzare nell'istruzione di esempio "if", ma una cosa che non si può fare è avere un'istruzione "if" in un'espressione. In C++ ci sono espressioni e affermazioni. Le espressioni hanno valori; le dichiarazioni non lo fanno.

// valid 
if (isNumPalindrome(num)) { 
    std::cout << '"' << num << "\" is a palindrome." << std::endl; 
} else { 
    std::cout << '"' << num << "\" is not a palindrome." << std::endl; 
} 

// invalid 
std::cout << '"' << num << (if (isNumPalindrome(num)) { 
    "\" is a palindrome."; 
} else { 
    "\" is not a palindrome."; 
}) << std::endl; 

// valid, but not recommended 
std::cout << '"' << num << "\" is " << (isNumPalindrome(num) ? "" : "not ") << "a palindrome." << std::endl; 

Per l'operatore ternario (?:), leggere "To ternary or not to ternary?"

+0

Sto ricevendo un sacco di errori quando inserisco le variabili nel main. – Sagistic

+0

la maggior parte di essi sono in quale di, variabile locale non referenziata e indentificatore non dichiarato. – Sagistic

+1

Le funzioni hanno i propri ambiti, non vedono alcuna variabile dichiarata al di fuori di esse, a meno che non le si passi come argomenti. –

0

In una sola frase:

"Come la condizione della dichiarazione se è possibile utilizzare qualsiasi espressione cui risultato, una volta quando l'espressione viene valutata, può essere implicitamente convertito in "bool". "

2

Come molte persone hanno affermato, il valore di ritorno di una funzione diventa essenzialmente il valore della funzione.

Ecco un esempio di un'operazione ternaria per la stampa del risultato.

cout << "The number " << (isNumPalindrome()) ? "is a palindrome" : "is NOT a palindrome"; 

Questo è un po 'strano alla ricerca di un sacco di principianti, ma dimostra come gli operatori ternario può essere utilizzato per stampare le risposte condizionali.

0

un'altra soluzione ;-)

#include <iostream> 
#include <sstream> 
#include <algorithm> 

bool is_palindrome(const int num) 
{ 
    std::ostringstream os; 
    os << num; 
    const std::string& numStr = os.str(); 
    std::string reverseNumStr = numStr; 
    std::reverse(reverseNumStr.begin(), reverseNumStr.end()); 
    const bool result = (numStr == reverseNumStr); 
    return result; 
} 

int main() 
{ 
    int num = 0; 
    std::cout << "Enter an integer in order to determine if it is a palindrome: "; 
    std::cin >> num; 

    std::string inset; 
    if(!is_palindrome(num)) 
    { 
     inset = "not "; 
    } 
    std::cout << "It is " << inset << "a palindrome." << std::endl; 
} 
Problemi correlati