Помощь - Поиск - Пользователи - Календарь
Полная версия: Затруднения с циклами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Vaso
Кто-нибудь может мне помочь сотавить алгоритм по задаче, т.к. я только начал учиться писать на Паскале:
Требуется подсчитать количество цифр больших 9, у натурального числа N в шестнадцатиричной
системе счисления.
klem4
uses crt;
const
D : array[0..5] of byte = (10,11,12,13,14,15);
var
s: string;
i,temp,count,n : LongInt;
begin


clrscr;

write('Hex = '); readln(s);

n := length(s);

writeln;
count := 0;
for i := 1 to n do begin
if s[i] in ['A'..'F'] then
temp := D[ord(s[i])-65]
else
temp := ord(s[i])-48;

temp := temp * round(exp((n-i) * ln(16)) );

writeln(temp);

if temp > 9 then inc(count);

end;

writeln;
writeln(count);


readln
end.

volvo
Угу... И я введу '123af'
dry.gif
klem4
Кажись поправил unsure.gif

пс защиты от дурака нету. и буквы бльшие надо вводить, ну если надо, можно сделать патч smile.gif)
Vaso
Помогите найти ошибку в программе:
Требуется вычислить сумму ряда с погрешностью e=0.0001 в окрестности точки 0,
т.е. при |x|<1; y=x/2-x*x/(2*2*2)+x*x*x/(2*2*2*3)-x*x*x*x/2*2*2*2*4+....
Сама программа у меня получилась такая:
Код
const e=0.0001;
Var  y,slag,x,p:real;
         k,b:byte;
Begin
repeat
writeln ('Vvedite |x|<1);
readln (x);
until abs(x)<1;
y:=0;
p:=-1;
b:=1;
k:=0;
slag:=x/2;
While abs(slag)>=e do
begin
k:=k+1;
b:=b*1;
p:=-p*x;
slag:=p/(b*k);
y:=y+slag;
writeln ('znachenie slag na etapax ',slag:6:4);
end;
writeln ('Znachenie summi ',y:6:4);
end.

При малых числах все верно вычисляет, но при 0.9, 0.8 выдает ошибку деления на 0.
Не могу понять, где она видит деление на 0 при вычислении slag.


Спасибо всем за помощь с первой задачей! smile.gif
volvo
Перед тем, как решать подобные задачки, тебе надо вывести формулу общего члена последовательности... В данном случае
Код
                    X^n
  Xn = (-1)^n * ------------
                 (2^n) * n
А теперь приступай к вычислениям...

Вот так ничего не вылетает:
const
eps = 0.0001;
Var
n, sign: integer;
x, s, next: real;

begin
repeat
write('Vvedite |x| < 1 ');
readln(x);
until abs(x)<1;

sign := 1; n := 1;
next := x / 2;
s := next;
repeat
next := next * x / 2;
inc(n); sign := -sign;
s := s + (sign * next / n)
until (next / n) < eps;

writeln('s = ', s:10:7);
end.
Vaso
Спасибо volvo!
Все работает good.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.