Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Топ:
Основы обеспечения единства измерений: Обеспечение единства измерений - деятельность метрологических служб, направленная на достижение...
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Интересное:
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Инженерная защита территорий, зданий и сооружений от опасных геологических процессов: Изучение оползневых явлений, оценка устойчивости склонов и проектирование противооползневых сооружений — актуальнейшие задачи, стоящие перед отечественными...
Дисциплины:
2019-08-03 | 297 |
5.00
из
|
Заказать работу |
|
|
Идея решения:
В данном числе пока не зачеркнем все цифры, поочереди, зачеркивая цифру, подсчитываем сколько мы зачеркнули.
Например, введем число 12345. Мы зачеркнем 5 цифр (1234,123,12,1, зачеркивая 1 наше число превратится в 0) значит в числе 5 цифр!
Первый способ
Program task1;
var m,n: longint;
k: byte;
begin readln(n);
k:=0; m:=n { скопируем это число }
while m<>0 do begin
inc(k);
m:=m div 10;
{«отбрасываем» из числа последнюю цифру}
end;
writeln(k);
End.
Идея решения:
Теперь попробуем проверять: данное число больше 10к ? (где к изменяется от 1 до тех пор, пока выполняется условие). При каждой проверке ведем подсчет.
Например, введем число 12345. Проверяем, ведя отсчет от 1:
1) 12345>10; 2
2) 12345>100; 3
3) 12345>1000; 4
4) 12345>10000; 5
5) 12345<100000 подсчет окончен.
Второй способ
program task 1_2;
var n:longint;
i:byte;
begin readln(n);{ запрашиваем число}
{ подсчитаем количество цифр в нем }
i:=1; {пока число больше 10 в степени i}
while n>exp(ln(10)*i) do inc(i);
writeln(i);
end.
Задача 2. Определить является ли данное число простым.
Идея решения:
Будем проверять делится ли данное число на числа от 2 до половины данного числа. Если делится, то прерываем поиск, иначе проверка идет до самого конца. Если поиск прерван, то выводим на экран «число не простое», иначе выводим «число простое».
Способ первый:
Program Simple;
var i,n: integer;
simp: boolean; { если встретится делитель числа n simp=False}
begin write(‘ Введите число n=’);
readln(n);
simp:=True; i:=2;
while (i<=n div 2) and simp do
if n mod i=0 then simp:= false else i:=i+1;
if simp then writeln(‘OK!!!)
else writeln(‘NO!!!!’);
End.
Способ второй, классический предлагается во многих источниках:
Program Simple;
var i,n: integer;
simp: boolean; { если встретится делитель числа n simp=False}
|
begin write(‘n=’); readln(n);
simp:=True; i:=3;
while (i<=trunc(sqrt(n))) and simp do
if n mod i=0 then simp:= false else i:=i+2;
if simp then writeln(‘OK!!!)
else writeln(‘NO!!!!’);
End.
Третий способ, очень краток и красив!!! Но количество проверок больше, чем в первом способе.
Program task2;
var n,i: integer;
begin
writeln(‘введите число n’); readln(n);
i:=1;
repeat inc(i)
{увеличиваем делитель, пока выполняется условие, что число не делится на i}
until n mod i = 0;
if n=i then writeln (n,’- простое’)
else writeln (n,’- не простое, делится на ‘,i);
End.
Задача 3. Определить, является ли натуральное число палиндромом.
Первый способ решения.
program palindrom;
var n, m: longint;
j, i, ii, a, b:byte;
begin readln(n);{ запрашиваем число}
{ подсчитаем количество цифр в нем }
i:=1; m:=n; {скопируем число}
while n>exp(ln(10)*i) do inc(i);
{поиск одинаковых цифр справа и слева до середины числа}
j:=1;
for ii:=i div 2 downto 1 do begin
a:= n div trunc(exp(ln(10)*(i-1))); {первая цифра}
b:= m mod 10; {последняя цифра}
{ продолжаем поиск, если они равны }
if a= b then begin {отбрасываем найденные цифры}
n:=n mod trunc(exp(ln(10)*(i-1)));
m:=m div 10;
dec(i);
end {прерывание работы}
else begin writeln('not!!!!'); halt end
end;
{к концу программы мы дойдем только в случае, если число - палиндром} writeln('yes!!!!');
End.
Второй способ:
Идея этого способа заключается в том, что число переворачиваем, например, 123 станет 321. Если же это палиндром, то эти числа будут равными. Например, 12321 и после 12321. Этот палиндром!
var n, k, L, n1: longint;
Begin
writeln(‘Введите число‘);
readln(n);
k:=n; n1:=0; {в этой переменной будет перевернутое число n}
while k>0 do
begin L: = k mod 10; {получаем последнюю цифру}
k: =k div 10;{отбрасываем ее}
n1:=n1*10+L { переворачиваем число, последняя цифра становится первой цифрой числа n1, затем предпоследняя приписывается к n1 как вторая цифра и т.д., пока первая не станет последней в n1}
|
end;
if n=n1 then writeln(n,’-палиндром’)
else writeln(n,‘- не палиндром’);
End.
Третий способ (демонстрирует применения знаний работы со строками)
program palindrom2;
var n:string; {считываем число, как строковую переменную}
i,k,kk:byte;
begin readln(n);
k:=length(n); { длина слова или количество цифр в числе}
kk:=0;
{ подсчет пар равных цифр для палиндрома }
for i:=1 to k div 2 do if n[i]=n[k-i+1] then inc(kk);
{ если количество пар совпадает с половиной длины слова, то это палиндром}
if kk=k div 2 then writeln('yes!!!!') else writeln('no!!!!');
End.
Задача 4.
Дана непустая последовательность натуральных чисел, за которой следует 0. Найти порядковый номер наименьшего элемента последовательности.
Var x,i,min,k: integer;
Begin
writeln(‘введите первый элемент последовательности ‘);
read(x);
k:=1;{ индекс введенного элемента}
min:=x;{ считаем, что элемент минимальный}
i:=2;
while x<> 0 do begin
if x<min then begin min:=x; k:=i-1 end;
writeln(‘введите ‘,i,’- элемент’);
read(x);
inc(i);
end;
writeln(‘ номер минимального элемента ’,k);
End.
Задача 5. Найти все палиндромы из промежутка от А до В.
Первый способ
program task5;
var a, b, n, m: longint;
i, ii,j, k, aa, bb:byte;
Begin
readln(a,b);{ запрашиваем границы промежутка}
for i:=a to b do begin
{ подсчитаем количество цифр в выбранном числе }
k:=1; m:=i; n:=i;{ скопируем это число дважды}
while n>exp(ln(10)*k) do inc(k);
{поиск одинаковых цифр справа и слева до середины числа}
j:=0;
for ii:=1 to k div 2 do begin
aa:= n div trunc(exp(ln(10)*(k-1))); {первая цифра}
bb:= m mod 10; {последняя цифра}
{ продолжаем поиск, если они равны }
if (aa=bb) and (k div 2 =1) then writeln(i);
if aa= bb then begin {отбрасываем найденные цифры}
inc(j);
n:=n mod trunc(exp(ln(10)*(k-1)));
m:=m div 10; dec(k);
end;
end;
if j=k div 2 then writeln(i);
end;
End.
Второй способ
program palinAB;
var n1, L, k, i, a, b: Longint;
begin writeln(‘ Введите границы промежутка AB’);
readln(a,b);{ запрашиваем границы промежутка}
|
for i:=a to b do begin
k:=i; n1:=0; {в этой переменной будет перевернутое число n}
while k>0 do
begin L: = k mod 10; {получаем последнюю цифру}
k: =k div 10;{отбрасываем ее}
n1:=n1*10+L { переворачиваем число, последняя цифра становится первой цифрой числа n1, затем предпоследняя приписывается к n1 как вторая цифра и т.д., пока первая не станет последней в n1}
end;
if i=n1 then writeln(n,’-полиндром’);
end;
End.
|
|
История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!