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

Sprawdz czy podany wyraz jest palindromem.

Konkurs Mistrz Programowania
0 głosów
1,996 wizyt
pytanie zadane 21 października 2019 w C i C++ przez Maciek Zębala Nowicjusz (140 p.)

Cześć, mam problem z zadaniem o takiej treści 

"Sprawdz czy podany wyraz jest palindromem. W pierwszej linii standardowego wejścia znajduje się jedna liczba całkowita N z zakresu od 1 do 1000, określająca liczbę wyrazów, które umieszczone są kolejno po sobie w następnych wierszach. Każdy wyraz to ciąg znaków (tylko małych liter) bez spacji. Długość słowa 1 do 100 znaków. Dla każdego wyrazu napisz od nowej lini TAK jeśli jest palindromem i NIE jeśli nie jest."

Utknąłem w momencie w którym program wypisuje czy dane słowo jest palindromem czy nie, ale wyświetla on tylko prawidłową odpowiedź dla ostatniego podanego słowa, np podaje słowa: mama, tata, anna, więc program powinien wypisać NIE NIE TAK, a wypisuje TAK TAK TAK. Proszę o pomoc.

#include <iostream>
using namespace std;

#include <string>
int i, j, N;


bool czy_palindrom(string wyraz)
{
    
	bool jest=true;
	for(int i=0, j=wyraz.length()-1; i<j; i++, j--)
	if(wyraz[i]!=wyraz[j])
	{
		jest=false;
		break;
	}

	return (jest==true);
}

int main()
{

    string wyraz;

    cout << "podaj liczbe wyrazow";

    cin >> N;

    for (i = 0; i < N; i++)

    {

        cout << "podaj wyraz" << endl;

        cin >> wyraz;
    }

    for (i = 0; i < N; i++)

    {
        czy_palindrom(wyraz);

        if (czy_palindrom(wyraz)==true)

        {

            cout << "TAK" << endl;
        }

        else

        {

            cout << "NIE" << endl;
        }
    }

    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 21 października 2019 przez Michałełe Nałogowiec (25,600 p.)
Witam

W pierwszej pętli wpisujesz do zmiennej wyraz n razy. Czyli przy każdym kroku pętli nadpisujesz wartość w tejże zmiennej.

Zmień string wyraz na np. tablice string'ów i dla każdego z kolei wywołuj funkcję.
0 głosów
odpowiedź 21 października 2019 przez DanielD Użytkownik (820 p.)
znalazłem 2 błędy
tak jak pisał kolego posiadasz zmienną string wyraz; którą nadpisujesz za każdym razem podając nowy wyraz, najrozsądniej było by zmienić string na tablice string i przeliterować po zawartości tej tablicy.

kolejny błąd tkwi w metodzie czy_palindrom zwracasz zawsze wartość true, tutaj są dwie możliwości, najłatwiej zwrócić tylko wartość jest skoro przypisałeś true na początku
0 głosów
odpowiedź 21 października 2019 przez DawidK Nałogowiec (37,910 p.)

możesz zrezygnować z deklaracji zmiennych " i  " oraz  " j ", pierwszą może deklarować w pętlach druga nie jest tak naprawdę potrzebna.

 ze zmiennej bool również możesz zrezygnować - zastępując ją po prostu przez 'return true' return false'

w pętli for chyba brakuje nawiasów (nie jestem pewien mało piszę w c++)

nie musisz też sprawdzać długości całego słowa wystarczy - Ci połowa, pierwszy==ostatni to to samo co ostatni==pierwszy

zmienną ' j ' w pętli możesz zastąpić przez wyraz.length() - 1 (ostatni element) i odejmować od niej zmienną ' i  ' przy każdej iteracji pętli

to co pisał DanielD - przydałaby się tablica ze stringami

 if(czy_palindrom(wyraz)==true) można zastąpić po prostu if(czy_palindrom(wyraz)) - funkcja zwraca Ci przecież zmienną bool

#include <iostream>
using namespace std;
#include <string>
int N;

bool czy_palindrom(string wyraz)
{
    for(int i=0 ; i<wyraz.length()/2 ; i++){
        if(wyraz[i] != wyraz[wyraz.length() -1 - i])
            {
                return false;
            }
    }
    return true;
}

int main()
{
    cout << "podaj liczbe wyrazow" << endl;
    cin >> N;
    string wyrazy [N];

    for (int i = 0; i < N; i++)
    {
        cout << "podaj wyraz" << endl;
        cin >> wyrazy[i];
    }

    for (int i = 0; i < N; i++)
    {
        if (czy_palindrom(wyrazy[i]))
        {
            cout << "TAK" << endl;
        }
        else
        {
            cout << "NIE" << endl;
        }
    }

    return 0;
}

 

komentarz 22 października 2019 przez DanielD Użytkownik (820 p.)
Bardzo mi się pobada że wszyscy tutaj sobie nawzajem pomagają :)
Tylko pytanie czy rozwiązując problem za kogoś pomagamy mu czy bardziej jak w szkole dajemy odpisać prace domową a on nadal nie rozumie zadania :P
komentarz 22 października 2019 przez DawidK Nałogowiec (37,910 p.)
Po to są komentarze do kodu ;) pozatym z kodów też można coś wywnioskować i mieć np dodatkowe pytania, jeżeli ktoś chce to go przeanalizuje, jeżeli chce zrobić sam to nie przeczyta kodu, ale ma w razie czego z czym porównać, dodatkowo praktycznie każde zadanie można rozwiązać na wiele sposobów i można szukać innego sposobu, natomiast jeżeli ktoś chce 'tylko mieć' to nie zmusisz go do chęci zrozumienia, ale możesz podkręcić swojego skilla szukając rozwiązania ;)

Podobne pytania

0 głosów
3 odpowiedzi 12,609 wizyt
pytanie zadane 1 grudnia 2017 w C i C++ przez prosialke2391 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 455 wizyt
pytanie zadane 14 stycznia 2021 w C i C++ przez Pelo Użytkownik (520 p.)
0 głosów
1 odpowiedź 1,634 wizyt

93,653 zapytań

142,574 odpowiedzi

323,090 komentarzy

63,170 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

Kursy INF.02 i INF.03
...