Здравствуйте Гость [ Вход | Регистрация ] | Форум в сети 6827-й день

Шановні користувачі! Запрошуємо вас до офіційного телеграм-канала 0day Community. Тут ви зможете поспілкуватися одне з одним та дізнатися про останні новини щодо роботи ресурса, поставити запитання до адміністрації, тощо. Перейти до телеграм-канала можна відсканувавши QR-код або натиснувши на посилання: @zeroday_ua

 С++ для новичков, вопросы, ответы, книги, с чего начать

pokemon4eg
Mar 1 2009, 11:37
  
Пост #1



Репутация:   1  
Дух


Группа: Пользователи
Сообщений: 13
С нами с: 16-August 08


Open in new window - Он придумал С++ hi.gif

Попробуем сделать что-то хорошее для С++ и начинающих программистов smile.gif

В описании раздела программирования есть много языков. В том числе и С++. Правда поиском по форуму по слову "С++" ничего не нашел. Вот и решил сделать тему в которой будем отвечать на вопросы и помогать друг-другу в этом не легком, а порой и очень нервном wink.gif деле smile.gif

С чего начать?
C++ wiki: http://ru.wikipedia.org/wiki/C%2B%2B

Вам понадобится 3 вещи:
1) Google
2) IDE (интегрированная среда разработки)
3) Книга: С++ для чайников: http://forum.0day.kiev.ua/index.php?showtopic=103405

IDE:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Первая программа. Hello C++:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Бесплатные технологи для С++ :
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


По возможности буду выкладывать примеры вот сюда:
http://github.com/k0ndr0ng1thub/0dayForumC...er/CppExamples/ software.gif

Книги:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Сообщение отредактировал pokemon4eg - Dec 3 2009, 17:23
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
2 Страницы   1 2 >  
Reply to this topicStart new topic
Ответов(1 - 19)
Phaust
Mar 1 2009, 11:55
  
Пост #2



Репутация:   1176  
сам себе авторитет
******

Группа: Пользователи
Сообщений: 14 117
С нами с: 9-July 07


А конкретнее? Посты набиваем?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
pokemon4eg
Mar 1 2009, 12:19
  
Пост #3



Репутация:   1  
Дух


Группа: Пользователи
Сообщений: 13
С нами с: 16-August 08


rus.gif читай маны

http://proklondike.com/index.php?part=2&mainpart=1 - много книг по С++

http://zone.at.ua/news/2008-05-05-1648 - Вроде как и не совсем С++, но если кому-то интересно С++ Builder. У меня есть печатная, афтар жжот!

http://www.softtime.ru/cpp/index.php?id_forum=1 - не плохой форум по С++

Ну и последняя ссылка, думаю на ней можно и закончить smile.gif Автор ссылки не плохо так потрудился, либо же выложил все свои книги по С++, а может и не все smile.gif
http://programy.com.ua/rus/download/179797/ - Сборник книг по C++ (RUS)


Книги по С++ - конечно хорошо. Но только одних знаний С++ не всегда достаточно. Программирование - это гораздо большее чем просто тупое вбивание кода. Короче есть прикольная книга, которую сам очень хочу прочитать и советую тем, кто хочет стать\работать программистом. Сейчас нет времени и прочитаю как только, так сразу smile.gif

http://samouchka.net/2007/09/28/sovershennyjj_kod.html - Совершенный код [С. Макконнелл]. книга - вещь! smile.gif

(Phaust @ Mar 1 2009, 11:55) Перейти к цитате

А конкретнее? Посты набиваем?


Думаю все что относиться к С++

Сообщение отредактировал pokemon4eg - Mar 1 2009, 12:19
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Livanias
Mar 2 2009, 0:32
  
Пост #4



Репутация:   229  
Постоялец
***

Группа: Пользователи
Сообщений: 1 969
С нами с: 7-September 07


Мог бы и сюда накидать
http://forum.0day.kiev.ua/index.php?showto...53920&st=20
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
pokemon4eg
Mar 2 2009, 9:27
  
Пост #5



Репутация:   1  
Дух


Группа: Пользователи
Сообщений: 13
С нами с: 16-August 08


(Livanias @ Mar 2 2009, 0:32) Перейти к цитате

Мог бы и сюда накидать
http://forum.0day.kiev.ua/index.php?showto...53920&st=20


Мог, бы. Но тот раздел называется "ссылки для программистов", а этот относится конкретно к С++. Если кидать туда все ссылки для программистов, то потом трудно будет что-то найти, или ссылки по теме будут разбросаны по разным страницам, хотя возможно я и не прав smile.gif Тут хотелось бы собирать ссылки которые на прямую относятся к С++. Вчера их добавил и вчера же сам ими пользовался smile.gif Удобно вроде... smile.gif

Нет, действительно, не из-за не уважения к Вам или к форуму. Просто хотелось бы чтоб ссылки по С++ были здесь. И я считаю что это правильно. Вот к примеру, есть куча разделов : С++, С#, Java, MySQL, Delphi ... думаю что удобнее когда в каждом из разделов хранятся ссылки относящееся к конкретному языку\технологии, чем листать раздел на кучу станиц ссылками разбросанными по всем страничкам. С Вашего позволения ссылки по С++ будем постить здесь, во избежание флуда в том разделе smile.gif

И вот еще парочка из моего делишеса:
http://www.codeguru.com/misc/cinifile_nonmfc.zip - С++ и другое
http://www.info-system.ru/article/number_version.html - одна из статей про номера версий приложения
http://www.cplusplus.com/ - замечательная шпаргалка\справочник по С\С++
http://hvost.org/?page_id=37 - Огромный архив литературы по языку С (C#, C++ и т. д.)

http://ru.wikipedia.org/wiki/%D0%A1%D1%82%....B5.D1.80.D1.8B - Стандартная библиотека шаблонов (КОНТЕЙНЕРЫ STL)

http://worldcpp.vingrad.ru/ - Форум: Программирование на С++ (~1500 статей)

http://www.linuxsoftware.co.nz/cppcontainers.html - C++ Containers Cheat Sheet (зачотная подсказка по контейнерам STL)

http://www.cppreference.com/wiki/ - C++ reference
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
pokemon4eg
Mar 2 2009, 9:41
  
Пост #6



Репутация:   1  
Дух


Группа: Пользователи
Сообщений: 13
С нами с: 16-August 08


(Phaust @ Mar 1 2009, 11:55) Перейти к цитате

А конкретнее? Посты набиваем?


А если быть честным, то не понял вопрос... pardon.gif
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
yartat
Mar 2 2009, 10:48
  
Пост #7



Репутация:   276  
Старожил
****

Группа: Пользователи
Сообщений: 4 421
С нами с: 11-October 06


По C++ дохрена ссылок и горы печатной литературы. Может стоило бы сначала устроить опрос, а потом постить ссылки?
(pokemon4eg @ Mar 2 2009, 9:27) Перейти к цитате

И вот еще парочка из моего делишеса: ...

Ну если уже начали давать, то не стоило бы это оформить в шапке и закинуть под спойлер?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
BoyKot
Mar 2 2009, 12:38
  
Пост #8

Благодарности: 2247

Репутация:   189  
Cтаршой
**

Группа: Пользователи
Сообщений: 501
С нами с: 17-April 07


якщо автор спеціаліст по темі і має бажання/можливість допомогти тим, в кого будуть питання, та хоче зробити окрему тему для C++ - будь ласка, це його право.
Буде популярною та корисною - можна буде закріпити.

Флуд буде видалятись, автори флуду наказуватись згідно з Правилами Форуму
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
pokemon4eg
Mar 2 2009, 14:44
  
Пост #9



Репутация:   1  
Дух


Группа: Пользователи
Сообщений: 13
С нами с: 16-August 08


(yartat @ Mar 2 2009, 10:48) Перейти к цитате

По C++ дохрена ссылок и горы печатной литературы. Может стоило бы сначала устроить опрос, а потом постить ссылки?

Ну если уже начали давать, то не стоило бы это оформить в шапке и закинуть под спойлер?


Было бы не плохо, только я не особо шарю как это делается... Ну ничего, чет придумаем, научимся. smile.gif

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

А если хорошие ссылки, хотелось бы увидеть их здесь, думаю и мне пригодится что-то из них.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Tamplier
Mar 20 2009, 20:18
  
Пост #10


Незарегистрированный







Наиболее часто задаваемые вопросы по С++. Реализация распространенных алгоритмов, решения типовых задач.

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

Сортировка выбором

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


template<class T>
void selectSort(T a[], long size) {
long i, j, k;
T x;

[color=#3333FF]for[/color]( i=0; i < size; i++) { // i - номер текущего шага
k=i; x=a[i];
for( j=i+1; j < size; j++) // цикл выбора наименьшего элемента
if ( a[j] < x ) {
k=j; x=a[j]; // k - индекс наименьшего элемента
}
a[k] = a[i]; a[i] = x; // меняем местами наименьший с a[i]
}
}

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

Сортировка пузырьком

Идея метода: шаг сортировки состоит в проходе снизу вверх по массиву. По пути просматриваются пары соседних элементов. Если элементы некоторой пары находятся в неправильном порядке, то меняем их местами.


template<class T>
void bubbleSort(T a[], long size) {
  long i, j;
  T x;

  for( i=0; i < size; i++) {            // i - номер прохода
    for( j = size-1; j > i; j-- ) {     // внутренний цикл прохода

      if ( a[j-1] > a[j] ) {
      x=a[j-1]; a[j-1]=a[j]; a[j]=x;
    }
  }
}
}



Дополнительная память, очевидно, не требуется. Поведение усовершенствованного (но не начального) метода довольно естественное, почти отсортированный массив будет отсортирован намного быстрее случайного. Сортировка пузырьком устойчива, однако шейкер-сортировка утрачивает это качество.
На практике метод пузырька, даже с улучшениями, работает слишком медленно. А потому - почти не применяется.

Дополнительная память, очевидно, не требуется. Поведение усовершенствованного (но не начального) метода довольно естественное, почти отсортированный массив будет отсортирован намного быстрее случайного. Сортировка пузырьком устойчива, однако шейкер-сортировка утрачивает это качество.
На практике метод пузырька, даже с улучшениями, работает слишком медленно. А потому - почти не применяется.

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

Сортировка простыми вставками в чем-то похожа на вышеизложенные методы.

template
void insertSort(T a[], long size) {
  T x;
  long i, j;

  for ( i=0; i < size; i++) {  // цикл проходов, i - номер прохода
    x = a[i];    
    // поиск места элемента в готовой последовательности
    for ( j=i-1; j>=0 && a[j] > x; j--)
      a[j+1] = a[j];      // сдвигаем элемент направо, пока не дошли
    // место найдено, вставить элемент
    a[j+1] = x;
  }
}


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

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

Алгоритм можно слегка улучшить. Заметим, что на каждом шаге внутреннего цикла проверяются 2 условия. Можно объединить из в одно, поставив в начало массива специальный сторожевой элемент. Он должен быть заведомо меньше всех остальных элементов массива.


// сортировка вставками со сторожевым элементом
template
inline void insertSortGuarded(T a[], long size) {
T x;
long i, j;
T backup = a[0]; // сохранить старый первый элемент

setMin(a[0]); // заменить на минимальный

// отсортировать массив
for ( i=1; i < size; i++) {
x = a[i];
for ( j=i-1; a[j] > x; j--)
a[j+1] = a[j];
a[j+1] = x;
}
// вставить backup на правильное место
for ( j=1; j< backup; j++)
a[j-1] = a[j];
// вставка элемента
a[j-1] = backup;

}

Функция setmin(T& x) должна быть создана пользователем. Она заменяет x на элемент, заведомо меньший(меньший или равный, если говорить точнее) всех элементов массива.

Сортировка Шелла

Сортировка Шелла является довольно интересной модификацией алгоритма сортировки простыми вставками.

int increment(long inc[], long size) {
  int p1, p2, p3, s;
  p1 = p2 = p3 = 1;

  s = -1;
  do {
    if (++s % 2) {
      inc[s] = 8*p1 - 6*p2 + 1;
    } else {
      inc[s] = 9*p1 - 9*p3 + 1;
      p2 *= 2;
      p3 *= 2;
    }
    p1 *= 2;
  } while(3*inc[s] < size);  

  return s > 0 ? --s : 0;
}

template
void shellSort(T a[], long size) {
  long inc, i, j, seq[40];
  int s;
// вычисление последовательности приращений
  s = increment(seq, size);
  while (s >= 0) {
    // сортировка вставками с инкрементами inc[]
    inc = seq[s--];
    for (i = inc; i < size; i++) {
      T temp = a[i];
      for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc)
        a[j+inc] = a[j];
        a[j+inc] = temp;
    }
  }
}

Часто вместо вычисления последовательности во время каждого запуска процедуры, ее значения рассчитывают заранее и записывают в таблицу, которой пользуются, выбирая начальное приращение по тому же правилу: начинаем с inc[s-1], если 3*inc[s] > size.

Пирамидальная сортировка

Пирамидальная сортировка является первым из рассматриваемых методов, быстродействие которых оценивается как O(n log n).

template
void downHeap(T a[], long k, long n) {
  //  процедура просеивания следующего элемента
  //  До процедуры: a[k+1]...a[n]  - пирамида
  //  После:  a[k]...a[n]  - пирамида
  T new_elem;
  long child;
  new_elem = a[k];
  while(k <= n/2) {          // пока у a[k] есть дети
    child = 2*k;
    //  выбираем большего сына
    if( child < n && a[child] < a[child+1] )
    child++;
    if( new_elem >= a[child] ) break;
    // иначе
    a[k] = a[child];     // переносим сына наверх
    k = child;
  }
  a[k] = new_elem;
}
template
void heapSort(T a[], long size) {
  long i;
  T temp;
  // строим пирамиду
  for(i=size/2-1; i >= 0; i--) downHeap(a, i, size-1);
  // теперь a[0]...a[size-1] пирамида
  for(i=size-1; i > 0; i--) {
    // меняем первый с последним
    temp=a[i]; a[i]=a[0]; a[0]=temp;
    // восстанавливаем пирамидальность a[0]...a[i-1]
    downHeap(a, 0, i-1);
  }
}

Построение пирамиды занимает O(n log n) операций, причем более точная оценка дает даже O(n) за счет того, что реальное время выполнения downheap зависит от высоты уже созданной части пирамиды.

Вторая фаза занимает O(n log n) времени: O(n) раз берется максимум и происходит просеивание бывшего последнего элемента. Плюсом является стабильность метода: среднее число пересылок (n log n)/2, и отклонения от этого значения сравнительно малы.

Метод не является устойчивым: по ходу работы массив так "перетряхивается", что исходный порядок элементов может измениться случайным образом.

Сообщение отредактировал Tamplier - Mar 20 2009, 20:31
Go to the top of the page
+Quote Post
reiten
Mar 20 2009, 20:30
  
Пост #11



Репутация:   229  
Cтаршой
**

Группа: Пользователи
Сообщений: 813
С нами с: 16-January 08


В обоих исходниках сортировки вставками пропущено <class T> после template.
И вообще, зачем копипастить реализации неэффективных алгоритмов сортировки на форум? Особенно с учетом того, что есть std::sort().
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
yartat
Mar 20 2009, 22:11
  
Пост #12



Репутация:   276  
Старожил
****

Группа: Пользователи
Сообщений: 4 421
С нами с: 11-October 06


Реализация метода "пузырька" в посте Tamplier неверна: в посте представлена нестандартная реализация метода прямой вставки, а не "пузырек". Почитайте Вирта т.3 - там все расписано, а так же объяснено, что при упорядоченном массиве наилучшие результаты у сортировки "пузырьком".

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «

Кроме того, все представленные реализации основаны на том, что либо используются простые типы, либо для шаблонного типа T определены операторы "<", ">", "=".

ps.gif Tamplier забыл добавить, что "пузырек", метод прямой вставки и QucikSort - это внутренние сортировки, а Шелл и пирамидальные - это внешние

Сообщение отредактировал yartat - Mar 20 2009, 22:36
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Sion
Apr 13 2009, 18:43
  
Пост #13



Репутация:   6  
Дух


Группа: Пользователи
Сообщений: 39
С нами с: 18-February 08


Подскажите плиз по поводу -
указатели на функцию у которой есть параметр по умолчанию .



Код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



Всем Спасибо .

Сообщение отредактировал Sion - Apr 14 2009, 10:01
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
ROST
Apr 13 2009, 19:42
  
Пост #14



Репутация:   45  
serrwrtet


Группа: Пользователи
Сообщений: 121
С нами с: 23-November 07


http://msdn.microsoft.com/en-us/library/y81x4ttb.aspx
The C++ compiler does not allow default arguments on pointers to functions.

This code was accepted by the previous version's compiler but now gives an error. For code that works in all versions of Visual C++, do not assign a default value to a pointer-to-function argument.


Сообщение отредактировал ROST - Apr 13 2009, 19:47
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
reiten
Apr 13 2009, 19:51
  
Пост #15



Репутация:   229  
Cтаршой
**

Группа: Пользователи
Сообщений: 813
С нами с: 16-January 08


(Sion @ Apr 13 2009, 19:43) Перейти к цитате

Подскажите плиз по поводу -
указатели на функцию у которой есть параметр по умолчанию .

Код:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «



1. Ты пытаешься присвоить указателю на функцию, которая возвращает int, функцию, которая ничего не возвращает.
2. На сколько я знаю, никак. Параметр по умолчанию не отражается на прототипе функции. Это просто удобная позсказка компилятору подставить самому значения по умолчанию, если мы при вызове функции указали мало параметров.
3. Если очень хочется такой указатель, можешь сделать функцию-обертку, которая принимает 1 параметр и явно вызвает нужную тебе функцию. И уже на нее взять указатель. Типа
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Logo
Apr 26 2009, 12:17
  
Пост #16


Незарегистрированный







Друг спрашивает по С++:

Подскажите как в С++ считывать цыфры чтобы программа считывала их нормально - потому что при использовании данного кода при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


Сообщение отредактировал Logo - Apr 29 2009, 14:04
Go to the top of the page
+Quote Post
Celin
Apr 26 2009, 12:32
  
Пост #17



Репутация:   -342  
rtfm
*****

Группа: Пользователи
Сообщений: 5 264
С нами с: 4-April 08


(Logo @ Apr 26 2009, 13:17) Перейти к цитате

...


Зачем заморачиватся с потоковым вводом/выводом? )
scanf,printf - и все дела. И напрямую задать тип данных (%d, %f , %i, %li ,%c и т.д.) smile.gif

Сообщение отредактировал Celin - Apr 26 2009, 12:32
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
Logo
Apr 26 2009, 12:59
  
Пост #18


Незарегистрированный







Пробовали даже так:

» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «


и не помогло - потому и возник сей вопрос

Сообщение отредактировал Logo - Apr 29 2009, 14:04
Go to the top of the page
+Quote Post
ROST
Apr 26 2009, 13:13
  
Пост #19



Репутация:   45  
serrwrtet


Группа: Пользователи
Сообщений: 121
С нами с: 23-November 07


А так?
#include <iostream>

using namespace std;

void main()
{
   int x,y;
   cin >> y;
    cout <<  "is fail: " << cin.fail();
      cout << ". y: " << y << endl;
  
     cin >> x;
    cout <<  "is fail: " << cin.fail();
      cout << ". x: " << x <<  endl;
}


Сообщение отредактировал ROST - Apr 26 2009, 13:16
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
reiten
Apr 26 2009, 13:21
  
Пост #20



Репутация:   229  
Cтаршой
**

Группа: Пользователи
Сообщений: 813
С нами с: 16-January 08


(Logo @ Apr 26 2009, 13:17) Перейти к цитате

Друг спрашивает по С++:

Подскажите как в С++ считывать цыфры чтобы программа считывала их нормально - потому что при использовании данного кода при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.

<{HIDE1}>

А можно вопрос еще раз, только внятно? Что в Вашем понимании "нормально". Может стоит привести пример и проиллюстрировать на нем желаемое поведение программы?
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

2 Страницы   1 2 >
Reply to this topicStart new topic

 



- Упрощённая версия
Сейчас: 22nd November 2024 - 18:22
Сайт не розміщує електронні версії творів, а займається лише колекціонуванням та каталогізацією посилань, що публікуються нашими користувачами. Якщо Ви є правовласником якоїсь частини опублікованого матеріалу та не бажаєте, щоб посилання на нього знаходилось в нашому каталозі, зв’яжіться з нами і ми видалимо його. Файли для обміну надані користувачами сайту і адміністрація не несе відповідальності за їх вміст.