Изучить §5 "Поиск элементов с заданными свойствами"
Внимательно изучите примеры.
Задан одномерный массив из n чисел. Определить, есть ли в нем хотя бы один элемент, равный x (значение x вводится).
var a: array[1..10] of integer;
n, x: integer;
p: boolean;
begin
write('Количество n = ');
readln(n);
writeln('Элементы массива');
for var i := 1 to n do read(a[i]);
write('Число x =');
readln(x);
//линейный поиск элемента
p := false;
for var i := 1 to n do
if a[i] = x then p := true;
if p then writeln('Элемент найден')
else writeln('Элемент не найден');
end.
Тестирование
Задан одномерный массив из n чисел. Определить, есть ли в массиве искомый элемент и установить, на каком месте он находится.
var a: array[1..10] of integer;
n, x, k: integer;
begin
write('Количество n = ');
readln(n);
writeln('Элементы массива ');
for var i := 1 to n do read(a[i]);
write('Число x = ');
readln(x);
//линейный поиск элемента
k := 0;
for var i := 1 to n do
if a[i] = x then k := i;
if k = 0 then writeln('Элемент не найден')
else writeln('Элемент найден на месте ', k);
end.
//линейный поиск элемента
k:=1;
while (k<=n) and (a[k]<>x) do k:=k+1;
if k = n+1 then writeln('Элемент не найден')
else writeln('Элемент найден на месте ', k);.
//линейный поиск с барьером
a[n + 1] := x;
k := 1;
while a[k]<>x do k := k + 1;
if k = n + 1 then writeln('Элемент не найден')
else writeln('Элемент найден на месте ', k);
Тестирование
Задан одномерный массив из n чисел. Определить количество элементов, кратных x в линейном массиве.
var a: array[1..10] of integer;
n, x, k: integer;
begin
write('Количество n =');
readln(n);
writeln('Элементы массива');
for var i := 1 to n do read(a[i]);
write('Число x =');
readln(x); k := 0;
for var i := 1 to n do
if a[i] mod x = 0 then k := k + 1;
writeln('В массиве ', k, ' элемент(-а,-ов), кратный(-х)', x);
end.
Тестирование
Задан одномерный массив из n чисел. Определить количество элементов, кратных x в линейном массиве и вывести значения всех найденных элементов
var a, b: array[1..10] of integer;
n, x, k: integer;
begin
write('Количество n = ');
readln(n);
writeln('Элементы массива ');
for var i := 1 to n do read(a[i]);
write('Число x = ');
readln(x); k := 0;
for var i := 1 to n do
if a[i] mod x = 0 then begin
k := k + 1;
b[k] := i;
end;
writeln('В массиве ', k, ' элемент(-а,-ов), кратный(-х) ', x);
writeln('Местоположение ');
for var i := 1 to k do write(b[i],' ');
end.
Тестирование
Известны результаты ЦТ по математике для n человек. Определить, есть ли среди них хотя бы один человек с баллом выше x. Значение x вводится с клавиатуры. Результаты экзамена получить случайным образом.
var a: array[1..20] of integer;
n, x, k: integer;
begin
write('Количество n =');
readln(n);
writeln('Элементы массива ');
for var i := 1 to n do begin
a[i] := random(0,100);
write(a[i],' ');
end;
writeln;
write('Число x = ');
readln(x);
//линейный поиск с барьером
a[n+1] := x + 1;
k := 1;
while (a[k] <= x) do k := k + 1;
if k = n+1 then writeln('Нет таких ')
else writeln('Это человек с № ', k, ', его балл - ', a[k]);
end.
Тестирование
В двух линейных массивах x и y, заданных случайным образом, хранятся координаты точек плоскости (–200 <= X[i], Y[i] <= 200). Определить, каких точек больше — лежащих внутри или снаружи области, ограниченной окружностью радиуса R с центром в начале координат (будем считать, что точки, лежащие на окружности, лежат внутри области). Построить окружность и точки. Точки, принадлежащие внутренней области, нарисовать красным цветом, а внешней области — синим цветом.
uses graphABC;
var X,Y: array [1..1000] of integer;
n, k1, k2, R: integer;
begin
write('Количество точек n = ');
read(n);
writeln(n);
for var i := 1 to n do begin
X[i]:= random(-200,200);
Y[i]:= random(-200,200);
end;
writeln('Радиус окружности ');
read(R);
writeln(R);
window.Width := 200;
window.Height := 200;
{Построение окружности и осей координат}
circle(200,200,R);
line(0,200,400,200);
line(200,0,200,400);
k1 := 0; k2 := 0;
for var i := 1 to n do
if X[i]*X[i]+Y[i]*Y[i]<=R*R then begin
k1 := k1 + 1;
SetPixel(X[i]+200,200-Y[i],
clred);
end
else begin
k2 := k2 + 1;
SetPixel(X[i]+200,200-Y[i],
clblue);
end;
if k1 > k2 then writeln('Внутри больше ')
else
if k1<k2 then writeln('Снаружи больше ')
else writeln('Поровну ')
end.
Тестирование
На складе хранятся пустые ящики для упаковки товара. Известно, что масса одного пакета с конфетами x кг. Какова суммарная масса пакетов с конфетами, которые можно упаковать в такие ящики, заполнив ящик целиком?
var a: array [1..20] of integer;
n, x, k, S: integer;
begin
write('Количество ящиков: ');
readln(n);
writeln('Вместимость ящиков ');
for var i := 1 to n do read(a[i]);
write('Масса конфет: '); read(x);
k := 0; S := 0;
for var i := 1 to n do
if a[i] mod x = 0 then begin
k := k + 1;
S := S + a[i];
end;
writeln('На складе ',k,' ящ.');
writeln('Суммарная масса ', S);
end.
Тестирование
Имеется список мальчиков 10 В класса и результаты их бега на 100 м. Для сдачи норматива необходимо пробежать дистанцию не более чем за 16 с. Вывести фамилии учащихся, которые не выполнили норматив по бегу. Сколько таких учащихся в классе?
var r: array [1..20] of real;
fam: array [1..20] of string;
n, k: integer;
begin
writeln('Количество учащихся: ');
readln(n);
writeln('Фамилия и результат: ');
for var i := 1 to n do begin
readln(fam[i]);
readln(r[i]);
end;
writeln('Фамилии не сдавших
норматив: ');
k := 0;
for var i := 1 to n do
if r[i] > 16 then begin
k := k + 1;
writeln(fam[i]);
end;
writeln('Не сдали норматив: ', k);
end.
Тестирование
Задан одномерный массив из N целых чисел. Определить количество элементов, которые являются числами Смита. (Число Смита — это такое составное число, сумма цифр которого равна сумме цифр всех его простых сомножителей.) Например, числом Смита является 202 = 2 × 101, поскольку 2 + 0 + 2= 4, и 2 + 1 + 0 + 1= 4.
var a: array [1..100] of integer;
n, k: integer;
function sum(x: integer): integer;
var s: integer;
begin
s := 0;
while x > 0 do begin
s := s + x mod 10; x := x div 10;
end;
sum := s;
end;
function check(x: integer): boolean;
var s1, s2, d: integer;
begin
s1 := sum(x); s2 := 0; d := 2;
//разложение на простые множители
while x <> 1 do begin
while x mod d = 0 do begin
s2 := s2 + sum(d);
x := x div d;
end;
d := d + 1;
end;
check := s1 = s2;
end;
begin
writeln('Количество ');
readln(n);
writeln('Элементы ');
for var i := 1 to n do read(a[i]);
k := 0;
writeln('Числа Смита ');
for var i := 1 to n do
if check(a[i]) then begin
inc(k);
write(а[i], ' ');
end;
writeln;
writeln('Всего - ', k);
end.
Тестирование
Задан одномерный массив из n строк. Каждая строка является предложением из слов, разделенных пробелами. Найти и вывести те предложения, в которых нечетное количество слов.
var a: array [1..100] of string;
n, k: integer;
function check(x: string): integer;
var s, len: integer;
begin
s := 0;
x := ' ' + x;
len := length(x);
for var i := 1 to len - 1 do
if (x[i] = ' ') and (x[i + 1] <> ' ') then
inc(s);
check := s;
end;
begin
writeln('Количество ');
readln(n);
writeln('Элементы ');
for var i := 1 to n do readln(a[i]);
k := 0;
writeln;
writeln('Искомые строки: ');
for var i := 1 to n do
if check(a[i]) mod 2 <> 0 then begin
inc(k);
writeln(a[i]);
end;
writeln('Всего - ', k);
end.
Тестирование
Проверьте свои знания ➠
Измените программу из примера 5.2, использовав фрагмент программы из примера 5.3.
Расставьте комментарии к программе.
//проверка причины выхода из цикла;
//организация цикла поиска искомого значения в массиве;
//описание массива;
//ввод числа для поиска;
//ввод количества элементов массива;
//заполнение массива;
//установление начальной позиции поиска;
Заполните таблицу.
// № n Массив x Результат
// 1 5 2 14 7 20 16 20
// 2 5 2 3 4 5 6 8
// 3 7 2 4 6 8 10 11 12 8
// 4 5 6 3 9 12 15 3
Добавьте в таблицу свои данные, такие, чтобы искомый элемент был первым в массиве; последним в массиве.
Какой ответ выдаст программа, если в массиве несколько элементов, удовлетворяющих условию задачи? Почему? Ответ запишите в виде комментария к программе.
Что нужно изменить в программе, чтобы выдавался не первый из найденных элементов, а последний? Ответ запишите в виде комментария к программе.
Измените условие цикла while так, чтобы использовалась логическая операция not.
Рост учащихся класса представлен в виде массива. Определите количество учащихся, рост которых больше среднего роста по классу.
Заданы фамилии и рост учащихся 10-го класса. Вывести фамилии тех учащихся, рост которых меньше среднего роста по классу.
Известны данные о площади n стран (в млн кв. км) и численности населения (в млн жителей). Выведите номера тех стран, плотность населения которых больше x.
Для упражнения 4 добавьте возможность вводить и выводить названия стран.
Определите, есть ли в линейном массиве хотя бы один элемент, который является нечетным числом, кратным 7. Если да, то следует вывести его номер.
*В линейном массиве найдите и выведите все простые числа с нечетной суммой цифр. Укажите, сколько чисел вывели.
*В линейном массиве найдите и выведите все числа Армстронга. (Числом Армстронга называется такое число, которое равно сумме своих цифр, возведенных в степень, равную количеству его цифр. Например, числом Армстронга является число 371: 371 = 33 + 73 + 13 = 27 + 343 + 1.) Укажите, сколько чисел вывели.
Задан одномерный массив из N строк. Каждая строка является предложением из слов, разделенных пробелами. Найдите и выведите те предложения, в которых есть слова, начинающиеся на гласную (строчную или прописную).