Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi 7] Работа с модулями


Автор: panasenko 26.11.2006, 16:37
Задача в следующем дано

массив
0.5 -2 4.1 -3
-1.3 5.2 -1.1 6.6

исходный файл
2 4
0.5 -2 4.1 -3
-1.3 5.2 -1.1 6.6

где 2,4 размер матрицы

главная программа

Код

program units;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  myunit in 'myunit.pas';

var
    A:arr;                // ìàññèâ À
    m,n:integer;            // ðàçìåð êâàäðàòíîé ìàòðèöû
begin
    ReadFromFile(A,m);        // ÷òåíèå äàííûõ èç ôàéëà
    KYB(A,m,n);    // ðåøåíèå îñíîâíîé çàäà÷è
    SaveToFile(Amin,Amax,R);    // âûâîä ðåçóëüòàòîâ â ôàéë
 Finalize(A);                // îñâîáîæäåíèå äèíàìè÷åñêîé ïàìÿòè
end.



модуль

Код

unit myunit;

interface
type
    arr=array of array of integer;    // òèï arr äëÿ ìàññèâà À
// Èíòåðôåéñ ïðîöåäóðû ÷òåíèÿ ìàññèâà èç ôàéëà
Procedure ReadFromFile(var A:arr;var m,n:integer);
// Èíòåðôåéñ ïðîöåäóðû íàõîæäåíèÿ ìèíèìàëüíîãî è
// ìàêñèìàëüíîãî ýëåìåíòîâ ìàññèâà è èõ ðàçíîñòè
Procedure KYB(A:arr; m,n:integer);
// îïèñàíèå ïðîöåäóðû âûâîäà ðåçóëüòàòà â ôàéë
Procedure SaveToFile(Amin,Amax,R:integer);

implementation // ðàçäåë ðåàëèçàöèè
//-------------------------------------------------------------
//    Îïèñàíèå ïðîöåäóðû ÷òåíèÿ ìàññèâà èç ôàéëà
//-------------------------------------------------------------
Procedure ReadFromFile(var A:arr; var m,n:integer);
Var
 i,j:integer;        // ñ÷åò÷èêè ïî ñòðîêàì, ñòîëáöàì
    fi:text;        // ôàéëîâàÿ ïåðåìåííàÿ
begin
    // Ôàéëîâîé ïåðåìåííîé fi íàçíà÷àåòñÿ ôàéë Units.txt
    AssignFile(fi,'Units.txt');
    Reset(fi);    // òåêñòîâûé ôàéë îòêðûâàåòñÿ äëÿ ÷òåíèÿ
    Readln(fi,m,n);        // ÷òåíèå ðàçìåðà
    SetLength(A,m,n);    // âûäåëåíèå ïàìÿòè äèíàìè÷åñêîìó ìàññèâó A
    for i:=0 to m-1 do    // ÷òåíèå èç ôàéëà ìàòðèöû À
        for j:=0 to n-1 do Read(fi,A[i,j]);
    CloseFile(fi);        // çàêðûòèå ôàéëà fi
end;
//-------------------------------------------------------------
// Îïèñàíèå ïðîöåäóðû íàõîæäåíèÿ ìèíèìàëüíîãî è ìàêñèìàëüíîãî
// ýëåìåíòîâ ìàññèâà
//-------------------------------------------------------------
Procedure KYB(A:arr;  var m,n :integer);
Var
  // n?ao?eee ii no?ieai, noieaoai - eieaeuiua ia?aiaiiua
    i, j : word;
 begin
 for i:=1 to m do
 for j:=1 to n do
  begin
   if A[i,j]<0 then begin  A[i,j]:=A[i,j]*A[i,j]*A[i,j]; end
   else
  A[i,j]:=A[i,j]*A[i,j];
  end;
  end;

//-------------------------------------------------------------
// Îïèñàíèå ïðîöåäóðû âûâîäà ðåçóëüòàòà â ôàéë
//-------------------------------------------------------------
Procedure SaveToFile(var f:text;A:arr;var m,n:integer);
begin
var
i,j:integer;
for i:=1 to n do begin
 for j:=1 to m do
  begin
  Write(A[i,j]);
  writeln;
  end;
end;
   for i:=1 to n do begin
 for j:=1 to m do
Writeln(f,A[i,j]);
end;

end;

end.



Помогите найти ошибки в программе у меня при запуске возникает такое 

[Error] myunit.pas(36): Declaration of 'KYB' differs from previous declaration
[Error] myunit.pas(53): Previous declaration of 'SaveToFile' was not marked with the 'overload' directive
[Error] myunit.pas(55): Statement expected but 'VAR' found
[Error] myunit.pas(57): Declaration expected but 'FOR' found
[Error] myunit.pas(58): Undeclared identifier: 'm'
[Error] myunit.pas(60): Undeclared identifier: 'A'
[Error] myunit.pas(63): '.' expected but ';' found
[Error] myunit.pas(64): Identifier redeclared: 'Finalization'
[Error] myunit.pas(66): Undeclared identifier: 'f'
[Warning] myunit.pas(67): Text after final 'END.' - ignored by compiler
[Error] myunit.pas(12): Unsatisfied forward or external declaration: 'SaveToFile'
[Fatal Error] units.dpr(7): Could not compile used unit 'myunit.pas'

Автор: Guedda 26.11.2006, 21:04
Цитата(panasenko @  26.11.2006,  16:37 Найти цитируемый пост)
[Error] myunit.pas(36): Declaration of 'KYB' differs from previous declaration

В 36 строке удали var, так как в объявлении этой функции вместо 
Код

Procedure KYB(A:arr; m,n:integer);

стоит
Код

Procedure KYB(A:arr; var m,n:integer);

Цитата(panasenko @  26.11.2006,  16:37 Найти цитируемый пост)
[Error] myunit.pas(53): Previous declaration of 'SaveToFile' was not marked with the 'overload' directive

Просто поменяй название функции, так как в модуле SysUtils уже есть функция с таким же именем. Либо в объявлениях функций после ; напиши так:
Код

Procedure SaveToFile(Amin,Amax,R:integer); overload;

Цитата(panasenko @  26.11.2006,  16:37 Найти цитируемый пост)
[Error] myunit.pas(55): Statement expected but 'VAR' found

var не ставится после begin
Цитата(panasenko @  26.11.2006,  16:37 Найти цитируемый пост)
[Error] myunit.pas(57): Declaration expected but 'FOR' found

Иправишь предыдущую ошибку, и эта исправится.
И вообще все следующие ошибки исправятся, если эту исправишь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)