Вторник, 17.09.2019, 20:20
Главная | Регистрация | Вход Приветствую Вас Гость | RSS


Меню сайта


Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0


Тестування онлайн
тестування онлайн 


Социальные закладк

Тема. Поиск элементов массива с заданными свойствами

Примеры:  1 Определение количества элементов с заданным свойством

Определить количество положительных элементов массива А.

К: = 0; {Счетчик элементов с заданным свойством}

For i: = 1 to N do  If A [i]> 0 Then К = K + 1;

 2. Определение номера первого элемента массива, значение которого соответствует условию

Вариант алгоритма решения задачи:

  1. увеличивать индекс i до тех пор, пока элемент с индексом i не удовлетворять данному условию и величина i не превышает размерность массива;
  2. eсли после выхода из цикла i > N, это означает, что в массиве не найдено элемента, значение которого соответствует условию, в противном случае определить номер первого элемента массива А [1..N], значение которого равно Р.

i: = 0;
Repeat
       
i = i + 1
Until (A [i] = P) Or (i> N); {N - количество элементов в массиве А}

If i <= N Then Edit1.Text: = 'i =' + IntToStr (i)
         
else Edit1.Text: = 'значения не найдено';

Пример 2. Формирование массива случайными числами и вывода их в текстовые поля TListBox и TMemo.

Генерируются 12 случайных чисел из диапазона от 0 до 6. Из этих цифр формируется массив, значения элементов которого выводятся в поле объекта ListBox1, а в поле объекта Memo1 выводятся все элементы этого массива, кроме элементов, значения которых равны 6.

Интерфейс проекта

Итог:

Программный код проекта

procedure TForm1.Button1Click(Sender: TObject);
   var i:integer;  a:array[1..12] of integer;      
// переменная и массив целого типа
begin
    randomize;         
//без этого оператора каждый раз будут генерироваться одинаковые числа
    for i:=1 to 12 do    //цикл для создания массива
    begin   //начало операторских скобок
      a[i]:= random(7);          //формирование значений элементов массива
      listbox1.Items.Add('i =  '+ inttostr(i) +  '     a[' + inttostr(i) + ']= ' + inttostr(a[i]));                         //вывод элемента массива  в текстовое поле listbox
1
    end;    //конец операторских скобок

    for i:=1 to 12 do  {цикл для вывода элементов преобразованного
                          массива в текстовое поле memo1 }

      if  a[i]<> 6 then  {проверка условия отбора очередного элемента массива и если a[i] не равен 6,
                        то выполнить вывод элемента массива  в текстовое поле   memo1}

      memo1.lines.Add('i = '+ inttostr(i) + #9 +'a[' + inttostr(i) + ']= ' + inttostr(a[i]));

end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    memo1.Clear;
    listbox1.Clear;
end;                        

 

 

Пример 3Дана последовательность из n целых чисел (n ≤ 100). Определить количество четных чисел, которые имеют парные индексы.

1. Создайте новый проект. Измените значение свойства Caption формы, разместите на форме компоненты Edit, Button, Label, ListBox и настройте их свойства в соответствии с рисунком.

2. Для элементов используем массив. Поскольку количество элементов последовательности n≤100, опишите массив:

a: array [1..100] of Integer;

3.Опишите глобальные переменные: n - количество элементов последовательности; k - искомое количество четных чисел, имеющих четные индексы; i - индекс текущего элемента массива.

4. Создайте процедуру обработки события OnClick для кнопки Заполнить массив. Запишите операторы для ввода значения n и заполнения массива случайными числами:
 5. Создайте процедуру обработки события OnClick для кнопки Вычислить k. В цикле перебираем элементы массива a; если a [i] соответствует условию, увеличиваем значение k на 1.

Вариант 1   Интерфейс проекта

Итог:  

Программный код

var
  Form1: TForm1;
    var i, n,k:integer;  a:array[1..100] of integer;  //объявление глобальных переменных 

procedure TForm1.Button1Click(Sender: TObject);
begin
  n:=strtoint(edit1.text);
  randomize;
  listbox1.Clear;
  for i:=1 to n do
 
begin
    a[i] := random(n) + 1;
    listbox1.Items.Add(
'a[' + inttostr(i) + ']= ' + inttostr(a[i]));
 
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  k := 0;
 
  for i:=1 to n do  if (a[i] mod 2 = 0) and (i mod 2 =0) then k:=k +1;
   edit2.Text :=  inttostr(k);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   listbox1.Clear;   edit2.Text := '';   edit1.Text := '';
end; 

Интерфейс проекта

итог:

Вариант 2
Программный код
(изменение  в процедуре procedure TForm1. Button2Click(Sender: TObject);

procedure TForm1.Button2Click(Sender: TObject);
begin
  k := 0;
    for i:=1 to n do  
if
(a[i] mod 2 = 0) and (i mod 2 =0) then
 {проверка условия отбора - определить количество четных чисел, которые имеют парные индексы.}
   
       begin
         k:=k +1;
         listbox2.Items.Add(
'a[' + inttostr(i) + ']= ' + inttostr(a[i]));
          e
nd;
   edit2.Text :=  inttostr(k);
end;

procedure TForm1.Button3Click(Sender: TObject); (изменение  в процедуре  procedure TForm1.Button3Click(Sender: TObject)
begin
   
listbox2.Clear;   listbox1.Clear;   edit2.Text := '';   edit1.Text := '';
end; 

Пример 4.  Определить, сколько раз заданное действительное число встречается среди значений элементов табличной величины.

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

procedure TForm1.Button1Click(Sender: TObject);
    var a: array[1..10] of integer; i, k, n  :integer;
begin
  Randomize;
 n:=0;
 for i:= 1 to 10 do
   
 begin
     a[i]:= random(20); // формирование элементов массива
     memo1.Lines[i-1]:= '' + inttostr(a[i]);   {очередной элемент массива переводить в текст и записывать следующей строкой  поля memo1 }
     end;
 k:= strtoint(inputbox('поиск одинаковых чисел', 'введите искомое число' ,''));
 for i:= 1 to 10 do  
if a[i] = k then   n:= n + 1 ;
 label1.caption:=
'количество искомых чисел = ' + inttostr(n);
end;

Пример 5.  Определить, есть ли заданное действительное число среди значений элементов данной табличной величины.

Эту задачу можно было бы решить аналогично предыдущей: определить, сколько элементов табличной величины равны заданному числу, и если это количество равен 0 то заданного числа среди значений элементов табличной величины в противном случае -  заданное число среди значений элементов табличной величины есть. Но:

  • такой метод решения этой задачи является нерациональным;

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

Для реализации рационального метода решения этой задачи используем переменную логического типа f и пусть ее значение:

  •  false означать, что заданного числа среди значений элементов табличной величины нет
  • true означать, что заданное число среди значений элементов табличной величины есть

Перед началом просмотра значений элементов табличной величины присвоим переменной f значение false, ведь заданное число в табличной величине пока не нашлось.

Сравниваем в цикле последовательно значения элементов табличной величины с заданным числом, и если один из них равен заданному числу, то изменим значение переменной f на true и прервем выполнение цикла командой break (англ. Break - прерывать).

Вывод реализуем в зависимости от значения переменной f.

 

Программный код проекта

procedure TForm1.Button1Click(Sender: TObject);
    var a: array[1..10] of real; i,z :integer;  f:boolean; k:real;
{k -искомое число, z-для запоминания индекса первого найденного элемента массива, удовлетворяющего условию поиска, f - значение false будет означать,
 что искомое число в массиве еще не найдено а значение true - заданное число есть среди элементов массива  }

begin
 Randomize;
 
for i:= 1 to 10 do
     
begin
     a[i]:= random(20)+ 2.5;
     memo1.Lines[i-1]:=
'i = '+ inttostr(i) + #9 + 'a[' + inttostr(i) + ']= ' + floattostr(a[i]);  
{ вывод индексов и значений элементов массива из соответствующих участков оперативной памяти  в  строки многострочного текстового поля преобразовывая числовые данные в текствый тип}
     end;
 f:=false;  
//искомое число в массиве еще не найдено
k:= strtofloat(inputbox('поиск первого из искомых', 'введите искомое число, разделительный знак - запятая ',''));

 for i:= 1 to 10 do  //в цикле  последовательно сравниваем значение элементов массива с искомым числом
     if a[i] = k then    {если значение очередного элемента равно искомому
меняем значение переменной f на true и прерываем выполнение цикла}

            begin
           f:=true;
 // заданное число есть среди элементов массива
           z:= i; // запоминаем индекс найденного элемента массива
          break; //выходим из цикла
          end;
  if f=true then  
//вывод результата поиска реализуем в зависимости от значения переменной  f
         label1.caption:= 'такое число есть  индекс элемента =  ' + inttostr(z)
            else
       label1.caption:=
'такого  числа нет';

end;

Итоги


 


 

Задачи на определение суммы (произведения) элементов массива 

Форма входа
Поиск
Календарь
«  Сентябрь 2019  »
ПнВтСрЧтПтСбВс
      1
2345678
9101112131415
16171819202122
23242526272829
30
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz

  • Рейтинг@Mail.ru
    Copyright MyCorp © 2019
    Конструктор сайтов - uCoz