Задачі на знаходження найбільшого та найменшого числа серед декількох чисел мають простий стандартний алгоритм.
При складанні програм на знаходження найбільшого або найменшого числа з декількох чисел, потрібно пам’ятати:
|
Дано n цілих чисел. Знайти серед них максимальне та його порядковий номер. Якщо є декілька таких чисел, то визначте порядковий номер першого такого числа.
Ввід | Вивід | Пояснення |
---|---|---|
6 6 7 8 3 8 5 | 8 3 | Перше число 6 це кількість чисел. Наступні числа мають порядкові номери: 6 – 1, 7 – 2, 8 – 3, 3 – 4, 8 – 5, 5 –6. Серед цих шістьох чисел найбільше 8. Одна 8 має порядковий номер 3. Друга 8 має порядковий номер 5. Нам потрібна перша, з порядковим номером 3. |
Вхідні:
n – кількість чисел (цілого типу)
a – число (цілого типу, за умовою)
Вихідні:
max – максимальне число (цілого типу, тому що числа a цілі).
nmax – порядковий номер максимального числа (номери завжди цілого типу)
Проміжні:
i – параметр циклу (цілого типу)
var i,max,nmax,n,a:integer; begin read(n); read(max);nmax:=1; for i:=2 to n do begin read(a); if a >max then begin max:=a; nmax:=i;end; end; writeln(max,' ',nmax); end. |
У приведеній нижче таблиці для нашого прикладу проводиться „трасування” програми, тобто програма виконується по крокам, вказуються оператори, що виконуються та відповідні зміни значень змінних.
Оператор | Пояснення | n | max | nmax | i | a |
---|---|---|---|---|---|---|
read(n) | Ввід кількості чисел | 6 | ||||
read(max) | Ввід першого числа у змінну max | 6 | ||||
nmax:=1 | Початкове значення номеру | 1 | ||||
i:=2 | Заголовок циклу | 2 | ||||
read(a) | Ввід другого числа | 7 | ||||
if a >max | Вірно, бо 7> 6 | |||||
max:=a; nmax:=i; | Виконуються, бо вірно | 7 | 2 | |||
i:=3 | Заголовок циклу | 3 | ||||
read(a) | Ввід третього числа | 8 | ||||
if a >max | Вірно, бо 8> 7 | |||||
max:=a; nmax:=i; | Виконуються, бо вірно | 8 | 3 | |||
i:=4 | Заголовок циклу | 4 | ||||
read(a) | Ввід четвертого числа | 3 | ||||
if a >max | Невірно, бо 3<8, тому на наступний виток циклу | |||||
i:=5 | Заголовок циклу | 5 | ||||
read(a) | Ввід п’ятого числа | 8 | ||||
if a >max | Невірно, бо 8=8, тому на наступний виток циклу | |||||
i:=6 | Заголовок циклу. Останній виток. | 6 | ||||
read(a) | Ввід шостого числа | 5 | ||||
if a >max | Невірно, бо 5<8, тому на кінець циклу | |||||
writeln(max,' ',nmax) | Вивід отриманих значень. |
Ввести з клавіатури n будь-яких дійсних чисел. Знайти максимальне та мінімальне числа.
У цій програмі потрібно одночасно знайти і найбільше і найменше числа. Тому початкове значення ми будемо встановлювати однакове для max і для min. У циклі кожне число будемо перевіряти і на „більше” і на „менше”. Порядкові номери непотрібні, тому їх не запам’ятовуємо.
Ввід | Вивід | Пояснення |
---|---|---|
6 6 2 8 2 8 9 | 3 | Перше число 6 це кількість чисел. Серед цих шістьох чисел найбільше 9, а найменше 2. |
Вхідні:
n – кількість чисел (цілого типу)
a – число (дійсного типу, за умовою)
Вихідні:
max –максимальне число (дійсного типу, тому що числа a дійсні).
min –мінімальне число (дійсного типу, тому що числа a дійсні).
Проміжні:
i – параметр циклу (цілого типу)
var i,n:integer;max,min,a:real; begin read(n); read(max);min:=max; for i:=2 to n do begin read(a); if a > max then max:=a; if a < min then min:=a; end; writeln(max:1:2,' ',min:1:2); end. |
Ввести з клавіатури n будь-яких дійсних чисел. Визначте число, що найближче до цілого числа. Якщо таких чисел декілька, то визначте перше з них.
У цій програмі будемо знаходити мінімальне значення не для чисел a, а для модуля різниці між числом та числом округленим до цілого, тобто для чисел riz.
Ввід | Вивід | Пояснення |
---|---|---|
4 4.3 5.9 3.1 2.6 | 5.9 | 4 це кількість чисел. Перше число 4.3, округлюється до 4, 4.3–4 =0.3 Друге число 5.9, округлюється до 6, 5.9-6=-0.1 Третє число 3.1, округлюється до 3, 3.1-3=0.1 Четверте число 2.6, округлюється до 3, 2.6-3=-0.4 Найближчі до цілого два числа: 5.9 до 6 і 3.1 до 3. Перше з них 5.9 |
Вхідні:
n – кількість чисел (цілого типу)
a – число (дійсного типу, за умовою)
Вихідні:
min – число найближче до цілого (дійсного типу, тому що числа a дійсні).
Проміжні:
i – параметр циклу (цілого типу)
riz – модуль різниці між введеним числом a та числом a округленим до цілого (дійсного типу, тому що числа a дійсні).
minriz – мінімальне значення для чисел riz (дійсного типу, тому що числа riz дійсні).
var i,n:integer;minriz,min,riz,a:real; begin read(n); read(min); minriz:=abs(min-round(min)); for i:=2 to n do begin read(a); riz:=abs(a-round(a)); if riz < minriz then begin minriz:=riz; min:=a; end; end; writeln(min:1:1); end. |
Дано n цілих чисел. Визначте максимальну кількість 0, що йдуть підряд.
У цій програмі будемо рахувати нулі, що йдуть підряд та знаходити максимальне значення серед цих лічильників.
Ввід | Вивід | Пояснення |
---|---|---|
7 2 0 0 8 0 0 0 | 3 | 7 це кількість чисел. В першій групі 2 нулі, у другій групі 3 нулі, тому відповідь 3. |
Вхідні:
n – кількість чисел (цілого типу)
a – число (цілого типу, за умовою)
Вихідні:
max – максимальна кількість нулів, що введені підряд (цілого типу, тому числа k цілі).
Проміжні:
i – параметр циклу (цілого типу)
k – лічильник нулів, що йдуть підряд(цілого типу).
var i,max,k,n,a:integer; begin read(n); max:=0;k:=0; for i:=1 to n do begin read(a); if a =0 then begin k:=k+1; if k>max then max:=k; end else k:=0; end; writeln(max); end. |
У приведеній нижче таблиці для нашого прикладу проводиться „трасування” програми, тобто програма виконується по крокам, вказуються оператори, що виконуються та відповідні зміни значень змінних.
Оператор | Пояснення | n | max | k | i | a |
---|---|---|---|---|---|---|
read(n) | Ввід кількості чисел | 7 | ||||
max:=0 | Початкове значення max | 0 | ||||
k:=0 | Початкове значення лічильнику нулів | 0 | ||||
i:=1 | Заголовок циклу | 1 | ||||
read(a) | Ввід першого числа | 2 | ||||
if a =0 | Невірно, бо a=2 | |||||
k:=0 | Виконується, бо невірно | 0 | ||||
i:=2 | Заголовок циклу | 2 | ||||
read(a) | Ввід другого числа | 0 | ||||
if a =0 | Вірно, бо a=0 | |||||
k:=k+1 | Виконуються, бо вірно | 1 | ||||
if k>max | Вірно, бо 1>0 | |||||
max:=k | Виконується, бо вірно | 1 | ||||
i:=3 | Заголовок циклу | 3 | ||||
read(a) | Ввід третього числа | 0 | ||||
if a =0 | Вірно, бо a=0 | |||||
k:=k+1 | Виконуються, бо вірно | 2 | ||||
if k>max | Вірно, бо 2>0 | |||||
max:=k | Виконуються, бо вірно | 2 | ||||
i:=4 | Заголовок циклу | 4 | ||||
read(a) | Ввід четвертого числа | 8 | ||||
if a =0 | Невірно, бо a=8 | |||||
k:=0 | Виконується, бо невірно | 0 | ||||
i:=5 | Заголовок циклу | 5 | ||||
read(a) | Ввід п’ятого числа | 0 | ||||
if a =0 | Вірно, бо a=0 | |||||
k:=k+1 | Виконуються, бо вірно | 1 | ||||
if k>max | Невірно, бо 1<2 | |||||
i:=6 | Заголовок циклу | 6 | ||||
read(a) | Ввід шостого числа | 0 | ||||
if a =0 | Вірно, бо a=0 | |||||
k:=k+1 | Виконуються, бо вірно | 2 | ||||
if k>max | Невірно, бо 2=2 | |||||
i:=7 | Заголовок циклу. Останній виток | 7 | ||||
read(a) | Ввід сьомого числа | 0 | ||||
if a =0 | Вірно, бо a=0 | |||||
k:=k+1 | Виконуються, бо вірно | 3 | ||||
if k>max | Вірно, бо 3>2 | |||||
max:=k | Виконується, бо вірно | 3 | ||||
writeln(max) | Вивід отриманого значення |