Компиляция программ в консоли Линукс (на примере CentOS)
Для компиляции программ необходимо установить gcc.
Для С:
yum install gcc
Для С++:
yum install gcc-c++
Программы достаточно удобно писать в MC (yum install mc.i386)
Делаем: mcedit <имяфайла> (например mcedit hello.cpp - окончание у файлов *.cpp - c++, а *.c - C)
В появившемся оконце набираем свою программу. Например, классическое, на С++:
#include <iostream> using namespace std; int main() { cout << "Hello, world" << endl; return 0; }
Нужно делать типа пустую строку после окончания набора кода.
Жмем F2 для сохранения и F10 для выхода (или еще можно "сворачивать" редактор нажатием ctrl+o (разворачивать также)
Теперь набираем:
g++ hello.cpp -o hello
и, если все правильно, получаем на выходе исполняемый файлик hello, который можно юзать - ./hello
Для С-программ:
gcc <имя_файла> -o <имя_выходного_файла>
Аналог atoi
int atoi(char *str) { std::string mS = str; //получаем строку std::istringstream mStream(mS); //преобразуем строку в поток int tmp; mStream >> tmp; //выгружаем из строкового потока в переменную return tmp; }
Простой и короткий вариант. По разным обсуждением в интернете - медленный. Связано это с потоковыми обработками.
14 октября языку программирования С++ исполнилось 25 лет
Первый официальный гид по новосозданному языку С++ появился ровно 25 лет назад. Тогда еще мало кому известный Бьерн (Бьярнэ в датской транскрипции) Страуструп 14 октября 1985 года представил новый язык программирования высокого уровня, который позволял писать программы для разных компьютеров, используя почти неизменный программный код, который был ближе к языку людей, нежели к машинным кодам.
В последнее время С++ становится самым широко используемым языком программирования, который поддерживает объектно-ориентированное программирование. Страуструп стал первопроходцем в области использования объектно-ориентированной и общей техник в области создания программных приложений, где эффективность является приоритетным свойством, таких как симуляторы, графика, пользовательские интерфейсы, прикладные системы, системы для научных вычислений.
Книга Страуструпа "Язык программирования C++" — одна из самых широко читаемых книг из своей области, которая была переведена на 19 языков. Следующая книга, "Дизайн и эволюция C++", открыла много нового в описании языков программирования: новые идеи, идеалы, проблемы. В дополнение к своим пяти книгам, Страуструп опубликовал более сотни академических и других популярных статей.
Бьёрн принимал активное участие в создании стандарта ANSI/ISO для C++ и продолжает работу по поддержанию и пересмотру стандарта.
Текст взят отсюда http://www.xakep.ru/post/53535/default.asp
Сортировка выбором (выделением)
В данной сортировке сначала ищется (выбирается) минимальный элемент в массиве и меняется местами с первым элементом. Первый элемент из дальнейшей сортировки выбывает.
void selection_sort(int *mArray, int _size) { for(int i = 0; i < _size; i++) { int k = i; for(int j = k + 1; j < _size; j++) { if(mArray[k] > mArray[j]) k = j; } if(i != k) std::swap(mArray[i], mArray[k]); } }
Сортировка "Шейкер"
int shaker_sort(int *&mArray, int _size) { int L = 0; int R = _size - 1; int k = _size - 1; do { for( int j = R; j >= L; j--) //Ставим на место самый маленький элемент { if(mArray[j-1] > mArray[j]) { std::swap(mArray[j], mArray[j-1]); k = j; } } L = k + 1; //Сдвигаем левую границу for(int j = L; j <= R; j++) //Ставим на место самый большой элемент { if(mArray[j-1] > mArray[j]) { std::swap(mArray[j], mArray[j-1]); k = j; } } R = k - 1; //Сдвигаем правую границу } while(L < R); }
Последовательный (линейный) поиск
Поиск последовательно проверяет все элементы, а так же достижение конца массива.
int line_seach(int *mArray, int _size, int find_el) { int position = 0; for(;(mArray[position] != find_el) && (position < _size); position++); //Поиск position++; //Корректируем номер позиции return position <= _size ? position : 0; //Если элемент найден, то возвращаем его позицию, если нет, то 0 }
Двоичный поиск (только для отсортированных массивов)
Массив делится пополам и граница сдвигается в соответствии с тем, где, возможно, находится искомый элемент.
Боевой пример:
int dv_seach(int *mArray, int _size, int find_el) { int left = 0, right = _size - 1, m; //Устанавливаем границы while(left < right) { m = (left + right) / 2; //Выбираем середину if (find_el > mArray[m]) left = m + 1; //Если элемент в середине рассматриваемого //участка больше искомого, то сдвигаем границу влево else right = m; //Если меньше - вправо } return find_el == mArray[left] ? left + 1 : 0; //Если элемент найден, то возвращаем его позицию, если нет, то 0 }
Поиск с барьером
Алгоритм поиска заключается в установке "барьера" - искомого элемента - в конец массива.
Таким образом пропадает необходимость проверки на достижение конца массива.
Боевой пример:
int barrier_seach(int *mArray, int _size, int find_el) { int position = 0; if (mArray[_size-1] != find_el) //Проверим, нет ли искомого элемента на последней позиции { mArray[_size-1] = find_el; //Установим "барьер" for(;mArray[position] != find_el; position++); //Поиск position++; //Корректируем номер позиции } else return _size; //Если искомый элемент на последней позиции, то возвращаем размер return position < _size ? position : 0; //Если элемент найден, то возвращаем его позицию, если нет, то 0 }
Сортировка обменом (метод "пузырька")
void buble_sort(int mArray[], int mArr_size) { for(int i = 1; i < mArr_size; i++) for (int k = i; (k >= 1) && (mArray[k] < mArray[k-1]); k--) std::swap(mArray[k],mArray[k-1]); }
Сортировка вставками (включением)
void insertSort(int a[], int size) { int x, i, j; for (i = 1; i < size; i++) // цикл проходов, i - номер прохода { x = a[i]; // сохраняем элемент, место которому необходимо найти for (j = i; j > 0 && a[j-1] > x; j--) // поиск места элемента в готовой последовательности a[j] = a[j-1]; // сдвигаем элемент направо, пока не дошли a[j] = x; // место найдено, вставить элемент } }