![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с текстом(перевёртыш) [D7, XP]
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]), и цикл только до половины строки. Что не понравилось?
'<> (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;
'<> (2010-05-05 22:14:00) [60]Перевертыш зеркальный или перевертыш числовой.
Допустим
1)
123456
654321
2)
11110010
00001101
Первый реализуется циклом с конца строки в строкову переменную.
Второй реализуется заменой на противоположное число при условии.