Решение задачи №4 из главы 14

Задача №4 из главы 14

Составьте программу, которая выводит на экран прямоугольный флаг N×M вида (с чередованием плюсов и минисов в строках):

  • - - - - - -
    + + + + + +
    - - - - - -
    + + + + + +
    - - - - - -

Решил но не до конца. Немного не понятно.

function vivod(m,n:integer):integer;

  begin
  m := 1; // начальное значение для счетчика внешнего цикла
  while (m <= 5) do // цикл по строкам таблицы, счетчик как левый множитель
    begin
    n := 1;// начальное значение для счетчика внутренного цикла
     while (n <= 6) do // выводим равенства очередной строки, счётчик как правый множитель
        begin
         if ((m mod 2)=0) then
         write('+ ')
         else

         write('- ');

         n:=n+1;
      end;
     writeln(' ');
     m:=m+1; // увеличиваем значение счетчика внешнего цикла
    end;
   begin // начало тела основной программы
   writeln (vivod);
   readln();
    // конец основной программы
   end;
   end.
        
vedro-compota's picture

  • нет форматирования
  • когда извеcтно число повторений лучше использовать for

_____________
матфак вгу и остальная классика =)

gani84's picture

var a,b,c,d:integer;
 function vivod(i,j,m,n:integer):integer;
begin
Writeln('Vvedite M');
   readln(m);
Writeln('Vvedite N');
   readln(n);
for i:=1 to m do
    begin
      for j:=1 to n do
         begin
         if ((i mod 2)=0) then
           write('+ ')
         else
           write('- ');
         end;
         writeln();
    readln();
end;
 begin
 readln(a, b,c,d);
  writeln(vivod(a, b,c,d));
  readln();
  end;
end;
begin

end. 
vedro-compota's picture

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

На вход процедура должна получать единственный параметр i

_____________
матфак вгу и остальная классика =)

gani84's picture

Вывод консоли
Vvedite N
3
Vvedite M
5
- - - - -

- - - - -

- - - - -

- - - - -

- - - - -
var m,n,i,j:integer;
 procedure vivod(j,m,n,i:integer);
 begin
 for j:=1 to n do
         begin
         if ((i mod 2)=0) then
           write('+ ')
         else
           write('- ');
         end;
         writeln();
        readln();
       end;

begin
  Writeln('Vvedite N');
   readln(n);
Writeln('Vvedite M');
   readln(m);
for i:=1 to m do
   vivod(i,j,m,n);
    readln();
end. 
vedro-compota's picture

на входе функции должен быть только номер строки, остальные переменные - объявите как локальные.

_____________
матфак вгу и остальная классика =)

gani84's picture

var m,n,i:integer;

procedure vivod(i:integer);
var j:integer;
begin
 for j:=1 to n do
 begin
  if ((i mod 2)=0) then
    write('+')
  else
    write('-');
  end;
 end;


begin
  writeln('Vvedite N');
  readln(n);
  writeln('Vvedite M');
  readln(m);
  for i:=1 to m do
  begin
    vivod(i);
    writeln();
  end;
  readln();
end.      
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)