Problemă rezolvată șir de caractere clasa a XI-a mate-info neintensiv

Enunț

Un cuvânt este palindrom dacă citind literele de la dreapta la stânga obținem același cuvânt (de exemplu, cuvintele "cojoc" și "sas" sunt palindroame). Scrieți un program care verifică dacă un cuvânt citit de la tastatură este palindrom sau nu, afișând un mesaj.

Rezolvare

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


int main()
{
 char s[201];
 int l;


 cout << "Cuvantul: "; cin >> s;

 l = strlen(s);

 bool palindrom = true;

 for (int i = 0; i < l / 2; ++i)
 {
  if (s[i] != s[l - i - 1])
  {
   palindrom = false;
   break;
  }
 }


 cout << (palindrom ? "ESTE PALINDROM." : "NU ESTE PALINDROM.") << endl;

 return 0;
}

Explicații

<iostream> este antetul pentru scrierea pe ecran și citirea de la tastatură.
<cstring> (în trecut <string.h>) este antetul pentru folosirea funcției strlen.

Presupunem că un cuvânt are maxim 200 de caractere . Al 201-lea este caracterul nul (codul ASCII 0 sau caracterul '\0').

Cu palindrom = true presupunem de la început că cuvântul dat este palindrom și apoi încercăm să demonstrăm contrariul.


Trecem prin fiecare caracter al cuvântului de la stânga la dreapta până la jumătatea lui. Dacă al i-lea caracter de la începutul cuvântului este diferit de al i-lea caracter de la sfârșitul cuvântului, presupunerea e falsă și oprim parcurgerea cu o instrucțiune break.

La sfârșit, înainte de a ieși din main cu return 0, folosim operatorul ?: pentru a afișa un șir de caractere literal în funcție de valoarea variabilei palindrom.

Exemple

Palindromul TOT (3 caractere) : i trece de la 0 la 3 / 2 = 1. Se compară T cu T și O cu O.

Palindromul ABCCBA (6 caractere): i trece de la 0 la 6 / 2 = 3.
Se compară caracterele de pe pozițiile 0 cu 5, 1 cu 4, 2 cu 3. Mai departe nu, deoarece condiția for are semnul strict mai mic, nu mai mic sau egal cu.

Niciun comentariu:

Trimiteți un comentariu