Пятница, 19.04.2024, 10:28
Информатика и математика в Плесской школе
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Одномерные массивы

    Тема программирование одномерных массивов, так же достаточно обширна  с точки зрения количества и выбора задач.  Эту тему можно разделить на несколько блоков, которые тесно связаны между собой. В своей работе я приведу в качестве примера только три, на мой взгляд самых основных блока из этой темы:
1.    Заполнение и обработка элементов массива.
2.    Нахождение суммы и произведения элементов массива.
3.    Нахождение наибольшего и наименьшего элемента в массиве

Для изучения данной темы скачайте презентацию "Одномерные массивы" с "Учительского портала" http://www.uchportal.ru/load/18-1-0-34113

Заполнение и обработка элементов массива

    
    В задачах этого уровня предлагается конкретный способ заполнения (с клавиатуры, случайными числами, или при помощи прогрессии). Такая программа чаще всего представляет последовательное соединение двух или трех циклов:    
заполнение=>вывод,  
заполнение =>обработка=>вывод, 
заполнение=>(обработка + вывод).
Усложнение задания идет за счет усложнения алгоритмической части.
К первой группе заданий  я отношу задачи, когда требуется заполнить массив одним из предложенных способов обработать все элементы массива и вывести их на экран в строку или столбик.
Задание А.  Заполнить массив целыми положительными и отрицательными числами из интервала [-10, 10] и вывести его в строчку. Поменять знаки элементов массива на противоположные и повторно вывести массив на экран в строчку.
Program n1;
Uses Crt;
var a:array[1..10] of integer;
    i:integer;
begin
  ClrScr;
  For i:=1 to 10 do begin
                     a[i]:=Random(20)-10;
                     write (a[i]:10);
                    end;
  Writeln;
  For i:=1 to 10 do begin
                     a[i]:=-a[i];
                     write(a[i]:10);
                    end;
end.

Во второй группе задач в цикл обработки добавляется условие. Требуется составить программу обрабатывающую не все элементы массива подряд, а согласно поставленного условия.
Задание В Заполнить массив  из 10 элементов с клавиатуры целыми положительными и отрицательными числами и вывести на экран в строчку только отрицательные числа.
Program n2;
Uses Crt;
var a:array[1..10] of integer;
       i:integer;
begin
  ClrScr;
  For i:=1 to 10 do begin
     Write('ВВеди ',i,'-е число');
     Readln(a[i]);
     end;
  For i:=1 to 10 do
          if (a[i]<0) then write(a[i]:10);
end.

    В третьей группе можно еще усложнить алгоритм. Например,  проверить является ли массив арифметической или геометрической прогрессией, расположены ли его элементы по возрастанию или убыванию и т.д. В этих задачах добавляется вычислительная часть и проверка условий вне цикла. 

Задание С. Дан массив из 10 целых, положительных не повторяющихся чисел. Проверить образуют ли его элементы арифметическую прогрессию. Если образуют, то вывести разность прогрессии. 
Program n3;
Uses Crt;
var a:array[1..10] of integer;
    i,r,f:integer;
begin
  ClrScr;
  For i:=1 to 10 do begin
     Write('ВВеди ',i,'-е число');
     Readln(a[i]);
     end;
  r:= a[2]-a[1];
  f:=1;
  For i:=1 to 9 do if (a[i+1]-a[i]<>r) then f:=0;
  If (f=0) then Writeln('Не арифметическая прогрессия');
  If (f=1) then Begin
                Writeln('Арифметическая прогрессия');
                Writeln('Разность = ',r:8);
                End;
end.  


    
В подобных задачах условие, как правило, находится как внутри цикла обработки, так и после него. Переменную f которая  хранит 1 если это арифметическая прогрессия и 0 если это не арифметическая прогрессия можно сделать типа Boolean. Но это потребует от ученика дополнительных знаний, но программа получится красивее. Изменение сложности алгоритма также можно просмотреть на блок-схемах:
 

 

       

 

Нахождение суммы и произведения элементов массива

    Следующим шагом при рассмотрении темы одномерные массивы идет изучение алгоритмов нахождения суммы и произведения элементов массива. 
К задачам первой группы можно отнести задачи на нахождение суммы всех элементов массива. Задача может состоять как из одного, так и из двух циклов. Задача может решаться как в один так и в два прохода по массиву.
    Задание А. Дан массив из 40 случайных чисел из интервала [-10; 10]. Вывести его в строку и найти  


Program n4;
Uses Crt;
var a:array[1..40] of real;
    s:real;
    i:integer;
begin
  ClrScr;
  For i:=1 to 40 do begin
                     a[i]:=Random(20)-10;
                     write (a[i]:10:5);
                    end;
  Writeln;
  S:=0;
  For i:=1 to 40 do S:=S+sin(a[i]);
  writeln ('S=',S:10:5);
end.

    Эту формулировку задачи я подсмотрел в методичке  для студентов одного из Ивановских ВУЗов. Эти задачи решаются по одному образцу и требуют внести лишь небольшие изменения.
К задачам второй группы можно отнести задачи на нахождение суммы элементов массива удовлетворяющих условию. В этих задачах требуется заполнить массив указанным способом и организовать цикл с вложенным условием для нахождения суммы элементов массива. Эту задачу также можно решить  в один цикл. Когда идет заполнение и в этом же цикле проверяется, соответствует ли этот элемент условию. 
    Задание В. Заполнить массив из 10 целых чисел с клавиатуры положительными и отрицательными числами. Найти сумму положительных элементов массива.
Program n5;
Uses Crt;
var a:array[1..10] of integer;
    s,i:integer;
begin
  ClrScr;
  For i:=1 to 10 do begin
     Write('ВВеди ',i,'-е число');
     Readln(a[i]);
     end;
  S:=0;
  For i:=1 to 10 do if (a[i]>0) then S:=S+ a[i];
  writeln ('S=',S:8);
end.

    В заданиях группы С, я включаю задачи когда найденную сумму необходимо с чем ни будь сравнить. Требуется организовать еще один цикл, в который необходимо вставить условие.
    Задание С. Дан массив из 15 целых чисел заполненный случайными числами из интервала [0; 20]. Выведите этот массив в строку и найдите количество четных элементов массива, которые меньше среднего арифметического его элементов.  
Program n6;
Uses Crt;
var a:array[1..15] of integer;
    s:real;
    i,k:integer;
begin
  ClrScr;
  s:=0;
  For i:=1 to 15 do begin
                     a[i]:=Random(20);
                     write (a[i]:10);
                     S:=S+a[i];
                    end;
  Writeln;
  s:=s/15;
  Writeln('Среднее арифметическое = ',s:10:5);
  k:=0;
  For i:=1 to 15 do if (a[i] Mod 2 = 0) and (a[i]<s) then k:=k+1;
  Writeln('Четных чисел меньших среднего арифметического= ',k:8);
End.


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


Нахождение наибольшего (наименьшего) элемента в массиве

Задачи на нахождение наибольшего или наименьшего элемента тоже отличаются усложнением алгоритма. К первой группе задач можно отнести задачи на нахождение наибольшего или наименьшего элемента не во всем массиве, а на определенном интервале. Требуется заполнить массив и правильно изменить параметры в стандартном алгоритме поиска. Эту задачу невозможно решить, если не понимаешь, как работает алгоритм поиска. Разобравшись в нем, ученику не составит труда решить подобную задачу. 
 Задание А. Дан массив из 20 элементов заполненный случайными  целыми числами из интервала [-10, 10]. Выведите этот массив в строку и найдите наибольший элемент лежащий между 5 и 15 элементами данного массива.
Program n7;
Uses Crt;
var a:array[1..20] of integer;
    i,max:integer;
begin
  ClrScr;
  For i:=1 to 20 do begin
                     a[i]:=Random(20)-10;
                     write (a[i]:10);
                    end;
  Writeln;
  max:=a[5];
  for i:=6 to 15 do if (a[i]>max) then max:=a[i];
  writeln('Максимальное число из интервала =',max:8);
end.

    В эти задачи можно добавлять вопрос поиска номера максимального или минимального элемента. Это лишь немного усложнит алгоритм.
    Ко второй группе задач я отношу задачи, где не просто нужно найти максимальное или минимальное число, а что ни будь при помощи найденного числа еще проверить. В данных задачах необходимо добавить еще один цикл в котором найденный элемент с чем ни будь  сравнивается. Получается, что к уже изученным алгоритмам поиска и обработки массива, необходимо добавить алгоритм нахождения максимального или минимального элемента.
Задание В. Дан массив из 20 элементов заполненный случайными  целыми числами из интервала [-10, 10]. Выведите этот массив в строку и найдите сколько раз в данном массиве встречается максимальный по величине элемент.
Program n8;
Uses Crt;
var a:array[1..20] of integer;
    i,max,k:integer;
begin
  ClrScr;
  For i:=1 to 20 do begin
                     a[i]:=Random(20)-10;
                     write (a[i]:10);
                    end;
  Writeln;
  max:=a[1];
  for i:=2 to 20 do if (a[i]>max) then max:=a[i];
  k:=0;
  for i:=1 to 20 do if (a[i]=max) then k:=K+1;
  writeln('Максимальное число из интервала =',max:8);
  writeln('Оно встречается  =',k:8,' раз');
end.

В заданиях С нужно найти максимальный элемент и произвести замену или другие изменения в массиве и повторно вывести массив на экран.
Задание С.  Дан массив из 10 целых положительных чисел, заполненный с клавиатуры. Найти максимальный и минимальный элемент в массиве и поменять их местами.
Program n9;
Uses Crt;
var a:array[1..10] of integer;
    i,min,max,n1,n2,t:integer;
begin
  ClrScr;
  For i:=1 to 10 do begin
     Write('ВВеди ',i,'-е число');
     Readln(a[i]);
     end;
     min:=a[1];n1:=1;
     max:=a[1];n2:=1;
     for i:=1 to 10 do begin
         if (a[i]>max) then begin
                            max:=a[i]; n2:=i;
                            end;
         if (a[i]<min) then begin
                            min:=a[i]; n1:=i;
                            end;
                    end;
     t:=a[n1]; a[n1]:=a[n2]; a[n2]:=t;
     for i:=1 to 10 do write (a[i]:8);
end.

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

Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2024