Forum PCLab.pl: Zadanie C++ 2 - Forum PCLab.pl

Skocz do zawartości

Otwarty

Ikona Ostatnio dodane tematy

Ikona Najnowsze pliki

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

Zadanie C++ 2 Oceń temat: -----

#1 Użytkownik jest niedostępny   Roundstic 

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 23
  • Dołączył: Wed, 13 Lis 19

Napisany 17 Listopad 2019 - 21:20

Cześć mam kolejne zadanie w c++

Brzmi ono następująco:

Napisz funkcję czyPalindrom(...), która sprawdzi, czy podane przez użytkownika słowo jest palindromem. Funkcja ma zwracać wartość typu bool (true albo false).

Mam narazie taki kod, który nie działa:

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

bool CzyPalindrom(char napis[])
{
    int n = strlen (napis);
    for(int i= 0; i <= n/2; i++)
    {
        if (n[i] !== n[n-1-i]) //porownywanie liter
        {
            return false;
        }
        else
        {
            return true;
        }
    }
}


#2 Użytkownik jest niedostępny   Kitu 

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 54
  • Dołączył: Nd, 24 Sty 16

Napisany 17 Listopad 2019 - 22:05

Zobacz postRoundstic, o 17 Listopad 2019 - 21:20, napisał(a):

Mam narazie taki kod, który nie działa:

Nie działa, bo:
1. Niepoprawny zapis "różny od":
if (n[i] !== n[n-1-i]) //porownywanie liter
"Różny od" zapisuje się jako !=
if (n[i] != n[n-1-i])

2. Porównujesz złe wartości - pomieszałeś długość słowa i zapisane słowo. Zmienną od słowa jest napis, a długością n.
3. Spójrz na to, co się dzieje po porównaniu pierwszej pary liter. Jeśli są takie same, funkcja zwraca true i nie patrzy na kolejne litery. Powinieneś sobie ustawić jakąś zmienną w funkcji (przed pętlą) na daną wartość (np. że słowo jest palindromem) i jeśli litery się różnią, zwracać false. Jeśli są takie same, sprawdzić kolejną parę, a jeśli pętla przeszła przez wszystkie pary i wszystko było ok - zwrócić true.

4. Warunek stopu w pętli można uprościć, choć nie ma to wpływu na prawidłowy wynik działania funkcji. Weź sobie za przykład słowo, które ma 4 znaki (n = 4). Pętla przejdzie 3 razy:
  • 1 przejście - i = 0; 0 <= 2
  • 2 przejście - i = 1; 1 <= 2
  • 3 przejście (zbędne) - i = 2; 2 <= 2
Powinno być samo "mniejsze od". Jeżeli coś nie działa i podejrzewasz, że to pętla, sprawdź warunki początku i końca pętli (czyli i = ileś oraz i < inne_ileś). To najczęstsze problemy z pętlami - bo przechodzą raz za dużo albo za mało.
Nie wiem jak u ciebie z angielskim, ale generalna zasada jest prosta - kompilator zawsze mówi, co jest nie tak. Jeśli nauczysz się to czytać ze zrozumieniem (choć znam ludzi, którzy po inżynierskich studiach z informatyki tego nie potrafią), sporo błędów naprawisz bez większych problemów.

Ten post był edytowany przez Kitu dnia: 17 Listopad 2019 - 22:08


#3 Użytkownik jest niedostępny   Bono[UG] 

  • Wiecznie niewyspany...
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 20222
  • Dołączył: Pt, 27 Wrz 02

Napisany 18 Listopad 2019 - 09:08

A jak kompilator nie mówi, to trzeba mu nakazać mówić.
Przede wszystkim flaga -Wall

#4 Użytkownik jest niedostępny   Roundstic 

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 23
  • Dołączył: Wed, 13 Lis 19

Napisany 18 Listopad 2019 - 11:21

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


bool CzyPalindrom(char napis[])
{
    
    int n = strlen(napis);
    for(int i= 0; i < n/2; i++)
    {
        if (napis[i] != napis[n-1-i]) //porownywanie liter
        {
            return false;
        }
    }
    return true;
}

int main()
{
    char wyraz[100];
    cout<<"Podaj wyraz do sprawdzenia: ";
    cin>>wyraz;
    
    cout<<CzyPalindrom(wyraz);
   
    
    return 0;
}


Może być tak?

#5 Użytkownik jest niedostępny   Kitu 

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 54
  • Dołączył: Nd, 24 Sty 16

Napisany 18 Listopad 2019 - 11:37

Zobacz postRoundstic, o 18 Listopad 2019 - 11:21, napisał(a):

Może być tak?


Na pierwszy rzut oka wygląda ok, więc jeśli działa, to chyba tak ;) Sprawdź dla kilku przypadków typu zwykłe słowo, palindrom z parzystą liczbą znaków, palindrom z nieparzystą, pusty łańcuch znaków itp.

Jako że to dopiero początki programowania - zawsze zaczynaj od napisania sobie na kartce co powinien robić program - krok po kroku, możliwie jak najdokładniej. Później sprawdź "na papierze" czy ten algorytm działa, jeśli tak - spróbuj go przenieść na kod. Zazwyczaj przy początkach nauki programowania to sporo pomaga, a niedługo będziesz mógł pominąć ten etap dokładnego rozpisywania programu - będziesz to robić automatycznie w głowie.

#6 Użytkownik jest niedostępny   209458 

  • Uzależniony od forum
  • PipPipPipPipPip
  • Grupa: Forumowicze
  • Postów: 13611
  • Dołączył: Wt, 15 Sty 08

Napisany 24 Listopad 2019 - 11:17

Cytuj

4. Warunek stopu w pętli można uprościć, choć nie ma to wpływu na prawidłowy wynik działania funkcji.

Czy nie ma wpływu to zależy czy spodziewamy się pustego napisu, bo wtedy porównamy element 0 z -1 😉

#7 Użytkownik jest niedostępny   Kitu 

  • Dyskutant
  • PipPip
  • Grupa: Forumowicze
  • Postów: 54
  • Dołączył: Nd, 24 Sty 16

Napisany 24 Listopad 2019 - 13:01

Zobacz post209458, o 24 Listopad 2019 - 11:17, napisał(a):

Czy nie ma wpływu to zależy czy spodziewamy się pustego napisu, bo wtedy porównamy element 0 z -1 😉


W sumie racja ;)

Strona 1 z 1
  • Nie możesz rozpocząć nowego tematu
  • Nie możesz odpowiadać w tym temacie

1 Użytkowników czyta ten temat
0 użytkowników, 1 gości, 0 anonimowych