Помощь - Поиск - Пользователи - Календарь
Полная версия: ЭлектрическаяЦепь через рекурсию
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Zac
Доброго времени суток. Вот ломаю голову на рекурсией.. чтото наваял Да не то как обычно.. Показывает только одну часть цепи с 8 позиции курсора.

Задача: Составить рекурсивный алгоритм, который вычерчивает на экране схему электрической цепи .Порядок цепи (количество сопротивлений R2) должен вводиться во время работы программы. (картинка цепи в приложении)


Uses CRT;
Function chast(r2,x:integer):integer;
   var y:integer;
  begin
   y:=2;
   GotoXY(x,y);
   writeln(CHR($C2),CHR($C4),CHR($DB),CHR($DB),CHR($C4),CHR($C2));
   GotoXY(x,y+1);
   writeln(CHR($DB));
   GotoXY(x,y+2);
   writeln(CHR($DB));
   GotoXY(x,y+3);
   writeln(CHR($C1),CHR($C4),CHR($DB),CHR($DB),CHR($C4),CHR($C1));
   GotoXY(x,y);
   chast:=r2;

  end;

var r2,x:integer;
begin
  CLRSCR;
  x:=1;
  repeat
    write('R2 = ');
    Readln(r2);
   Until r2>0;

   if r2=1 then  chast(r2,x)
    else
      begin
       x:=x+7;
       chast(chast(r2,x)-1,x);
       end;
    readln;
   end.

klem4
нужно именно в текстовом режиме ?
Zac
ну не обязательно навреное , просто я думал в текстовом режиме проще smile.gif.. или я ошибаюсь
Zac
Сегодня опять просидел над этой задачей. ка кбы я не менял чтото всегда только 2 или 1 часть ресует sad.gif и все тут.
klem4
как-то так ...
uses crt, graph;

var
  gd, gm: Integer;

procedure CircuitPart(lx, ly, deep: Integer);
begin
  if deep > 0 then begin
    line(lx, ly, lx + 20, ly);
    line(lx + 20, ly - 5, lx + 20, ly + 5);
    line(lx + 20, ly - 5, lx + 40, ly - 5);
    line(lx + 20, ly + 5, lx + 40, ly + 5);
    line(lx + 40, ly - 5, lx + 40, ly + 5);
    line(lx + 40, ly, lx + 60, ly); 
    line(lx + 60, ly, lx + 60, ly + 20);
    line(lx + 55, ly + 20, lx + 65, ly + 20);
    line(lx + 55, ly + 20, lx + 55, ly + 40);
    line(lx + 65, ly + 20, lx + 65, ly + 40);
    line(lx + 55, ly + 40, lx + 65, ly + 40);
    line(lx + 60, ly + 40, lx + 60, ly + 60);
    line(lx + 60, ly + 60, lx + 40, ly + 60);
    line(lx + 40, ly + 55, lx + 40, ly + 65);
    line(lx + 40, ly + 55, lx + 20, ly + 55);
    line(lx + 40, ly + 65, lx + 20, ly + 65);
    line(lx + 20, ly + 55, lx + 20, ly + 65);
    line(lx + 20, ly + 60, lx, ly + 60);

    CircuitPart(lx + 60, ly, deep - 1);
  end;
end;

begin
  initgraph(gd, gm, '');

  CircuitPart(100, 100, 8);

  readkey;
  closegraph;
end.


Нажмите для просмотра прикрепленного файла

Zac
Работает... теперь я понял как надо делать, и что лучше работать с графикой чем с непокроными символами.
Спаисбо smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.