Как найти последнюю цифру числа в паскале
Перейти к содержимому

Как найти последнюю цифру числа в паскале

  • автор:

Сумма первой и последней цифр числа

Найти сумму первой и последней цифр любого целого положительного числа.

Извлечь последнюю цифру числа легко: достаточно найти остаток от деления на 10. В языке Паскаль это делается с помощью оператора mod .

Чтобы извлечь первую цифру числа, надо знать его разрядность, после чего найти остаток от деления 10 в степени «разряд минус 1». Так, если число трехзначное, то надо делить на 100, то есть 10 2 . Однако программа разрядности числа не знает.

Поэтому, чтобы извлечь первую цифру числа, будем последовательно делить число нацело на 10, пока от него не останется одна цифра, которая и будет первой. После этого найти ее сумму с последней цифрой, которая была найдена ранее.

var n: longint; a, b: byte; begin readln(n); a := n mod 10; // последняя цифра исходного числа n := n div 10; // удаляем ее из числа while n > 0 do begin b := n mod 10; // текущая последняя цифра n := n div 10; end; writeln(a + b); end.

В коде выше в переменную a записывается последняя цифра. После чего число делится нацело на 10 и эта цифра исключается. Далее в цикле постепенно число сокращается на один разряд с помощью div . Перед этим удаляемая цифра присваивается переменной b . Когда все цифры числа будут удалены, то в переменной b останется первая. После цикла значение переменных складывается.

Более компактное решение:

var a: longint; b: byte; begin readln(a); b := a mod 10; while a >= 10 do a := a div 10; writeln(b+a); end.

Здесь число a в цикле постепенно сокращается до одного первого разряда. Перед этим самый младший разряд, то есть последняя цифра числа сохраняется в переменной b .

Решить задачу можно не только с помощью цикла while , но и repeat :

var a, b, c, d: integer; begin readln(a); d := a mod 10; repeat b := a mod 10; a := a div 10; until a = 0; c := d + b; writeln(c); end.

Удалить цифру из числа

Из натурального числа удалить заданную цифру. Число и цифру вводить с клавиатуры.

Например, задано число 5683. Требуется удалить из него цифру 8. Получится число 563.

Задача усложняется тем, что заранее неизвестно количество разрядов числа. Поэтому исходное число проще начать проверять с конца с помощью оператора mod (нахождения остатка от деления). Делить надо на 10, чтобы получить последнюю цифру числа.

Если последняя цифра не совпадает с цифрой, которую требуется удалить, то ее надо перенести в другое число, учитывая разрядность числа.

var n, a, ch, sum, raz: integer; begin write('Введите целое натуральное число: '); readln(n); write('Какую цифру надо удалить? '); readln(ch); sum := 0; // новое число raz := 1; // разряд while n > 0 do begin a := n mod 10; // последняя цифра числа if ch <> a then begin sum := sum + a * raz; // перенос цифры в другое число raz := raz * 10; // увеличение разряда end; n := n div 10; // удаляем последнюю цифру из исходного числа end; writeln('Ваше число ', sum) end. 

Пример выполнения программы:

Введите целое натуральное число: 18130 Какую цифру надо удалить? 1 Ваше число 830

Программа удаляет все вхождения заданной цифры.

Как найти последнюю цифру числа в паскале

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

Пользователь
Регистрация: 01.04.2009
Сообщений: 27
Сообщение от Sazary
Оператором mod:

a := N mod 10;

Число задаёт не пользователь, а получается как результат вычисления выражения во время работы программы. Число типа real, то есть любое рациональное. В этом случае Ваш вариант подойдёт?

Сократ: «Я знаю, что ничего не знаю».
Регистрация: 19.12.2008
Сообщений: 5,788

Число типа real, то есть любое рациональное. В этом случае Ваш вариант подойдёт?

Нет. Это для целых чисел.
А что по-вашему будет являться последней цифрой вещественного числа? Ведь после запятой их может быть сколько угодно.

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

Пользователь
Регистрация: 01.04.2009
Сообщений: 27
Сообщение от Sazary

Нет. Это для целых чисел.
А что по-вашему будет являться последней цифрой вещественного числа? Ведь после запятой их может быть сколько угодно.

Я полностью с вами согласен, но у меня в задаче не сказано канкретно какой тип данных используется, а значит пользователь на своё усмотрение должен использовать любое. Такому мышлению нас учит сам преподаватель. То есть, если условия задачи не дают всех необходимых данных, их придумывает программист или определяет ползователь, которому что угодно может придти на ум. Лично я думаю, что есть третий вариант, программа может случайным образом определить недостающие данные, с позволения самого программиста. Поэтому я решил взять тип данных real.

Задача:
Написать программу, позволяющюю по последней цыфре числа определить последнюю цыфру его квадрата.

Сократ: «Я знаю, что ничего не знаю».
Регистрация: 19.12.2008
Сообщений: 5,788

Раз говорится о последней цифре числа, то речь идет явно о целом числе.
Возьмем 2 числа: 3 (целое) и 3.2 (вещественное).
Квадрат первого — 9, квадрат второго — 10.24.
И при этом еще остается вопрос какая цифра здесь последняя.

Такому мышлению нас учит сам преподаватель.

Думаю, что он не имел в виду такие крайности.

Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=] _____ [Поиск] _____ [Литература по С++] ____ [Литература. Паскаль]

1. Напишите программы для решения следующих задач.

Для нахождения последней цифры натурального числа воспользуемся операцией div , которая найдёт остаток от целочисленного деления числа на 10.

var n: integer;
begin
write('Введите натуральное число:'); // тру-ля-ля
readln(n);
while n >= 10 do
begin
n := n mod 10
end;
writeln(n);
end.

2. Два отрезка на плоскости задаются координатами своих концов. Определите, какой из них короче.

Сначала найдём длины отрезков с помощью формулы из геометрии √(X²+Y²) = √ ((X2-X1)²+(Y2-Y1)²). Затем сравним полученные длины. Напомним, sqrt находит корень числа, а sqr — его квадрат.

var x1, x2, y1, y2: integer; l1, l2: real;
begin
writeln('Введите через Enter координаты x1, y1, x2, y2 для 1-го отрезка:');
readln(x1);
readln(y1);
readln(x2);
readln(y2);
l1 := sqrt(sqr(x2-x1)+sqr(y2-y1));
writeln('Введите через Enter координаты x1, y1, x2, y2 для 2-го отрезка:');
readln(x1);
readln(y1);
readln(x2);
readln(y2);
l2 := sqrt(sqr(x2-x1)+sqr(y2-y1));
if l1 < l2 then
writeln('Первый отрезок короче')
else
if l2 < l1 then
writeln('Второй отрезок короче')
else
writeln('Отрезки равны');
end.

3. Найдите сумму для заданного N.

Воспользуемся циклом for и пройдёмся от 0 до n , прибавляя к s результат деления единицы на квадрат числа i .

var n: integer; s: real;
begin
s := 0;
write('Введите число n:');
readln(n);
for var i := 1 to n do
s := s + 1/sqr(i);
writeln('Сумма: ', s);
end.

4. Вводится строка текста. Определите, является ли она палиндромом.

Палиндромом — это слово или фраза, которая читается одинаково в обоих направлениях, например, «шалаш» или же «а роза упала на лапу Азора».

Сперва приведём нашу строку s к нижнему регистру с помощью функции LowerCase для того, чтобы такие слова как «Анна» также считались палиндромами. Затем с помощью цикла while удалим все пробелы в строке, чтобы строка «а роза упала на лапу Азора» тоже считалась палиндромом, ведь при чтении пробелы не учитываются. Цикл работает до тех пор, пока в строке не останется ни одного пробела. Существование пробела мы узнаём с помощью функции pos(‘ ‘, s) . Далее в цикле for проходимся по первой половине строки и сравниваем каждую букву с буквой с зеркальной позицей с конца строки. Если находим хоть одно несовпадение, присваиваем переменной p значение false , что будет означать, что слово не является палиндромом.

var n: integer; s: string; p: boolean;
begin
writeln('Введите текст:');
readln(s);
s := LowerCase(s);
while (pos(' ', s) <> 0) do
delete(s, pos(' ', s), 1);
writeln(s);
n := length(s);
p := true;
for var i := 1 to n div 2 do
if s[i] <> s[n-i + 1] then
p := false;
if p = true then
writeln('Строка является палиндромом')
else
writeln('Строка не является палиндромом');
end.

5. Вводятся два целых числа, являющихся числителем и знаменателем дроби. Сократите дробь, выведите полученные числитель и знаменатель. П о д с к а з к а: можно воспользоваться алгоритмом Евклида.

Для сокращения дроби нужно найти НОД (наибольший общий делитель) числителя и знаменателя. Для нахождения НОД воспользуемся алгоритмом Евклида, который заключается в нахождении последнего, неравному нулю остатку от деления. Делить будем большее число на меньшее, поэтому сперва определим минимальное и максимальное число и запишем эти значения с переменные min и max соответственно. Щатем в цикле while будем находить остаток от деления двух чисел до тех пор, пока переменная min не станет равна нулю. Наконец, сократим наши числитель и знаменатель на найденный НОД.

var n, m, min, max, p, nod: integer;
begin
writeln('Введите числитель и знаменатель:');
readln(n);
readln(m);
if n > m then
begin
max := n;
min := m;
end
else
if m > n then
begin
max := m;
min := n;
end;
while min <> 0 do
begin
p := min;
min := max mod min;
max := p;
end;
nod := max;
writeln('Сокращённая дробь: ', n/nod, '/', m/nod);
end.

6*. Дед Мазай и заяц играют в очень простую игру. Перед ними — гора из N одинаковых морковок. Каждый из игроков во время своего хода может взять из нее любое количество морковок, равное неотрицательной степени числа 2 (1, 2, 4, 8, …). Игроки ходят по очереди. Кто возьмет последнюю морковку, тот и выигрывает. Составьте алгоритм, который при заданном значении N определяет победителя в этой игре. Учтите, что каждый из игроков хочет выиграть и не делает лишних ходов, т. е. играет оптимально.

Воспользуемся двумя циклами while . Первый цикл будет использован в качестве «ходов» игроков, и этот цикл не останавливается, пока морковок n не останется совсем. Второй цикл будет вложенным, с помощью него мы будем подбирать максимальное количество морковок, которое может забрать игрок, учитывая то, что количество морковок должно быть равно степени числа 2. Таким образом, мы находим максимальную степень для числа 2 так, чтобы 2 в этой степени была меньше или равна n (ведь мы не можем забрать больше морковок, чем лежит в горе). При начале каждого «хода» будем увеличивать переменную step на единицу — так мы узнаем, на каком ходу марковок больше не осталось, и определим победителя по чётности/нечётности номера хода.

var n, i: real; step: integer;
begin
write('Введите количество морковок N: ');
readln(n);
step := 0;
while n <> 0 do
begin
step := step + 1;
i := 0;
while Power(2,i) i := i + 1;
i:= i - 1;
writeln(n, '-', Power(2,i), ' (2 в степени ', i, ')');
n := n - Power(2,i);
end;
writeln('Осталось морковок: ', n);
if step mod 2 = 0 then
writeln('Победил игрок, который ходил вторым')
else
writeln('Победил игрок, который ходил первым');
end.

Присоединяйтесь к Telegram-группе @superresheba_10, делитесь своими решениями и пользуйтесь материалами, которые присылают другие участники группы!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *