Версия для печати темы
forum.0day.community _ Программирование _ С++ для новичков
Автор: pokemon4eg Mar 1 2009, 11:37
- Он придумал С++
Попробуем сделать что-то хорошее для С++ и начинающих программистов
В описании раздела программирования есть много языков. В том числе и С++. Правда поиском по форуму по слову "С++" ничего не нашел. Вот и решил сделать тему в которой будем отвечать на вопросы и помогать друг-другу в этом не легком, а порой и очень нервном деле
С чего начать?
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:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Windows :
- думаю что для виндовса проще всего Visual Studio. Есть бесплатная (обрезанная) версия которая вполне подойдет для начала.
http://ru.wikipedia.org/wiki/Microsoft_Visual_Studio_Express
Позже (дет 1-2 года
) с ней начнутся проблемы, надо будет доустанавливать СДК по 400 мб, не будет чет поддерживать и т.п....
тогда можно будет поискать полную версию ну или установить ее сразу :\
Там же есть ссылка "Сравнение IDE"...
Linux:
- KDevelop умеет работать с С++ и не только) : http://www.kdevelop.org/index.html?filenam...amp;set_lang=ru
- Monodevelop: http://monodevelop.com/download
Первая программа. Hello C++:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream>
int main(int argc, char** argv)
{
std::cout << "Hello"; // вывод на екран
return 0;
}
// - так обозначаются строчные коментарии
/* а так блочные
тоесть многострочные
*/
// директива #include говорит препроцессору что мы хотим подключить файлик iostream
// а надо на это для того чтоб можно было использовать std::cout - стандартный поток вывода
// С++ программа всегда начинается с функции main. ну это все вы прочитаете в книге :)
// return 0; - возвращаем 0 чем говорим операционной системе что наша программа
// завершилась без ошибок
Бесплатные технологи для С++ :» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
Разработка игр:
Microsoft: http://gdk.thegamecreators.com/ - майкрософтовская разработка для вижуал студии и майкрософта)
Ogre 3d: http://www.ogre3d.ru/wik/pmwiki.php?n=Main.%c8%ed%f4%ee%f0%ec%e0%f6%e8%ff - требует достаточной подготовки С++. Есть доки на русском.
Trolltech (Nokia):
Qt: http://ru.wikipedia.org/wiki/Qt - кросс-платформенная библиотека для создания графического интерфейса, работы с сетью, XML, OpenGL и т.д. Есть книги, доки на русском.
Boost:
Boost: http://ru.wikipedia.org/wiki/Boost - собрание библиотек, расширяющих C++. Есть доки на русском.
Free C / C++ Libraries, Source Code and Frameworks
Open source libraries: http://www.thefreecountry.com/sourcecode/cpp.shtml
Open source + cross-platform:
http://www.shlomifish.org/open-source/portability-libs/ - бесплатные, кросс-платформенные библиотеки
По возможности буду выкладывать примеры вот сюда:
http://github.com/k0ndr0ng1thub/0dayForumCpp/tree/master/CppExamples/
Книги:» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
http://forum.0day.kiev.ua/index.php?showtopic=132019 - C/C++ и MS Visual C++ 2008 для начинающих
http://forum.0day.kiev.ua/index.php?showtopic=132381 - Microsoft Visual Studio 2008, Ларс Пауэрс, Майк Снелл
Автор: Phaust Mar 1 2009, 11:55
А конкретнее? Посты набиваем?
Автор: pokemon4eg Mar 1 2009, 12:19
читай маны
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 - не плохой форум по С++
Ну и последняя ссылка, думаю на ней можно и закончить Автор ссылки не плохо так потрудился, либо же выложил все свои книги по С++, а может и не все
http://programy.com.ua/rus/download/179797/ - Сборник книг по C++ (RUS)
Книги по С++ - конечно хорошо. Но только одних знаний С++ не всегда достаточно. Программирование - это гораздо большее чем просто тупое вбивание кода. Короче есть прикольная книга, которую сам очень хочу прочитать и советую тем, кто хочет стать\работать программистом. Сейчас нет времени и прочитаю как только, так сразу
http://samouchka.net/2007/09/28/sovershennyjj_kod.html - Совершенный код [С. Макконнелл]. книга - вещь!
(Phaust @ Mar 1 2009, 11:55)
А конкретнее? Посты набиваем?
Думаю все что относиться к С++
Автор: Livanias Mar 2 2009, 0:32
Мог бы и сюда накидать
http://forum.0day.kiev.ua/index.php?showtopic=53920&st=20
Автор: pokemon4eg Mar 2 2009, 9:27
(Livanias @ Mar 2 2009, 0:32)
Мог бы и сюда накидать
http://forum.0day.kiev.ua/index.php?showtopic=53920&st=20
Мог, бы. Но тот раздел называется "ссылки для программистов", а этот относится конкретно к С++. Если кидать туда все ссылки для программистов, то потом трудно будет что-то найти, или ссылки по теме будут разбросаны по разным страницам, хотя возможно я и не прав
Тут хотелось бы собирать ссылки которые на прямую относятся к С++. Вчера их добавил и вчера же сам ими пользовался
Удобно вроде...
Нет, действительно, не из-за не уважения к Вам или к форуму. Просто хотелось бы чтоб ссылки по С++ были здесь. И я считаю что это правильно. Вот к примеру, есть куча разделов : С++, С#, Java, MySQL, Delphi ... думаю что удобнее когда в каждом из разделов хранятся ссылки относящееся к конкретному языку\технологии, чем листать раздел на кучу станиц ссылками разбросанными по всем страничкам. С Вашего позволения ссылки по С++ будем постить здесь, во избежание флуда в том разделе
И вот еще парочка из моего делишеса:
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%D0%B0%D0%BD%D0%B4%D0%B0%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D0%B1%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2#.D0.9A.D0.BE.D0.BD.D1.82.D0.B5.D0.B9.D0.BD.D0.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
Автор: pokemon4eg Mar 2 2009, 9:41
(Phaust @ Mar 1 2009, 11:55)
А конкретнее? Посты набиваем?
А если быть честным, то не понял вопрос...
Автор: yartat Mar 2 2009, 10:48
По C++ дохрена ссылок и горы печатной литературы. Может стоило бы сначала устроить опрос, а потом постить ссылки?
(pokemon4eg @ Mar 2 2009, 9:27)
И вот еще парочка из моего делишеса: ...
Ну если уже начали давать, то не стоило бы это оформить в шапке и закинуть под спойлер?
Автор: BoyKot Mar 2 2009, 12:38
якщо автор спеціаліст по темі і має бажання/можливість допомогти тим, в кого будуть питання, та хоче зробити окрему тему для C++ - будь ласка, це його право.
Буде популярною та корисною - можна буде закріпити.
Флуд буде видалятись, автори флуду наказуватись згідно з Правилами Форуму
Автор: pokemon4eg Mar 2 2009, 14:44
(yartat @ Mar 2 2009, 10:48)
По C++ дохрена ссылок и горы печатной литературы. Может стоило бы сначала устроить опрос, а потом постить ссылки?
Ну если уже начали давать, то не стоило бы это оформить в шапке и закинуть под спойлер?
Было бы не плохо, только я не особо шарю как это делается... Ну ничего, чет придумаем, научимся.
Ссылок дохрена, и печатной литературы тоже хватает, правда что из этого всего хорошее и что нужно для того чтоб программировать на С++?? Неужели надо прочитать все книги, просмотреть все ссылки? Нет. Надеюсь эта тема поможет разобраться с подобными вопросами.
А если хорошие ссылки, хотелось бы увидеть их здесь, думаю и мне пригодится что-то из них.
Автор: Tamplier Mar 20 2009, 20:18
Наиболее часто задаваемые вопросы по С++. Реализация распространенных алгоритмов, решения типовых задач.
Алгоритмы сортировки строк
Сортировка выбором
Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке.
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, и отклонения от этого значения сравнительно малы.
Метод не является устойчивым: по ходу работы массив так "перетряхивается", что исходный порядок элементов может измениться случайным образом.
Автор: reiten Mar 20 2009, 20:30
В обоих исходниках сортировки вставками пропущено <class T> после template.
И вообще, зачем копипастить реализации неэффективных алгоритмов сортировки на форум? Особенно с учетом того, что есть std::sort().
Автор: yartat Mar 20 2009, 22:11
Реализация метода "пузырька" в посте Tamplier неверна: в посте представлена нестандартная реализация метода прямой вставки, а не "пузырек". Почитайте Вирта т.3 - там все расписано, а так же объяснено, что при упорядоченном массиве наилучшие результаты у сортировки "пузырьком".
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
BOOL bubble_exists;
int pass_number = 1;
do
{
bubble_exists = FALSE;
for (int i = 0; i < array_len - pass_number; i++)
{
if (array[i] > array[i + 1])
{
T tmp = array[i];
array[i] = array[i + 1];
array[i + 1] = tmp;
bubble_exists = TRUE;
}
}
pass_number++;
}
while (bubble_exists);
Кроме того, все представленные реализации основаны на том, что либо используются простые типы, либо для шаблонного типа T определены операторы "<", ">", "=".
Tamplier забыл добавить, что "пузырек", метод прямой вставки и QucikSort - это внутренние сортировки, а Шелл и пирамидальные - это внешние
Автор: Sion Apr 13 2009, 18:43
Подскажите плиз по поводу -
указатели на функцию у которой есть параметр по умолчанию .
Код:» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include "iostream"
using namespace std;
void myfunc (int a,int bb=10){
cout << "hallo";
}
void main()
{
void(*myfunc_pointer)(int, int =10);
/* Как заставить VS 9
создать указатель на ф-цию
с параметром по умолчанию
В VS 6 - все прекрасно .
*/
/*
myfunc_pointer = myfunc;
myfunc_pointer (1);
*/
}
Всем Спасибо .
Автор: ROST Apr 13 2009, 19:42
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.
Автор: reiten Apr 13 2009, 19:51
(Sion @ Apr 13 2009, 19:43)
Подскажите плиз по поводу -
указатели на функцию у которой есть параметр по умолчанию .
Код:» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include "iostream"
using namespace std;
void myfunc (int a,int bb=10){
cout << "hallo";
}
void main()
{
int (*myfunc_pointer)(int, int =10);
/* Как заставить VS 9
создать указатель на ф-цию
с параметром по умолчанию
В VS 6 - все прекрасно .
*/
/*
myfunc_pointer = myfunc;
myfunc_pointer (1);
*/
}
1. Ты пытаешься присвоить указателю на функцию, которая возвращает int, функцию, которая ничего не возвращает.
2. На сколько я знаю, никак. Параметр по умолчанию не отражается на прототипе функции. Это просто удобная позсказка компилятору подставить самому значения по умолчанию, если мы при вызове функции указали мало параметров.
3. Если очень хочется такой указатель, можешь сделать функцию-обертку, которая принимает 1 параметр и явно вызвает нужную тебе функцию. И уже на нее взять указатель. Типа
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
int f1(int a) {return f(a);}
...
int(*myfunc)(int);
myfunc=f1;
myfunc(1);
Автор: Logo Apr 26 2009, 12:17
Друг спрашивает по С++:
Подскажите как в С++ считывать цыфры чтобы программа считывала их нормально - потому что при использовании данного кода при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream.h>
void main()
{
long y,x; // пробывал char вышло гонево
cin >> y;
cout << "is fail: " << cin.fail();
cout << ". y: " << y << "***\n\n";
cin >> x;
cout << "is fail: " << cin.fail();
cout << ". x: " << x << "***\n\n";
}
Автор: Celin Apr 26 2009, 12:32
(Logo @ Apr 26 2009, 13:17)
...
Зачем заморачиватся с потоковым вводом/выводом? )
scanf,printf - и все дела. И напрямую задать тип данных (%d, %f , %i, %li ,%c и т.д.)
Автор: Logo Apr 26 2009, 12:59
Пробовали даже так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <stdio.h>
void main()
{
int y,x;
scanf ("%i", &x);
printf ("%i", x);
scanf ("%i", &y);
printf ("%i", y);
}
и не помогло - потому и возник сей вопрос
Автор: ROST Apr 26 2009, 13:13
А так?
#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;
}
Автор: reiten Apr 26 2009, 13:21
(Logo @ Apr 26 2009, 13:17)
Друг спрашивает по С++:
Подскажите как в С++ считывать цыфры чтобы программа считывала их нормально - потому что при использовании данного кода при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.
<{HIDE1}>
А можно вопрос еще раз, только внятно? Что в Вашем понимании "нормально". Может стоит привести пример и проиллюстрировать на нем желаемое поведение программы?
Автор: Logo Apr 26 2009, 13:52
// как сделать такой примитив
// с защито й от дурака
// чтобы CIN хавал только числа
// иначе запрашивал снова
Грубо говоря - Нужно в функцию вычисления z
передать два int аргумента x,y:
и вычислить их сумму.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream.h>
void func_z (int x, int y)
{
int z;
z = x + y;
cout << "\n SUM= " << z << "\n";
}
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;
func_z (x, y);
}
Автор: ROST Apr 26 2009, 14:44
Можна зробити так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream>
#include <string>
#include <cstring>
#include <cctype>
using namespace std;
void func_z (int x, int y)
{
int z;
z = x + y;
cout << "SUM == " << z << "\n";
}
bool is_num(string s) //функція повертає 1, якщо рядок є числом, і 0 - в протилежному випадку
{
if (!(isdigit(s[0])||(s[0]=='+')||(s[0]=='-')))
return 0;
for(int i=1;i<s.size();i++)
{
if (!isdigit(s[i]))
return 0;
}
return 1;
}
void main()
{
int x,y;
string s;
do
{
cout<<"Enter number x:\n";
cin >> s;
}
while (!is_num(s)); // читаємо, поки не введено число x
x=atoi(s.c_str());
do
{
cout<<"Enter number y:\n";
cin >> s;
}
while (!is_num(s)); // читаємо, поки не введено число y
y=atoi(s.c_str());
func_z (x, y);
}
Автор: Logo Apr 26 2009, 15:20
Отлично в Visual Studio 2008 , Но в Borland С++ Builder 6 -
[C++ Warning] Unit1.cpp(19): W8012 Comparing signed and unsigned values
на этот кусок -
for(int i=1; i<s.size(); i++)
Почему Я не могу юзать VS:
1. в институте , зав кафедры ,
хочет только сырцы
а компилить она будет в
Borland С++ Builder 6
2. далее нужно будет прикрутить графику-
и вызывать вот ИТО -
initgraph (&gd, &gm, "d:\\bc\\bgi");
Знайте все ИТО злое место с Борландом - "ІЗІТ при НАУ" )))
Автор: Charge Apr 26 2009, 17:24
Warning - не error
Определи i как беззнаковое целое и будет тебе счастье. А вообще, существует миллион+1 честный способ проверки ввода на корректность. Не стесняйся фантазировать и придумать свой
Первое, что пришло в голову:
int i;
if ((cin >> i).good() && cin.get() == 10)
{
корректный ввод
}
else
{
некорректный
}
Дальше думай сам. Не забывай сбрасывать флаги состояния потока после неправильного ввода, если будешь обращаться к нему снова: cin.clear()
Автор: The_David May 10 2009, 22:36
Можна например так:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
int iio(int *val, char name[5])
{
int flag = 0;
char answer = 'y';
while(answer == 'y')
{
cout<<"Пожалуйста, введите значение перемнной "<<name<<" = ";
if(!(cin>>(*val)))
{
cin.clear();
cin.ignore();
cout<<"\nПроизошла ошибка!";
cout<<"\nВы ввели не коректные данные. повторить (да - любая клавиша, нет - 'n')"<<endl;
cin>>answer;
if(answer == 'n')
{
cout<<"\nДля завершения нажмите любую клавишу.\n";
flag = 1;
return flag;
}
}
else
{
cout<<"Значение переменной принято.\n";
break;
}
}
return flag;
}
//----------------------MAIN------------------------------------
int main(int argc, char *argv[])
{
int a = 0;
int flag = 0;
//---------Input value------------------------------------------
flag = iio(&a, "a");
if(flag) return -1; //выход из программы
//--------------------------------------------------------------
return 0;
}
Автор: Monti_berns Sep 30 2009, 19:07
Ребят, я понимаю что вопрос тупой. Сори. Но я хотел бы знать, можно ли добиться чего либо в программировании если заниматься им как хобби. Тоесть, пришел с работы пописал что-то, выучил что-то...
Автор: kerovnik Oct 17 2009, 11:26
(Monti_berns @ Sep 30 2009, 20:07)
Ребят, я понимаю что вопрос тупой. Сори. Но я хотел бы знать, можно ли добиться чего либо в программировании если заниматься им как хобби. Тоесть, пришел с работы пописал что-то, выучил что-то...
Для того, щоб досягнути певного рівня у програмуванні, потрібно систематично ним займатися. Найкращі результати досягаються при щоденному написанні коду. Хобі - це справа, яка робиться для власного задоволення. Якщо вона уже приносить прибуток - то це, напевно, робота.
У будь-якому випадку, головне - це бажання самовдосконалюватися
Автор: pokemon4eg Nov 19 2009, 1:10
(Tamplier @ Mar 20 2009, 20:18)
Наиболее часто задаваемые вопросы по С++. Реализация распространенных алгоритмов, решения типовых задач.
...
Спасибо за замечательнве примеры
Автор: pokemon4eg Nov 19 2009, 1:48
(reiten @ Mar 20 2009, 20:30)
В обоих исходниках сортировки вставками пропущено <class T> после template.
И вообще, зачем копипастить реализации неэффективных алгоритмов сортировки на форум? Особенно с учетом того, что есть std::sort().
я считаю, что ты прав. не стоит изобретать велосипед... надо стараться использовать готовые решения по мере возможностей.
но и он тоже прав. сейчас попробую обьяснить на примере почему.
как не крути, а в чистом С++ работа со строками прихрамывает если я не ошибаюсь:
http://www.cplusplus.com/reference/clibrary/cstring/ наблюдаем "колосальный" набор функций для работы со строками.
и еще чуть : http://www.edcc.edu/faculty/paul.bladek/c_string_functions.htm
ну и если поднапрячься, то можно найти еще парочку. но дейсвительно ли их просто использовать? все ли есть в С++ для работы со строками? - нет.
ну и сравнить это все с клаасом QString замечательной бибилиотеки Qt:
http://qt.nokia.com/doc/4.5/qstring.html
Просто ли использовать QString и все ли тут есть? В сочетании в регулярными выражениями - практически все. 2 класса QString и QRegExp делают практически любую работу со строками... То чего нет, можно легко и просто дописать чего не скажешь про С++.
К чему я это все? Возвращаясь к std::sort()... Была реальная жизненная ситуация. Делали адрессную книгу которая хранилась в базе. Для того чтоб добавить запись про сотрудника в базу надо было сгенерировать строку с особым форматом из его имени и фамилии. Все что было - это исходник функции на руби который никто не осилил) я посомтрел на формат и решил накодить вручную так, как другого выхода не было. Qt + QRegexp и за пол часа функция готова)
std::sort() - это хорошо, но зная примеры которые предоставил Tamplier можно написать свою сортировку, возможно какаую-то спецефическую. а если люди будут пользоваться только std::sort(), то вполне возможно что свою сортировку или чет другое, посложнее std::sort() у них написать не выйдет.
ну и еще в них присутсвует работа с массивами, с которыми приходится работать довольно часто. строки в С++ как известно, тоже являются массивами символов.
Конечно было бы классно проверить код на работоспособность и предоставить информацию о том, что такое шаблоны в С++...
Автор: pokemon4eg Nov 19 2009, 3:15
(Logo @ Apr 26 2009, 12:17)
при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream.h>
void main()
{
long y,x; // пробывал char вышло гонево
cin >> y;
cout << "is fail: " << cin.fail();
cout << ". y: " << y << "***\n\n";
cin >> x;
cout << "is fail: " << cin.fail();
cout << ". x: " << x << "***\n\n";
}
вылетает потому что лонг - это не строка. кучу вариантов написали... добавлю еще свой. ну или так
:
C++:
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string>
#include <exception>
// класс ошибки конвертации в число
class BadStr2DigitCast: public std::exception
{
virtual const char* what() const throw()
{
return "Can not cast from str 2 digit.";
}
};
// функция конвертирования строки в число.
// строка должна начинаться с цифры. если после цифры будут идти символы, то они будут отброшены
int str2int(const std::string& number)
{
return isdigit(number[0]) ? atoi (number.c_str()) : throw BadStr2DigitCast();
}
int main ()
{
char str[100];
std::cin >> str;
int a = str2int(str);
return 0;
}
Пример можно усовершенствовать
А вообще всегда есть много способов решения проблемы...
Автор: pokemon4eg Nov 19 2009, 15:16
(Logo @ Apr 26 2009, 12:17)
Друг спрашивает по С++:
Подскажите как в С++ считывать цыфры чтобы программа считывала их нормально - потому что при использовании данного кода при вводе символа вместо цыфры программа сама пролетает в конец без второго запроса на ввод.
» Нажмите, чтобы показать спойлер - нажмите опять, чтобы скрыть... «
#include <iostream.h>
void main()
{
long y,x; // пробывал char вышло гонево
cin >> y;
cout << "is fail: " << cin.fail();
cout << ". y: " << y << "***\n\n";
cin >> x;
cout << "is fail: " << cin.fail();
cout << ". x: " << x << "***\n\n";
}
Чтоб не пролетало читай в строку, а потом конвертируй ее в число.
void main()
{
std::string a;
cin >> a;
cout << "a: " << a;
}
Автор: gryzovick Oct 6 2021, 14:24
Ап тему, в поиске информации для изучения с 0я
Автор: G3n3k Oct 22 2021, 22:29
(gryzovick @ Oct 6 2021, 15:24)
Ап тему, в поиске информации для изучения с 0я
Классикой обучения с нуля С++ всегда остается книжка "Язык программирования С++" Страуструпа-создателя
Однако она тяжеловата - не все могут с нее начать, потому перед ней можно прочесть любую книгу по С++, из категории "С++ для чайников", после чего вернутся к книжке Страуструпа. Обзязательно.
Когда книжка Страуструпа прочитана и освоена, начинаем решать задачки с применением С++ на сайте LeetCode, и не прекращаем. Никогда
Следующими советую прочитать ВСЕ 4 книги Скотта Меерса по С++: эффективный С++, еще более эффективный С++, современный С++ и эффективный STL
Дальше настоятельно советую освоить APUE - Advanced Programming in UNIX Environment. Книга на самом деле по С, а не С++, но понимание ее содержимого ОЧЕНЬ пригождается в разработке на плюсах, т.к. дает понимание "подкапотных событий"
Дальше читаем C++ Concurrency in Action - Вильямса, шикарная книга по потокам.
Дальше полируем шаблонную магию книжечками от Александреску
Дальше читаем Банду Четырех и изучаем основные паттерны.
Ну а после, когда все вышеуказанное освоено, уже можно почитать оригинальные стандарты плюсов, и изучать уже то, что предстоит пилить. От себя еще могу добавить, что для широты развития очень полезным будет хотя-бы чутка поковырять boost, boost:asio, ZeroMQ, Qt, POSIX, WinApi, Android NDK и хотябы полистать 4-томник Кнута, чтобы понимать какие есть алгоритмы и для чего(читать не обязательно - можно сдохнуть).
В принципе, вышеуказанного уже с головой чтобы быть твердым программером и знать что читать и куда развиваться дальше
Удачи!
Автор: Бананчик Oct 26 2021, 13:44
(G3n3k @ Oct 22 2021, 23:29)
Классикой обучения с нуля С++ всегда остается книжка "Язык программирования С++" Страуструпа-создателя
Однако она тяжеловата - не все могут с нее начать, потому перед ней можно прочесть любую книгу по С++, из категории "С++ для чайников", после чего вернутся к книжке Страуструпа. Обзязательно.
Когда книжка Страуструпа прочитана и освоена, начинаем решать задачки с применением С++ на сайте LeetCode, и не прекращаем. Никогда
Следующими советую прочитать ВСЕ 4 книги Скотта Меерса по С++: эффективный С++, еще более эффективный С++, современный С++ и эффективный STL
Дальше настоятельно советую освоить APUE - Advanced Programming in UNIX Environment. Книга на самом деле по С, а не С++, но понимание ее содержимого ОЧЕНЬ пригождается в разработке на плюсах, т.к. дает понимание "подкапотных событий"
Дальше читаем C++ Concurrency in Action - Вильямса, шикарная книга по потокам.
Дальше полируем шаблонную магию книжечками от Александреску
Дальше читаем Банду Четырех и изучаем основные паттерны.
Ну а после, когда все вышеуказанное освоено, уже можно почитать оригинальные стандарты плюсов, и изучать уже то, что предстоит пилить. От себя еще могу добавить, что для широты развития очень полезным будет хотя-бы чутка поковырять boost, boost:asio, ZeroMQ, Qt, POSIX, WinApi, Android NDK и хотябы полистать 4-томник Кнута, чтобы понимать какие есть алгоритмы и для чего(читать не обязательно - можно сдохнуть).
В принципе, вышеуказанного уже с головой чтобы быть твердым программером и знать что читать и куда развиваться дальше
Удачи!
а в итоге работу не получить...
и годы непосильного труда будут спущены в унитаз...
Автор: G3n3k Oct 29 2021, 22:19
(Бананчик @ Oct 26 2021, 14:44)
а в итоге работу не получить...
и годы непосильного труда будут спущены в унитаз...
Может человек для себя спрашивает?)
Мой пост - не ответ "как устроится на работу С++ником", максимум к чему его можно притянуть, это "как не завалить собеседование по С++". А чтоб не завалить, на него, да, нужно еще попасть - должен быть опыт, должны быть позиции, ХР должен обратить на вас внимание и тд - это уже совсем другая история, не про С++ вообще, а как про то "как себя продать".
И кстати, при наличии опыта, во всяком эмбеддеде на плюсовиков вполне себе спрос... Но опять же - совсем другая история)
Автор: kap1ec Oct 30 2021, 8:34
Я бы посоветовал "Язык программирования C++" от Стивена Прата для базы взять.
Автор: Бананчик Nov 13 2021, 21:50
(G3n3k @ Oct 29 2021, 23:19)
ХР должен обратить на вас внимание и тд - это уже совсем другая история, не про С++ вообще, а как про то "как себя продать".
в данном случае изучение языков программирования вообще следует отложить в долгий ящик, и даже не пытаться писать простые скрипты типа Batch, то есть вообще не думать о ЯП как таковом
и тут лучше начинать с всяких гуманитарных наук, типа психологии, бизнеса, HR-менеджмента, и кстати тоже "как себя продать" (честно не знаю как называется эта наука, может проблемы с трудоустройством у многих есть по причине того что эта наука не имеет официального названия и/или ее не преподают в ВУЗах), это нужно чтобы изучить как работает кадровая политика в многих предприятиях + плюс крутить на Ютубе видосы всяких собеседований и со сокрытыми камерами (например канал ЖИЗНЬ АНОНИМА)
я серьезно
потому что в наше время во всем мире избыток "специалистов" (как хороших, так и плохих не имеет значение) и дефицит рабочих мест, а в связи с активной автоматизацией предприятий вообще уменьшается роль человека в них
если спрашивается зачем я это запостил, то это предостережение для Вас рекомендовать людям всякую литературу по ЯП, потому что карьера программиста сейчас (примерно с 2010 года) начинается не с литературы
Автор: G3n3k Nov 17 2021, 10:20
Ну, мы ж этого не знаем Может под человека уже есть позиция в дружественном предприятии "только выучи и будешь пилить", и вопрос чисто в изучении конкретного ЯП. Кстати, типичная ситуация для уже сформировавшихся синьйоров, но желающих метнутся на другой технологический стэк.
Автор: Бананчик Nov 17 2021, 15:44
(G3n3k @ Nov 17 2021, 11:20)
"только выучи и будешь пилить"
это входит в ТОП-100 самых лживых фраз, а на первом месте "я тебе позвоню попозже"
понимаешь?
(G3n3k @ Nov 17 2021, 11:20)
ситуация для уже сформировавшихся синьйоров, но желающих метнутся на другой технологический стэк.
ну синьйоры это уже само собой
больше имеют проблем именно новички
ах да, чуть ли не забыл
еще очень большой ошибкой начинающих заключается в том, что знания ЯП в чистом (нативном) виде недостаточно, от слова совсем
даже под видом такого соуса - ООП
потому что многие предприятия требуют еще навыков наподобие SOLID, JQuery, SQL, Git, REST, Vulkan/OpenGL, UART, TouchGFX, всякие библиотеки, фреймворки и пр., а также всяких хитрых знаний типа низкоуровневого доступа к ядру/платформы/среды и межпроцессорного взаимодействия
Автор: tantan Nov 28 2022, 12:04
Привет, я сам по себе охотник и очень люблю на охоте готовить разные блюда с каши, и вот как и вы не знал нормального рецепта, но через некоторое время мне мой товарищ тоже кстати охотник посоветовал вот этот сайт с рецептами рисовая каша в мультиварке тут очень много разных рецептов и последнее время все очень все вкусные, так что советую вам https://vinnytskyi-mlynar.com.ua/ru/kategoriyi/manka.
Invision Power Board
© Invision Power Services