Решение задач. День двадцатый. Series29-40


series29-40

Приветствуем читателей нашего сайта! Сегодня мы с вами решим задачи series29-40.

Series29-40

Series29. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Вывести общую сумму всех элементов, входящих в данные наборы.

Program series29;
var 
  k, n, a, i, j, summ: integer;
begin
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i:=1 to k do
    for j:=1 to n do
      begin
        read(a);
        summ := summ + a;
      end;
  write('Общая сумма всех элементов: ', summ);
end.

Series30°. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести сумму его элементов.

Program series30;
var 
  k, n, a, i, j, summ: integer;
begin
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i:=1 to k do begin
    for j:=1 to n do
      begin
        read(a);
        summ := summ + a;
      end;
    writeln('Сумма элементов: ', summ);
    summ := 0;
  end;
end.

Series31. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести 0.

Program series31;
var 
  k, n, a, i, j, count: integer;
  prov: boolean;
begin
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i:=1 to k do begin
    for j:=1 to n do
      begin
        read(a);
        if (a = 2) and (prov = false) then //prov = false, если набор не содержит число 2
          begin
            inc(count);
            prov := true;
          end;
      end;
    prov := false;
  end;
  write('Количество наборов, содержащих число 2: ', count);
end.

Series32. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его первого элемента, равного 2, или число 0, если в данном наборе нет двоек.

Program series32;
var 
  k, n, a, i, j: integer;
  prov: boolean;
begin
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i:=1 to k do begin
    for j:=1 to n do
      begin
        read(a);
        if (a = 2) and (prov = false) then //prov = true в том случае, когда 2 в наборе уже встречалась
          begin
            writeln('Номер первого элемента набора, равного 2: ', j);
            prov := true;
          end;
      end;
    if prov=false then writeln('Номер первого элемента набора, равного 2: ',0)
     else prov:=false;
  end;
end.

Series33. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его последнего элемента, равного 2, или число 0, если в данном наборе нет двоек.

Program series33;
var 
  k, n, a, i, j, num: integer;
begin
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i := 1 to k do begin
    for j := 1 to n do
      begin
        read(a);
        if a = 2 then
          num := n; //заносим номер элемента, равного 2, в переменную num
      end;
        writeln('Номер последнего элемента набора, равного 2: ', num);
        num := 0;
  end;
end.

Series34. Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора выполнить следующее действие: если в наборе содержится число 2, то вывести сумму его элементов; если в наборе нет двоек, то вывести 0.

Program series34;
var 
  k, n, i, j, a, summ: integer;
  prov: boolean;
begin
  prov := false;
  write('Введите K: ');
  readln(k);
  write('Введите N: ');
  readln(n);
  for i := 1 to k do begin
    for j := 1 to n do
      begin
        read(a);
        summ := summ + a;
        if a = 2 then
          prov := true; //отмечаем, что число 2 в наборе встретилось
      end;
    if not prov then writeln(0) 
     else begin
        writeln('Сумма элементов данного набора: ', summ);
        prov := false;
     end;
    summ := 0;
  end;
end.

Series35. Дано целое число K, а также K наборов ненулевых целых чисел. Признаком завершения каждого набора является число 0. Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.

Program series35;
var
   a, k, i, summ, summ1: integer;
begin
     write('Введите K: ');
     readln(k);
     for i:= 1 to k do
         begin
              read(a);
              while a<>0 do
                    begin
                    inc(summ); //количество элементов данного набора
                    inc(summ1); //количество элементов всех наборов
                    read(a);
                    end;
              writeln('Сумма элементов данного набора: ', summ);
              summ := 0; //обнуляем значение переменной, отвечающей за подсчет кол-ва элементов в наборе
         end;
     write('Сумма элементов всех наборов: ', summ1);
end.

Series36. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают.

Program series36;
var
   a, k, i, count, tmp: integer;
   prov: boolean; {вводим логическую переменную, показывающую, была последовательность возрастающей (при false) или же  нет (true)}
begin
     write('Введите K: ');
     readln(k);
     for i:= 1 to k do
         begin
              read(tmp);
              read(a);
              while a<>0 do
                    begin
                    if a <= tmp then prov := true; {если возрастание последовательности нарушено, изменяем значение логической переменной}
                    tmp := a; 
                    read(a); 
                    end;
              if prov = false then inc(count) {в конце итерации цикла for увеличиваем значение переменной count, если последовательность является возрастающей}
         end;
     writeln('Количество наборов, элементы которых возрастают: ', count);
end.

Series37. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Найти количество наборов, элементы которых возрастают или убывают.

program series37;

var
  a, k, i, count, tmp: integer;
  up, down, prov: boolean;

begin
  write('Введите K: ');
  readln(k);
  for i := 1 to k do
  begin
    read(tmp);
    read(a);
    while a <> 0 do
    begin
      if a <> tmp then //элементы не должны быть равны, если же они равны, выходим из цикла
      begin
        if (a > tmp) and (down = false) then //если два данных числа возрастают, и предыдущие числа тоже 
          up := true else //то обозначаем эту последовательность как возрастающую, дабы не путаться в будущем
        if (a < tmp) and (up = false) then //аналогично поступаем и в случае с убыванием
          down := true else //но если числа не равны, не возрастают и не убывают, то
        begin
          prov := true; 
          break; //выходим из цикла
        end;
      end
      else begin //то есть если a = 0
        prov := true; //это значит, что последовательность ни возрастает, ни убывает 
        break; //выход из цикла
      end;
      tmp := a;
      read(a);
    end;
    if prov = false then inc(count) else prov := false; 
    up := false; //данная итерация цикла for завершается, а значит, возвращаем значения переменных в исходный вид
    down := false; 
  end;
  writeln('Количество наборов, элементы которых возрастают или убывают: ', count);
end.

Series38. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если элементы набора возрастают, то вывести 1; если элементы набора убывают, то вывести −1; если элементы набора не возрастают и не убывают, то вывести 0.

program series38;

var
  a, k, i, tmp: integer;
  up, down, prov: boolean;

begin
  write('Введите K: ');
  readln(k);
  for i := 1 to k do
  begin
    read(tmp);
    read(a);
    while a <> 0 do
    begin
      if a <> tmp then 
      begin
        if (a > tmp) and (down = false) then
          up := true else
        if (a < tmp) and (up = false) then
          down := true else 
        begin
          prov := true;
          break;
        end;
      end
      else begin
        prov := true;
        break;
      end;
      tmp := a;
      read(a);
    end;
    if prov = false then begin
      if up = true then writeln(1) else //совсем немного изменяем предыдущий код
        writeln(-1) end
    else begin
      writeln(0);
      prov := false;
    end;
    up := false; 
    down := false; 
  end;
end.

Series39. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Найти количество пилообразных наборов (определение пилообразного набора дано в задании Series23).

За основу кода решения данной задачи я взяла решение series23. Как вы видите, оно почти не изменилось.

program series39;

// previous_digit = prev_d
// next_digit = next_d
var
  i, count, k, prev_d, next_d, tooth_d: integer;
  teeth: boolean;

begin
  write('Введите K: ');
  readln(k);
  for i := 1 to k do
  begin
    teeth := true;
    read(prev_d, tooth_d, next_d);
    while next_d <> 0 do
    begin
      if (tooth_d > prev_d) and (tooth_d > next_d) or (tooth_d < next_d ) and (tooth_d < prev_d)
      then
      begin
        prev_d := tooth_d;
        tooth_d := next_d;
        read(next_d);
      end
      else
      begin
        teeth := false;
        break
      end;
    end;
    if teeth 
      then 
      inc(count)    
  end;
  writeln('Количество пилообразных наборов: ', count);
end.

Series40. Дано целое число K, а также K наборов ненулевых целых чисел. Каждый набор содержит не менее трех элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если набор является пилообразным (см. задание Series23), то вывести количество его элементов; в противном случае вывести номер первого элемента, который не является зубцом.

program series40;

// previous_digit = prev_d
// next_digit = next_d
var
  i, count, k, prev_d, next_d, tooth_d: integer;
  teeth: boolean;

begin
  write('Введите K: ');
  readln(k);
  for i := 1 to k do
  begin
    teeth := true;
    read(prev_d, tooth_d, next_d);
    count := 3;
    while next_d <> 0 do
    begin
      if (tooth_d > prev_d) and (tooth_d > next_d) or (tooth_d < next_d ) and (tooth_d < prev_d)
      then
      begin
        prev_d := tooth_d;
        tooth_d := next_d;
        read(next_d);
        inc(count)
      end
      else
      begin
        teeth := false;
        break;
      end;
    end;
    if (teeth = false) then 
          writeln('Номер первого элемента, который не является зубцом: ', count - 1);
    if teeth 
      then 
      writeln('Количество элементов в наборе: ', count-1); //Вычитаем ноль, который элементом не является
  end;
end.

На сегодня всё! Если у вас возникли вопросы, задавайте их в комментариях. И не забывайте рассказывать о нашем сайте своим друзьям, кликая по этим замечательным круглым (квадратным) кнопочкам!

  1. Всем привет. Не судите строго, но я считаю, что без использования массивов эти задачи не имеют ни малейшего смысла, так как не очень то удобно получить решения во время ввода данных, и после того, как данные будут введены искать » а что же нам тут показала наша задача».
    Гараздо приятнее смотреть на результат работы такой задачи, например для

    Всем привет. Не судите строго, но я считаю, что без использования массивов эти задачи не имеют ни малейшего смысла

    program mas;
    uses crt;
    var k,n,i,j:integer;
    a:array[1..100,1..100] of real;
    l:boolean;
    begin
    clrscr;
    writeln(‘Введите размерность матрицы k,n: ‘);
    readln(k,n);
    for i:=1 to k do
    for j:=1 to n do
    begin
    write(‘a[‘,i,’,’,j,’] = ‘);
    readln(a[i,j]);
    end;
    for i:=1 to k do
    begin
    l := false;
    for j:=1 to n do
    if a[i,j] = 2 then
    begin
    l:=true;
    writeln(‘В строке ‘,i,’ индекс элемента равного двум ‘,j);
    break;
    end;
    if not l then
    writeln(‘В строке ‘,i,’ элемента равного двум нет’);
    end;
    readln;
    end.

  2. всем привет))помогите решить задачу в Паскале.
    Перемножение двух матриц.
    Заданы трехмерные матрицы
    одинаковых размеров 7x7x7,
    заполненные случайными числами из диапазона [1, 100]. Перемножить их элементы,
    имеющие одинаковые индексы, и вывести результаты на экран и записать в файл
    «output.txt».

  3. у вас ошибочка в 32 задании writeln(‘Номер первого элемента набора, равного 2: ‘,n);
    а должно быть так writeln(‘Номер первого элемента набора, равного 2: ‘,j);

  4. У вас ошибка в Series36.
    Вы коде вы пропустили одну строчку, из-за которой весь код не работает. Итак, вводим K=4 (то есть у нас 4 набора). Теперь, если в первом наборе НЕТ возрастающей последовательности, а в ПОСЛЕДУЮЩИХ она есть, то эти последующие наборы не будут засчитываться! А всё потому, что в начале работы с каждым набором ваша переменная «prov» типа boolean должна снова становиться «false». Иначе после ввода элементов первого набора, который НЕ является возрастающим, все последующие после него наборы, которые ЯВЛЯЮТСЯ возрастающими, НЕ будут засчитаны.

Добавить комментарий

Ваш e-mail не будет опубликован.