Leonidovich_Elena771
?>

@page { margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 115%; orphans: 2; widows: 2 } p.western { font-family: "times new roman", serif; font-size: 12pt; so-language: ru-ru } p.cjk { font-family: "times new roman", serif; font-size: 12pt } p.ctl { font-family: "times new roman", serif; font-size: 12pt; so-language: ar-sa } на шахматной доске (8х8) расположены конь и пешка. требуется написать программу, вычисляющую, за какое минимальное число ходов конь сможет «взять» пешку. координаты коня и пешки в шахматном формате, то есть строкой из двух символов. первый символ обозначает столбец (слева направо: a, b, c, d, e, f, g, h), а второй символ строку (снизу вверх: 1, 2, 3, 4, 5, 6, 7, 8 конь перемещается по доске на две клетки по одной координате и на одну клетку по другой. формат входных данных первая строка входного файла содержит координаты коня. вторая - координаты пешки. формат выходных данных в выходной файл необходимо вывести значение минимального количества ходов коня. пример входных и выходных данных kon.in kon.out a1 b2 4 d4 a1 2

Информатика

Ответы

tatyanaryzhkova

//PascalABC.NET версия 3.4.0.1677 от 17.06.18

//Если программа не запускается, то обновите версию

const

   input_file = 'Kon.in';

   output_file = 'Kon.out';

type

   TCell = class

   public  

       x, y: integer;

       constructor Create(coords: string);

       begin

           coords := coords.Trim().ToLower();

           y := StrToInt(coords[2]);

           x := ord(coords[1]) - ord('a') + 1;

       end;

       

       constructor Create(i, j: integer);

       begin

           y := j;

           x := i;

       end;

       

       function IsDeskCell(): boolean;

       begin

           Result := (x > 0) and (y > 0) and (x <= 8) and (y <= 8);

       end;

       

       class function operator+(a, b: TCell): TCell;

       begin

           Result := new TCell(a.x + b.x, a.y + b.y);  

       end;

       

       class function operator=(a, b: TCell): boolean;

       begin

           Result := (a.x = b.x) and (a.y = b.y);

       end;

       

       function ToString: string; override;

       begin

           Result := Format('({0}, {1})', x, y);  

       end;

   end;

procedure PrintAnswer(path: List<TCell>);

begin

   var f := OpenWrite(output_file);

   Writeln(f, path.Count() - 1);

   Println(path.Count() - 1);

   Println(path);

   f.Close();

end;

begin

   var knight_steps := Arr(

   new TCell(1, 2),

   new TCell(2, 1),

   new TCell(2, -1),

   new TCell(1, -2),

   new TCell(-1, -2),

   new TCell(-2, -1),

   new TCell(-2, 1),

   new TCell(-1, 2)

   );

   

   //    var f := OpenWrite(input_file);

   //    Writeln(f, 'a1');

   //    Writeln(f, 'b2');

   //    f.Close();

   //    Exit;

   

   var f := OpenRead(input_file);

   var pawn_place: TCell := new TCell(f.ReadlnString());

   var knight_place: TCell := new TCell(f.ReadlnString());

   f.Close();

   

   var paths := new List<List<TCell>>();

   var occupied_cells := new List<TCell>();

   

   paths.Add(Seq(knight_place).ToList);

   occupied_cells.Add(knight_place);

   

   repeat

       var new_paths := new List<List<TCell>>();

       

       foreach var path in paths do  

       begin

           foreach var step in knight_steps do  

           begin

               var p := new List<TCell>(path);

               var t := p.Last + step;

               

               if t.IsDeskCell() and not occupied_cells.Contains(t) then begin

                   p.Add(t);

                   new_paths.Add(p);

                   occupied_cells.Add(t);

               end;

               

               if t = pawn_place then begin

                   PrintAnswer(p);

                   Exit;

               end;

           end;

       end;

       paths := new_paths;

   until (false)

end.

bereza81

Ошибка 1. Объявлен массив с типом данных значений string, хотя нужно заполнять массив целыми числами, а потом находить их сумму. Необходимо заменить тип string на integer.

Ошибка 2. Цикл не выполнится ни один раз, т.к. неправильно задан параметр. Необходимо либо написать конструкцию так: For i:=n downto 1 do , либо For i:=1 to n do .

Исправленный код:

Program summa;

Var a: array[1..100] of integer;

i, n: integer;

s: integer;

Begin

Write ('n='); Readln (n);

For i:=1 to n do

begin

write ('введите число');

readln (a[i]);

s:=s+a[i];

end;

writeln('сумма элементов равна ',s);

End.

Ерохин

1. program Hello;

var i,j:integer; A:array [1..10, 1..10] of integer;

begin

 for i:=1 to 10 do for j:=1 to 10 do readln(A[i,j]);

 for i:=1 to 10 do for j:=1 to 10 do if A[i,j] mod 2 = 0 then writeln(A[i,j]);

end.

2. program Hello2;

var i,j,c:integer; A:array [1..3,1..3] of integer;

begin

c:=0;

 for i:=1 to 3 do for j:=1 to 10 do readln(A[i,j]);

 for i:=1 to 3 do for j:=1 to 10 do if A[i,j] mod 3 = 2 then c:=c+1;

 writeln(c);

end.

3. program Hello3;

var i,j,c:integer; A:array [1..3,1..3] of integer;

begin

c:=0;

 for i:=2 to 3 do for j:=1 to 10 do readln(A[i,j]);

 for i:=2 to 3 do for j:=1 to 10 do if A[i,j-1] + A[i,j] > 30 then c:=c+1;

 for i:=2 to 3 do for j:=1 to 10 do if A[i-1,j] + A[i,j] > 30 then c:=c+1;

end.

Подробнее - на - program Hello;

var i,j:integer; A:array [1..10, 1..10] of integer;

begin

 for i:=1 to 10 do for j:=1 to 10 do readln(A[i,j]);

 for i:=1 to 10 do for j:=1 to 10 do if A[i,j] mod 2 = 0 then writeln(A[i,j]);

end.

2. program Hello2;

var i,j,c:integer; A:array [1..3,1..3] of integer;

begin

c:=0;

 for i:=1 to 3 do for j:=1 to 10 do readln(A[i,j]);

 for i:=1 to 3 do for j:=1 to 10 do if A[i,j] mod 3 = 2 then c:=c+1;

 writeln(c);

end.

3. program Hello3;

var i,j,c:integer; A:array [1..3,1..3] of integer;

begin

c:=0;

 for i:=2 to 3 do for j:=1 to 10 do readln(A[i,j]);

 for i:=2 to 3 do for j:=1 to 10 do if A[i,j-1] + A[i,j] > 30 then c:=c+1;

 for i:=2 to 3 do for j:=1 to 10 do if A[i-1,j] + A[i,j] > 30 then c:=c+1;

end.

Подробнее - на -

Объяснение:

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

@page { margin: 2cm } p { margin-bottom: 0.25cm; direction: ltr; color: #000000; line-height: 115%; orphans: 2; widows: 2 } p.western { font-family: "times new roman", serif; font-size: 12pt; so-language: ru-ru } p.cjk { font-family: "times new roman", serif; font-size: 12pt } p.ctl { font-family: "times new roman", serif; font-size: 12pt; so-language: ar-sa } на шахматной доске (8х8) расположены конь и пешка. требуется написать программу, вычисляющую, за какое минимальное число ходов конь сможет «взять» пешку. координаты коня и пешки в шахматном формате, то есть строкой из двух символов. первый символ обозначает столбец (слева направо: a, b, c, d, e, f, g, h), а второй символ строку (снизу вверх: 1, 2, 3, 4, 5, 6, 7, 8 конь перемещается по доске на две клетки по одной координате и на одну клетку по другой. формат входных данных первая строка входного файла содержит координаты коня. вторая - координаты пешки. формат выходных данных в выходной файл необходимо вывести значение минимального количества ходов коня. пример входных и выходных данных kon.in kon.out a1 b2 4 d4 a1 2
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

TrofimovAnastasiya828
Горина
gulyaizmailova
gsktae7
foto5113161
AntonovaAvi1716
dvpered
avanesss
Суравцова_Алексей669
Синформатикой , решить нужно все
Кристина910
laktionova-natal
miheev-oleg578
vera2job7
Kashtelyan Tamara847