Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Работа с текстом(перевёртыш) [D7, XP]


Страницы:   1 2 3 4

SooM ©   (2010-05-05 21:43:00) 

Вводиться число. Совпадает ли оно со своим "перевёртышем"(числом , получающимся при течение данного на оборот).
Заранее спасибо


'<>   (2010-05-06 00:00:00) [41]

Тогда у меня такой вариант:

var
original_num:longint;

function perevernut(chislo:longint):longint;
var temp, copychislo:longint;
begin
copychislo:=chislo;
temp:=0;
 while(copychislo<>0) do
   begin
   temp:=(temp*10)+(copychislo mod 10);
   copychislo:=copychislo div 10;
 end;
perevernut:=temp;
end;

original_num:=12345;
if perevernut(original_num)=original_num then
showmessage('ravno') else showmessage('net');


Игорь Шевченко   (2010-05-05 23:53:00) [42]

DVM ©   (05.05.10 23:51) [21]

В сети мне как-то попалась методичка, все вопросы из которой задавались на delphimaster (и не только).


DVM   (2010-05-05 23:51:00) [43]


> Inovet ©

что характерно, прошел год ровно.


Inovet   (2010-05-05 23:47:00) [44]

Эх.
http://delphimaster.net/view/2-1242503429


DVM   (2010-05-05 23:37:00) [45]

у меня вот такой вариант для переворачивания:

function Reverse(x: integer): integer;
var
 maxb: integer;

 function Rev(a, b: integer): integer;
 begin
   if a = 0 then
     begin
       result := 0;
       maxb := b div 10;
       exit;
     end;
   result := (a mod 10) * (maxb div b) + Rev((a div 10), b * 10)
 end;

begin
 result := Rev(x, 1);
end;


Игорь Шевченко   (2010-05-05 23:30:00) [46]

И. Павел ©   (05.05.10 23:26) [17]

Купи книжку Стива МакКоннелла и учи наизусть.


И. Павел   (2010-05-05 23:26:00) [47]

Код можно и оптимизировать, но вроде бы работает:

procedure TForm1.Button1Click(Sender: TObject);
var chislo, c, l, a, b:integer;
   ok:boolean;
begin
 chislo:=12344321;
 c:=chislo;
 l:=1;
 ok:=true;
 repeat
   l:=l*10;
   c:=c div 10;
 until c=0;
 l:=l div 10;
 repeat
   if l=0 then break;
   a:=chislo div l;
   b:=chislo mod 10;
   chislo := (chislo mod l) div 10;
   l:=l div 100;
   if a<>b then
   Begin
     ok:=false;
     break;
   end;
 until chislo=0;
 if ok then Application.MessageBox('Совпадает', '', 0)
       else Application.MessageBox('Не совпадает', '', 0);
end;


Smile   (2010-05-05 23:21:00) [48]

> DVM ©   (05.05.10 23:12) [15]

Трудно возразить
:(


DVM   (2010-05-05 23:12:00) [49]


> Smile   (05.05.10 23:06) [14]

Задание, где на входе число в виде строки неинтересное и простое. А вот для числа уже есть над чем подумать.


Smile   (2010-05-05 23:06:00) [50]


> DVM ©   (05.05.10 22:56) [10]

Если не дальтоник, то читай [0]
Работа с текстом(перевёртыш)

:)


DVM   (2010-05-05 23:06:00) [51]


> Smile   (05.05.10 23:04) [12]


> Число ввести невозможно


var
 a: integer;
begin
 writeln('Введите целое число');
 read(a);
end;


Smile   (2010-05-05 23:04:00) [52]

> DVM ©   (05.05.10 22:56) [10]

Число ввести невозможно
:)


Игорь Шевченко   (2010-05-05 22:59:00) [53]


> Заранее спасибо


За ранее


DVM   (2010-05-05 22:56:00) [54]

Вы дальтоники что ли, число от строки отличить не можете? Сказано же, вводится число.


Smile   (2010-05-05 22:52:00) [55]

> '<>   (05.05.10 22:37) [6]

Для чего нужно в функцию передавать s1, если это известный параметр?
:)


И. Павел   (2010-05-05 22:51:00) [56]


> stroka := Edit1.Text;

Даже без этого можно обойтись.


И. Павел   (2010-05-05 22:49:00) [57]


> Йоо) ну и кодинг.

В моем коде нет бесполезных присваиваний (g:=g+s[i]), и цикл только до половины строки. Что не понравилось?


'&lt;&gt;   (2010-05-05 22:37:00) [58]

Йоо) ну и кодинг.

function prov(s,s1:string):boolean;
var
i:byte; g:string;
begin
g:='';
result:=false;
for i:=length(s) downto 1 do
g:=g+s[i];
if g=s1 then
result:=true;
end;


использовать так

if prov('stroka1','stroka2') then
showmeessage("sovpali") else showmeessage("net");


И. Павел   (2010-05-05 22:17:00) [59]

Такую задачу интереснее решать, если запретить использование строк. Такие числа называются палиндромами. Перевертыши - это что-то из Лукьяненко :)

procedure TForm1.Button1Click(Sender: TObject);
var stroka:string;
   ok:boolean;
   i:integer;
begin
 stroka := Edit1.Text;
 ok:=true;
 for i := 1 to length(stroka) div 2 do
   if stroka[i] <> stroka[length(stroka)-i+1] then
   Begin
     ok:=false;
     break;
   end;
 if ok then Application.MessageBox('Совпадают', '', 0)
       else Application.MessageBox('Не совпадают', '', 0);
end;


'&lt;&gt;   (2010-05-05 22:14:00) [60]

Перевертыш зеркальный или перевертыш числовой.

Допустим
1)

123456
654321

2)
11110010
00001101

Первый реализуется циклом с конца строки в строкову переменную.
Второй реализуется заменой на противоположное число при условии.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо