• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem w kodzie, test na palindrom.

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 17 października 2015 w C i C++ przez dartek Początkujący (300 p.)
edycja 18 października 2015 przez dartek

Witam, niedawno zacząłem się uczyć z pomocą genialnych tutoriali pana Mirosława zelenta. Ostatnia sam wiele kombinowałem, a po odcinku o łańcuchach znaków, spróbowałem stworzyć program sprawdzający, czy dane słowo jest palindromem. Coś jednak poszło nie tak i mam problemy z jego uruchomieniem. Bardzo prosiłbym o wskazówki dot. tego co zmienić.

KOD:

 

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    string slowo;
    int dlugosc;

    cout << "Podaj swoje slowo, ktore zostanie sprawdzone testem na palindrom: ";
    cin >> slowo;

    dlugosc=slowo.length();
    int a=0;
    int b=dlugosc-1;

    if
        (
         for(a, b; (a==b)||(a<b); a++, b--)
        {
            slowo[a]==slowo[b];
        }
        )
        cout << "Slowo jest palindromem. " << endl;
    else
        cout << "Slowo nie jest palindromem. :(" << endl;

    return 0;
}

 

4 odpowiedzi

0 głosów
odpowiedź 18 października 2015 przez furas Maniak (53,800 p.)

Coś jednak poszło nie tak i mam problemy z jego uruchomieniem.

A co dokładnie poszło nie tak ? Jeśli pojawił się komunikat o błędzie to podaj go w całości. Jeśli program daje niepoprawne dane to podaj co wprowadzasz na wejściu, co otrzymujesz na wyjściu a co chciałbyś aby poprawnie dawało na wyjściu.

Na forum jest specjalny przycisk do wstawiania kodu przez co jest kolorowany i bardziej czytelny. Jak możesz popraw Swój kod.

---

Rzuciłem okiem na kod i ta konstrukcja gdzie `for` jest wewnątrz `if` wygląda bardzo nietypowo - pierwszy raz widzę coś takiego. To na pewno nie robi tego co tobie się wydaje, że powinno robić.

komentarz 18 października 2015 przez dartek Początkujący (300 p.)
Linie 19: 1. expeceted primary-expression before "for" 2. expected ')' before 'for' 3. exptected ';' before ')' token.

Linia 23: Ad.1 ---\\--- before ')'  oraz to samo co 19.3
komentarz 18 października 2015 przez furas Maniak (53,800 p.)

`if` oczekuje, że wewnątrz () będzie warunek, ktory zwraca `true/false` (lub coś podobnego do `true/false`). Instrukcja `for` zaś nie zwraca żadnej wartości - nie do tego służy.

Jak już to należało by zrobić:

// domyślnie zakładam, ze to palindrom
bool palindrom = true;

// sprawdzam kolejne litery
for( ; a =< b; a++, b--)
{
    if( slowo[a] != slowo[b]) {
        // a jednak nie palindrom
        palindrom = false;

        // nie ma co sprawdzać reszte liter
        break;
    }
}

if( palindrom == true ) {
	cout << "TRUE" << endl;
} else {
	cout << "FALSE" << endl;
}

 

0 głosów
odpowiedź 18 października 2015 przez endriuh28 Użytkownik (920 p.)
edycja 18 października 2015 przez endriuh28

Spróbuj coś takiego:

#include <iostream>
#include <cstdlib>
using namespace std;
 
int main()
{
    string slowo;
    int dlugosc;
 
    cout << "Podaj swoje slowo, ktore zostanie sprawdzone testem na palindrom: ";
    cin >> slowo;
 
    dlugosc=slowo.length();
    int a=0;
    int b=dlugosc-1;
    bool czy_jest_palindrom = true;

    for(a, b; (a==b)||(a<b); a++, b--)
    {
            if(slowo[a] != slowo[b])
            {
                 czy_jest_palindrom = false;
                 break;
            }
    }
 
    if (czy_jest_palindrom)
        cout << "Slowo jest palindromem. " << endl;
    else
        cout << "Slowo nie jest palindromem. :(" << endl;
 
    return 0;
}

 

0 głosów
odpowiedź 18 października 2015 przez Radfler VIP (101,030 p.)
Czemu w warunku przy ifie dałeś pętlę (linia 19)? Takie coś jest w C++ nie możliwe!
0 głosów
odpowiedź 18 października 2015 przez criss Mędrzec (172,590 p.)

Nie wiem jak żeś rozkminił tego fora w ifie :D ale to nie ma prawa działać. Nie łatwiej po prostu:

for(short i = 0; i < slowo.length()/2; i++)
        if( slowo[i] != slowo[slowo.length() - i - 1]) //nie jest palindromem;

A jeśli koniecznie chcesz to zrobić na takiej zasadzie jak ty to zrobiłeś, to poczytaj o wyrażeniach lambda. Wtedy jesteś w stanie zrobić coś takiego.

Btw. - to co robisz nie do końca ma sens - łatwiej jest sprawdzić czy NIE jest palindromem. Sprawdzasz czy literki się od siebie różnią, jeśli chociaż jedna para się różni to nie jest i koniec.

komentarz 19 października 2015 przez dartek Początkujący (300 p.)

Bardzo dziękuję za pomoc i wskazówki dot. zmian kodu :)

Podobne pytania

+1 głos
1 odpowiedź 299 wizyt
pytanie zadane 26 czerwca 2023 w C i C++ przez Szyszka Gaduła (3,490 p.)
0 głosów
1 odpowiedź 158 wizyt
pytanie zadane 25 grudnia 2022 w C i C++ przez polandonion Mądrala (7,100 p.)
0 głosów
1 odpowiedź 255 wizyt
pytanie zadane 7 sierpnia 2022 w C i C++ przez Noizz00 Użytkownik (910 p.)

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,012 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...