Программная реализация алгоритмов преобразования одномерных массивов средствами среды программирования Pascal.ABC.Net




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

Массивы применяются в большинстве языков программирования, а в некоторых из них являются основной операцией. Язык программирования «Паскаль» позволит максимально оценить возможности работы с массивами, как с типом однородных данных.

Швейцарским учёным, специалистом в области информатики Никлаусом Виртом, после участия в разработке стандартов языка Алгол-68, в 1970 году впервые были опубликованы сведения о новом языке программирования – Паскаль. Язык был назван в честь французского математика Блеза Паскаля и представлял собой, по словам автора, эффективный, простой язык, использующий структурное программирование (разработка программ в виде иерархической структуры) и структурированные данные.

Текст программы, написанной на языке программирования Паскаль имеет жесткую структуру, нарушать которую нельзя. В простейшем случае программа на языке Паскаль имеет следующий вид:

Program <имя программы>; (заголовок программы, имя программы выбирается составителем программы самостоятельно)

Const <имя константы>=<значение константы>;

(раздел описания констант)

Var

<имя переменной1, имя переменной2, … >: <тип1 переменных>;

<имя переменной1, имя переменной2, … >: <тип2 переменных>;

(раздел описания переменных, этот раздел необязателен в случае, если программа не использует никаких переменных)

Begin (начало программы)

<тело программы> (последовательность команд (операторов), разделенных знаком “;”)

End. (конец программы)

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

В 2002 году Станиславом Михалковичем был создан язык программирования PascalABC.NET. По содержанию это классический Паскаль с некоторыми возможностями языка Delphi и рядом собственных расширений. Достоинством PascalABC.NET является современный, дружественный интерфейс (рис. 2).

Рисунок 2. Интерфейс программного продукта PascalABC.Net

 

Именно PascalABC.NET, как программный продукт, был нами выбран для исследования алгоритмов работы с одномерными массивами.

Основные приёмы преобразования одномерных массивов:

1. Нахождение суммы всех элементов массива;

2. Нахождение произведения всех элементов массива;

3. Нахождение максимального элемента массива;

4. Сортировка массива по возрастанию/убыванию элементов;

 

Алгоритм решения задачи на нахождение суммы всех элементов массива

Задача: найти сумму всех элементов массива;

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

Ход решения задачи:

Так как PascalABC.NET позволяет работать в графическом режиме (в более приемлемом зрителю окне) то после объявления программы Program C нужно включить соответствующий модуль – GraphAbc. Теперь запуск программы будет осуществляться не как консольное приложение, а в простом окне Windows размером 640 × 480 точек.

В разделе описания переменных var мы прописываем все, нами используемые, переменные:

1. Массив a;

2. Переменная i, отвечающая за цикл ввода массива;

3. Переменная s, принимающая значение искомой в задаче суммы всех элементов массива;

4. Переменная n, принимающая значение количества элементов массива;

И массив, и все переменные будут целочисленными, то есть мы им зададим тип данных integer. Таким образом, блок описания переменных будет выглядеть следующим образом (рис. 3).

Рисунок 3. Описание переменных в программе

 

Затем, в основной части программы (после служебного слова begin) для лучшего восприятия и наглядности с помощью оператора вывода на экран write (writeln) опишем цель нашей программы (рис. 4).

Рисунок 4. Добавление текста для вывода на экран

 

Окончание «ln » в операторе write позволяет вывести на экран текст, написанный в кавычках, с переключением курсора на строку вниз, то есть текст будет находиться на следующей строке, так как по умолчанию, оператором write Паскаль выводит на экран символы в одну строку друг за другом.

Оператор setfontstyle (fsBold) служит для включения «жирности» шрифта.

Далее, пропустив строку написанием оператора writeln, с помощью того же оператора вывода на экран зададим просьбу ввести количество элементов массива, так как наш одномерный массив по величине может быть любым, но определенным. Сразу же введенное с клавиатуры значение присвоим переменной n (при помощи оператора read / readln) и выведем его на экран в следующей строке (рис. 5).

Рисунок 5. Добавление текста для вывода на экран

 

Теперь нам нужно ввести с клавиатуры значение каждого из n элементов массива с помощью цикла for. Цикл for называется циклом со счетчиком и в общем виде имеет следующую структуру:

for (счетчик):=(значение) to (конечное_значение) do

тело_цикла;

Счетчик – это переменная любого из типов (целого, диапазонного). Конечные и начальные значения могут быть представлены не только значениями, но и выражениями, возвращающими совместимые с типом счетчика типы данных. Если между конечным и начальным выражением указано служебное слово to, то на каждом шаге цикла значение параметра будет увеличиваться на единицу.

Таким образом, в нашей задаче цикл записи введенных с клавиатуры значений элементов массива будет выглядеть следующим образом (рис. 6).

Рисунок 6. Добавление цикла для ввода элементов массива

 

В нашем случае i – это счетчик цикла. Эту запись словами можно представить следующим образом: «для каждого i, принимающего значения от 1 до n, нужно осуществить вывод значения этого элемента на экран, записать это значение в массив a ».

Массив заполнен, но для наглядности, с помощью оператора вывода на экран, сделаем так, чтобы его элементы были нам видны (рис. 7).

Рисунок 7. Добавление текста для вывода на экран

 

Этот цикл для всех элементов массива определяет условия вывода их значений на экран. Оператор write (a[i]:4) отводит для каждого элемента 4 знака (то есть целые числа до 9999).

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

Наконец, с помощью еще одного цикла, мы пропишем процесс суммирования всех элементов массива (рис. 8). Для улучшения внешнего вида программы, между некоторыми операторами или блоками программы можно вставлять один или пару операторов writeln, которые переносят курсор на одну или две строки соответственно.

Рисунок 8. Запись суммирования всех элементов массива

 

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

Полный текст программы представлен в приложении 1.

Работоспособность программы (рис. 9, 10, 11):

Рисунок 9. Окно программы при запуске

 

Рисунок 10. Окно программы после ввода количества элементов массива

Рисунок 11. Окно программы после выполнения задачи и вывода ответа на экран

 

Алгоритм решения задачи на нахождение произведения всех элементов массива

Задача: найти произведение всех элементов одномерного массива.

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

Ход решения задачи: мы будем выполнять эту задачу так же, как и прошлую, в графическом режиме GraphAbc. Следовательно, после Program мы должны включить соответствующий модуль.

Необходимые для решения этой задачи переменные занесём в раздел описания переменных и укажем их тип:

1. Массив a;

2. Переменная i, отвечающая за цикл ввода массива;

3. Переменная s1, принимающая значение искомого в задаче произведения всех элементов массива;

4. Переменная n, принимающая значение количества элементов массива;

И массив, и все переменные будут целочисленными, то есть мы им зададим тип данных integer.

В основной части программы для лучшего восприятия и наглядности, по аналогии с предыдущей задачей, с помощью оператора вывода на экран write (writeln) опишем цель нашей программы: «Программа вычисляет произведение элементов заданного массива».

Ввод количества элементов осуществляется аналогично предыдущей задаче (рис.4).

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

Теперь нужно присвоить переменной s1 (конечное искомое произведение) начальное значение. Если по аналогии с прошлой задачей s1:=0, то перемножение всех элементов массива и начального значения даст результат, равный нулю. В данной задаче начальное значение искомого произведение будет равно единице (рис. 12).

Рисунок 12. Присвоение начального значение искомого произведения

 

Наконец, с помощью цикла запишем саму операцию перемножения (рис. 13).

Полный текст программы представлен в приложении 2.

Рисунок 13. Запись операции перемножения

 

Работоспособность программы (рис. 14, 15, 16):

Рисунок 14. Окно программы при запуске

 

Рисунок 15. Окно программы после ввода количества элементов массива

 

Рисунок 16. Окно программы после выполнения задачи и вывода ответа на экран

 

Алгоритм решения задачи на нахождение максимального элемента массива

 

Задача: найти максимальный элемент заданного с клавиатуры одномерного массива.

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

Ход решения задачи: мы выполнили эту задачу так же, как и прошлую, в графическом режиме GraphAbc. Следовательно, после Program мы должны включить соответствующий модуль.

Необходимые для решения этой задачи переменные занесём в раздел описания переменных и укажем их тип:

1. Массив mas;

2. Переменная i – счетчик цикла;

3. Переменная max, принимающая значение искомого в задаче максимального из всех элементов массива;

4. Переменная n, принимающая значение количества элементов массива;

И массив, и все переменные будут целочисленными, то есть мы им зададим тип данных integer.

В основной части программы (после служебного слова begin) для лучшего восприятия и наглядности, по аналогии с предыдущими задачами, с помощью оператора вывода на экран write (writeln) опишем цель нашей программы: «Программа находит максимальный элемент заданного с клавиатуры одномерного массива».

Ввод количества элементов осуществляется аналогично предыдущей задаче (рис.4).

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

Принцип нахождения максимального элемента из данных заключается в том, что нужно задать цикл, который будет по очереди, попарно сравнивать все элементы друг с другом и принимать максимальное значение за переменную max (рис. 17).

Рисунок 17. Запись цикла для подсчета максимального элемента массива

 

То есть, переменной max присваивается i -тый элемент массива mas. Начиная со второго элемента, цикл начинает сравнивать: присвоенное переменной max значение больше i -го элемента массива или меньше. Если больше, то переменной max присваивается значение этого элемента.

Полный текст программы представлен в приложении 3.

Работоспособность программы (рис. 18, 19, 20):

Рисунок 18. Окно программы при запуске

Рисунок 19. Окно программы после ввода количества элементов массива

Рисунок 20. Окно программы после выполнения задачи и вывода ответа на экран

 

Алгоритм решения задачи на сортировку элементов массива по возрастанию/убыванию методом «пузырька»

 

Задача: отсортировать массив по возрастанию или убыванию значений его элементов.

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

Ход решения задачи: мы выполнили эту задачу так же, как и прошлую, в графическом режиме GraphAbc. Следовательно, после Program мы должны включить соответствующий модуль.

Необходимые для решения этой задачи переменные занесём в раздел описания переменных и укажем их тип:

1. Массив b;

2. Переменная i, отвечающая за цикл ввода массива;

3. Переменная j, отвечающая за цикл сравнивания элементов массива;

4. Переменная k, принимающая значение большего или меньшего элемента массива в цикле их сравнения;

5. Переменная n, принимающая значение количества элементов массива;

6. Переменная r, принимающая значение ответа на вопрос о порядке сортировки (по возрастанию или по убыванию).

И массив, и все переменные будут целочисленными, то есть мы им зададим тип данных integer.

В основной части программы (после служебного слова begin) для лучшего восприятия и наглядности, по аналогии с предыдущими задачами, с помощью оператора вывода на экран write (writeln) опишем цель нашей программы: «Программа показывает работу метода сортировки "Пузырёк"».

Ввод количества элементов осуществляется аналогично предыдущей задаче (рис.4).

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

Затем, с помощью оператора вывода на экран write (writeln) зададим для пользователя нашей программы вопрос о способе сортировки: «Выберите сортировку: 1 - по возрастанию; 2 - по убыванию». И с помощью оператора read (readln) присвоим переменной r ответ на этот вопрос. Если пользователь отвечает цифрой 1, то программа начинает сортировку по возрастанию, если 2 – по убыванию (рис. 21).

Рисунок 21. Выбор сортировки

 

Далее, нужно задать цикл попарного сравнения элементов массива. Цикл начнёт сравнивать, начиная с первого введенного с клавиатуры элемента, и, таким образом, сравнит все элементы массива.

Если пользователь выбрал сортировку по возрастанию, то используем оператор условия if…then (рис. 22).

Рисунок 22. Задание цикла на выполнение сортировки по возрастанию

 

То есть, заданный нами цикл, сравнивает первый элемент массива с последующим. Так как выбрана сортировка по возрастанию, то больший элемент отодвигается в конец массива, а меньший в его начало. Аналогично напишем цикл для сортировки по убыванию (рис. 23).

Рисунок 23. Задание цикла на выполнения сортировки по убыванию

 

В данном случае, больший элемент ставится в начало массива, а меньший в его конец.

Наконец, выведем полученный после сортировки массив на экран (рис. 24).

Полный текст программы представлен в приложении 4.

 

Рисунок 24. Вывод отсортированного массива на экран

 

Работоспособность программы (рис. 25, 26, 27, 28):

Рисунок 25. Окно программы при запуске

Рисунок 26. Окно программы при запросе выбора сортировки

Рисунок 27. Окно программы при выполнении сортировки по возрастанию

Рисунок 28. Окно программы при выполнении сортировки по убыванию


 

ЗАКЛЮЧЕНИЕ

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

Данная курсовая работа помогла прояснить некоторые теоретические и практические вопросы, которые связаны с использованием массивов в программировании.

Проведенное в рамках данной курсовой работы исследование позволяет сформулировать следующие результаты:

1. Провели анализ учебно-методической и технической литературы по проблеме исследования.

2. Разработали некоторые алгоритмы преобразования одномерных массивов.

3. Реализовали алгоритмы преобразования одномерных массивов средствами языка программирования Pascal.ABC.

Все задачи, поставленные в данном исследовании, были выполнены в полном объеме.


 

БИБЛИОГРАФИЯ

1. Бежанова, М.М. Москвина Л.А. Практическое программирование. Приемы создания программ на языке Паскаль. – М.: Научный Мир, 2000.

2. Вирт, Н. Алгоритмы и структуры данных: Пер. с англ. – М.: Мир, 1989.

3. Вирт, Н. Алгоритмы + структуры данных = программы: Пер. с англ. – М.: Мир, 1985.

4. Вирт, Н. Систематическое программирование. Введение: Пер. с англ. – М.: Мир, 1977.

5. Демидов, Д.В. Основы программирования в примерах на языке Паскаль: Учебное пособие. – М.: НИЯУ МИФИ, 2010.

6. Павловская, Т.А. Паскаль. Программирование на языке высокого уровня: Учебник для вузов. – СПб.: Питер, 2007.

7. Рапаков, Г.Г. Программирование на языке Pascal. – СПб.: БХВ-Петербург, 2004.

8. Ускова, О.Ф. Программирование на языке Паскаль: задачник. – СПб.: Питер, 2003.

9. Ушаков, Д.М. Паскаль для школьников. – СПб.: Питер, 2010.

10. Фаронов, В.В. TurboPascal 7.0. Учебный курс: учебное пособие. – М.: КНОРУС, 2011.

11. Федоренко, Ю. Алгоритмы и программы на TurboPascal. Учебный курс. – СПб.: Питер, 2001.


 

Приложение 1

Program C;

uses GraphAbc;

var a: array [1..10] of integer;

s,i,n: integer;

begin

setfontstyle(fsBold);

Writeln ('Программа вычисляет сумму элементов заданного массива');

setfontstyle(fsNormal);

writeln;

Writeln (' Введи количество элементов: ');

Readln (n); writeln(n,' ');

For i:=1 to n do begin write (i, ' элемент = ');

Readln (a[i]); writeln(a[i],' ');

end;

writeln;

writeln;

Writeln (' Полученные элементы: ');

for i:=1 to n do

write (a[i]:4);

s:=0;

For i:=1 to n do

s:=s+a[i];

writeln;

setfontstyle(fsBold);

writeln('Сумма элементов = ',s);

end.

 

Приложение 2

Program B;

uses GraphAbc;

var a: array [1..10] of integer;

s1,i,n: integer;

begin

setfontstyle(fsBold);

Writeln ('Программа вычисляет произведение элементов заданного массива');

setfontstyle(fsNormal);

writeln;

Writeln (' Введи количество элементов: ');

Readln (n); writeln(n,' ');

For i:=1 to n do begin write (i, ' элемент = ');

Readln (a[i]); writeln(a[i],' ');

end;

writeln;

writeln;

Writeln (' Полученные элементы: ');

for i:=1 to n do

write (a[i]:4);

s1:=1;

For i:=1 to n do

s1:=s1*a[i];

writeln;

setfontstyle(fsBold);

writeln('Произведение элементов = ',s1);

end.

 

 

Приложение 3

Program A;

uses GraphAbc;

Var mas:array [1..100] of integer;

max,i,n:integer;

begin

setfontstyle(fsBold);

Writeln ('Программа находит максимальный элемент заданного массива');

setfontstyle(fsNormal);

writeln;

Writeln (' Введи количество элементов: ');

Readln (n); writeln(n,' ');

For i:=1 to n do begin write (i, ' элемент = ');

Readln (mas[i]); writeln(mas[i],' ');

end;

writeln;

writeln;

Writeln (' Полученные элементы: ');

for i:=1 to n do

write (mas[i]:4);

Max:=mas[i];

For i:=2 to n do

if mas[i]>max then max:=mas[i];

Writeln;

setfontstyle(fsBold);

writeln ('Из них максимальным является элемент: ',max);

Readln

end.

 

 

Приложение 4

Program D;

uses GraphAbc;

var b: array[1..100] of integer;

i,j,k,n,r: integer;

begin

setfontstyle(fsBold);

Writeln ('Программа показывает работу метода сортировки "Пузырёк" и сортирует таким образом за - данный с клавиатуры массив по возрастанию номинала элементов');

setfontstyle(fsNormal);

writeln;

Writeln (' Введи количество элементов: ');

Readln (n); writeln(n,' ');

For i:=1 to n do begin write (i, ' элемент = ');

Readln (b[i]); writeln(b[i],' ');

end;

writeln;

writeln;

Writeln (' Полученные элементы: ');

for i:=1 to n do

write (b[i]:4);

writeln;

writeln ('Выберите сортировку: 1 - по возрастанию; 2 - по убыванию');

readln(r);

if r=1 then

for i:=1 to n-1 do

for j:=i+1 to n do

if b[i]>b[j] then

begin

k:=b[i];

b[i]:=b[j];

b[j]:=k;

end;

if r=2 then

for i:=1 to n-1 do

for j:=i+1 to n do

if b[i]<b[j] then

begin

k:=b[i];

b[i]:=b[j];

b[j]:=k;

end;

writeln;

setfontstyle(fsBold);

writeln('Массив после сортировки пузырьковым методом: ');

for i:=1 to n do

write(b[i],' ');

end.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-13 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: