28.02.2023

Найти максимум/минимум в массиве. Программа на языке Паскаль. PascalABC.NET

 Задача. Дан массив целых чисел из N элементов. Найти максимум.

Максимум - это самое большое число, сохраненное в массиве.

Алгоритм поиска заключается в следующем:

  • за начальное значение максимума взять самое маленькое число, которое может быть сохранено в массиве;
  • обращаясь к каждому элементу массива выполнять проверку: значение элемента больше, чем значение максимума, если да, что значение максимума заменить на значение элемента.

Предположим, что в массиве a из N элементов могут храниться числа из промежутка от 1 до 100. Заполним массив случайными числами (прочитать статью "Сформировать массив случайных чисел")

За начальное значение максимума возьмем число 1:

m:=1;

Осуществим обращение к каждому элементу массива оператором цикла:

for k:=1 to N do

begin

обращение к элементу a[k]

end;

Выполнять проверку и изменение максимума будем оператором:

if a[k]>m then m:=a[k];

Программа решения задачи на языке Паскаль

var a:array[1..30] of integer;

    N,k,m:integer;

begin

  print('Введите количество элементов массива N =');

  readln(N);

  println('Массив чисел');

  m:=1;

  for k:=1 to N do

  begin

    a[k]:=random(1,100);

    print(a[k]);

    if a[k]>m then m:=a[k];

  end;

  println;

  println('Максимум в массиве:',m);

end.

Результат запуска программы

Максимум в массиве. Паскаль

Для наглядности можно выводить текущее значение максимума в цикле.

Максимум в массиве. Паскаль

Для поиска минимума начальное значение следует взять за самое большое число в массиве (в нашем случае это число 100). А проверка условия и изменение минимума будет таким:

if a[k]<m then m:=a[k];

Дано натуральное число N. Вывести его последнюю цифру. Программа на языке Паскаль. PascalABC.NET (3 способа)

 Задача. Дано натуральное число N. Вывести его последнюю цифру. 

Приведем 3 способа решения данной задачи:

  • с использованием операции mod;
  • с использованием строкового типа данных string;
  • с использованием функции digits из модуля School.

Способ 1 (с использованием операции mod)

Последняя цифра натурального числа показывает количество единиц в числе. Вычислим эту цифру делением на 10. 

Воспользуемся операцией целочисленного деления mod.

Покажем деление нацело на схеме:

Деление нацело. Последняя цифра

Если вычислить целый остаток от деления числа на 10 - это и будет последняя цифра числа.

Операция вычисления целого остатка от деления в языке Паскаль - это mod.

Запишем выражение для вычисления последней цифры натурального числа N:

d:=N mod 10;

Программа для решения задачи на языке Паскаль

var N,d:integer;

begin

  println('Введите натуральное число N');

  readln(N);

  d:=N mod 10; //целый остаток от деления числа N на 10

  println('Последняя цифра числа',d);

end.

Результат запуска программы

Запуск программы. Последняя цифра числа

Дополнительно об операциях целочисленного деления div и mod (читать).

Способ 2 (с использованием строкового типа данных string)

var N,d:integer; str:string; c:char;

begin

  println('Введите натуральное число');

  readln(N);

  str:=N.ToString; //преобразовать число N  в строку str

  c:=str[str.length]; //последний символ строки str

  d:=c.ToDigit; //преобразовать символ в цифру

  println('Последняя цифра числа',d);

end.

Способ 3 (с использованием функции digits из модуля School)

uses school;

var N,d:integer;

    mas:array of integer;

begin

  println('Введите натуральное число');

  readln(N);

  mas:=digits(N).toArray;//получение списка цифр и преобразование списка в массив

  d:=mas[mas.Length-1];//последний элемент массива mas

  println('Последняя цифра числа',d);

end.

Каким способом следует воспользоваться для решения следующей задачи:

Дано натуральное число. Вычислить сумму его цифр.

21.02.2023

С клавиатуры вводится натуральное число N. Найти сумму и произведение его цифр. Линейный код. Модуль School. PascalABC.NET. Функция Digits

 Задача. С клавиатуры вводится натуральное число N. Найти сумму и произведение его цифр.

Воспользуемся функцией digits из модуля School для решения данной задачи.

Функция digits получает список цифр числа. 

Формат использования: digits(n:int64)

Пример:

n:=4507;

println(digits(n));

Вывод: [4,5,0,7]

Для вычисления суммы цифр воспользуемся методом sum: digits(n).sum

Для вычисления произведения цифр воспользуемся методом product: digits(n).product

Программа решения задачи на языке Паскаль:

uses school;

var n,s,p:integer;

begin

  println('Введите натуральное число');

  readln(n);

  println('Список цифр числа',digits(n));

  s:=digits(n).Sum;

  p:=digits(n).Product;

  println('Сумма цифр',s);

  print('Произведение цифр',p);

end.

Сумма и произведение цифр числа

Эта программа имеет линейную структуру в отличие от программы с использованием оператора цикла while.


Модуль School. PascalABC.NET. Функция isPrime

 Найдем количество простых чисел на промежутке [ 2 000 000, 10 000 000].

Воспользуемся функцией модуля School. Функция isPrime возвращает логическое True, если число простое.

Формат использования: n.isPrime

Программа решения задачи на языке Паскаль

uses school;

var n,p:integer;

begin

  p:=0;

  for n:=2000000 to 10000000 do

  begin

    if n.IsPrime then p+=1;

  end;

  print(p);

end.

Код выполнился за 17 секунд.

Количество простых чисел на промежутке чисел [2000000, 10000000] равно: 515646

Функция isPrime избавляет от необходимости писать код самостоятельно.

Приведем программу, которая ищет сразу два делителя для текущего числа n.

Программа решения задачи на языке Паскаль

var n,p,t,k:integer;

begin

  p:=0;

  for n:=2000000 to 10000000 do

  begin

    t:=0;

    for k:=2 to trunc(sqrt(n)) do

    begin

      if n mod k=0 then 

        if k<>n div k then t+=2

                      else t+=1;

         

    end;

    if t=0 then p+=1;

  end;

  print(p);

end.

Код выполнился примерно за 6 мин

Использование функции isPrime оправданно, время выполнения программы для больших чисел значительно меньше.

08.02.2023

Массивы в языке Паскаль. Решение задач. 8 класс (сумма, произведение, среднее арифметическое, минимум/максимум с условием)

Список задач для решения

Задача 1. Дан целочисленный массив из N элементов. Элементы массива могут принимать целые значения от 0 до 100. Найти и вывести произведение элементов массива, которые имеют чётное значение и не оканчиваются на 0. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не оканчиваются на 0. 

Задача 2. Дан массив, содержащий N неотрицательных целых чисел, не превышающих 10 000. Найти и вывести сумму всех содержащихся в массиве трёхзначных чисел, которые оканчиваются на 9, но не на 99. 

Задача 3. Дан целочисленный массив из N элементов. Элементы массива могут принимать значения от –1000 до 1000. Найти среднее арифметическое всех элементов массива, оканчивающихся цифрой 5. Гарантируется, что хотя бы один такое элемент в массиве есть.
 
Задача 4. Дан целочисленный массив из N элементов, все элементы которого – целые числа в интервале от -1000 до 1000. Найти минимальное значение из всех нечетных элементов массива, которые делятся на 5. Гарантируется, что хотя бы один такой элемент существует. 

Задача 5. Дан целочисленный массив из N элементов, все элементы которого – неотрицательные числа, не превосходящие 10 000. Найти минимальное трехзначное число, записанное в этом массиве, если таких чисел нет, нужно вывести сообщение "Таких чисел нет".

Программы решений

Задача 1. Дан целочисленный массив из N элементов. Элементы массива могут принимать целые значения от 0 до 100. Найти и вывести произведение элементов массива, которые имеют чётное значение и не оканчиваются на 0. Гарантируется, что в исходном массиве есть хотя бы один элемент, значение которого чётно и не оканчиваются на 0.

Сформируем массив случайным образом так, чтобы значения элементов были равны числам от 0 до 100 и выведем массив на экран.

for k:=1 to N do

begin

 a[k]:=random(0,100);

print(a[k]);

end;

Произведение элементов примем за 1. Пройдем циклом по массиву и проверим: не оканчивается ли элемент на 0, и является ли он четным.

p:=1;

for k:=1 to N do

begin

if (a[k] mod 10 <> 0) and (a[k] mod 2=0) then p:=p*a[k];

end;

print(p);

Программа решения задачи на языке Паскаль

var a:array[1..100] of integer; N,k,p:integer;

begin 

   readln(N);

   for k:=1 to N do

    begin

     a[k]:=random(0,100):

     print(a[k]);

    end;

    p:=1;

   for k:=1 to N do

    begin

     if (a[k] mod 10 <> 0) and (a[k] mod 2=0) then p:=p*a[k];

    end;

  print('Произведение четных элементов, не оканчивающихся на 0',p);

end.

Задача 2. Дан массив, содержащий N неотрицательных целых чисел, не превышающих 10 000. Найти и вывести сумму всех содержащихся в массиве трёхзначных чисел, которые оканчиваются на 9, но не на 99. 

Сформируем массив случайным образом так, чтобы значения элементов были равны числам от 0 до 10000 и выведем массив на экран.

for k:=1 to N do

begin

 a[k]:=random(0,10000);

print(a[k]);

end;

Сумму элементов примем за 0. Пройдем циклом по массиву и проверим: является ли элемент трехзначным числом, оканчивающимся на 9, но не на 99.

s:=0;

for k:=1 to N do

  begin

   if (a[k]>=100) and (a[k]<=999) and (a[k] mod 10=9) and (a[k] mod 100<>99) then s:=s+a[k];

  end;

Программа решения задачи на языке Паскаль

var a:array[1..100] of integer; N,k,s:integer;

begin 

   readln(N);

   for k:=1 to N do

    begin

     a[k]:=random(0,10000):

     print(a[k]);

    end;

   s:=0;

   for k:=1 to N do

    begin

     if (a[k]>=100) and (a[k]<=999) and (a[k] mod 10=9) and (a[k] mod 100<>99) then s:=s+a[k];

    end;

  print('Сумма элементов',s);

end.

Задача 3. Дан целочисленный массив из N элементов. Элементы массива могут принимать значения от –1000 до 1000. Найти среднее арифметическое всех элементов массива, оканчивающихся цифрой 5. Гарантируется, что хотя бы один такое элемент в массиве есть.

 Для вычисления среднего арифметического значения элементов, оканчивающихся цифрой 5, необходимо найти сумму таких элементов и их количество. Поскольку числа могут быть отрицательными, следует взять модуль числа при проверке abs(a[k]).

Программа решения задачи на языке Паскаль

var a:array[1..100] of integer; N,k,s,t:integer;

Sr:real;

begin 

   readln(N);

   for k:=1 to N do

    begin

     a[k]:=random(-1000,1000):

     print(a[k]);

    end;

   s:=0; t:=0;

   for k:=1 to N do

    begin

    if abs(a[k]) mod 10 = 5 then

        begin

         s:=s+a[k];

         t:=t+1;

        end;

    end;

  sr:=s/t;

  print('Среднее арифметическое элементов, оканчивающихся на 5',Sr);

end.

Задача 4. Дан целочисленный массив из N элементов, все элементы которого – целые числа в интервале от -1000 до 1000. Найти минимальное значение из всех нечетных элементов массива, которые делятся на 5. Гарантируется, что хотя бы один такой элемент существует. 

Поскольку есть гарантия, что такой элемент в массиве есть, то за искомый минимум возьмем самое большое возможное число 1000.

Программа решения задачи на языке Паскаль

var a:array[1..100] of integer; N,k,m:integer;

begin 

   readln(N);

   for k:=1 to N do

    begin

     a[k]:=random(-1000,1000):

     print(a[k]);

    end;

   m:=1000;

   for k:=1 to N do

    begin

    if (a[k] mod 2<>0) and (a[k] mod 5 = 0) and (a[k]<m) then m:=a[k];     

    end;

  print('Минимальный нечетный элемент, кратный 5',m);

end.

Задача 5. Дан целочисленный массив из N элементов, все элементы которого – неотрицательные числа, не превосходящие 10 000. Найти минимальное трехзначное число, записанное в этом массиве, если таких чисел нет, нужно вывести сообщение "Таких чисел нет".

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

Если после поиска значение минимума осталось равно -1, значит трехзначных чисел в массиве нет.

var a:array[1..100] of integer; N,k,m:integer;

begin 

   readln(N);

   for k:=1 to N do

    begin

     a[k]:=random(0,10000):

     print(a[k]);

    end;

   m:=-1;//число -1 выступает признаком того, что трехзначных чисел в массиве нет

   for k:=1 to N do

    begin

    if (a[k]>99) and (a[k]<1000) then m:=a[k];     

    end;

   for k:=1 to N do

    begin

    if (a[k]>99) and (a[k]<1000) and (a[k]<m) then m:=a[k];     

    end;

   if m=-1 then print('Таких чисел нет') else print('Минимальное трехзначное число',m);

end.

В решении задач с использованием массивов можно выделить следующие этапы:

  • формирование массива (ввод с клавиатуры или случайно)
  • вывод массива на экран
  • обработка массива
Каждый этап требует своего цикла для обращения к каждому элементу массива.