4. Разработка методического обеспечения для работы со структурным типом данных массив
4.1 Основные этапы разработки решения задачи
Чтобы любую новую задачу решить с применением компьютера, необходимо предварительно создать соответствующую компьютерную программу. Технологический процесс разработки программы решения задачи включает следующие этапы [5]:
1) построение информационной модели задачи;
2) разработка алгоритма решения задачи;
3) написание программы;
4) отладка программы.
Информационная модель задачи – это совокупность знаний и данных, содержащих всю необходимую информацию об объекте или процессе, в отношении которого эта задача сформулирована. Важнейшей составляющей информационной модели является метод решения, то есть конкретные соотношения, связывающие исходные данные задачи с нужными результатами. Частным случаем информационной модели является математическая модель.
Разработка алгоритма – представление процесса решения задачи в виде последовательности определённых команд, выполнение которых обеспечивает получение нужных результатов.
Написание программы – запись алгоритма на языке программирования.
Отладка программы реализуется после ввода её в компьютер и состоит в обнаружении и устранении в ней синтаксических и семантических ошибок.
Готовая отлаженная программа передаётся пользователю, который в любое удобное для себя время может применить её для решения соответствующей задачи на реальных исходных данных.
4.2 Реализация учебных задач по работе с массивами
При решении учебных задач учащимся предстоит научиться выполнять рая наиболее распространенных действий с массивами [9, с. 133]:
1) описание;
2) заполнение массива случайными числами;
3) заполнение массива с клавиатуры;
4) вывод на экран;
5) поиск максимального элемента;
6) вычисление суммы всех элементов массива;
7) вычисление количества положительных элементов;
8) удаление элементов из массива;
9) добавление элементов в массив;
10) замена элементов в массиве и другие.
Заполнение массива случайными числами и вывод массива на экран. Рассмотрим задачу, в которой требуется с помощью датчика случайных чисел создать одномерный массив и вывести его на экран.
Program Massiv1;
Uses Crt;
Const N=10;
Var A: array [1.. N] of integer; i: integer;
Begin
Randomize;
For i:=1 to N do A[i]:=Random (100);
ClrScr;
Writeln (‘Введенный массив: ’);
For i:=1 to N do write (A[i]: 4);
Writeln;
Readln;
End.
В данном примере мы заполнили массив случайными числами от 0 до 99, что обеспечила нам функция random (100). Если нам нужно получить случайные числа в другом диапазоне, например, не от нуля, расчет нужно сделать такой: функция random (N) выдаст N различных чисел от 0 до N-1. Если нам нужно, чтобы наименьшим числом диапазона было K, необходимо прибавить K к random (N). Наибольшее число, которое будет выдавать в этом случае формула random (N)+K, будет наибольшим числом диапазона.
Функция random без аргумента генерирует случайные вещественные числа на промежутке [0;1). Если случайные вещественные числа должны принадлежать иному промежутку, например, [3;4), то значение элемента задается выражением A[i]:=random+3 [4, с. 29].
Заполнение массива с клавиатуры. Заполним одномерный массив путем ввода с клавиатуры целых чисел и выведем его элементы на экран с противоположным знаком.
Program Massiv2;
Uses Crt;
Const N=10;
Type Mas: array [1.. N] of integer;
Var Line: Mas; i: integer;
Begin
For i:=1 to N do
Begin
Write (‘Введите элемент с индексом ’, i, ':');
Readln (Line[i])
End;
For i:=1 to N do Write(-Line[i]: 5);
Writeln;
Readln
End.
Поиск максимального элемента массива. Поиск максимума – типичная задача для большого количества данных. Например, в списке успеваемости учеников класса найти самого прилежного. Иначе говоря, требуется выбрать наибольшее значение среднего балла и указать фамилию ученика.
Program Maximum;
Const N = 10;
Type Mas = array [1.. N] of integer;
Var A: Mas; i, Max, Imax: integer;
Begin
Randomize;
For i:= 1 to N do
Begin
A[i]:= -50+Random (101);
Write (A[i]: 5)
End.
Writeln;
Imax:= 1; Max:= A[1];
For i:= 2 to N do
If Max < A[i] then
Max:= A[i]; Imax:=i
End;
Writeln (‘Максимальный элемент в массиве = ’, Max: 5);
WriteLN (‘Его индекс = ’, Imax: 5);
Readln;
End.
Заметим, что в процессе поиска максимума не обязательно хранить обе величины – номер максимума и его значение. Достаточно хранить одну, в зависимости от поставленной задачи. Если индекс максимума не нужно знать, достаточно будет переменной Max. Если нужен только номер – достаточно IMax. Тонкость состоит в том, что если нужно и то и другое, все равно достаточно найти только IMax, ведь значение максимума легко может быть получено по его индексу (A [IMax]).
Вычисление количества положительных элементов. Подсчет суммы элементов, которые удовлетворяют какому-то условию, осуществляется по принципу перебора всех элементов массива (цикл for) и проверки для каждого элемента выполнение условия (оператор if). Если условие выполнено, добавим элемент к сумме (S:= S+A[i]).
Program PositivSumm;
Const N = 10;
Type Mas = array [1.. N] of integer;
Var A: Mas; i, S: integer;
Begin
Randomize;
For i:= 1 to N do
Begin
A[i]:= -100+random (201);
Write (A[i]: 5)
End;
Writeln;
S = 0;
For i:= 1 to N do
If A[i] > 0 then S:= S+A[i];
Writeln (‘Сумма положительных элементов= ’, S);
Readln
End.
Удаление нескольких элементов. Дано число n, ряд из n чисел и число х. Необходимо найти и удалить все элементы со значением х, если такие есть в ряду. Оставшаяся часть сдвигается влево, сохраняя порядок чисел.
Program Udalenie;
Var n, i, Sdv, x: integer;
Var A: array [1.. 100] of integer;
Begin
Writeln (‘Удалить числа: ’);
Readln (n);
(*Ввод массива A*)
Readln (x);
Sdv:=0; i:=1;
While i<=n do
Begin
If A[i]=x then Sdv:=Sdv+1
Else A[i-Sdv]:=A[i];
i:=i+1
End;
n:=n-Sdv;
(*Вывод массива А*)
End.
В алгоритме по очереди просматриваются все элементы массива, начиная с первого. Элементы массива делятся на два вида: удаляемые и неудаляемые. Если в очередной клетке массива удаляемый элемент, тогда значение переменной Sdv увеличивается на единицу. Таким образом в переменной Sdv подсчитывается число удаляемых элементов.
Если в рассматриваемой клетке находится неудаляемый элемент, то он сдвигается на Sdv позиций влево, как и определено правилом.
Присоединение массива к массиву. Дано число m и ряд из m чисел. Затем дано число n и два ряда по n чисел. Требуется сформировать единый ряд чисел. Новый ряд получается при дописывании первого ряда в конец второго. Длина ряда увеличивается одной командой сразу на m.
Program Prisoedinenie;
Var n, m, i: integer;
Var A, B: array [1.. 100] of integer;
Begin
Writeln (‘Объединение рядов: ’);
Readln (m);
(*Ввод массива В из m элементов*)
Readln (n);
(*Ввод массива A*)
i:=1;
While i<=m do
Begin
A[i+n]:=B[i];
i:=i+1
End;
n:=n+m;
(*Вывод массива А*)
End.
Первый ряд запоминается во вспомогательном массиве В, а длина ряда – в переменной m. Затем в массив А заноситься второй ряд. Теперь достаточно дописать ряд из массива В элемент за элементом в продолжение массива А.
Перестановка соседей. Пусть дано число n и два ряда по n чисел в каждом. Требуется каждый элемент ряда, стоящий на четной позиции, поменять с предыдущим. Исполнение цикла по этому правилу должно начинаться со второго элемента ряда.
Program Perestanovka;
Var n, i, Buf: integer;
Var A: array [1.. 100] of integer;
Begin
Writeln (‘Обмен чисел: ’);
Readln (n);
(*Ввод массива А*)
i:=2;
While i<=n do
Begin
Buf:=A[i];
A[i]:=A[i-1];
A[i-1]:=Buf;
i:=i+2
End;
(*Вывод массива А*)
End.
В задаче исходный ряд чисел запоминается в массиве А. Затем числа ряда переставляются в массиве А в соответствии с условием задачи. Когда ряд полностью построен, содержимое массива А выводится на экран.
Слияние двух массивов. Пусть дано число n и два ряда по n чисел в каждом. Необходимо построить ряд, в котором первый элемент равен большему из первых элементов исходных рядов. Второй элемент – большему из вторых элементов исходных рядов и так для всех элементов. Вывести получившийся ряд.
Исходные данные задачи – два ряда чисел. Разместить эти числа можно в двух массивах: в А – первый ряд, а в В – второй ряд. Вычисляя элемент за элементом, будем выводить эти числа на экран [8, c. 67].
Program Sliyanie;
Var n, i, Max: integer;
Var A, B: array [1.. 100] of integer;
Begin
Writeln (‘Выбор в парах: ’);
Readln (n);
(*Ввод массива А*)
(*Ввод массива В*)
i:=1;
While i<=n do
Begin
If A[i]>B[i] then Max:=A[i]
Else Max:=B[i];
Write (Max, ‘’); i:=i+1
End
End.
Сортировка выбором. Сортировка выбором упорядочивает ряд из n чисел по возрастанию с использованием поиска наибольшего числа ряда. Среди всех элементов массива от A[1] до A[n] находим наиболший и меняем его местами с последним. Затем точно так же поступаем с рядом от A[1] до A[n-1]. Процесс завершается, когда дойдем до ряда из одного элемента A[1] [8, c. 73].
Program SortVibor;
Var n, i, j, Max, Pos: integer;
Var A: array [1..100] of integer;
Begin
Writeln (‘Сортировка чисел: ’);
Readln (n);
(*Ввод массива А*)
j:=n;
While j>1 do
Begin
If A[i]>Max then
Begin
Max:=A[i]; Pos:=i
End;
i:=i+1;
End;
A[Pos]:=A[j]; A[j]:=Max;
j:=j-1;
End;
(*Вывод массива А*)
End.
В программе переменная j указывает на последний элемент еще неотсортированной части ряда. В процессе поиска наибольший элемент среди чисел от A[1] до A[j] запоминается в переменной Max, а номер клетки – в переменной Pos. Затем найденный элемент меняется местами с элементом A[j]. Процесс поиска и обмена выполняется для значений j от n до 2 последовательно, постепенно уменьшая длину неотсортированной части ряда.
... профессором Н. Виртом, язык назван в честь французского математика и по замыслу автора предназначался для обучения программированию. Однако язык получился на столько удачным, что стал одним из основных инструментов прикладных и системных программистов при решении задач вычислительного и информационно-логического характера. В 1979 году был подготовлен проект описания языка – Британский стандарт ...
... в среде Delphi). Задачи использовались как с данного сайта, так и из других источников – книг и семинарских занятиях по информатике в МГОУ. Курс завершается разработкой игры. Программное обеспечение: свободно распространяемая версия объектно-ориентированной среды программирования Delphi. Методы обучения: метод проектов, лекции, проблемный метод, частично-поисковый метод. Контроль знаний и умений ...
... учеников 1. Организационный момент Здравствуйте. Сегодня мы будем говорить о том, как работать с графикой при помощи языка программирования Pascal. Вы уже знакомы с различными типами графики. Какие это типы? (растровый и векторный) Как задается графический объект при использовании графики этих типов. Pascal поддерживает вывод на экран и векторной и растровой графики, но мы рассмотри ...
... (Wide Area Information Server) сервере; news - группа новостей телеконференции Usenet; telnet - выход на ресурсы сети Telnet; ftp - файл на FTP - сервере. host. domain - доменное имя в сети Интернет. port - число, которое необходимо указывать, если метод требует номер порта. Пример: http://support. vrn.ru/archive/index.html. Префикс http://указывает, что далее следует адрес Web-страницы, / ...
0 комментариев