Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
9 / 9 / 3
Регистрация: 29.11.2010
Сообщений: 40
1

Динамический массив

29.11.2010, 06:07. Показов 1191. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Все как обычно просто. Задаем двумерный массив(любой) и считаем сумму положительных элементов по столбцам. Выводим результат в виде одномерного массива. И все это с динамическим выделением памяти.
Входной файл взял для удобства ввода чисел, выглядит так:
3 - число столбцов
3 - число строк
1 1 1
1 1 1
1 1 1

Вот что получилось
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
{$R-}
program DynamicArray;
 
TYPE
BType=integer;
IndexRow=^MyRow;
MyRow=array [1..1] of BType;{ "Строка" динамической матрицы }
IndexArray=^MyArray;
MyArray=array [1..1] of IndexRow;{ Сама матрица - представляется как массив указателей на "строки" }
 
 
var
DynamicArray1:IndexArray;{ двумерный }
DynamicArray2:IndexRow; {одномерный}
Column,Row,i,j,l,k:integer;
InFile,OutFile:text;
 
BEGIN
Assign (InFile,'in.txt');
Assign (OutFile,'out.txt');
Reset(InFile);
Rewrite(OutFile);
Readln(InFile,Column);
Readln(InFile,Row);
 
GetMem(DynamicArray1,Row*sizeof(IndexRow));
for i:=1 to Column do
GetMem(DynamicArray1^[i],Column*sizeof(BType));
 
GetMem(DynamicArray2,column*sizeof(BType));
 
 
for i:=1 to row do begin
  for j:=1 to column do
      Read(InFile,DynamicArray1^[i]^[j]);
end;
for i:=1 to row do begin
 Writeln(OutFile,' ');
  for j:=1 to column do
 Write(OutFile,'a[',i,',',j,']=',DynamicArray1^[i]^[j]);
end;
k:=1;
for j:=1 to column do begin
  for i:=1 to row do
    if DynamicArray1^[i]^[j]>0 then begin
        DynamicArray2^[k]:=DynamicArray2^[k]+DynamicArray1^[i]^[j];
        end;
k:=k+1;
end;
 
Writeln (OutFile,'');
 
for k:=1 to column do
Writeln(OutFile,'symma [',k,'] stolba s[',k,']=',DynamicArray2^[k]);
 
close(OutFile);
 
for i:=1 to Column do
FreeMem(DynamicArray1^[i],column*sizeof(BType));
FreeMem(DynamicArray1,Row*sizeof(IndexRow));
FreeMem(DynamicArray2,column*sizeof(BType));
Readln;
END.
И не могу понять почему же у меня в памяти одномерного массива все что угодно кроме правильного ответа.

Добавлено через 5 часов 29 минут
Я понял почему ответ не правильный. В памяти мусор. Тогда вопрос как очистить динамическую память.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2010, 06:07
Ответы с готовыми решениями:

Создать динамический массив А целых чисел размерностью M на N. Заполнить массив случайными числами в диапазоне [-50;50]
Создать динамический массив А целых чисел размерностью M на N. За-полнить массив случайными числами...

Дан массив с 50 именами, используя сортировку, преобразовать его в динамический массив и использовать бинарный поиск
Помогите пожалуйста! Дан массив с 50 именами, используя сортировку, преобразовать его в...

Динамический массив
Составит программу, в которой вводится размер массива (одномерный). Выделить память, отсортировать...

Динамический массив
Разработать программу вычисления значения выражения следующего вида: X1*Xn+X2*Xn-1+...+Xn*X1 При...

4
ТруЪ Одмин Всiя Руси
71 / 71 / 14
Регистрация: 20.11.2010
Сообщений: 284
29.11.2010, 08:17 2
заполни нулями и всё
0
9 / 9 / 3
Регистрация: 29.11.2010
Сообщений: 40
29.11.2010, 09:07  [ТС] 3
Ага, я так и сделал. Обнулил массивы.
0
ТруЪ Одмин Всiя Руси
71 / 71 / 14
Регистрация: 20.11.2010
Сообщений: 284
29.11.2010, 17:16 4
ну и как?
0
9 / 9 / 3
Регистрация: 29.11.2010
Сообщений: 40
29.11.2010, 20:57  [ТС] 5
Окончательно получилось
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
{$R-}
program DynamicArray;
 
TYPE
BType=integer;
Type
IndexRow=^MyRow;
MyRow=array [0..0] of BType;{ "Строка" динамической матрицы }
IndexArray=^MyArray;
MyArray=array [0..0] of IndexRow;{ Сама матрица - представляется как массив указателей на "строки" }
 
 
var
DynamicArray1:IndexArray;{двумерный массив }
DynamicArray2:IndexRow; {одномерный}
Column,Row,i,j,l,k:integer;
InFile,OutFile:text;
 
BEGIN
Assign (InFile,'in.txt');
Assign (OutFile,'out.txt');
Reset(InFile);
Rewrite(OutFile);
Readln(InFile,Column);
Readln(InFile,Row);
{Выделяем память по массивы}
GetMem(DynamicArray1,Row*sizeof(IndexRow));
for i:=0 to Column-1 do
GetMem(DynamicArray1^[i],Column*sizeof(BType));
GetMem(DynamicArray2,column*sizeof(BType));
{Обнуляем содержимое памяти}
DynamicArray1^[i]^[j]:=0;
for k:=0 to column-1 do
 DynamicArray2^[k]:=0;
for i:=0 to row-1 do
 for j:=0 to column-1 do
 DynamicArray1^[i]^[j]:=0;
 
for i:=0 to row-1 do begin
  for j:=0 to column-1 do
      Read(InFile,DynamicArray1^[i]^[j]);
end;
for i:=0 to row-1 do begin
  for j:=0 to column-1 do
 Write(OutFile,'a[',i,',',j,']=',DynamicArray1^[i]^[j],'  ');
 Writeln(OutFile,'');
end;
Writeln(OutFile,'');
k:=0;
for j:=0 to column-1 do begin
  for i:=0 to row-1 do
    if DynamicArray1^[i]^[j]>0 then begin
        DynamicArray2^[k]:=DynamicArray2^[k]+DynamicArray1^[i]^[j];
        end;
k:=k+1;
end;
 
Writeln (OutFile,'');
 
for k:=0 to column-1 do
Writeln(OutFile,'symma [',k,'] stolba s[',k,']=',DynamicArray2^[k]);
 
close(OutFile);
{Освобождаем зарезервированную память}
for i:=0 to Column-1 do
FreeMem(DynamicArray1^[i],column*sizeof(BType));
FreeMem(DynamicArray1,Row*sizeof(IndexRow));
FreeMem(DynamicArray2,column*sizeof(BType));
Readln;
END.
Все примеры которые я тестил дали 100% правильный результат.
0
29.11.2010, 20:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.11.2010, 20:57
Помогаю со студенческими работами здесь

Динамический массив
Даны действительные числа а1,..аn Получим:min(a1*a16,a2*a17,..,a15*an) заранее большое...

Динамический массив
Дан динамический массив который сам автоматически заполняется на 10000 чисел, после высчитывает...

Статический в динамический массив
Помогите переписать программу(чтобы использовался динамический массив) Var A:array of integer; ...

Дан одномерный динамический массив
Такое задание, в одномерном массиве поменять максимальный элемент с последним. Я вот, как это...

Создать динамический одномерный массив
Условие : создать динамический одномерный массив заполнить его случайными целыми трехзначными...

Как преобразовать статический массив в динамический?
uses crt; const nmax=100; var a:array of integer; n,i,i1,k:byte; begin clrscr; randomize;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru