Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2011, 18:11   #1
ДмитрийРэй
Пользователь
 
Регистрация: 04.12.2010
Сообщений: 16
По умолчанию Динамическая матрица

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

program kr3;
uses crt,dos;
type
mytype=integer;
pmymas=^mymas;
mymas=array[0..0] of mytype;

myarrayptr=^myarray;
myarray=array[0..0] of pmymas;

function choosing:byte;
var c:char;
success:boolean;
begin
repeat
writeln('Выберите один из следующих вариантов:1-ввод матрицы вручную; ');
writeln('2-автоматическое заполнение матрицы;3-ввод из файла.');
readln(c);
case c of
'1':choosing:=1;
'2':choosing:=2;
'3':choosing:=3;
else
begin writeln('Ошибка. Вы должны выбрать один из предложенных вариантов.');
success:=false;
end;
end;
if(c='1')or(c='2')or(c='3') then success:=true;
until (success=true);
end;

procedure input(var dinarray:myarrayptr;var n:integer);
var i,j,code:integer;
s:string;
begin
writeln('Введите размер квадратной матрицы A');
readln(n);
getmem(dinarray,n*sizeof(pmymas));
for i:=1 to n do
getmem(dinarray^[i],n*sizeof(mytype));
for j:=1 to n do begin
repeat
write ('A[',i,',',j,']=');
readln(s);
val(s,dinarray^[i]^[j],code);
if code<>0 then writeln('Введено недопустимое значение! Повторите ввод!');
until(code=0);
end;
end;

procedure automat(var n:integer;var dinarray:myarrayptr);
var j,i:integer;
begin
randomize;
writeln('Введите размер квадратной матрицы');
readln(n);
for i:=1 to n do
for j:=1 to n do
begin
dinarray^[i]^[j]:=random(50);
end;
end;

procedure filinput(var n:integer;var dinarray:myarrayptr);
var i,j:integer;
name:string;
fin:text;
begin
repeat
writeln('Введите имя файла');
readln(name);
assign(fin,name+'.txt');
{$I-}
reset(fin);
{$I+}
if IOResult<>0 then writeln('Данный файл не существует');
until(IOResult=0);
read(fin,n);
for i:=1 to n do
for j:=1 to n do
read(fin,dinarray^[i]^[j]);
writeln;
close(fin);
end;

procedure ishod(const dinarray:myarrayptr;n:integer);
var i,j:integer;
begin
writeln ('Исходная матрица A ');
for i:=1 to n do begin
for j:=1 to n do
write (dinarray^[i]^[j]:3,' ');
writeln;
end;
end;

procedure sred(var kol,sum:integer;const dinarray:myarrayptr;n:integer);
var i,j:integer;
begin
sum:=0; kol:=0;
for i:=1 to n do
for j:=1 to n do
if (dinarray^[i]^[j]>0) and (i<j) then
begin inc(kol);
sum:=sum+dinarray^[i]^[j];
end;
end;

procedure output(kol,sum:integer;n:integer);
var
fout:text;
c:char;
name:string;

begin
writeln('Для вывода результата на экран нажмите 1, если в файл - 2');
readln(c);
if (c='1') then begin
writeln('Сумма положительных элементов над главной диагональю= ',sum);
writeln('Их количество= ',kol);
writeln('Среднее арифметическое=',sum/kol:4:2);
end
else
if (c='2') then begin
writeln('Введите имя файла:');
readln(name);
assign(fout,name);
rewrite(fout);
write(fout,'Среднее арифметическое=',sum/kol:4:2);
close(fout);
end;
end;


var kol,sum,n,i:integer;
dinarray:myarrayptr;
begin
clrscr;
write('Данная программа находит среднее арифметическое всех положительных элементов,');
writeln('находящихся над главной диагональю.');
case choosing of
1:input(dinarray,n);
2:automat(n,dinarray);
3:filinput(n,dinarray);
end;
ishod(dinarray,n);
sred(kol,sum,dinarray,n);
output(kol,sum,n);
readln;
for i:=1 to n do
freemem(dinarray^[i],n*sizeof(mytype));
freemem(dinarray,n*sizeof(pmymas));
readln;
end.
помогите плиз!!!
ДмитрийРэй вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическая матрица Shab13 Помощь студентам 1 21.04.2011 11:11
Непонятки с DirectX (матрица поворота, камера, матрица проекции) ROD Общие вопросы C/C++ 2 17.09.2010 17:00
Динамическая матрица через класс и перегрузка artyom-d Общие вопросы C/C++ 0 03.04.2010 14:36
Динамическая матрица Selestis Общие вопросы Delphi 5 20.02.2010 20:37
TurboPascal: граф, матрица смежности и матрица инцидентности. ulala Помощь студентам 0 02.12.2009 10:11