Страница 1 из 2
помогите разобраться с динамическими массивами
Добавлено: 07 май 2007, 14:29
kai.nbt
здравствуйте,товарищи!
задача такая:дан массив C произвольной длины N, нужно сделать новый массив P из C, чтобы каждый его элемент равнялся сумме всех предыдущих элементов массива C.как это сделать я знаю,но не знаю как описать "произвольную длину N".
помогите пожалуйста!

заранее спасибо!
Re: помогите разобраться с динамическими массивами
Добавлено: 07 май 2007, 15:22
Колядин Максим
Код: Выделить всё
var m: array [1..32767] of integer;
n,i: integer;
begin
readln(n);
for i:= 1 to n do
...
...
end.
Re: помогите разобраться с динамическими массивами
Добавлено: 07 май 2007, 15:37
Колядин Максим
Если нужен, то вот полный код программы:
Код: Выделить всё
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.
Re: помогите разобраться с динамическими массивами
Добавлено: 07 май 2007, 16:25
BBB
Колядин Максим,
А если пользователь укажет n > 10000 ??
Может, лучше воспользоваться динамическим выделение памяти через GetMem ?
Re: помогите разобраться с динамическими массивами
Добавлено: 07 май 2007, 16:32
BBB
Колядин Максим писал(а):Код: Выделить всё
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;
Re: помогите разобраться с динамическими массивами
Добавлено: 08 май 2007, 10:06
somewhere
" писал(а):for i:= 1 to n do readln(c);
" писал(а):А если пользователь укажет n > 10000 ??
Ага, и прикинь их потом все забивать? :-))
Re: помогите разобраться с динамическими массивами
Добавлено: 08 май 2007, 10:23
Хыиуду
Если это Дельфи - лучше использовать setlength(c,N);
Re: помогите разобраться с динамическими массивами
Добавлено: 08 май 2007, 11:21
kai.nbt
BBB писал(а):Колядин Максим,
А если пользователь укажет n > 10000 ??
Может, лучше воспользоваться динамическим выделение памяти через GetMem ?
спасибо за совет!только я не знаю как это)
а можно ввести размерность матрицы в режиме диалога?то есть вводишь N и создается матрица NxN.
п.с. это не дельфи

а паскаль
Re: помогите разобраться с динамическими массивами
Добавлено: 08 май 2007, 11:51
kai.nbt
Колядин Максим писал(а):Если нужен, то вот полный код программы:
Код: Выделить всё
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 писал(а):Ага, и прикинь их потом все забивать? :-))

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