Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.12.2021
Сообщений: 3
1

Перевод из паскаля в питон

10.12.2021, 20:45. Показов 1375. Ответов 4

Author24 — интернет-сервис помощи студентам
Есть код на питоне надо перевести с питона на паскаль


Собственно сам код:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
n,m = map(int,input().split())
a = []
for i in range(n):
    a.append(list(input()))
x,y = map(int,input().split())
q = [(x-1,y-1,0,(0,0))]
path = []
g = []
for i in range(n):
    g.append([])
    for j in range(m):
        g[i].append('!')
while q:
    q.sort(key=lambda x: x[2], reverse=True)
    last = len(q) - 1
    x, y, dist,vec = q[last]
    g[x][y] = dist
    path.append((x, y))
    q.pop()
    if x + 1 < n:
        if a[x+1][y] == '0' and (x + 1, y) not in path:
            if vec == (1,0): 
                q.append((x + 1, y, dist,(1,0)))
            else:
                q.append((x + 1, y, dist+1,(1,0)))
 
    if x - 1 > -1:
        if a[x-1][y] == '0' and (x - 1, y) not in path:
            if vec == (-1,0): 
                q.append((x - 1, y, dist,(-1,0)))
            else:
                q.append((x - 1, y, dist+1,(-1,0)))
    if y + 1 < m:
        if a[x][y+1] == '0' and (x, y + 1) not in path:
            if vec == (0,1): 
                q.append((x , y + 1, dist,(0,1)))
            else:
                q.append((x , y + 1, dist+1,(0,1)))
    if y - 1 > -1:
        if a[x][y-1] == '0' and (x, y - 1) not in path:
            if vec == (0,-1): 
                q.append((x, y-1, dist,(0,-1)))
            else:
                q.append((x, y-1, dist+1,(0,-1)))
exit = []
for i in g[0]:
    if i != '!':
        exit.append(i)
for i in g[n-1]:
    if i != '!':
        exit.append(i)
for i in g:
    if i[0] != '!':
        exit.append(i[0])
for i in g:
    if i[m-1] != '!':
        exit.append(i[m-1])
print(min(exit))
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.12.2021, 20:45
Ответы с готовыми решениями:

Перевод из паскаля в питон
program String27; var N1,N2,i:integer; S,S1,S2:string; begin Write('N1:'); Readln(N1);...

Перевод из паскаля в питон
var a: array of integer; i, n, k: integer; begin write('Введите размер...

Перевод из паскаля в питон
begin var s := ReadlnString(); var n := ReadlnInteger(); var v := s.Select(ch -&gt; '' + ch);...

Перевод из паскаля в питон
begin var (m,n):=ReadInteger2('Количество строк и столбцов в матрице:'); Writeln('***...

Перевод из паскаля в питон
program pr; var i, n, k, cout: integer; a, b: array of integer; begin cout := 0;...

4
2308 / 1419 / 516
Регистрация: 07.04.2017
Сообщений: 4,721
10.12.2021, 22:12 2
Цитата Сообщение от Matvey_2008 Посмотреть сообщение
из паскаля в питон
Цитата Сообщение от Matvey_2008 Посмотреть сообщение
с питона на паскаль
И дайте лучше изначальное задание, по которому писался код на питоне...
0
0 / 0 / 0
Регистрация: 10.12.2021
Сообщений: 3
11.12.2021, 12:11  [ТС] 3
Задание по котору писал код:
Кликните здесь для просмотра всего текста

Рассмотрим карту лабиринта в виде прямоугольника, заполненную нулями и единицами, в которой "0" обозначает свободное место, а "1" - стенку.

Изначально робот находится в ячейке с координатами (i0, j0). Ему необходимо выбраться из лабиринта (через свободные ячейки в любую сторону). Робот может двигаться в любую из четырех соседних свободных ячеек (налево, направо, вверх и вниз). Отличительная черта робота состоит в том, что он может быстро преодолевать много свободных ячеек в одном направлении, однако каждый поворот (изменение направления) требует много времени.

Напишите программу, которая поможет роботу выбраться из лабиринта, совершив при этом наименьшее количество поворотов.

Входные данные

Первая строка содержит два целых числа N, M (5 ≤ N,M ≤ 640), задающие размер лабиринта. Каждая из следующих N строк содержит в точности M единиц и/или нулей (без разделителей), обозначающих стены и свободные ячейки. Следующая и последняя строка содержит два целых числа i0, j0 (2 ≤ i0≤ N–1, 2 ≤ j0≤ M–1) - начальные координаты робота. Гарантируется, что начальные координаты принадлежат пустой ячейке, однако не известно, существует ли выход.

Выходные данные

Вывести одно число - наименьшее количество однонаправленных участков на пути наружу. Если выхода из лабиринта нет, то вывести "–1" (без кавычек).

И пример ввода и вывода
Кликните здесь для просмотра всего текста

Входные данные #1

5 6
110111
000001
101101
100001
111111
4 5

Выходные данные #1

2

0
2308 / 1419 / 516
Регистрация: 07.04.2017
Сообщений: 4,721
11.12.2021, 14:54 4
Лучший ответ Сообщение было отмечено Matvey_2008 как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
type
  Coord = record
    row, col: integer;
    
    constructor(row, col: integer);
    begin
      self.row := row;
      self.col := col;
    end;
    
    static function operator+(c1, c2: Coord) := new Coord(c1.row+c2.row, c1.col+c2.col);
    static procedure operator+=(var c1: Coord; c2: Coord) := c1 := c1+c2;
    
  end;
  
begin
  var (rows, cols) := ReadlnInteger2;
  var m := Matr(ReadArrString(rows).ConvertAll(row->row.ToCharArray.ConvertAll(ch->ch<>'0')));
  var poss := new HashSet<Coord>;
  poss += new Coord(ReadInteger-1, ReadInteger-1);
  var dirs := |new Coord(+1,+0), new Coord(+0,+1), new Coord(-1,+0), new Coord(+0,-1)|;
  
  var i := 1;
  while true do
  begin
    var nposs := new HashSet<Coord>;
    
    foreach var pos in poss do
      foreach var d in dirs do
      begin
        var npos := pos;
        while true do
        begin
          npos += d;
          if (cardinal(npos.row)>=rows) or (cardinal(npos.col)>=cols) then
          begin
            i.Println;
            Halt;
          end;
          if m[npos.row, npos.col] then break;
          nposs += npos;
        end;
      end;
    
    if nposs.Count=poss.Count then
    begin
      Writeln(-1);
      Halt;
    end;
    poss := nposs;
    i += 1;
  end;
  
end.
1
0 / 0 / 0
Регистрация: 10.12.2021
Сообщений: 3
11.12.2021, 15:37  [ТС] 5
Спасибо очень выручили!
0
11.12.2021, 15:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2021, 15:37
Помогаю со студенческими работами здесь

Перевод из паскаля в питон
function Len(x1, y1, x2, y2 : Real) := Sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); begin var N :=...

Перевод из паскаля в питон
var arr: array of integer; i, n: integer; bool: boolean; begin bool:=false; readln(n); ...

Перевод из паскаля в питон
var x,y:real; begin Write('Введите через пробел координаты точки (x,y): '); Read(x,y); ...

Перевод из паскаля в питон
uses crt; var a: array of integer; i,j,imax,jmax: byte; begin writeln('Внесите данные о...

Перевод из паскаля в питон
var n: integer; count: integer; procedure R(n1: integer; start: integer; p: string); var...

Перевод с Паскаля на Питон
program gg; var s: string; i, j, n:integer; was: boolean; begin readln(s); n:=0; for i:=1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru