Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Uint - cannot run..... ((

Автор: Resager 21.11.2007 0:39

ТЕкст модуля, пишет, что не может выполнить, (но компилит, и файл создаёт!!!)

unit R10_UNIT;
interface
type masiv=array[1..50,1..50] of integer;
procedure maso(n:integer; m:masiv; var m1:masiv);
implementation
procedure maso;
var y,i:integer;
begin
for i:=1 to n do
for y:=1 to n do
if m[i,y]<0 then m[i,y]:=0;
for i:=1 to n do
for y:=1 to n do
m[i,y]:=m1[i,y];
end;
end.


А вот прога, где я этот модуль использую: (в месте обращения к процедуре пишет несоответствие типов)
uses R10_UNIT;
type masiv=array[1..100,1..100] of integer;
var nn:integer; mm1,mm:masiv; {array[1..100,1..100] of integer;}
ii,yy:integer; {nn:integer;} {mm:array[1..100,1..100] of integer; }
begin
writeln('введите размерность квадратной матрицы(одно число): ');
readln(nn);
{********************************************************}
writeln('вводите элементы матрицы: ');
{ввод элементов в память}
for ii:=1 to nn do
for yy:=1 to nn do
readln(mm[ii,yy]);
{конец - ввод элементов в память}

{вывод шапки с n столбцами}
write(#201);
for ii:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if ii<>nn then write(#203);
end;
writeln(#187);
{конец - вывод шапки с n столбцами}

{вывод середины матрмцы}
for ii:=1 to nn do begin
for yy:=1 to nn do begin
write(#186,mm[ii,yy]:5);

end;
writeln(#186);
if ii<>nn then write(#204);
{if (ii<>nn) then begin}
if ii<>nn then
for yy:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if yy=nn then writeln(#185) else write(#206)
end;
{end;}
{if ii=nn then writeln(#185) else writeln;}
end;
{конец - вывод середины матрмцы}

{вывод шапки(снизу) с n столбцами}
write(#200);
for ii:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if ii<>nn then write(#202);
end;
writeln(#188);
{конец - вывод шапки(снизу) с n столбцами}
maso(nn,mm,mm1); {***************ЗДЕСЬ ВЫВОДИТ ОШИБКУ*******************}
readln;
end.
ПОДСКАЖИТЕ В ЧЁМ ОШИБКА И КАК ЕЁ ИСПРАВИТЬ?
З.Ы. В проге много лишнего, вырезаного (ненужное), но алгоритм цел.

М
Используй не цитатные теги, а паскалевские (в меню CODE). Лопарь


Автор: volvo 21.11.2007 0:54

Цитата
В ЧЁМ ОШИБКА И КАК ЕЁ ИСПРАВИТЬ?

У тебя описан masiv в модуле - это матрица 50*50, и masiv в программе - это матрица 100*100. Переменные имеют тип 100*100, хотя модуль ждет другого размера. Убери описание
type masiv=array[1..100,1..100] of integer;
из основной программы, и пользуйся тем, что есть в модуле...

Добавлено через 1 мин.
Ну, или
mm1,mm:r10_unit.masiv;
, если хочется поизвращаться...

Автор: Resager 21.11.2007 20:54

Сначала пробовал, не получилось..... пришлось извращаться!!! Получилось!!!
На всякий случай выкладываю модуль и прграмму здесь:
МОДУЛЬ:

unit R10_UNIT;
interface
type masiv=array[1..50,1..50] of integer;
procedure maso(n:integer; m:masiv; var m1:masiv);
implementation
procedure maso;
var y,i:integer;
begin
for i:=1 to n do
for y:=1 to n do
if m[i,y]<0 then m[i,y]:=0;
for i:=1 to n do
for y:=1 to n do
m1[i,y]:=m[i,y];
end;
end.



ПРОГА:
{Программа выводит введенную квадратную матрицу в рамке}
uses R10_UNIT,crt;
type masiv=array[1..50,1..50] of integer;
procedure mtable(nn:integer; mm:r10_unit.masiv);
var ii,yy:integer;
begin
{вывод шапки с n столбцами}
write(#201);
for ii:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if ii<>nn then write(#203);
end;
writeln(#187);
{конец - вывод шапки с n столбцами}
{вывод середины матрмцы}
for ii:=1 to nn do begin
for yy:=1 to nn do begin
write(#186,mm[ii,yy]:5);
end;
writeln(#186);
if ii<>nn then write(#204);
{if (ii<>nn) then begin}
if ii<>nn then
for yy:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if yy=nn then writeln(#185) else write(#206)
end;
{end;}
{if ii=nn then writeln(#185) else writeln;}
end;
{конец - вывод середины матрмцы}
{вывод шапки(снизу) с n столбцами}
write(#200);
for ii:=1 to nn do begin
write(#205,#205,#205,#205,#205);
if ii<>nn then write(#202);
end;
writeln(#188);
{конец - вывод шапки(снизу) с n столбцами}
end; {mtable}
{********************************************************}
var nn:integer; mm1,mm:r10_unit.masiv;
ii,yy:integer;
begin
clrscr;
writeln('введите размерность квадратной матрицы(одно число): ');
readln(nn);
writeln('вводите элементы матрицы: ');
{ввод элементов в память}
for ii:=1 to nn do
for yy:=1 to nn do
readln(mm[ii,yy]);
{конец - ввод элементов в память}
writeln('Введенная матрица: ');
mtable(nn,mm);
maso(nn,mm,mm1);
writeln('Отформативанная матрица: ');
mtable(nn,mm1);
readln; end.



{навсякий случай напишу:
Откомпелированный файл *.TPU скопировал в папку units и в паскале в Options -> directories и указал в полях "unit directories" и "resource directories" указал путь к папке UNITS, например C:\BP\UNITS }

А вот так вышлядит сгенерированная таблица:Прикрепленное изображение