Научная статья на тему 'Циклы и массивы в языке программирования Си++'

Циклы и массивы в языке программирования Си++ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
441
49
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
язык программирования / специализированные учебные заведения / программа / методики проектирования / алгоритм / сортировка / массив / programming language / specialized educational institutions / program / design techniques / algo- rithm / sorting / array

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Мазанова С. Б, Касумова А. М.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

CYCLES AND ARRAYS IN THE C ++ PROGRAMMING LANGUAGE

The article shows the effectiveness of the “fastest algorithm” search for the maximum in the array. Out of the existing ways of sorting the arrays, the most simple ones are being considered for understanding and implemention.

Текст научной работы на тему «Циклы и массивы в языке программирования Си++»

/ TECHNICAL science

TECHNICAL SCIENCE

Мазанова С.Б

доц.

Касумова А.М.

Азербайджанский Государственный Педагогический Университет, г. Баку

DOI: 10.24411/2520-6990-2019-10505 ЦИКЛЫ И МАССИВЫ В ЯЗЫКЕ ПРОГРАММИРОВАНИЯ СИ++

Mazanova S. B.

associate professor Kasumova A. M.

PhD in pedagogy, Azerbaijan State Pedagogical University, Baku

CYCLES AND ARRAYS IN THE C ++ PROGRAMMING LANGUAGE

Аннотация

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

Abstract

The article shows the effectiveness of the "fastest algorithm" search for the maximum in the array. Out of the existing ways of sorting the arrays, the most simple ones are being considered for understanding and implemen-tion.

Ключевые слова: язык программирования, специализированные учебные заведения, программа, методики проектирования, алгоритм, сортировка, массив

Key words: programming language, specialized educational institutions, program, design techniques, algorithm, sorting, array

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

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

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

Одним из таких новшеств в конце столетия и явился язык Си++, который был разработан Бьер-ном Страуструпом в компании BeИLabs. Си++ — компилируемый язык программирования. В отличие от некоторых программ он позволяет создавать программы более компактные и эффективные. Но его изучение остаётся самым сложным среди широко используемых языков. Поэтому Си++ обычно изучают в специализированных учебных заведениях, в которых готовят программистов. Сложность изучения языка Си++ во многом связана с тем, что в самом языке отсутствуют средства для управления вводом и выводом информации. И это понятно, поскольку эти средства у каждой модели компьютера свои, а Си++ является абстрактным языком, не ориентированным на конкретную модель компьютера. Поэтому часто язык изучают не на конкретных примерах, а на абстрактных теоретических конструкциях, что крайне не удобно для начинающих.

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

TECHNICAL SCIENCE /

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

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

знает о его устройстве, но все знают, как им пользоваться.

Язык Си++ является средством объектного программирования, новейшей методики проектирования и реализации программ, которая в текущем десятилетии, скорее всего, заменит традиционное процедурное программирование.

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

Простейшая реализация алгоритма на С++: #include <iostream> using namespace std; int main()

{ setlocale(LC_ALL, "rus"); int array[100];

int maximum, size, index = 0;

сои1«"Введите длину массива (не больше 100)\n"; cin>>size;

cout<<" Введите "<<size<<" целых чисел массива^ ";

for (int i = 0; i < size; i++)

cin>>array[i];

maximum = array [0]; // За изначальный максимум берем первый элемент массива

for (int i = 1; i < size; i++) {

if (array[i] > maximum) {

maximum = array[i]; index = i;

}

}

cout<<" Максимум находится в позиции "<<index<<" и его значение = "<< maximum; return 0;

}

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

обычно интересна именно асимптотика этой зависимости.

Существует множество способов сортировки массивов. Мы рассмотрим несколько наиболее простых для понимания и реализации метода. Сортировка массивов методом выбора (Selection sort), пожалуй, самая простая для понимания, хоть и одна из самых медленных. Ищем наименьший элемент в массиве и перемещаем его на первое место. Затем ищем второй наименьший элемент и перемещаем его уже на второе место после первого наименьшего элемента. Этот процесс продолжается до тех пор, пока в массиве не закончатся неотсортированные элементы. Чтобы поменять два элемента местами, мы можем использовать функцию std::swap() из стандартной библиотеки C++, которая определена в заголовочном файле algorithm.

/ technical science

#include <iostream>

#include <algorithm> // для swap. В C++11 используется <utility> using namespace std; int main()

{const int length = 10;

int Mas[length] = { 80, 70, 35, 45, 40, 21, 92, 34, 55, 48 }; // Перебираем каждый элемент массива

// (кроме последнего, он уже будет отсортирован к тому времени, когда мы до него дойдем)

for (int startlndex = 0; startlndex < length - 1; ++startIndex) {

// В переменной smallestIndex хранится индекс наименьшего значения, которое мы нашли в этой итерации

// Начинаем с первого элемента (индекс 0) int smallestIndex = startlndex;

// Затем ищем элемент поменьше в остальной части массива

for (int currentlndex = startlndex + 1; currentlndex < length; ++currentIndex) {

// Если мы нашли элемент, который меньше нашего наименьшего элемента, if (Mas[currentIndex] < Mas[smallestIndex]) // то запоминаем его smallestIndex = currentIndex;

}

// smallestIndex теперь наименьший элемент // Меняем местами наше начальное наименьшее число с тем, которое мы обнаружили swap(Mas [startlndex], Mas [smallestIndex]);

}

// Теперь, когда весь массив отсортирован - выводим его на экран for (int index = 0; index < length; ++index) cout << Mas[index] << ' ';

return 0;

}

Ещё одним простым методом сортировки элементов является «сортировка пузырьком» (Bubble sort) (или ещё «пузырьковая сортировка»). Суть заключается в сравнении пары значений, которые

#include <iostream> using namespace std; int main()

{ const int length = 5;

int mas[length] = { 82, 67, 2, 63, 55 };

int temp; // временная переменная для обмена элементов местами // Сортировка массива пузырьком for (int i = 0; i < length - 1; i++) { for (int j = 0; j < length - i - 1; j++) { if (mas[j] > mas[j + 1]) { // меняем элементы местами temp = mas[j]; mas[j] = mas[j + 1]; mas[j + 1] = temp;

}

}

}

// Вывод отсортированного массива на экран for (int i = 0; i < length; i++) { cout << mas[i] << " ";

}

cout << endl; return 0;

}

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

TECHNICAL SCIENCE / <<Ш1кШетиМ~^®и©Ма1>#Щ4©),2Ш9

Сортировка вставками (Insertion sort) наиболее эффективна когда массив уже частично отсортирован и когда элементов массива не много. Если же элементов меньше 10 то данный алгоритм является лучшим. Сортировка вставками — достаточно простой алгоритм. Как в и любом другом алгоритме сортировки, с увеличением размера сортируемого массива увеличивается и время сортировки. Основным преимуществом алгоритма сортировки вставками является возможность сортировать массив по мере его получения. То есть имея часть массива, можно начинать его сортировать. В параллельном программирование такая особенность играет не маловажную роль.

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

#include<iostream> using namespace std;

int main() {

setlocale(LC_ALL, "rus"); const int length = 5; int mas[length] = { 82, 67, 2, 63, 55 };

for(int i=1; i<length; i++) {

int temp=mas[i]; int j=i-1;

while((temp<mas[j]) && (j>=0)) {

mas[j+1]=mas[j]; j=j-1;

}

mas[j+1]=temp;

}

cout<<" Сортировка массива вставками: \n";

for(int i=0; i<length; i++) {

cout<<mas[i]<<" ";

}

}

При рекурсивной сортировке слиянием (Merge sort) массив сначала разбивается на мелкие кусочки - на первом этапе - на состоящие из одного элемента. Затем эти кусочки объединяются в более крупные кусочки - по два элемента и элементы при этом сравниваются, а в результате в новом кусочке #include <iostream> using namespace std; int a[50];

void merge(int,int,int);

void merge_sort(int low,int high)

{ int mid;

if(low<high)

{ mid = low + (high-low)/2; merge_sort(low,mid); merge_sort(mid+1 ,high); merge(low,mid,high); } } void merge(int low,int mid,int high) { int h,i,j,b[50],k; h=low; i=low; j=mid+1;

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

while((h<=mid)&&(j<=high))

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

<<ш[1шздим"^©игма1>>#щд©з,2ш9 / technical science_

{ if(a[h]<=a[j]) { b[i]=a[h];

h++; } else

{ b[i]=a[j];

j++; }

i++; } if(h>mid)

{ for(k=j ;k<=high;k++) { b[i]=a[k];

i++; } } else

{ for(k=h;k<=mid;k++) { b[i]=a[k];

i++; } }

for(k=low;k<=high;k++) a[k] =b [k] ; } int main() { int num,i;;

cout<<" MERGE SORT PROGRAM "<<endl; cout<<"num="<<endl; cin>>num; cout<<endl;

cout<<"Now, Please Enter the ( "<< num <<" ) numbers (ELEMENTS) [THEN PRESS ENTER] :"<<endl;

for(i=1 ;i<=num;i++)

{ cin>>a[i] ; }

merge_sort( 1,num) ;

cout<<endl;

cout<<" MERGE SORT:"<<endl; cout<<endl<<endl; for(i= 1 ;i<=num;i++) cout<<a[i]<<" ";

return 1;

}

Зачем нужна сортировка? Когда элементы отсортированы, их проще найти, производить с ними различные операции. Легче определить пропущенные элементы. Легче найти общие элементы двух массивов. Сортировка влияет на скорость алгоритма, в котором нужно обратиться к определённому элементу массива.

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

1. Под редакцией Конюховского П.В. и Колесова Д.Н., «Информатика», Санкт-Петербург: изд-во «Питер», 2000.

2. К.Г.Скрипкин, «Экономическая эффективность информационных систем», Москва: изд-во «ДМК-Пресс», 2002.

3. Сухомлин В.А., «Введение в анализ информационных технологий» Москва: изд-во «Горячая линия - Телеком», 2003.

i Надоели баннеры? Вы всегда можете отключить рекламу.