воскресенье, 28 августа 2011 г.

С++: Внешняя сортировка на 3х лентах

Приступим. Закончив с рассмотрением основных внутренних алгоритмов сортировки, приступим к рассмотрению внешних алгоритмов. Одним из таких есть внешняя сортировка на 3 лентах или простое слияние


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

C++ : Алгоритмы сортировок[2]

Продолжение предыдущей статьи...

Рекурсивные алгоритмы и улучшение известных нам из предыдущей статьи.

 Быстрая сортировка

Теперь коснемся третьего улучшения метода, основанного на обмене. Если учесть, что пузырьковая сортировка в среднем была самой неэффективной из всех трех алгоритмов прямой сортировки, то следует ожидать относительно существенного улучшения. Оно, оказывается, приводит к самому лучшему из известных в данный момент методу сортировки для массивов. Его изобретатель Ч. Хоар назвал метод быстрой сортировкой (QuickSort).

Алгоритм. Выберем наугад какой-либо элемент (назовем его x) и будем просматривать слева наш массив до тех пор, пока не обнаружим элемент  , затем будем просматривать массив справа, пока не встретим  . Теперь Поменяем местами эти два элемента и продолжим наш процесс просмотра и обмена , пока оба просмотра не встретятся где-то в середине массива. В результате массив окажется разбитым на левую часть, с ключами меньше (или равными) x, и правую – с ключами больше (или равными) x.

C++ : Алгоритмы сортировок

Для начала немного теории:

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

Сейчас мы будем говорить про сортировку массивов, то есть про Внутреннюю сортировку данных.

Сортировка массивов

Пусть задан массив с элементами a1, a2, .......an, которые нужно расположить в возрастающем порядке.

среда, 20 июля 2011 г.

С++ : Работа с файлами

Итак... Мы подошли с вами к очень интересной теме - работе с файлами. Она не очень тяжелая, просто надо разобраться , что такое файловый поток и с чем его едят. Лабораторная, даная мне для закрепления материала, оказалась простой. Вот задание и код:


/*
Лабораторная работа № 3

   Разработать алгоритм решения задачи обработки данных, хранящихся в бинарном
файле чисел или символов.
   Реализовать алгоритм на языке С++ с помощью функций с параметрами. Описать следующие функции:
1) функцию формирования файла (параметрами должны быть файловый поток и его имя);
2) функцию чтения файла (параметрами должны быть файловый поток и его имя);
3) функцию обработки файла (параметрами должны быть файловый поток и его имя).
   В главной функции должны быть реализованы объявления файловых потоков и вызов функций
работы с файлами.

Юмор : Пpоект Genezis

Пpоект genezis

(из коpпоpативной пеpеписки)
Генеpальномy диpектоpy Иегове
от начальника маpкетингового отдела Гавpиила

Исследования, пpоведенные нашим отделом в pамках пpоекта Genesis, показали, что наилyчшие пеpспективы на pынке имеют системы следyющей конфигypации:

o Планета: 1 шт.
o Радиyс: 3 000 км
o Сила тяжести: 0.5g
o Соотношение сyша/вода: 1:1
o Темпеpатypа: +24
o Атмосфеpа: кислоpод
o Моpя: пpесная вода
o Реки: молоко, мед
o Фаyна: тpавоядная

Юмор : Русский программист


Русский программист
Любой русский программист, после пары минут чтения кода, обязательно вскочит и произнесет, обращаясь к себе: переписать это все нафиг. Потом в нем шевельнется сомнение в том, сколько времени это займет, и остаток дня русский программист потратит на то, что будет доказывать самому себе, что это только кажется, что переписать это много работы. А если взяться и посидеть немного, то все получится. Зато код будет красивый и правильный. На следующее утро русский программист свеж, доволен собой и без единой запинки докладывает начальству, что переписать этот кусок займет один день, не больше. Да, не больше. Ну, в крайнем случае, два, если учесть все риски. В итоге начальство даст ему неделю и через полгода процесс будет успешно завершен. До той поры, пока этот код не увидит другой русский программист.

суббота, 16 июля 2011 г.

С++: Ввод в структуры данных. Двусвязный линейный список


Двусвязные линейные списки
         Для описания элементов односвязного линейного списка использовался тип PNode
struct Node
{
      int data;      //информационное поле, данные, любой порядковый тип
      Node *next;         //указатель на следующий элемент
};
typedef Node * PNode;

С++: Ввод в структуры данных. Стек

 Стек. Операции, выполняемые над стеком
Стек представляет собой динамическую структуру, доступ к элементам которой осуществляется через указатель на вершину. Каждый элемент стека , во-первых, хранит какую-то информацию, во-вторых, указывает на предыдущий элемент. Вершина стека указывает на NULL. Стек работает по принципу: «последний вошел – первый вышел (LIFO: last inputfirst output)». Элемент стека доступен, только если он находится на вершине стека. Для представления стека с помощью указателей вводится тип:

struct Node
       {
               char inf;      //информационное поле, данные, любой порядковый тип
               Node *prev;         //указатель на предыдущий элемент
       };

С++: Ввод в структуры данных. Линейный список и очередь

Немного теории...
1. Линейный список
Линейный список представляет собой динамическую структуру, доступ к элементам которой осуществляется через указатель на первый элемент (голову списка). Каждый элемент связанного списка , во-первых, хранит какую-то информацию (данные), во-вторых, указывает на следующий за ним или предыдущий элемент. Для представления списка с помощью указателей вводится тип:
struct Node
{
      int data;      //информационное поле, данные, любой порядковый тип
      Node *next;         //указатель на следующий элемент
};
typedef Node * PNode;

С++: Работа с матрицами

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

Но это было недолго..Пораскинув мозгами, я и мой однокурсник (да..признаюсь..лабу делал не я один) написали более - менее рабочую программку. Вот задание и код:

/*1.   Даны действительная матрица размера n x (n+1), действительные числа a1, ..., an+1, b1, ..., bn+1,
натуральные числа p, q, (p n, q n+1). Образовать новую матрицу размера (n+1) x (n+2)
вставкой после строки с номером p данной матрицы новой строки с элементами a1, ..., an+1 и
последующей вставкой после столбца с номером q нового столбца с элементами b1, ..., bn+1 .

среда, 13 июля 2011 г.

С++: Динамические двухмерные массивы

Моя первая статья...

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

Итак, ниже задание и код, написаный на С++ в консоли, а также комментарии:

/*Лабораторная работа № 1

Разработать алгоритм решения задачи обработки двумерного массива размерности mxn.
Реализовать алгоритм на языке С++ с помощью функций с параметрами:
1)     функции ввода массива (в качестве параметров выступают массив и его размерность);
2)     функции вывода массива (в качестве параметров выступают массив и его размерность);
3)     функций (функции) расчета (может быть с возвращаемым значением или void-функций).
В главной функции должен быть реализован только вызов функций и вывод результатов на экран.
Данные разместить в динамической памяти.
Условие задачи выбрать по номеру в журнале. Для сортировки использовать тот же алгоритм, что и
в лабораторной работе № 1.
2.     Переставить столбцы матрицы так, чтобы элементы первой строки были отсортированы по убыванию
*/

О блоге

Этот блог я создал для того, чтоб не просто заливать написаный собственноручно код, а помочь таким же как и я "будущим программистам" стать Программистами. В этом блоге будут высветлятся вопросы и код, написаный на разных языках, таких как С++, С#, Java, Android  и тд и тп и залиты они будут по мере изучения их мною.