Skocz do zawartości
Roundstic

Zadanie C++ 2

Rekomendowane odpowiedzi

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;
       }
   }
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
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.

Edytowane przez Kitu

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

A jak kompilator nie mówi, to trzeba mu nakazać mówić.

Przede wszystkim flaga -Wall

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

#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?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
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 ?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

 

W sumie racja ;)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • Ta promocja to był jakiś strzał w czasie mocno ograniczony. Sprawdziłem jeszcze raz za jakieś 15 minut i już monitor był w normalnej cenie trzeba zaglądać, ażeby wyrwać w super cenie Sid co Masz na myśli pisząc CCC ??  
    • Konfederuskie kuce nigdy nie były najmądrzejsze, delikatnie mówiąc Więc i kolejne ich kretynizmy i brak pojęcia o makroekonomii nie dziwią.
    • To pastę masz pewnie do wymiany od termopadów ci temperatura gpu nie skoczyła te plamy to jest olej z termopadów częsty przypadek ale to nie znaczy że termopady są do wymiany jak zobaczysz gdzieś na PCB czy radiatorze ten "sok"
    • Jak sam niżej napisałeś - wykresy są skorygowane i w miarę poprawne, więc jednocześnie możesz zauważyć, że wahania występują niezależnie czy jest rozwój przemysłowy czy nie. Temperatury są na poziomie jak to było 800 lat temu, a nadal niższe niż 1200 lat temu. Skąd przekonanie, że teraz będzie już tylko rosło i rosło? Historia pokazuje, że było cieplej. W perspektywie geologicznej - nie tak dawno temu. Dodatkowo napisałem, że w krótkim terminie obserwujemy wzrost temperatury, ale po co patrzeć w szerszej perspektywie - nie bedzie pasować do narracji. Albo te wykresy średniej temperatury w latach 1960-1990 vs 2011-2020... piękne manipulowanie danymi na podstawie wybranych okresów. Profeska tylko po to aby po raz kolejny udowodnić, że ma się bezwzględną rację i każdy kto mówi inaczej to upadł na głowę.   No tak - jak zimno to naturalnie, ale jeśli mamy tak samo dynamiczny powrót "do normy" to już planeta się pali i to wina wyłącznie człowieka. Wysiadam. Poza tym - sam wzrost temperatur to pikuś - gorsze są tego skutki czy wzrost intensywności i siły zjawisk ekstremalnych jak tornada, huragany, powodzie itp (tutaj mozemy się chyba zgodzić) - tutaj nie mamy już żadnych rzetelnych "dowodów" jedynie szczątkowe kroniki jak to było kiedyś, które trzeba traktować z przymrużeniem oka.   Każdy widzi na wykresie co chce zobaczyć, ale ja wysiadam bo tutaj jest odchylenie tylko w jedną stronę, że jedyna niepodważalna prawda jest taka, że planeta się pali. Tak samo kiedyś płaskoziemcy też nie dopuszczali myśli, że mogą się mylić
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...