помогите разобраться с динамическими массивами

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Аватара пользователя
kai.nbt
Сообщения: 6
Зарегистрирован: 07 май 2007, 14:16
Откуда: Russian Federation, Moscow
Контактная информация:

здравствуйте,товарищи! :)
задача такая:дан массив C произвольной длины N, нужно сделать новый массив P из C, чтобы каждый его элемент равнялся сумме всех предыдущих элементов массива C.как это сделать я знаю,но не знаю как описать "произвольную длину N".
помогите пожалуйста! ;) заранее спасибо!
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Код: Выделить всё

var m: array [1..32767] of integer;
n,i: integer;
begin
readln(n);
for i:= 1 to n do
...
...
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Если нужен, то вот полный код программы:

Код: Выделить всё

var c,p: array [1..10000] of integer;
n,i,j,sum: integer;
begin
readln(n);                       {размер массива}
for i:= 1 to n do readln(c[i]);
for i:= 1 to n do begin
sum:=0;
for j:= 1 to i do sum:=sum+c[j];
p[i]:=sum;
end;
end.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Колядин Максим,
А если пользователь укажет n > 10000 ??

Может, лучше воспользоваться динамическим выделение памяти через GetMem ?
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Колядин Максим писал(а):

Код: Выделить всё

for i:= 1 to n do begin
  sum:=0;
  for j:= 1 to i do sum:=sum+c[j];
  p[i]:=sum;
end;
И, поскольку для каждого I (2 < I <= N) выполняется:
P = Сумма (C[1] + ... C[I-1] ), то
справедливо равенство:
P [I + 1] = Сумма (C[1] + ... C[I-1] + C ) = Сумма (C[1] + ... C[I-1]) + C = P + C

И алгоритм можно соптимизировать:

Код: Выделить всё

P [i] = 0;
for i:= 2 to N do begin
  P [I] = P [i - 1] + C [i - 1];
end;
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

&quot писал(а):for i:= 1 to n do readln(c);
&quot писал(а):А если пользователь укажет n > 10000 ??

Ага, и прикинь их потом все забивать? :-))
It's a long way to the top if you wanna rock'n'roll
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Если это Дельфи - лучше использовать setlength(c,N);
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
kai.nbt
Сообщения: 6
Зарегистрирован: 07 май 2007, 14:16
Откуда: Russian Federation, Moscow
Контактная информация:

BBB писал(а):Колядин Максим,
А если пользователь укажет n > 10000 ??

Может, лучше воспользоваться динамическим выделение памяти через GetMem ?
спасибо за совет!только я не знаю как это)
а можно ввести размерность матрицы в режиме диалога?то есть вводишь N и создается матрица NxN.
п.с. это не дельфи :( а паскаль
Аватара пользователя
kai.nbt
Сообщения: 6
Зарегистрирован: 07 май 2007, 14:16
Откуда: Russian Federation, Moscow
Контактная информация:

Колядин Максим писал(а):Если нужен, то вот полный код программы:

Код: Выделить всё

var c,p: array [1..10000] of integer;
n,i,j,sum: integer;
begin
readln(n);                       {размер массива}
for i:= 1 to n do readln(c[i]);
for i:= 1 to n do begin
sum:=0;
for j:= 1 to i do sum:=sum+c[j];
p[i]:=sum;
end;
end.
Большое спасибо! :) я наверное так и сделаю.только array[1..65535] сделаю,ибо препод урод,может и заставить
somewhere писал(а):Ага, и прикинь их потом все забивать? :-))
:D
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

kai.nbt писал(а):спасибо за совет!только я не знаю как это)
а можно ввести размерность матрицы в режиме диалога?то есть вводишь N и создается матрица NxN.
Вроде, изначально решь шла об одномерном массиве?
Ответить