27.03.2022

Язык Паскаль. Как найти номер минимального элемента массива

Минимум в некоторой последовательности чисел это наименьшее значение. Например, среди чисел последовательности 431, 85, 200, 125 минимумом является число 85. Если числа последовательности сохранить в массиве, то можно найти номер минимального элемента массива

Сохраним числа в массиве: a[1]=431, a[2]=85, a[3]=200, a[4]=125.

Минимум хранится в ячейке с номером 2, значит номер минимального элемента это число 2. 

В этой публикации приведем примеры программ поиска номера минимального элемента массива.

Будем считать, что в массиве хранятся целые числа, диапазон значений не известен.

Исходные данные: a – массив целых чисел

Выходные данные: min – минимальный элемент, kmin – номер минимального элемента массива

За  начальное значение минимума min возьмем значение первого элемента, тогда за номер минимального элемента kmin возьмем номер 1.

Далее будем сравнивать каждый элемент массива со значением min, если a[k]<min, то перезапишем значение min на значение a[k], а значение kmin на значение k.

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

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

    k,min,kmin:integer;

begin

  for k:=1 to 10 do

  begin

    read(a[k]);

  end;

  min:=a[1];

  kmin:=1;

  for k:=2 to 10 do

  begin

    if a[k]<min then

    begin

      min:=a[k];

      kmin:=k;

    end;

  end;

  writeln('Минимальный элемент ',min);

  writeln('Номер минимального элемента массива ',kmin);

end.

Результат выполнения программы

Как найти номер минимального элемента массива

Чтобы не вводить значения элементов массива с клавиатуры, можно воспользоваться датчиком случайных чисел.

Еще одна программа

Теперь не будем сохранять само минимальное значение, а будем пользоваться номером минимального элемента.

За номер минимального элемента kmin возьмем 1. Далее будем сравнивать a[k]<a[kmin], в случае истины, будем перезаписывать kmin на k.

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

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

    k,min,kmin:integer;

begin

  for k:=1 to 10 do

  begin

    read(a[k]);

  end;

  kmin:=1;

  for k:=2 to 10 do

  begin

    if a[k]<a[kmin] then

    begin

      kmin:=k;

    end;

  end;

  writeln('Минимальный элемент ',a[kmin]);

  writeln('Номер минимального элемента массива ',kmin);

end.

Еще одна программа с применением методов последовательностей PascalABC.NET

a.min – определяет минимальное значение в массиве

a.indexof(a.min) – определяет номер элемента, равного минимальному

Массив описан как динамический (не указываются номера элементов, нумерация начинается с 0). Оператор setlength(a,10) выделяет память под массив (десять ячеек).

var a:array of integer;

    k:integer;

begin

  setlength(a,10);

  for k:=0 to 10-1 do

  begin

    read(a[k]);

  end;

  writeln('Минимальный элемент ',a.min);

  writeln('Номер минимального элемента массива ',a.indexof(a.min));

end.

Как еще можно найти номер минимального элемента массива? 

Предложите свои способы. 

Читайте также:

12.03.2022

Циклический алгоритм, операторы цикла while, repeat, for, использование в решении задач

Циклический алгоритм, операторы цикла while, repeat, for, использование в решении задач

По своей структуре алгоритмы делят на следующие типы:

  • линейный
  • разветвляющийся
  • циклический

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

Циклический алгоритм – это алгоритм, в котором действия повторяются многократно.

В языке Паскаль для описания циклического алгоритма используют операторы цикла, такие как:

  • оператор цикла с предусловием while
  • оператор цикла с постусловием repeat
  • оператор цикла с параметром for, его еще называют оператор цикла с счетчиком.

Оператор цикла с предусловием while

Формат оператора

Перевод слов

while условие do

begin

операторы;

end;

Пока условие делай

тело цикла

Как работает оператор цикла while

Пока условие ИСТИНА выполняются операторы между словами begin и end (тело цикла).

Приведем примеры фрагментов программы с оператором цикла while

Пример 1

k:=2;

while k<=4 do

begin

k:=k+1;

end;

Пока условие k<=4 ИСТИНА выполняется оператор k:=k+1 (тело цикла).

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

2

2<=4 да

2

2+1=3

3<=4 да

3

3+1=4

4<=4 да

4

4+1=5

5<=4 нет

Таким образом, тело цикла выполнилось 3 раза. Переменная k управляет работой цикла.

Пример 2

k:=10;

while k<5 do

begin

k:=k+1;

end;

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<5

1

10

10<5 нет

В этом примере тело цикла ни разу не выполнилось, так как условие продолжения цикла ложно. Поэтому оператор цикла while называют оператором цикла с предусловием, сначала осуществляется проверка условия, а только потом выполняется тело цикла.

Использование оператора цикла while в решении задач

Задача 1. С клавиатуры вводятся числа до первого введенного 0. Сколько чисел было введено?

Задача 2. Натуральное число N вводится с клавиатуры. Найти сумму чисел 1+1/2+1/3+…+1/N.

Задача 3. Дано натуральное число N.Вывести на экран цифры данного числа в столбец.

Оператор цикла с постусловием repeat

Формат оператора

Перевод слов

repeat

операторы;

until условие;

Повторяй

 тело цикла

пока условие ложно

Как работает оператор цикла repeat

Выполняются операторы между словами repeat и until (тело цикла), пока условие ложно.

Приведем примеры фрагментов программы с оператором цикла repeat

Пример 1

k:=0;

repeat

k:=k+1;

until k>5;

Выполняется оператор k:=k+1, пока k>5 ложно.

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

0

 

2

1

1>5 нет

3

2

2>5 нет

4

3

3>5 нет

5

4

4>5 нет

6

5

5>5 нет

7

6

6>5 да

Тело цикла выполнилось 6 раз. Переменная k управляет работой цикла.

Пример 2

k:=0;

repeat

k:=k+1;

until k>=1;

Выполняется оператор k:=k+1, пока k>=1 ложно.

Таблица пошагового выполнения фрагмента программы

Шаг

k

k<=4

1

0

 

2

1

1>=1 да

Тело цикла выполнилось 1 раз. Условие стало истинным после первой итерации. Оператор цикла repeat называют оператором цикла с постусловием, так как сначала выполняется тело цикла, а затем проверяется условие выхода из цикла. Таким образом, тело цикла в операторе repeat всегда выполнится хотя бы один раз.

Оператор цикла for с параметром (счетчиком)

Формат оператора

Перевод слов

for k:=a to b do

begin

операторы;

end;

Для счетчика k от начального значения a до конечного значения b делай тело цикла.

Как работает оператор цикла for с параметром

Выполняются операторы между словами begin и end (тело цикла) пока счетчик меняет свое значение от начального до конечного с шагом 1. Увеличение счетчика на 1 происходит автоматически.

Приведем примеры фрагментов программы с оператором цикла for

Пример 1

for k:=1 to 5 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 5 раз для значений k=1,2,3,4 и 5. В результате на экран будут выведены числа от 1 до 5.

Пример 2

for k:=10 to 10 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 1 раз для значения k=10. В результате на экран будет выведено одно число 10.

Пример 3

for k:=5 to 1 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) ни разу не выполнится, так как конечное значение счетчика меньше начального (1<5).

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

Другой способ использования оператора цикла с параметром for

Формат оператора

Перевод слов

for k:=a downto b do

begin

операторы;

end;

Для счетчика k от начального значения a до конечного значения b делай тело цикла.

В данном случае для работы цикла конечное значение счетчика b должно быть меньше или равно начального значения a.

Пример 1

for k:=5 downto 1 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) выполняется ровно 5 раз для значений k=5,4,3,2 и 1. В результате на экран будут выведены числа от 5 до 1.

Пример 2

for k:=10 downto 20 do

begin

write(k,’ ‘);

end;

Оператор write(k,’ ‘) ни разу не выполнится, так как конечное значение счетчика больше начального (20>10).

Использование оператора цикла for в решении задач

Задача 1. Дано целое число A.Вывести на экран в столбец 30 раз число A.

Задача 2. Вывести на экран в столбец все натуральные двузначные числа.

Задача 3. Вывести на экран таблицу умножения на 2 для чисел от 1 до 9.

Задача 4. Дано натуральное число N.Верно ли, что данное число простое?

Задача 5. Известны максимальные скорости каждой из 10 иномарок легковых автомобилей. Определить, какой автомобиль (по номеру) самый быстрый.

09.03.2022

Массивы в языке Паскаль (примеры, задачи, решения)

 В этой публикации приведем примеры задач с решениями на языке Паскаль по теме "Массив".

Задачи:

  1. Дан массив из 10 целых чисел. Найти сумму элементов, кратных данному числу k.
  2. Дан массив из N элементов. Найти количество элементов, равных максимальному.
  3. Дан массив из N элементов. Найти среднее значение положительных элементов.

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

Исходные данные: a - массив 10 целых чисел (тип array); k - целое число (тип integer)

Выходные данные: sum - сумма элементов, кратных числу k

Как будем решать задачу:

  • Введем массив 10 целых чисел оператором цикла for  с счетчиком от 1 до 10.
  • Введем число k
  • Обнулим сумму sum
  • В цикле for будем проверять, делится ли число, хранящееся в ячейке (элемент массива) на число k, если да, то будем этот элемент добавлять в сумму sum.
  • Выведем значение sum на экран.

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

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

    k,sum,j:integer;

begin

  writeln('Введите массив 10 целых чисел');

  for j:=1 to 10 do

  begin

    readln(a[j]);

  end;

  write('Введите число k=');

  readln(k);

  sum:=0;

  for j:=1 to 10 do

  begin

    if a[j] mod k = 0 then sum:=sum+a[j];

  end;

  writeln('Сумма элементов, кратных числу ',k,': ',sum);

end.

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

С использованием методов для последовательностей в PascalABC.NET (версия 3.8.2)

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

    k,s,j,x:integer;

begin

  writeln('Введите массив 10 целых чисел');

  for j:=1 to 10 do

  begin

    readln(a[j]);

  end;

  write('Введите число k=');

  readln(k);

  s:=a.Where(x -> x mod k = 0).sum;

  writeln('Сумма элементов, кратных числу ',k,': ',s);

end.

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

Исходные данные: N - количество элементов массива (тип integer); a - массив N целых чисел (тип array)

Промежуточные данные: m - максимальное значение (тип integer)

Выходные данные: k - количество элементов, равных максимальному (тип integer)

Как будем решать задачу

  • Введем число N
  • Введем массив из N элементов
  • Найдем максимальное значение
  • Найдем количество элементов, равных максимальному значению.

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

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

    k,m,j,N:integer;

begin

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

  readln(N);

  writeln('Введите массив целых чисел');

  for j:=1 to N do

  begin

    readln(a[j]);

  end;

  m:=a[1];

  for j:=2 to N do

  begin

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

  end;

  k:=0;

  for j:=1 to N do

  begin

    if a[j]=m then k:=k+1;

  end;

  writeln('Количество элементов, равных максимальному k=',k);

end.

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

С использованием методов для последовательностей в PascalABC.NET (версия 3.8.2)

var a:array of integer;

    k,m,j,N:integer;

begin

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

  readln(N);

  setlength(a,N);

  writeln('Введите массив целых чисел');

  for j:=0 to N-1 do

  begin

    readln(a[j]);

  end;

  k:=a.countof(a.max);

  writeln('Количество элементов, равных максимальному ',k);

end.

Задача 3. Дан массив из N элементов. Найти среднее значение положительных элементов.

Исходные данные: N - количество элементов массива (тип integer); a - массив N целых чисел (тип array)

Промежуточные данные: s - сумма положительных элементов (тип integer), k - количество положительных элементов (тип integer)

Выходные данные: r - среднее значение положительных элементов (тип real)

Как будем решать задачу

  • Введем число N
  • Введем массив из N элементов
  • Найдем сумму и количество положительных элементов
  • Вычислим среднее значение положительных элементов

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

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

    k,s,j,N:integer;

    r:real;

begin

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

  readln(N);

  writeln('Введите массив целых чисел');

  for j:=1 to N do

  begin

    readln(a[j]);

  end;

  s:=0; k:=0;

  for j:=1 to N do

  begin

    if a[j]>0 then 

    begin

      s:=s+a[j];

      k:=k+1;

    end;

  end;

  r:=s/k;

  writeln('Среднее значение положительных элементов ',r);

end.

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

С использованием методов для последовательностей в PascalABC.NET (версия 3.8.2)

var a:array of integer;

    k,s,j,N:integer;

    r:real;

begin

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

  readln(N);

  setlength(a,N);

  writeln('Введите массив целых чисел');

  for j:=0 to N-1 do

  begin

    readln(a[j]);

  end;

  s:=a.Where(x->x>0).sum;

  k:=a.Count(x->x>0);

  r:=s/k;

  //либо так: r:=a.Where(x->x>0).Average;

  writeln('Среднее значение положительных элементов ',r);

end.

Сформировать массив случайных чисел

05.03.2022

Язык Паскаль. С клавиатуры вводятся числа до первого введенного 0. Сколько чисел было введено?

С клавиатуры вводятся числа до первого введенного 0. Сколько чисел было введено?

Исходные данные: число a (тип integer)

Выходные данные: количество введенных чисел (тип integer)

Первое число введем до цикла. Далее организуем повторение циклом while. Пока число a не равно 0, будем вводить число a и увеличивать счетчик k на 1.

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

var a,k:integer;

begin

  k:=0;

  readln(a);

  while a<>0 do

  begin

    readln(a);

    k:=k+1;

  end;

  writeln('Введено чисел: ',k);

end.

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

Выполнение программы

Таблица пошагового выполнения программы (запуск 1)

Шаг

а

a<>0

k

1

Ввод 5

5<>0 да

 

2

Ввод 3

 

1

3

 

3<>0 да

 

4

Ввод 7

 

2

5

 

7<>0 да

 

6

Ввод -2

 

3

7

 

-2<>0 да

 

8

Ввод 0

 

4

9

 

0<>0 нет

 

10

 

 

Вывод 4


Результат выполнения программы (запуск 2)

Выполнение программы


Таблица пошагового выполнения программы (запуск 1)

Шаг

а

a<>0

k

1

Ввод 0

0<>0 нет

 

2


 

Вывод 0


Задачи с применением оператора цикла while: