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

    • Zrób to sobie może w lian li o11d, o wiele lepsza buda z lepszą cyrkulacją powietrza. Zasilacza nie bierz białego, bo kable i tak będą okropne. Weź czarny + osobno kable.  https://proline.pl/koszyk/b99dc54c albo vision https://proline.pl/koszyk/28a04b4a Jak chcesz możesz dać https://proline.pl/procesor-amd-ryzen-5-7500f-am5-oem-p8119884 Zasilasz masz taniej o 50 w promo https://proline.pl/zasilacz-seasonic-focus-gx-750-atx-3-0-80plus-gold-750w-p8118216 Jeszcze bardziej biało na mobo z argb https://proline.pl/plyta-glowna-asrock-x670e-steel-legend-am5-p8115587 https://proline.pl/plyta-glowna-gigabyte-x670e-aorus-pro-x-am5-p8120648 GPU wszystko zależy od hajsu, poniżej 4070 Ti Super / 7900 XT pod 4K bym nie schodził https://proline.pl/gigabyte-geforce-rtx-4070-ti-super-aero-oc-16gb-gddr6x-gv-n407tsaero-oc-16gd-p8120650 https://proline.pl/gigabyte-geforce-rtx-4080-super-aero-oc-16gb-gddr6x-gv-n408saero-oc-16gd-p8120682 A jak chcesz mieć bajer ARGB https://proline.pl/sapphire-radeon-rx-7900-xtx-nitro-vapor-x-gaming-24gb-pci-e-gddr6-11322-01-40g-p8118816 to i nawet to z wielkim pasem po całej długości - dla mnie to najładniejsza GPU na rynku  Popatrz sobie tutaj, bo ostatnio masę mają takich zestawów ProLine.pl - Sklep komputerowy | Facebook
    • Zamienię RX 7900xtx pulse karta używana 2 miesiące pozostało 34 miesięcy gwarancji zamienię za coś w przedziale dopłaty około 1000zl najchętniej rtx 4070 ti.
    • adashi jest mocno antyukraiński nie bierz go na poważnie. Jest szansa, że Polska szybko wpląta się w konflikt ale Rosja raczej tego nie chce. Ruskie rakiety spadną przypadkowo na bloki w Polsce i już. Ale to musiałby być wielki pech. Na razie dalej to samo. Prognozy pesymistyczne dla Ukrainy. Rusza kroplówka z USA ale może celowo to robią tak żeby nie wplątać krajów nato w konflikt. Sam już nie wiem i pewnie przez najbliższe 20 lat się nie dowiem.
    • Bo jest łatwiej? Teraz jak już grałem setki razy na każdej mapie, to wolę widzieć mniej, a przez to więcej 😉
    • Korzystam z One Drive już jakieś 10 lat. Ostatnio padł mi 12 letni dysk zewnętrzny WD MyPassport na którym miałem dane, które miałem skopiować na drugi dysk. No niestety nie zdążyłem bo przestał działać a jak zadziałał przerysował głowicą po talerzach. Odzyskanie danych? Może możliwe, ale koszt sięgałby kilku tysięcy zł. Dzięki one drive mam zdjęcia i część dokumentów, ale starsze dane, które były na tym dysku przepadną jeżeli nie uda się ich odczytać z płyt, które gdzieś tam trzymam. Tylko na płytach była inna organizacja danych, a na dysku miałem wszystko poukładane po nowemu. Zatem znów trzeba poświęcić czas na zgranie o ile płyty zadziałają i na porządkowanie. @debek Zatem tak, skłaniałbym się ku chmurze na dane typu zdjęcia czy jakieś mniej istotne pliki. Jakieś ważne dokumenty, czy takie zawierające jakieś dane wrażliwe trzymaj na kilku różnych dyskach zewnętrznych tylko tak jak Ci radzono wcześniej, dysk + stacja dokująca, bo gotowe dyski zewnętrzne nie mają złącz SATA tylko jak napisał @Bono[UG] interfejs USB jest połączony z dyskiem, co w razie awarii mocno ogranicza jakiekolwiek możliwości.  
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...