2013-04-07 2 views
0

Программа должна выводить, является ли квадрат магическим квадратом или нет.Magic Square FreePascal

Я должен прочитать квадрат из файла.

Магический квадрат - все строки, все столбцы и обе диагональные суммы должны быть равны.

Программа показывает правильный ответ, но эти 16 номеров должны быть прочитаны из текстового файла.

Текстовый файл выглядит как:

1 1 1 1 
2 2 2 2 
3 3 3 3 
4 4 4 4 

самой программы:

var 
    m:array[1..4,1..4] of integer; 
    i:byte; 
    j:byte; 
    r1,r2,r3,r4,c1,c2,c3,c4,d1,d2:integer; 

begin 

for i:=1 to 4 do 
    for j:=1 to 4 do 

    begin 
    write('Enter value for column=',i,' row=',j,' :'); 
    readln(m[i,j]); 
    end; 

r1:=m[1,1]+m[1,2]+m[1,3]+m[1,4]; 
r2:=m[2,1]+m[2,2]+m[2,3]+m[2,4]; 
r3:=m[3,1]+m[3,2]+m[3,3]+m[3,4]; 
r4:=m[4,1]+m[4,2]+m[4,3]+m[4,4]; 
c1:=m[1,1]+m[2,1]+m[3,1]+m[4,1]; 
c2:=m[1,2]+m[2,2]+m[3,2]+m[4,2]; 
c3:=m[1,3]+m[2,3]+m[3,3]+m[4,3]; 
c4:=m[1,4]+m[2,4]+m[3,4]+m[4,4]; 
d1:=m[1,1]+m[2,2]+m[3,3]+m[4,4]; 
d2:=m[1,4]+m[2,3]+m[3,2]+m[4,1]; 

if (r1=r2) and (r2=r3) and (r3=r4) and (r4=c1) and (c1=c2) and (c2=c3) and (c3=c4) and (c4=d1) and (d1=d2) then 
    begin 
    write('Magic Square'); 
    end 

else 
    begin 
    write('Not Magic Square'); 
    end; 

readln; 

end. 
+0

В самом деле, можно попробовать заменить 'readln' в цикле с' read' и затем запустить программу из командной строки, как это: 'yourprogram

ответ

1

Вот процедура, чтобы прочитать матрицу из текстового файла. Элементы строки должны быть разделены пробелом.

type 
    TMatrix = array[1..4,1..4] of integer; 

procedure ReadMatrix(const filename: String; var M: TMatrix); 
var 
    i,j : integer; 
    aFile,aLine : TStringList; 
begin 
    aFile := TStringList.Create; 
    aLine := TStringList.Create; 
    aLine.Delimiter := ' '; 
    try 
    aFile.LoadFromFile(filename); 
    Assert(aFile.Count = 4,'Not 4 rows in TMatrix'); 
    for i := 0 to 3 do 
    begin 
     aLine.DelimitedText := aFile[i]; 
     Assert(aLine.Count = 4,'Not 4 columns in TMatrix'); 
     for j := 0 to 3 do 
     M[i+1,j+1] := StrToInt(aLine[j]); 
    end; 
    finally 
    aLine.Free; 
    aFile.Free; 
    end; 
end; 
+1

@Peter, это сработало для вас? –

+0

Я не пробовал –

+0

Ошибка: Идентификатор не найден «TStringList» и «Ошибка: идентификатор не найден» try »' –

Смежные вопросы