Консультация № 168363
27.05.2009, 01:25
0.00 руб.
0 1 0
Помогите исправить ошибку. Задание: в каждой строке матрицы заменить максимальный и минимальный элемент 0. Я предпологаю, что ошибка возникает в выделение динамической памяти в процедуре Procedure TranspositingMaxMinElementInEveryRow(var X:Matrica; K,L:integer). Имена нектороных переменных и функций могут криво не соответствовать реальности,( переделывал другую прогу, еще не менял.). Код в приложении.


Приложение:
Program KKR3_10;
uses CRT;
type Row=array[1..1] of integer;
DynamicRow=^Row;
DynamicCol=array[1..1] of DynamicRow;
Matrica=^DynamicCol;

Procedure CheckingDimension(K,L:integer);
begin
if (K<=0) or (L<=0) then
begin
writeln('ЌҐЇа ўЁ«м­® гЄ § ­  а §¬Ґа­®бвм ¬ ваЁжл!!! ‚ўҐ¤ЁвҐ ўҐа­го а §¬Ґа­®бвм!!!');
readln;
halt;
end;
end;

Procedure InputMatrixFromTxtFile(var X:Matrica; var K,L:integer; PathOfFile:string);
var InputFile:text;
i,j:integer;
begin
assign(InputFile,PathOfFile);
reset(InputFile);
if IOResult<>0 then
begin
writeln('” ©« ­Ґ ­ ©¤Ґ­ Ё«Ё ­Ґ зЁв Ґвбп!');
readln;
halt;
end
else
begin
read(InputFile,K,L);
CheckingDimension(K,L);
getmem(X,K*sizeof(integer));
for i:=1 to L do
getmem(X^[i],K*sizeof(integer));
for i:=1 to K do
begin
for j:=1 to L do
read(InputFile,X^[i]^[j]);
end;
close(InputFile);
end;
end;

Procedure PrintMatrix(X:Matrica; K,L:integer);
var i,j:integer;
begin
for i:=1 to K do
begin
for j:=1 to L do
write(X^[i]^[j]:4,' ');
writeln;
end;
end;

Procedure TranspositingMaxMinElementInEveryRow(var X:Matrica; K,L:integer);
var i,j,buf1,buf2,A,B,min_j,max_j:integer;
begin
for j:=1 to L do
begin
max_j:=1;
min_j:=1;
for i:=1 to K do
begin
if X^[i]^[j] < mix_j then
min_j:=j;

if X^[i]^[j]>max_j then
max_j:=j;

end;
buf1:=X^[i]^[min_j]; buf2:=X^[i]^[max_j];
for j:= 1 to K do
if (X^[i]^[j]=buf1) or (X^[i]^[j]=buf2) then X^[i]^[j]:=0

end;
end;

Procedure OutputMatrixToTxtFile(X:Matrica; K,L:integer; PathOfFile:string);
var i,j:integer;
OutputFile:text;
begin
assign(OutputFile,PathOfFile);
rewrite(OutputFile);
for i:=1 to K do
begin
for j:=1 to L do
begin
write(OutputFile,X^[i]^[j]:4,' ');
end;
writeln;
writeln(OutputFile,'');
end;
close(OutputFile);
end;

var K,L:integer;
X:Matrica;
i,j:integer;
PathIn,PathOut:string;
begin
clrscr;
writeln('‡¤а ўбвўг©вҐ, гў ¦ Ґ¬л© Ї®«м§®ў вҐ«м!');
writeln('ќв  Їа®Ја ¬¬  ў Є ¦¤®¬ бв®«ЎжҐ ¬Ґ­пҐв ¬Ґбв ¬Ё ­ ЁЎ®«миЁ© Ё ­ Ё¬Ґ­миЁ© Ї® ¬®¤г«о н«Ґ¬Ґ­вл.');
write('‚ўҐ¤ЁвҐ Їгвм ўе®¤­®Ј® д ©«  ');
readln(PathIn);
InputMatrixFromTxtFile(X,K,L,PathIn);
writeln('‚л ўўҐ«Ё в Єго Ёб室­го ¬ ваЁжг:');
PrintMatrix(X,K,L);
TranspositingMaxMinElementInEveryRow(X,K,L);
writeln('‚ Ёв®ЈҐ, Ї®«гзЁ«Ё ¬ ваЁжг:');
PrintMatrix(X,K,L);
write('‚ўҐ¤ЁвҐ Їгвм ўл室­®Ј® д ©«  ');
readln(PathOut);
OutputMatrixToTxtFile(X,K,L,PathOut);
for i:=1 to L do
freemem(X^[i],K*sizeof(integer));
freemem(X,K*sizeof(integer));
writeln('ђҐ§г«мв в ЇҐаҐбв ­®ўЄЁ § ЇЁб ­ ў д ©«');
readln;
end.

Обсуждение

давно
Мастер-Эксперт
425
4118
29.05.2009, 10:23
общий
Bel9illi
Прежде чем начинать использовать динамическую переменную Х, Вам надо выделить под неё необходимый объём оперативной памяти.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа