Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Palindrom czy dobry pomysł?

Ostatnio zmodyfikowano 2017-04-16 00:53
Autor Wiadomość
Beginner777
Temat założony przez niniejszego użytkownika
Palindrom czy dobry pomysł?
» 2017-04-14 19:04:31
Zapisałem to w taki sposób ale ciągle mam wątpliwości odnośnie if.
Czy to jest poprawne rozwiązanie?

C/C++
#include<iostream>
#include<string>
using namespace std;
int main()
{
    int a; int b;
    string wyraz;
    cout << "Podaj wyraz:" << endl;
    cin >> wyraz;
    for( a = 0, b = wyraz.length() - 1; a++; b-- )
    {
        if( wyraz[ a ] != wyraz[ b ] )
             cout << "To nie jest palindrom" << endl;
        else
             cout << "To jest palindrom" << endl;
       
    }
   
    return 0;
}
[ / b ]
P-160127
Gibas11
» 2017-04-14 19:23:55
Wystarczyłoby to skompilować i uruchomić, już nie byłoby wątpliwości, że if jest źle napisany. ;) Poza tym wystarczy ci jeden int do skakania po pozycjach. A, no i standardowo – 
using namespace std;
 to zuo.

C/C++
#include <iostream>
#include <string>

int main() {
    std::string wyraz;
    std::cout << "Podaj wyraz:" << std::endl;
    std::cin >> wyraz;
   
    bool palindrom = true;
    for( int i = 0; i <= wyraz.size() / 2; ++i ) {
        if( wyraz[ i ] != wyraz[ wyraz.size() - 1 - i ] ) {
            palindrom = false;
        }
    }
   
    std::cout << std::boolalpha << palindrom << std::endl;
   
    return 0;
}
Kodu wydaje mi się nie trzeba tłumaczyć, ale jak coś to odpowiem na jakieś pytania.
P-160128
Beginner777
Temat założony przez niniejszego użytkownika
Dlaczego nie używamy using
» 2017-04-14 19:37:14
Dlaczego nie używamy using namespace std?
C/C++
#include <iostream>
#include <string>

int main() {
    std::string wyraz;
    std::cout << "Podaj wyraz:" << std::endl;
    std::cin >> wyraz;
   
    bool palindrom = true;
    for( int i = 0; i <= wyraz.size() / 2; ++i ) { //czemu dzielimy na 2 ?
        if( wyraz[ i ] != wyraz[ wyraz.size() - 1 - i ] ) { //czemu odejmujemy jeszcze i oprócz 1?
            palindrom = false;
        }
    }
   
    std::cout << std::boolalpha << palindrom << std::endl;
   
    return 0;
}
P-160129
Gibas11
» 2017-04-14 21:34:34
Dlaczego nie używamy using namespace std?
Dlatego.

czemu dzielimy na 2 ?
Bo iterując po parach przód–koniec wystarczy dojść do połowy żeby sprawdzić wszystkie. Przy okazji środkowy znak (przy nieparzystej długości) można pominąć, on nie wpływa na to czy wyraz jest palindromem.

czemu odejmujemy jeszcze i oprócz 1?
Dlatego, że indeks ostatniego znaku to nie
word.size()
, tylko
word.size() - 1
.
P-160135
mokrowski
» 2017-04-15 10:59:26
Nieco inaczej i trochę wydajniej.
C/C++
#include <iostream>
#include <string>

int main() {
    using namespace std;
   
    string wyraz;
    cout << "Podaj wyraz:" << endl;
    cin >> wyraz;
   
    bool palindrom = true;
    size_t pierwszy = 0;
    size_t ostatni = wyraz.size() - 1;
   
    // Bo po co dzielić i stosować arytmetykę indeksów?
    while( pierwszy < ostatni ) {
        if( wyraz[ pierwszy++ ] != wyraz[ ostatni-- ] ) {
            palindrom = false;
            break; // Bo po co sprawdzać dalej?
        }
    }
   
    std::cout << std::boolalpha << palindrom << std::endl;
}

Lub wręcz bazując na działaniu operatorów logicznych:
C/C++
#include <iostream>
#include <string>

int main() {
    using namespace std;
   
    string wyraz;
    cout << "Podaj wyraz:" << endl;
    cin >> wyraz;
   
    bool palindrom = true;
    size_t pierwszy = 0;
    size_t ostatni = wyraz.size() - 1;
   
    while( pierwszy < ostatni
    &&( wyraz[ pierwszy++ ] == wyraz[ ostatni-- ] ||( palindrom = false ) ) );
   
    std::cout << std::boolalpha << palindrom << std::endl;
}
Ale nie powiem żeby to ostatnie broniło się czytelnością... :-/
P-160144
Gibas11
» 2017-04-15 12:51:06
Bo po co dzielić i stosować arytmetykę indeksów?
Bo odruch. :P

Bo po co sprawdzać dalej?
Bo pomyślałem, że już wstawiłem
break
 i więcej tam nie spojrzałem. ;-;
P-160146
Beginner777
Temat założony przez niniejszego użytkownika
Jednego nie rozumiem
» 2017-04-15 22:31:46
Dlaczego od dlugości odjemujemy 1 ?
jesli isdziemy dekrementacja od końca?
P-160172
karambaHZP
» 2017-04-16 00:49:29
Kiedy następuje pierwsza dekrementacja?
Przed czy po użyciu indeksu?
» Kurs C++ » Poziom 2Tablice jednowymiarowe lekcja
P-160176
« 1 » 2
  Strona 1 z 2 Następna strona