Решение задачи №9 и №10 из главы 9

Решение задачи №9 и №10 из главы 9

9.
Есть программа:

var m,s:integer;
  f:boolean;
begin
    writeln('Vvedite chislo M');
    readln(m);
    s:=1;
    if (s = 1) then
       writeln('soobchenie 1'); 
    if (s = m) then
        writeln('soobchenie 2'); 
end;

-- при этом известно, что если s равно 1, то на экран должно вывестись только первое сообщение, а если s равно m, то второе.
Но сейчас программа работает не так, исправьте это.

10. Есть программа:

var z,s:integer;
  f:boolean;
begin
  s:=1;
  if (z=s) and (f=false) then
    begin
      writeln();// делаем перенос строки
      z:=0;
      s:=s+1;//но увеличиваем кол-во строк
    end;
 
  if (z=s) and (f=true) then
    begin
      writeln(); // делаем перенос строки
      z:=0;
      s:=s-1;//но уменьшаем кол-во строк
    end;
end.    

-- в двух условных операторах действия частично совпадают, а значит наблюдается дублирование кода. Перепишите код так, чтобы дублирования не было.

Решение задачи №9

var m,s:integer;
  f:boolean;
begin
    writeln('Vvedite chislo M');
    readln(m);
    s:=1;
    writeln('soobchenie 1');
    if (s = m) then
        writeln('soobchenie 2');
end.

Решение задачи №10

var z,s:integer;
  f:boolean;
begin
  s:=1;
  if (z=s) then
     begin
          writeln();// делаем перенос строки
          z:=0;
      if (f=true) then
          s:=s-1
      else
          s:=s+1
      end;
end.      
vedro-compota's picture

var m,s:integer;
  f:boolean;
begin
    writeln('Vvedite chislo M');
    readln(m);
    s:=1;
    writeln('soobchenie 1');
    if (s = m) then
        writeln('soobchenie 2');
end.

-- неверное

нужно:

 s:=1;
if (s = 1) then
       writeln('soobchenie 1'); 
 else if (s = m) then
        writeln('soobchenie 2'); 

-- разобраться с отличиями

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

vedro-compota's picture

var z,s:integer;
  f:boolean;
begin
  s:=1;
  if (z=s) then
     begin
          writeln();// делаем перенос строки
          z:=0;
      if (f=true) then
          s:=s-1
      else
          s:=s+1
      end;
end.      

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

gani84's picture

var z,s:integer;
    f:boolean;
begin
  s:=1;
  if (z=s) then
     begin
        writeln();// делаем перенос строки
        z:=0;
        if (f=true) then
           s:=s-1
        else
           s:=s+1
     end;
end.
vedro-compota's picture

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

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

gani84's picture

Если s=1 то не выполняется блок if (s = m), 
так как m может быть равно 1, тем самым будет дублирование кода, 
что может привести к логической ошибке. И создаем более сложное условие проверки 
else if (s = m) then writeln('soobchenie 2');.
s:=1;
if (s = 1)  then
       writeln('soobchenie 1'); 
else if (s = m) then
        writeln('soobchenie 2');