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

    • Przede wszystkim to przynajmniej moim zdaniem zmiana bez sensu. Co do OC to jest to poblokowany CPU (coś jak non k u intela), więc tylko UV  
    • Fajnie że podałeś typ tego extendera bo z samego zdjęcia tak niskiej jakości trudno wywnioskować. Po zdjęciu wnioskuje, że to ten typ:  https://rbline.pl/extender-poe-pft1320-36882.html    Ogólnie standardowe extendery jakie stosowałem tylko regenerują sygnał nie są switchami czyli nie rozdzielają sygnału. W tym przypadku mają w sobie switcha. Różnica jest taka, że takie urządzenie różni się od typowego switcha tym, że zasilanie bierze z "głównego" switcha POE i nie ma w sobie zasilacza (taka jest idea extenderów). Na stronie którą podlinkowałem jest informacja  Więc można łączyć kaskadowo. Jednak pod 1 wyjście nie podłączysz kolejnych 2 extenderów (pewnie sam z siebie pobiera na własne działanie ze 2 W) oraz 3 kamer (każda np. po 6W). Czyli nie możesz podłączyć urządzeń które w sumie biorą więcej niż 15W.            
    • Zamierzam przesiąść się z 13700kf na 7800x3d i chciałbym go posadzić na dobrej płycie x670e w rozsądnej cenie, używki też wchodzą w grę, co byście polecili powiedzmy do kwoty 1500 zł im mniej tym lepiej. Nie śledziłem wątku więc nie wiem jak z oc wyżej wymienionego procka, mocno wyżyłowany czy mozna go jeszcze podkręcić czy lepiej iść w UV? 
    • Pograłem trochę dłużej: VRR i flickering - testowałem Squad gdzie FPS potrafi spaść ze 120 do 80 FPS, zero mignięć. Zablokowałem FPSy w grze na 45 i też zero mignięć. Może są różne wersje softu albo nie wiem, u mnie nie miga. Smużenie - jak się przypatrzy to jest przy ciemnych kolorach, ale na pewno nie taka skala jak kiedyś to było na VA. Na tyle małe że podczas normalnej rozgrywki tego nie widać i można pominąć (pewnie subiektywne, ale mi nie przeszkadza).  Skalibrowałem HDR w apce do kalibracji W11, wyszło że max jasnosć to jakieś 1150-1200 nitów. Wieczorem w grach robi serio robotę, pierwszy raz musiałem oczy zmrużyć patrząc na płomienie  Jakieś tam VA/IPS z podświetleniem krawędziowym to w ogóle nie ma jak porównać... Oby więcej takich Miniled powstawało, pakować więcej stref, walczyć ze smużeniem i super sprzęt za nieduże pieniądze.  Dziwi mnie trochę polityka cenowa, kupiłem go za 1600 zł, a na drugi dzień kosztował 2000 zł, potem 1800 zł i znowu 2000 zł. Chyba malutko ich produkują że ceny tak skaczą. Za 2k to nie warto zdecydowanie, 1600 adekwatna cena.
    • Też tak myślę, jeśli te przecieki są prawdziwe i jeśli dalej pogłębią dysproporcję między serią 90 a 80 to nie zdziwię się jak 5080 będzie miało wydajność ledwie 4090 i 16GB, to by oznaczało, że ten ostatni w ogóle nie stanieje i pozostałby na pułapie 6-7k PLN. To byłoby bardzo w stylu NV
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...