Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Задача по циклам (http://www.tehnari.ru/f43/t59078/)

Сова 28.10.2011 23:36

Задача по циклам
 
Работа с циклическими конструкциями.
Пользователь вводит целое положительное число k. Найти наибольшее значение суммы
1^k + 2^k + 3^k + ... + n^k ,
Вывести на экран таблицу всех значений суммы, которые не выходят за пределы диапазона типа longint.

:tehnari_ru_281: Помогите, товарищи! Задачу надо решить через циклы. Я уже третьи сутки кукую, шляпа какая-то получается, ничего толкового. Сумма не выходит. :tehnari_ru_1019: В общем, помогите.

Вот моя прога.
Program Cikl;
uses crt;
const v=#179;
var s,k,i,z,x,c:longint;
begin
clrscr;
writeln ('---------------------------');
writeln (v,'Степень',v,' Значение суммы ',v);
writeln ('---------------------------');
for k:=1 to 16 do
begin
write (v,' ',k,' ',v,' ');
i:=1;
while s<exp(30*ln(2)) do
begin
s:=s+trunc(exp(k*ln(i)));
i:=i+1;
end;
writeln (s,' ',v);
writeln ('---------------------------');
end;
writeln;
write ('‚Введите положительное число k=');
readln (x);
if (x>=31) then writeln ('Наибольшая сумма равна s=1')
else
if (x>=20) and (x<31) then
z:=1+trunc(exp(x*ln(2)))
else begin
c:=1;
while z<exp(30*ln(2)) do
begin
z:=z+trunc(exp(x*ln(c)));
c:=c+1;
end;
writeln ('Наибольшая сумма равна s=',z);
end;
writeln ('Наибольшая сумма равна s=',z);
readln;
end.

AlexZir 29.10.2011 09:33

Наворотили вы тут действительно что-то непонятное, трудноосмысляемое и неудобоваримое.
Код:

var
i,k:longint;
s:extended;
begin
write('K=');
readln(k);
i:=2;
s:=1;
 while s<exp(31*ln(2)) do
 begin
 s:=s+trunc(exp(k*ln(i)));
 writeln ('При i=',i,' текущая сумма s=',s);
 i:=i+1;
 end;
writeln ('Наибольшая сумма равна s=',s);
readln;
end.

остальное, кроме раздела переменных, imho, лишнее :)

З.Ы. Диапазон значений не проверял, но вроде как верный

Vladimir_S 29.10.2011 09:33

Цитата:

Сообщение от Сова (Сообщение 608512)
Пользователь вводит целое положительное число k. Найти наибольшее значение суммы 1^k + 2^k + 3^k + ... + n^k , Вывести на экран таблицу всех значений суммы, которые не выходят за пределы диапазона типа longint.

Я бы Вам с удовольствием помог, если бы уяснил условие задачи. Итак, есть граница диапазона, равная 2^31-1. Вводим k. Отсюда с помощью цикла определяем n. Всё предельно однозначно, а потому я напрочь не понимаю, о каких "наибольших" и "всех" значениях суммы идет речь? Повторяю, я вижу абсолютно однозначное по k, n и, соответственно, s решение. Поясните.

AlexZir 29.10.2011 09:57

Владимир, думаю, что требуется вывести цепочки сумм степеней чисел для различных показателей степени. Эти цепочки при разных значениях k будут различаться по длине и количеству чисел. Тут нужно будет еще ввести ограничение на значение k, так как при числах более 10 выдается ошибка превышения диапазона :)
Но это мое сугубое imho :)

Сова 29.10.2011 22:57

Алексей, очень вас благодарю.
Владимир, предоставляю вам простое объяснение. Я студент, мне дали вот эту задачу. Я тоже сутки думал, что за смысл этой задачи. В итоге, пришел к выводу, что это банальная сумма. Меня все равно смущает наличие переменной n. Я сам не понимаю толком.
И Алексей, выйдете в аську, пожалуйста.

Сова 30.10.2011 03:58

И все же, как быть со второй частью вопроса?)


Часовой пояс GMT +4, время: 18:15.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.