Задачи Урок 11

Задачи Урок 11 :

1) Пользователь вводит целое число N, большее 8. Выведите на экран последовательность четных чисел от 8 до N.

var i, N : integer;
begin
  writeln('Введите целое число N > 8');
  readln(N);
  
  i := 8;
  while (i <= N) do
  begin
    write(i, ' ');
    i := i + 2;
  end;
  
  readln();
end.
2) Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и числа 7, если же введённое число больше 15, то цикл необходимо завершить.
var a: integer;
begin
  a := 1; 
  while (a <= 15) do
  begin
    writeln('Введите число');
    readln(a);
    writeln('Сумма: ', a, '+', 7, '=', a + 7)
  end;
  writeln('пока!');
end.
3) Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и предыдущего введённого им числа, если же введённое число больше 15, то цикл необходимо завершить, не выводя в ответ сумму. Первое введенное пользователем число можно сложить с единицей.
var a, b : integer;
begin
  a := 1; //"первое предыдущее"
  while (a < 15) do  
  begin
    b := a;  //запоминаем предыдущее
    writeln('Введите целое число');
    readln(a);
    if (a < 15) then  
      writeln('Сумма: ', b, '+', a, '=', b + a);
  end;
  writeln('пока!');
end.
4) Выведите на экран, все нечетные числа, делящиеся на 3 нацело, лежащие в диапазоне от 35 до 117.
var i : integer;
begin
  i := 35;
  while (i <= 117) do
  begin
    if (i mod 2 = 1) AND (i mod 3 = 0) then
      writeln(i, ' ');
    i := i + 1;
  end;
end.
5) Выведите на экран, все четные числа от 35 до 117 и нечетные числа, лежащие в диапазоне от 45 до 99.
Указание: сначала можно решить задачу двумя циклами, но потом перепишите с использованием одного цикла, в теле которого составьте логическое выражение, описывающее подходящие числа (используйте логические операции).
var i : integer;
begin
  i := 35;
  while i <= 117 do
  begin
    if (i mod 2 = 0) or ( (i mod 2 = 1) and (i >= 45) and (i <= 99) ) then
      writeln(i);
    i := i + 1;
  end;
end.
6) Пользователь вводит целые числа. Пока он не введёт число большее 15, в ответ на каждое введённое число выводите сумму этого числа и двух предыдущих введённых им чисел (предыдущего и пред-предыдущего), если же введённое число больше 15, то цикл необходимо завершить.В первом витке цикла все "предыдущие" числа можно считать единицами.
var i, a, b : integer;
begin
  a := 1; 
  b := 1;
  i := 1;
  
  while (i <= 15) do  
  begin
    writeln('Введите целое число');
    readln(i);
    
    if (i <= 15) then 
    begin
    writeln('Сумма: ', i, '+', a, '+', b, '=', i + a + b);
    b := a;
    a := i;
    end;
  end;
  
  writeln('пока!');
end.
7) Пользователь вводит целые числа. Пока он не введёт число большее 15.Если очередное введенное число является чётным, то в ответ водите сумму этого числа и пред-предыдущего введённого пользователем числа, иначе просто запрашивать новое число. Если же введённое число больше 15, то цикл необходимо завершить.В первом витке цикла все "предыдущие" числа можно считать единицами.
var i, a, b : integer;
begin
  a := 1; 
  b := 1;
  i := 1;
  
  while (i <= 15) do  
  begin
    writeln('Введите целое число');
    readln(i);
    
    if (i <= 15) then 
    begin
    if i mod 2 = 0 then
      writeln('Сумма: ', i, '+', b, '=', i + b);
    b := a;
    a := i;
    end;
  end;
  
  writeln('пока!');
end.
8) Пользователь вводит целые числа, в ответ выводите символ #. Если введенное пользователем число равно 22, то завершите цикл не выводя ничего в ответ. Решите эту задачу 2-мя способами

С использованием if():

var i : integer;
begin
  i := 1;
  while i <> 22 do
  begin
    writeln('Введите целое число');
    readln(i);
    
    if i <> 22 then
      writeln('#');
  end;
end.

С использованием if() и break:

var i : integer;
begin
  i := 1;
  while i <> 22 do
  begin
    writeln('Введите целое число');
    readln(i);
    
    if i = 22 then
      break;
    writeln('#');
  end;
end.
9) Пользователь вводит целые числа в цикле (разные: четные, нечетные, положительные, отрицательные в любом порядке и количестве). Считайте и выведите на экран значения первых трех отрицательных нечетных чисел. После чего завершите цикл.
var 
  n,  //очередное вводимое число 
  i   //кол-во уже подошедших по требованию чисел
    : integer;
begin
  i := 0;
  while (i < 3) do
  begin
    writeln('Введите число');
    readln(n);
    if (n < 0) AND (n mod 2 <> 0) then
    begin
      writeln(n);
      i := i + 1;
    end;
  end;
  
  writeln('пока!');
  readln();
end.
10) Пользователь вводит последовательно три произвольных целых числа. Заведите три переменных и сохраните эти числа в эти переменные. Пользовательский ввод обрабатывайте в цикле.
В решении:
- в одном витке цикла должен быть только 1 readln()
- не использовать "обмен" (т.е. не присваивать одной переменной значение другой)
var a, b, c, i : integer;
begin
  i := 1;
  while i <= 3 do
  begin
    writeln('Введите число');
    
    if i = 1 then
      readln(a)
    else if i = 2 then
      readln(b)
    else 
      readln(c);
    i := i + 1;
  end;
   
  writeln(a, ' ', b, ' ', c);
end.
11) Пользователь вводит целые числа в цикле (разные: четные, нечетные, положительные, отрицательные в любом порядке и количестве). Сохраните в переменные первые три отрицательных нечетных числа, сложите их, выведите сумму на экран и завершите цикл.
var a, b, c, n, i : integer;
begin
  i := 0;
  while (i < 3) do
  begin
    writeln('Введите число');
    readln(n);
    
    if (n < 0) AND (n mod 2 <> 0) then
    begin
      if i = 0 then
        a := n
      else if i = 1 then
        b := n
      else 
        c := n;

      i := i + 1;
    end;
  end;
  
  writeln('Сумма: ', a, '+', b, '+', c, '=', a + b + c);
  writeln('пока!');
  readln();
end.
12) Вывести на экран все числа от 4 до 100 с шагом 4. (при более оптимальном решении проверка через mod не потребуется)
var i : integer;
begin
  i := 4;
  while (i <= 100) do
  begin
    writeln(i);
    i := i + 4;
  end;
    
  readln();
end.
13) Получите первую и последнюю цифры числа 15 с помощью операций div и mod (решается без цикла)
var a, //число 15
    b, //1 число
    c  //последнее число
    : integer;
begin
  a := 15;
  b := a div 10; 
  c := a mod 10; 
  
  writeln('Первая цифра: ', b);
  writeln('Последняя цифра: ', c);
    
  readln();
end.
14) Пользователь вводит целое 5-тизначное число, выведите все его цифры в обратном порядке, (используйте операции div и mod, подразумевается решение через цикл)
var n : integer;
begin
  writeln('Введите пятизначное число');
  readln(n);
  
  while n <> 0 do
  begin
    write(n mod 10); 
    n := n div 10;
  end;
  
  readln;
end.
15) У вас есть число z=5. Пользователь вводит числа в цикле, если очередное введенное число больше или равно 15, то увеличивайте число z на 1 в ответ на каждое введенное число, а если меньше 15, то уменьшайте на 1. Цикл и программа должны завершиться, когда число z станет отрицательным.
var z, n : integer;
begin
  z := 5;
  while z >= 0 do
  begin
    writeln('Введите число');
    readln(n);
    
    if n >= 15 then
      z := z + 1
    else 
      z := z - 1;
    writeln(z);
  end;
  
  writeln('пока!');
  readln();
end.
16) У вас есть число z=5. Пользователь вводит числа в цикле, если хотя бы одно введенное число число было равно 77, то увеличивайте число z на 1 в ответ на каждое введенное число, до тех пор пока пользователь не введет число 55, если такое произойдет то в ответ на это и любое последующее число, уменьшайте z на 1.
Цикл и программа должны завершиться, когда число z станет отрицательным.
(в начале цикла, если первое введенное число не равно ни 55, ни 77, считаем, что мы должны увеличивать z на 1 пока не встретим 55 или 77, которые укажут на конкретные действия).
var z, input: integer;
        rost: boolean;
begin
  z := 5;
  rost := true; 

  while z >= 0 do
  begin
    writeln('Введите число');
    readln(input);

    if input = 77 then
      rost := true
    else if input = 55 then
      rost := false;

    if rost then
      z := z + 1
    else
      z := z - 1;

    writeln('z = ', z);
  end;

  writeln('пока!');
  readln;
end.
17) У вас есть число z=5. Пользователь вводит числа в цикле, если за последние 4 попытки ввода было хотя бы одно число больше или равно 15, то увеличивайте число z на 1 в ответ на каждое введенное число, а если такого числа не было, то уменьшайте на 1 в ответ на каждый ввод.
Цикл и программа должны завершиться, когда число z станет отрицательным.
var z, p, ch : integer;
begin
  z := 5;
  p := 0;  //число попыток
  
  while (z >= 0) do
  begin
    writeln('Введите число');
    readln(ch);
    
    if (ch >= 15) then
      p := 4
    else
      if p > 0 then
        p := p - 1;
    
    if (p > 0) then
      z := z + 1
    else
      z := z - 1;
    
    writeln('z = ', z);
  end;
end.
18) Модификация предыдущего условия
У вас есть число z=5. Пользователь вводит числа в цикле, если за последние 4 попытки ввода было хотя бы одно число больше или равно 15, то увеличивайте число z на 1 в ответ на каждое введенное число, а если такого числа не было, то уменьшайте на 1 в ответ на каждый ввод.
Цикл и программа должны завершиться, когда число z станет отрицательным либо когда значение z увеличивалось 7 раз подряд.
var z, p, ch, c : integer;
begin
  z := 5;
  p := 0;  //число попыток
  c := 0;  //счетчик увелечений
  
  while (z >= 0) AND (c < 7) do
  begin
    writeln('Введите число');
    readln(ch);
    
    if (ch >= 15) then
      p := 4
    else
      if p > 0 then
        p := p - 1;
    
    if (p > 0) then
    begin
      z := z + 1;
      c := c + 1;
    end
    else
      z := z - 1;
      c := 0;
    
    writeln('z = ', z);
  end;
  
  writeln('пока!');
end.