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

    • Ciekawy wstępniak do dyskusji na temat... jak wycisnąć jeszcze co nieco z AM4. Ja już trochę użytkuje płytę ASUS B450-I GAMING w formacie ITX. Jakoś funkcjonuje. Teraz mam tam Ryzena 5700X (przesiadka z Ryzena 2700) i 2x8 DDR4 3200 Mhz... podobobno mógłbym się o 2x16 3600Mhz pokusić. Warto dokładać jeszcze RAM na tą platformę? Ostatnio wymieniłem grafikę na RTX 4060 TI i jakoś to śmiga. W sumie jakbym miał teraz zmienić platformę to całkiem spora dopłata czeka... Jakieś 2-2,5k.  
    • Ok, to zostawiam na 1900 i tyle. Szkoda, ale cóż poradzić, kontrolery pamięci i pokrewne tematy nigdy nie były mocną stroną AMD. Każdy kto pamięta szynę hyper transport wie   Jeszcze jakbym mógł ustawić PLL na płyci to może coś by z tego było, bo podobno to napięcie pozwala ustabilizować FCLK ale niestety nie mam takiej opcji i jest na sztywno 1.8V.
    • @Kelam To wygląda tak, że po tym restarcie jest w logach że Windows się wysypał i jest log z bluescreena. Minidump z bluescreena wskazuje że wysypuje się coś związanego z grafiką, ale ta chodzi bez błędów - przechodzi OCCT, mogę grać godzinami bez crashy czy artefaktów itd. Przy restarcie podczas trenowania pamięci który opisujesz, raczej nie powinno dochodzić do wysypania Windowsa. Tak to wygląda:
    • @ghs ale wiesz że ta inicjatywa powstała dopiero w sierpniu 2022 roku? Wcześniej jak była mowa o wspólnej armii to było jojczenie że UE chce zlikwidować państwa i zrobić jedną Europę 🤪
    • Ale wiesz przez co te spadki przez zapychający się Vram chociaż ostatnio jak spraedzilem sobie w OSD jak działa w porównaniu do premierowej wersji to zauważyłem pewną zmianę. Na premierze gra zużywała mi 15.5GB ram i 12.5GB Vram Teraz zużycie ram to około 20.5GB i Vram 10.5GB więc widać że coś zmieniali i obciążenie Vram spadło nieco     Mnie wkurza w Horizon co innego masa drobnych pierdół które można by poprawić patchem ale widać na poprawki już wywalone. --------- - Na cholerę w grze Aloy zbiera setki kamieni, przecież to bez sensu i wkurza tylko niepotrzebnie, ciężko ograniczyć to do kilku sztuk. - Mam wyłączone powiadomienia w grze a i tak często gęsto gra mi przypomina "masz niewykorzystane sploty" no przecież k.. wiem bo podniosłem jakiś zielony szrot ale nie będę jego używać, sprzedam to a gra i tak zawraca mi głowę i poucza! - Aloy też mogła by zamknąć się czasami i nie podpowiadać co mamy zrobić, praktycznie natychmiast zawsze mówi co i jak! - Nie rozumiem po w grze pokazują nam twórcy że Aloy ma wbudowaną latarkę w Focus ale już jak robimy inną misje i jest równie ciemno to  nie nic nie włączy (ciężko dać opcje dla gracza) - Nie rozumiem co za bałwan wpadł na pomysł aby po każdej misji pobocznej znacznik przełączał się z automatu na główną misje, kolejna mała głupota która po czasie tylko irytuje i wkurza. - Wszystkie pułapki kapsuły powinny być w dodatkowym kole wyboru, a wywary w menu szybkiego, a tak to bałagan i nieprzemyślane. - Skoro twórcy dają nam pancerz który opiera się na graniu z 25%-49% życia to niech Aloy siedzi cicho i nie gada że potrzebuje leczenia jak i gra nie sygnalizuje z uporem maniaka ulecz się! - O poronionej mechanice chwytania się automatycznie już wspominałem wcześniej, robimy unik a powiedzmy z tyłu skały... co robi Aloy chwyta się i wisi sobie bezceremonialnie w walce na kamieniu, samo wspinanie się po górach również nie tak intuicyjne jakby mogło się wydawać chcemy do góry a tu Aloy nam skacze w bok, bo tak        
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...