Компиляция программ в консоли Линукс (на примере 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; // место найдено, вставить элемент
}
}