Решение задачи №6 из главы 11

Решение задачи №6 из главы 11

Модификация одной из пред. задач: Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и пред-предыдущего введённого им числа, если это число чётное, иначе просто запрашивать новое число. Если же введённое число больше 15, то цикл необходимо завершить.
В первом витке цикла все "предыдущие" числа можно считать единицами.

var a, b, d, c: integer;
begin
    a:=1; //инициализация переменной
    c:=1; //инициализация переменной
    while (a < 15)and(c < 15) do
    begin
      b:=a;//запоминаем первое введеное число
      d:=c;//запоминаем второе введеное число
      writeln('Vvedite cheloe cislo A i C:');
      readln(a); //вводим первое число
      readln(c); //вводим второе число
        if  (((b+a)+(d+c))mod 2=0) then //если сумма четное то выводим
          writeln('summa: (b+a)+(d+c): ', (b+a)+(d+c)) //Выводим сумму предыдущего и пред-предыдущего
     end;
    Writeln ('poka!'); // завершаем цикл если условие
    readln(); //Удерживаем консоль
end. 
vedro-compota's picture

1) от пользователя за виток вы получаете только 1 число (читайте условие внимательно)

2) Пользователь ввёл числа (вместе с двумя первыми единицами:

1
1
3 -- первое реально введённое
7
8

Ваша программа должно выводить в ответ (только вперемешку с вводом, пояснение суммы справа не обязательно):

4   =(3 + 1)
11  =(3 + 8)

-- т.к. 8 первое четное введёное число.
Проверьте вашу программах на эти значения -- так ли она работает?

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

gani84's picture

var a,b:integer;
begin
   a:=1;
   while (a < 15) do
   begin
     b := a;
     writeln('Vvedite zeloe chislo');
     readln(a);
     writeln ('summa :', b, '+', a, '=', b+a);
     if (a mod 2)=0 then
       writeln('Vvedite zeloe chislo');
       readln(a);
     writeln('poka!');
   end;
end. 
vedro-compota's picture

как вы уже спросили ниже -- вы тут не запоминаете пред-предыдущее, а лишь одно предыдущее.

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

gani84's picture

Не большой вопрос

в ответ на каждое введённое число выводите сумму этого числа и пред-предыдущего введённого им числа,

Как понять пред предыдущее? Это надо делать так

while (a < 15)and(c < 15) do
    begin
      b:=a;//запоминаем первое введеное число
      d:=c;//запоминаем второе введенное число

чтобы сохранить уже две переменные?

vedro-compota's picture

Как понять пред предыдущее?

Поясним на примере, пусть пользователь ввел 3, до этого 2, а ещё до этого 7, тогда:

7 -- пред-предыдущее
2 -- предыдущее
3 -- число, которое ввели
Это надо делать так ....чтобы сохранить уже две переменные?

как именно это делать вопрос решения задачи, что едва ли вы можете сделать сейчас если не понимаете тут, но да -- так как надо хранить два предыдущих значения (их истории), то действительно потребуются две переменные.

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

gani84's picture

var a,b,c:integer;
begin
   a:=1;
   while (a < 15)  do
   begin
     b := a;
     c := b;
     writeln('Vvedite zeloe chislo');
     readln(b);
     writeln ('summa :', 'b', '+' , 'c',  '=', b+c);
     if ((b+c) mod 2)=0 then else
       writeln('Vvedite zeloe chislo');
       readln(a);
     end;
   writeln('poka!');
   readln();
end.  
vedro-compota's picture

прокомментируйте этот код, нет уверенности что вы понимаете что написано.

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

gani84's picture

var a, b, c:integer;
begin
  a:=1;
  с:=1; 
 while(a < 15) do
  begin
       b:=a; //предущее введеное число
       writeln('Vvedite zeloe chislo');
       readln(a);
       if ((a+c) mod 2)=0 then
          writeln('summa: ', c, '+', a, '=', c + a) ;
       c:=b;// сохраняем пред-предущее введеное число (в конце чтобы его не затерло)
  end;
  Writeln ('poka!'); // завершаем цикл если условие выполняется
  readln(); //Удерживаем консоль
end.        
vedro-compota's picture

прокомментировать какое число первое, какое 2-е, какое 3-е.

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

gani84's picture

var a, b, c:integer;
begin
  a:=1; //инициализация переменной
  c:=1; //инициализация переменной
 while(a < 15) do
  begin
       b:=a; //предущее введеное число (2-е число)
       writeln('Vvedite zeloe chislo');
       readln(a); //вводим первое число(1-е число)
       if ((a+c) mod 2)=0 then
          writeln('summa: ', 'c', '+', 'a', '=', c + a) ;
       c:=b;// сохраняем пред-предущее введеное число (в конце чтобы его не затерло)(3-е число)
  end;
  Writeln ('poka!'); // завершаем цикл если условие выполняется
  readln(); //Удерживаем консоль
end.        
Результат
Vvedite zeloe chislo
1
summa: c+a=2
Vvedite zeloe chislo
2
Vvedite zeloe chislo
3
summa: c+a=4
Vvedite zeloe chislo
15
poka!
vedro-compota's picture

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

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