Сравнение языков программирования на примере сортировки массива

№76-1,

педагогические науки

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

Похожие материалы

В настоящее время в некоторых школах ведется программирование не только на традиционных языках программирования высокого уровня типа Pascal и Си, но также преподают функциональные языки и языки программирования низкого уровня.

В данной работе на примере сортировки одномерного массива рассматриваются языки программирования С++ [4], Турбо Паскаль [2], функциональный язык Haskell [3].

Задача. Дан одномерный вещественный массив, содержащий n элементов. Отсортировать элементы массива по не убыванию.

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

#include <iostream.h>
#include <conio.h>
/* На языке С++ сначала нужно подключить так называемые заголовочные файлы. В них содержатся переменные, объекты, классы, функции и т.д. В данном случае из файла iostream.h программе используются объекты cin и cout, которые, соответственно, предназначены для ввода и вывода данных. Из заголовочного файла conio.h> используется функция int getch(void), которая в этом случае считывает символ с клавиатуры. */
void main () {
/* main () — это главная функция, с которой начинается выполнение программы */
int n;
// переменная n используется для хранения количества элементов массива
cout<<"Введите количество элементов массива: \n";
cin>>n;
/* Для ввода значения переменной с клавиатуры используем объект cin из заголовочного файла iostream.h */
double *mas=new double [n];
// Описание динамического массива вещественного типа
cout<<"Введите элементы исходного массива:\n";
/* Для вывода данных на экран используем объект cout из заголовочного файла iostream.h */
int j;
for (j=0;j<n;j=j+1){
cout<<"Введите массив  mas["<<j<<"]=";
cin>>mas[j];
}
// сортировка одномерного массива методом "пузырька" [1]
// Здесь описываем вспомогательные переменные
int p=n;
int flag;
double  m;
do {
flag=0;
// значение флага flag вначале равно нулю
for (j=0;j<p-1;j++)
         /*Внутренний цикл для сравнения соседних элементов массива */
if(mas[j]>mas[j+1]) {
m=mas[j]; mas[j]=mas[j+1]; mas[j+1]=m;
         /* Если j-й элемент массива имеет большее значение, чем j+1-й элемент, то меняем местами эти элементы. При этом для удобства используем переменную m */
flag=1;
/* Если переставили местами соседние элементы массива, то значение флага flag равно единице */
}
p-;
} while (flag);
         /*  Если значение флага flag равно единице, т.е. хотя бы один раз меняли местами элементы, то внешний цикл повторяем ещё раз */
cout <<"\n отсортированный массив: \n";
for (j=0;j<n;j++)
cout <<mas[j]<<"  ";
         /* Вывод в одну строку элементов отсортированного массива через два пробела. Физически элементы массива могут занимать несколько строк экрана.  */
getch();
// Для удобства используем задержку.
}

Теперь рассмотрим решение задачи на языке программирования Турбо Паскаль.

const n=15;
//Описание константы n, которая определяет количество элемент массива
var     x:array [1..n] of real;
//Описание массива х
m : real;
j, p : integer;
f : boolean;
//Описание вспомогательных переменных
BEGIN
writeln('Ввод элементов массива');
for j:=1 to n do
begin
write('Введите элемент массива x[', j, ']= ');
readln(x[j]);
end;
writeln;
p:=n;
repeat
{Начало внешнего цикла}
f:=true;
{Логическая переменная  f используется в качестве флага}
for j:=1 to p-1 do
{Начало внутреннего цикла}
if x[j]>x[j+1] then
{Сравнение двух соседних элементов массива}
begin
m:=x[j];x[j]:=x[j+1];x[j+1]:=m;
f:=false;
end;
{Конец внутреннего цикла}
p:=p-1;
until f;
{Конец внешнего цикла}
writeln('отсортированный массив');
for j:=1 to n do write(x[j]:2:2,' ');
{Вывод отсортированных элементов одномерного массива в строку через пробел}
readln;
end.

Решение задачи на функциональном языке программирования Haskell. Вообще на языке Haskell можно писать красивые и короткие программы. В данном случае в статье составлена программа, реализующая метод «пузырька» и причем эта реализация должна быть чем-то похожа на предыдущие реализации на языках С++ и Турбо Паскаль. В данном случае автор ставит задачу, чтобы в программе были использованы только самые простые функции Haskell и понятные для учащихся методы программирования. С этой целью вместо массива в программе используется список.

Программа по сути состоит из двух простых функций svap и m_sort. Третья функция priznak используется только, чтобы спрятать лишние параметры.

svap [m] f a= (f,a++[m])
svap (x:y:m) f a= if x>y then svap (x:m) False (a++[y]) else svap (y:m) f (a++[x])

priznak  m = svap m True []

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

Svap последовательно сравнивает соседние элементы списка. При сравнении, если элемент стоящий левее больше чем правый, то правый и левый элементы меняются местами. При этом флаг устанавливается в значение «False». При выходе из функции наибольший элемент занимает последнее место. Если их несколько, то самый правый наибольший элемент занимает последнее место. Если при вызове функции svap перестановки элементов списка не было, то функция возвращает значения (True, список).

m_sort m= if (fst (priznak m)==False) then m_sort (snd (priznak m)) 
else snd (priznak m)

Функция m_sort вызывает функцию priznak до тех пор, пока та не вернет кортеж типа (True, список).

Вывод. В статье рассмотрены наиболее популярные в школах языки программирования. Наиболее короткая программа получилась на функциональном языке программирования Haskell.

Список литературы

  1. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. – 406 с.
  2. Гради Буч. Объектно-ориентированное проектирование с примерами применения / Пер. c англ.– М.: Конкорд, 1992.– 519 c.
  3. Хендерсон П. Функциональное программирование. Применение и реализация. М.: Мир, 2003. 371 с.
  4. Хусаинов, И.Г. Решение задач на ЭВМ. Структурное программирование / Стерлитамак: Стерлитамакский филиал БашГУ, 2014. 110 с.