Помощь - Поиск - Пользователи - Календарь
Полная версия: хитрые задания без хранения последовательности значений
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Vania
Буду очень очень рад и благодарен тем, кто подкинет хоть какие-нибудь идеи:

Выполнить задания без хранения последовательности значений.
1. Дана непустая последовательность X ненулевых целых чисел, за которой следует 0. Вычислить величину:
s=(n-1)*x1+n*x2+...+2*xn+1 .
2. Задано натуральное число k. Определить k-ю цифру последовательности: 1525125625..., в которой выписаны подряд степени 5.
klem4
Цитата
s=(n-1)*x1+n*x2+...+2*xn+1 .


Тут ты явно напутал ...

Уточни.

Может так ?

Цитата
s = n * x1 + (n - 1) * x2 + ... + 2 * x(n-1) + xn + 1



По поводу второй, k хоть как-нибудь ограничено ? blink.gif
volvo
Вторая задача решается на основе "инварианта"... Блин, помню, что-то было про степени пятерки - найти никак не могу... Поищи по слову "инвариант"... Где-то точно была если не эта же, то очень похожая задача...

Вот тоже нечто похожее: Напечатать К-ую цифру последовательности ...
Vania
ой, действительно немножко не так , вместо - в 1 слагаемом + :
s=(n+1)*x1+n*x2+...+2*xn+1

насчет k в задании ничего не сказано...
klem4
Задача: Нам надо ввести последовательность из N значений, и не сохраняя их вычислить
Цитата
s=(n+1)*x1+n*x2+...+2*xn+1


Как вводить последоватьелность указаний нет. -> Вводим последовательность с конца и получаем решение в три строчки:

uses crt;

var

  x, n, s: Integer;

begin
  clrscr;

  n := 1;
  s := 1;

  repeat
    readln(x);
    if x <> 0 then begin
      inc(n);
      s := s + x * n;
    end;
  until x = 0;

  writeln('s = ', s);

  readln;
end.


То есть если мы хоти ввести последовательность 1, 2, 3, 4, 5, 0, вводим 5, 4, 3, 2, 1, 0

Скорее всего не подойдет, но как вариант smile.gif

Если последовательность в файле то все не сложнее:

uses crt;

type
  TFile = File of Integer;


procedure CreateFile;
var
  f: TFile;
  i: Integer;
begin
  Assign(f, 'C:\f.int');
  Rewrite(f);
  // заполняем файл ...
  for i := 1 to 5 do
   write(f, i);
  write(f, 0);
  Close(f);
end;

function GetResult: Integer;
var
  f: TFile;
  X, i, s, n: Integer;
begin

  Assign(f, 'C:\f.int');

  Reset(f);

  s := 1;
  n := 1;

  repeat
    for i := 0 to n - 1 do begin
      Seek(f, i);
      Read(f, X);
      s := s + x;
    end;
    inc(n);
  until x = 0;

  Close(f);

  GetResult := s;
end;

begin
  Clrscr;

  CreateFile;
  writeln(GetResult);

  readln;
end.


Во втором варианте опследовательность в файле должна хранится в "правильном" виде.

А вот как решить эту задачу, если последователность надо вводить с клавиатуры в "правильном варианте" пока ума не приложу =(( Если у кого есть мысли будет очень интересно посмотреть.
мисс_граффити
Цитата
То есть если мы хоти ввести последовательность 1, 2, 3, 4, 5, 0, вводим 5, 4, 3, 2, 1, 0

"Дорогой пользователь! Запишите свои циферки на листочке и читайте в обратном порядке".
blink.gif
program summ;
var Sum,sum1,x:integer;
begin
writeln('x?');
readln(x);
sum:=1;
sum1:=0;
repeat
sum:=sum+sum1+2*x;
sum1:=sum1+x;
writeln('x?');
readln(x);
until (x=0);

writeln;
writeln(sum);
end.
klem4
Да уж ... тупею ... mega_chok.gif
Все гениальное просто как говорится

Только сумма изначально = 1 smile.gif А ты 0 поставила
мисс_граффити
Цитата(klem4 @ 14.11.2006 22:04) *

Только сумма изначально = 1 smile.gif А ты 0 поставила

Невнимательно прочитала sad.gif
Как всегда.
Исправила.
Vania
Благодарю за интересные предложения
Попробую сдать)

принимаются дальнейшие варианты.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.