Решена задача за палиндром - симетричен спрямо средата си стринг

Нека имаме въведен стринг, низ съставен от набор знаци, който има едно и също значение четени отляво-надясно и отдясно-наляво е палиндром. Подобни задачи са познати от древността като по-сложните варианти използват не само отделна фраза и правоъгълен набор от знаци. В говоримия език палиндром е дума или изречение, която четена отляво-надясно съвпада със същата последователност от думи, но четена в обратната последователност. В езика C++ интервалът играе особена роля. Така, въвеждането на палиндроми включващи няколко думи от рода на "алена фанела", "аз обичам мач и боза" и др. няма да издържи проверка за сравнение. Тук се разглеждат няколко примерни решения на тази задача. В първото решение ще разгледаме проверка само за естествено число палиндром, а във второто палиндром въведен като стринг, низ. В хода на всяко решение на задача за палиндром се извършва проверка за равенство на знаци в симетрични позиции. Във всеки от разглежданите случаи ще се извършва проверка за равенство - ако въведената информация е палиндром, то въведената последователност ще съвпада с инверсната. Проверката за палиндром може да бъде осъществена чрез цикъл или с рекурсивна функция.

проверка за число палиндром
проверка за низ палиндром
функция reverse за обръщане на низ

проверка за число палиндром

Едно цяло число X е палиндром, ако ново число N написано с цифрите на X, но в обратен ред е равно на числото X. Ако в цикъл с формирате ново числа, при което 1-вата му (най-лявата цифра) е равна на най-дясната цифра на въведеното число, въведеното число се дели на 10. При следващите повторения новото число се умножава по 10 (т.е.цифрите се преместват с 1 позиция наляво) и се прибавя поредната най-дясна цифра на въведеното число. След приключване на цикъла 2-те числа се сравняват. Една примерна задача за проверка на палиндром би имала следното приблизително съдържание:

Да се състави програма, която проверява дали въведено число е палиндром.
Входни данни n - естествено число от интервала [10 .. 30000].
Пример: 17571 Изход: числото е палиндром

Следващата примерна програма дава решена задача - проверка за число палиндром:
#include<iostream>
using namespace std;

int main()
{ long n,x,por;//deklarirane na promenliwi*
  cout<<"Edno chislo X e palindrom, ako chisloto N napisano s cifrite na X no,  \n";
  cout<<"w obraten red e rawno na chisloto X \n";
  cout<<"Whodni danni n - estestweno chislo ot interwala [10..30000]. \n";
  cout<<"Primer: 17571 Izhod chisloto e palindrom\n";
  cout<<"Wywedete estestweno chislo ot interwala [10..30000]: "; cin>>n;
  x=0;//inicializirane na promenliwata
  por=n;//posle se srawnqwat wywedenoto i poluchenoto chislo
  do //nachalo na cikyla
    {//obryshame naredbata na cifrite w chisloto i srawnqwame wywedenoto i nowoto chislo
       x=x*10 + por % 10 ;//posledowatelno obikalqma ot naj-maldshata (dqsna) cifra
       por=por/10;//reducirame broq cifri
       cout<<"Nowoto chislo e: "<<x<<" - wywedenoto stana: "<<por<<endl;//izwevda porednite stypki
    } while (por > 0);  //namirame pyrwo naj-dqsnata cifra
  
    if (x==n)   { cout<<"Wywedenoto chislo e palindrom\n ";}
      else   { if (x<n ? (cout<<x<<" < "<<n<<endl):(cout<<x<<" > "<<n<<endl)); 
   }//if
system("pause");//zadyrva izpylnenieto na programata do natiskane na klawish ot klawiaturata
return 0; //oswobovdawa zaetite sistemni resursi
} //kraj na programata palindrom

Начало на страницата


проверка за низ палиндром

Тук ще разгледаме проверка дали въведен стринг, низ е палиндром, т.е. е огледално симетричен.
Нека имаме въведен низ с дължина N.
С цикъл от 0 до половината от дължината на въведения низ се проверяват всички знаци в съответните позиции отляво-надясно и отдясно-наляво.
Една примерна задача за проверка на палиндром би имала следното приблизително съдържание:
Да се състави програма, чрез която от клавиатурата се въвежда ред от символи (стринг, низ). Брой символи от интервала [10..50].
Програмата да изведе на екрана дали въведеният стринг е палиндром, т.е дали четен отляво-надясно и отдясно-наляво е един и същ.
Вход: капак Изход: да.

Следващата примерна програма дава решена задача за палиндром - симетричен спрямо средата си низ:
#include<iostream>
#include <stdio.h>//gets
using namespace std;

int main()//nachalo na programata
{ const int n=100;
   char mas[n];
   int a,b,dyl,sred;
  //deklarira promenliwite. W C++ tipyt String se predstawq kato masiw ot Char
    cout<<"Da se systawi programa, chrez koqto ot klawiaturata se wywevda \n";
    cout<<"red ot simwoli (string, niz). Broj simwoli [10-50]. Programata\n";
    cout<<"da izwede na ekrana dali wywedeniq string e palindrom, t.e\n";
    cout<<"dali cheten otlqwo-nadqsno i otdqsno-nalqwo e edin i sysh.\n";
    cout <<"Primer: kapak Izhod da.\n";
    cout<<endl;//alenafanela drug palindrom
    cout<<"Wywedete niz: ";gets(mas);
    dyl=strlen(mas);//broeneto zapochwa ot 0-wiq element do dyl-1
    sred=dyl>>1; //celochisleno delene na 2 s rezultat sred=dyl/2; 
    b=0;//flag, che tozi niz e palindrom 
    for (a=0;a<sred;a++)//cikyl za obikalqne do polowinata niz
     { if (mas[a]!=mas[dyl-a-1])//dali znaka e w dwete pozicii 
       {  b++;} 
     }//kraj na for a   
  cout<<"Nizyt '"<<mas; 
  if (b ?  cout<<"' ne e palindrom.\n" :  cout<<"' e palindrom.\n");
  system("pause"); 
  return 0;
}//kraj na programa palindrom 

Начало на страницата


функция reverse за обръщане на низ

В повечето езици за програмиране е включена и библиотечна функция от рода на reverse, strrev. Следващата примерна програма дава решена задача за палиндром чрез използване на функция от библиотека algorithm.
#include <iostream>
#include <algorithm>
using namespace std;

int main()
{ string niz ,zin;
   cout<<"Da se systawi programa, chrez koqto se wywevdat redica ot znaci.\n";
   cout<<"Wywevdanite znaci da sa cifri ili bukwi bez interwali.\n";
   cout<<"Programata da izwede syshiq broj i wid znaci, no w obraten red\n";
   cout<<"Primer: 123456 Izhod 654321\n";
   cout<<"Wywedete niz: ";  cin>>niz;
   zin=niz;//syhranqwa originalno wywedeniq string
   reverse(niz.begin(), niz.end());    
   cout<<"Weche obyrnatiq niz e: "<<niz<<endl;
   if (zin==niz) cout<<"Wywedeniqt niz e palindrom.\n";
 system("pause");
 return EXIT_SUCCESS;
}//kraj na programa palindrom

Обяснени и решени задачи с подобни алгоритми, функции и служебни думи са разгледани в страницата с електронни уроци по информатика - програмиране.
Илюстриране работата на характерни алгоритми можете да намерите в предоставените електронни помагала съдържащи решени задачи, примери.

 
Размер на шрифта
Increase Font Size Option 3 Reset Font Size Option 3 Decrease Font Size Option 3
Bulgarian Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish
Търсене в сайта: