Помогите)

Ответить
Анастасія
Сообщения: 6
Зарегистрирован: 14 окт 2014, 20:25
Откуда: Lviv

28 окт 2014, 18:22

Помогите пожалуйста составить программу на Паскале:
Даны два натуральных числа. Проверить, в них совпадают первые и последние цифры.

У меня не выходит с первыми цифрами. Что исправить?
program ind4;
uses crt;
var y,x,k,s:longint;
t,f:boolean;
begin
clrscr;
write('x=');
read(x);
write('y=');
read(y);
t:=false;
f:=false;
k:=y mod 10;
s:=x mod 10;
if k=s then f:=true;
writeln('остання цифра збігається',f);
while x<>0 do
begin
s:=x div 10;
x:=s;
end;
while y<>0 do
begin
k:=y div 10;
y:=k;
end;
if x=y then t:=true;
writeln('перша цифра збігається - ',t);
readln;readln;
end.
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

03 ноя 2014, 00:28

Эту задачу проще решать преобразованием чисел в строки и последующим сравнением символов строк. Особенно если числа разных порядков.
It's a long way to the top if you wanna rock'n'roll
Bce_OK
Сообщения: 8
Зарегистрирован: 18 ноя 2014, 20:25

18 ноя 2014, 20:49

у тебя циклы
while x<>0 do
s:=x div 10;
x:=s;
end;

выполняются до тех пор, пока x не станет 0, но так как ты x изменяешь вместе с s, то и s становится 0 в итоге. В конечном счете у тебя все переменные обнуляются.
Попробуй сделать их разными (например так):
while x<>0 do
s:=x mod 10;
x:=x div 10;
end;

В таком случае у тебя после выполнения цикла в s будет храниться остаток от деления x на 10(до того как он стал нулем) - т. е. первое число. То же самое "y"
А в конце проверять не x и y а опять s и k
if s=k then t:=true;
Ответить