Страница 2 из 4
Re: Помогите в решении простейших задач
Добавлено: 30 сен 2007, 21:43
Serge_Bliznykov
1) 2^N
Result := 1
for i:=1 to N do
Result := Result * 2;
2) Есть несклолько способов решения. Главный вопрос, как разложить число N на состовляющие цифры. Это можно делать через преобразование числа в строку, потом из строки брать по одному символу, преобразовывать в цифру и проверять, делится ли на 3. это несложно.
но, как мне кажется, проще получать в цикле, пока число больше 10 остаток от деления на 10...
Re: Помогите в решении простейших задач
Добавлено: 01 окт 2007, 05:01
ninjais
С первой задачей разобралась, спасибо.
А во второй, если решать с помощью циклов, то каким воспользоваться, что-то я недопонимаю. Циклом с параметром? Я совсем запуталась. Пробовала решать, но ничего не выходит.
Re: Помогите в решении простейших задач
Добавлено: 01 окт 2007, 06:40
Serge_Bliznykov
Код: Выделить всё
var
N, NN : LongInt;
i, OneDigit, Count_Div3 : integer;
begin
Readln(N);
Count_Div3 := 0;
NN := N;
while NN > 10 do
begin
OneDigit := NN mod 10;
NN := NN div 10;
{проверим, что число делится на 3}
if (OneDigit>0) and ((OneDigit mod 3) = 0) then
Inc(Count_Div3);
end;
{теперь последнюю цифру проверим, что число делится на 3}
if (NN>0) and ((NN mod 3) = 0) then
Inc(Count_Div3);
WriteLn('В числе ',N:1,' количество цифр, делящихся на три = ', Count_Div3:1)
end.
Re: Помогите в решении простейших задач
Добавлено: 01 окт 2007, 19:08
ninjais
Спасибо

Re: Помогите в решении простейших задач
Добавлено: 04 окт 2007, 11:19
BBB
Serge_Bliznykov писал(а):Код: Выделить всё
{проверим, что число делится на 3}
if (OneDigit>0) and ((OneDigit mod 3) = 0) then
Inc(Count_Div3);
..................................
{теперь последнюю цифру проверим, что число делится на 3}
if (NN>0) and ((NN mod 3) = 0) then
Inc(Count_Div3);
end.
Вообще-то, насколько я помню математику, ноль также считается делящимся на 3 (и вообще на любое целое число).
Так что, мне кажется, проверку (OneDigit>0) следует убрать:
Код: Выделить всё
{проверим, что число делится на 3}
if ((OneDigit mod 3) = 0) then
Inc(Count_Div3);
..................................
{теперь последнюю цифру проверим, что число делится на 3}
if ((NN mod 3) = 0) then
Inc(Count_Div3);
end.
Re: Помогите в решении простейших задач
Добавлено: 04 окт 2007, 11:26
BBB
Ну и, в принципе, "хвост" алгоритма (проверку последней цифры) также можно занести внутрь цикла:
Код: Выделить всё
var
N, NN : LongInt;
i, OneDigit, Count_Div3 : integer;
begin
Readln(N);
Count_Div3 := 0;
NN := N;
[b] while NN > 0 do[/b] { чуть изменим условие выхода из цикла }
begin
OneDigit := NN mod 10;
NN := NN div 10;
{проверим, что число делится на 3}
if ((OneDigit mod 3) = 0) then
Inc(Count_Div3);
end;
WriteLn('В числе ',N:1,' количество цифр, делящихся на три = ', Count_Div3:1)
end.
Правда, в этом алгоритме не будет отработан краевой случай, когда N =0. Т.е. если исходить из того, что число 0 состоит из одной цифры, которая делится на 9, то данный алгоритм даст неверный результат (0 весто 1) .
Похоже, проблема разрешится сама собой, если просто заменить цикл
while На цикл
repeat until (предполагая, все-таки, что N - число неотрицательное):
Код: Выделить всё
var
N, NN : LongInt;
i, OneDigit, Count_Div3 : integer;
begin
Readln(N);
Count_Div3 := 0;
NN := N;
repeat
OneDigit := NN mod 10;
NN := NN div 10;
{проверим, что число делится на 3}
if ((OneDigit mod 3) = 0) then
Inc(Count_Div3);
until (NN = 0);
WriteLn('В числе ',N:1,' количество цифр, делящихся на три = ', Count_Div3:1)
end.
Re: Помогите в решении простейших задач
Добавлено: 04 окт 2007, 11:30
BBB
(немного поимпровизируем
)
Учитывая, что ЦИФР, делящихся на 3 всего четыре (если считать 0), то условие
if ((OneDigit mod 3) = 0)
можно заменить на:
if (OneDigit in bsDivOn3)
где bsDivOn3 предварительно опсать как:
const bsDivOn3 : set of byte = [0, 3, 6, 9];
Не знаю правда, какой вариант будет эффективнее работать

Re: Помогите в решении простейших задач
Добавлено: 04 окт 2007, 21:23
Serge_Bliznykov
BBB
снимаю шляпу... ;-))
Тема раскрыта!
Re: Помогите в решении простейших задач
Добавлено: 24 окт 2007, 20:20
Quarter
Пожалуйста проверти правильность решения задач.
1)100
Вычислить: S 1/i^2, где S - сумма.
i=1
const n=100;
var i:integer; s:real;
begin
write('s=');
readln(s);
s:=0;
for i:=1 to n do
s:=s+1/i*i;
writeln('s=',s);
end.
2)Дано натуральное n. Сколько цифр в числе n?
var
i,n:LongInt;
begin
Writeln('vvedite chislo');
ReadLn(n);
i:= 1;
while n>=10 do
begin
n:=n div 10;
Inc(i);
end;
Writeln('i=', i);
ReadLn;
end.
3)Даны натуральное число n, действительные числа a[1],...,a[n]. Вы-
числить a[1]+...+a[n].
var
N: integer;
A: array[1..1000] of real;
P: real;
I: integer;
K: real;
begin
Write('N=');
Readln(N);
P:=1;
for I:=1 to N do
begin
Write('Vvedite ',I,'-е chislo A[',I,']=');
Readln(A);
P:=P+A;
end;
K:=Sqrt(Abs(P));
Writeln('K=',K);
ReadLn;
end.
Re: Помогите в решении простейших задач
Добавлено: 25 окт 2007, 20:00
Denton
Для созданного текста определить длину содержащейся в нем максимальной серии символов, отличных от букв.