Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Минуточку внимания!

Автор: Незнайка 013 17.03.2008 17:13

Задачка следующая: Дано натуральное число n и действительное число a. Получить последовательность В1,....,Вn, где при i=1,2,...,n значение Вi равно а в степени i.
program one;
var
n,i :integer; x,a: reai;
begin
writeln ('введите числа n и a');
write ('n='); readln (n); write ('a='); readln (a);
for i:=1 to n do
begin
a:=exp (i*ln(a)); x:=a;
end;
write (x[i]:6:2,' ');
end.
Что я неправильно сделал? помогите пожалста...

Автор: Странник 17.03.2008 17:31

Ты в пинципе все сделал, чтобы получить последовательность чисел тебе нужно было описать массив из вещественных чисел. Смотри код.


program one;
uses
crt;
var
n,i:integer;
a,x:real;
b:array [1..100] of real; //чтобы получить последовательность чисел нужно использовать массивы

begin
clrscr;
writeln ('Ввести числа n и a');
write ('n='); readln (n); write ('a='); readln (a);
for i:=1 to n do
begin
x:=exp(i*ln(a));

b[i]:=x; // записываешь результат вычисления в массив

write (b[i]:6:2,' '); //выводишь массив в цикле
end;
readln;
end.



Автор: volvo 17.03.2008 17:36

Цитата
x:=exp(i*ln(a)); 
Это здесь не нужно совершенно. Есть предыдущее значение, из него вычисляй текущее. Лишние вычисления - зло...

О том, что резервировать место для 100 элементов массива, даже если тебе понадобится всего 5 из них, это некорректно - я уже говорил, но как видно, это всем по фигу...

Добавлено через 1 мин.
Цитата
чтобы получить последовательность чисел тебе нужно было описать массив
Чтобы получить последовательность массив не нужен. Он нужен, чтобы сохранить эту последовательность. Чувствуешь разницу?

Автор: Незнайка 013 17.03.2008 17:54

Премного благодарен!!!
Еще можно?
задачка: Даны натуральные числа n,A1,A2,...,An. Определить количество членов Ак последовательности А1,...,Аn, кратных 3 и некратных 5. Опять моя програмка не работает.
program pyat;
var
x:array [1..200] of integer;
i,k,n: integer;
begin
write ('введите n<=200'); readln (n);
for i:=1 to n do
begin
write ('x[' ,i, ']= ');
readln (x[i]);
end;
k:=0;
for i:=1 to n do
if i mod 3=0 and mod 5<>0 then
begin
k:=k+1;
end;
writeln (k);
end.
Чего опять я нето написал?

Автор: Странник 17.03.2008 18:25

Цитата(volvo @ 17.03.2008 16:06) *

Это здесь не нужно совершенно. Есть предыдущее значение, из него вычисляй текущее.


это всмысле вот так

 b[i]:=exp(i*ln(a)); 


или как то по другому?


Автор: andriano 17.03.2008 18:54

Цитата(Странник @ 17.03.2008 14:25) *

это всмысле вот так

 b[i]:=exp(i*ln(a)); 


или как то по другому?

Это в смысле:
b := b*a;
Причем, b - не массив, а простая переменная, что избавляет сразу от двух неприятностей:
1. Нерационального использования памяти.
2. Возможности порчи памяти при выходе за границы массива, если запрошенное n окажется больше 100.

Автор: Странник 17.03.2008 21:09

Цитата(andriano @ 17.03.2008 17:24) *

Это в смысле:
b := b*a;
Причем, b - не массив, а простая переменная, что избавляет сразу от двух неприятностей:
1. Нерационального использования памяти.
2. Возможности порчи памяти при выходе за границы массива, если запрошенное n окажется больше 100.


Имелось ввиду что то наподобие вот этого?

b:=1;
for i:=1 to n do
b:=b*a;
end;



Автор: Michael_Rybak 17.03.2008 23:52

М
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
6. Одна тема - один вопрос (задача)