Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Изучение с++


Автор: Tikson 14.11.2012, 20:47
Я пытаюсь учить с++, но получается плохо. Читаю книги, смотрю обучающее видео(вводное). Как только я дохожу до сложного момента который я непонимаю, пытаюсь найти решение в другой книге, потом ищу решение  через гугл в итоге берусь за другую тему или бросаю на время. Желание учиться есть, но нехватает или дисциплины, или еще чего-то...
Можно ли найти сенсея который бы помогал в изучении, на этом форуме например? Или посоветуйте какой-нибудь онлайн сервис, например изучил тему- прошел тест-> изучай следующие темы и тд

Автор: borisbn 15.11.2012, 06:17
А какие ЯП ты уже знаешь?

Автор: bsa 15.11.2012, 12:01
Tikson, бесплатного учителя ты нигде не найдешь. Ну или будет как в поговорке про сыр и мышеловку.
Если самому не получается, запишись на курсы. Они дадут необходимый начальный импульс для дальнейшего самостоятельного изучения. Но в любом случае, изучить язык только по книжке или курсам невозможно. Нужна практика. Очень много практики. Ее можно найти даже на этом форуме - Колледж - Центр помощи. Бери задания и выполняй. Если что-то будет непонятно ищи в поиске. Если не найдешь, обращайся сюда - поможем.

Автор: Cynede 15.11.2012, 12:20
zzz

Автор: borisbn 15.11.2012, 12:47
Tikson, я не зря спросил про другие ЯП: начинать с Си (и тем более с Си++) - неправильно. Сначала нужно понять, что такое алгоритм, программа, циклы, условия и т.д. и т.п. Хуже всего для этого подходит Си++ (не язык плохой, а плохой язык для начала обучения). Посмотри в сторону Basic, Python и иже с ними. Поверь, как только ухватишь основную идею - переход на Си++ будет если не простой, то существенно проще, чем начинать с него. Это примерно как учиться прыгать с 30 метровой скалы в море не умея ни плавать, ни прыгать с 1 метра.

Автор: Cynede 15.11.2012, 13:00
zzz

Автор: borisbn 15.11.2012, 13:28
Цитата(Cynede @  15.11.2012,  13:00 Найти цитируемый пост)
почему?
  • жёсткая типизация
  • неявное преобразование типов
  • сложная (гораздо сложнее, чем в basic или python) система ввода/вывода
  • отсутствие текстовых строк как встроенного типа
  • отсутствие коллекций, встроенных в язык
можно ещё долго продолжать. Всё это не говорит, что язык плохой. Вовсе нет. Язык, позволяющий писать программы практически под любое "железо", в принципе не может быть плохим, но начинать с него - сложно. ИМХО, это очевидно...

Автор: Cynede 15.11.2012, 13:40
zzz

Автор: borisbn 15.11.2012, 14:02
Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
жёсткая типизация - разве это не плюс?

для начинающего - нет.

Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
неявное преобразование типов - это удобно

Код
void do_smth_if_expr( bool expr ) {
    if ( expr ) {
        do_smth();
    }
}

do_smth_if_expr( "Hi, Cynede" );


Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
думаю, что не настолько уж сложная.

Код
printf( "a = %d b = %f c = %s", a, b, c );
vs
print 'a = ', a, ' b = ', b, 'c = ', c


Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
так это как раз тот самый чалленж необходимый новичкам

я бы сказал - хороший челленж, но для (скажем так) второго этапа (про первый - см. ниже)

Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
вот новичкам только с коллекций и начинать?

Код
std::map< std::string, std::pair< int, std::string> > theMap;
for( std::map< std::string, std::pair< int, std::string > >::const_iterator it = theMap.begin(); it != theMap.end(); ++it ) {
    const std::pair< int, std::string > & value = (*it);
    // do some deal with value
}
vs
for ( value in theMap ) {
    // do some deal with value
}



Цитата(Cynede @  15.11.2012,  13:40 Найти цитируемый пост)
Я думаю, что новичёк должен начинать с "что такое указатель", "что такое массив", "что такое структура", "сколько байт в структуре" и только после этого переходить к чему-то более сложному

Это - уже сложное для новичка (ИМХО). Начинать нужно с переменных, простых операций, циклов, условных переходов, функций,  простых алгоритмов (поиск, сортировка и иже с ними). Затем переходить к битам-байтам, челленжам с Си-строками и т.п.

Автор: Фантом 15.11.2012, 17:03
Цитата(borisbn @  15.11.2012,  14:28 Найти цитируемый пост)
жёсткая типизация

В C++ она очень условно жесткая, и это для обучения как раз плохо. Лучше бы она была более жесткой.

Цитата(borisbn @  15.11.2012,  14:28 Найти цитируемый пост)
отсутствие коллекций, встроенных в язык

Для учебного языка это только плюс.

Автор: Tikson 15.11.2012, 21:06
Я немного програмировал под дос на ассемблере, учил php +mysql +css+javascript - начал делать свою cms , потом бросил.
В с++ я единственно не работал со тандартными библиотеками. Масивы, указаели , циклы изучены.
Бесик я изучать не хочу. В школе писал на нем игры типа тетриса, щяс уже его не помню.

Про бесплатного учителя я и не говрю , мне главное чтобы помог =)
Я бы мог посвещать затянятиям выходные и почти все время по будням с 19:00 до 1-2 ночи. Сам териториально нахожусь недалеко от Ростова-на -Дону.

Автор: bsa 15.11.2012, 21:52
Tikson, ну раз ты имеешь опыт, тем более, на ассемблере. То посети раздел http://forum.vingrad.ru/forum/topic-287943/kw-faq-books-%D0%BB%D0%B8%D1%82%D0%B5%D1%80%D0%B0%D1%82%D1%83%D1%80%D0%B0-%D0%BA%D0%BD%D0%B8%D0%B3%D0%B8.html, прочитай их, а затем тенируйся. Чтобы изучить язык С++ хотя бы до уровня "удовлетворительно" нужно несколько месяцев непрерывной практики. Уровень "хорошо" будет только через несколько лет. А вот "отлично" можно вообще не достигнуть...

Автор: volatile 16.11.2012, 01:34
Цитата(Фантом @  15.11.2012,  17:03 Найти цитируемый пост)
В C++ она очень условно жесткая, и это для обучения как раз плохо. Лучше бы она была более жесткой.

Фантом, в каком смысле она не достаточно жесткая?

Автор: Фантом 16.11.2012, 02:05
Цитата(volatile @  16.11.2012,  02:34 Найти цитируемый пост)
в каком смысле она не достаточно жесткая? 


В буквальном. Язык с жесткой (правильнее все-таки "строгой") типизацией - это, например, Ada. 

Что касается C++, то в нем вполне допустим вот такой код:
Код

#include<iostream>

using namespace std;

int main()
{
  char a='A';
  char b[6];
  b[2]=7;
  cout << a << "  " << (a+b-b) << endl;
}


Это можно назвать "строгой типизацией"?

Автор: assistan 16.11.2012, 04:19
Конечно лучший вариант это что то вроде репетитора,который будет учить и давать задание! 

Автор: Remiznik 16.11.2012, 09:52
Цитата(Tikson @ 14.11.2012,  20:47)
 Как только я дохожу до сложного момента который я непонимаю, пытаюсь найти решение в другой книге, потом ищу решение  через гугл в итоге берусь за другую тему или бросаю на время. 

А можно по конкретнее какие именно трудности ? =)) а то бывают трудности с которыми не каждый репетитор справится +) 

Автор: baldina 16.11.2012, 15:41
Цитата(Фантом @  16.11.2012,  02:05 Найти цитируемый пост)
Это можно назвать "строгой типизацией"?

можно. тип каждого выражения определен, на основе правил преобразования.
видимо вы имеете в виду неявные преобразования, их наличие в определенном смысле ослабляет типизацию, но не делает её менее строгой. так что я бы оставил слово "жесткой"

Добавлено через 3 минуты и 1 секунду
хотя википедия думает иначе: 
Цитата

Неявное преобразование типов не допускается


Автор: Фантом 16.11.2012, 17:56
Цитата(baldina @  16.11.2012,  16:41 Найти цитируемый пост)

можно. тип каждого выражения определен, на основе правил преобразования.


Неявное приведение типов и строгая типизация - свойства, противоречащие друг другу.  Впрочем, дело даже не в названии: именно неявное приведение является источником многочисленных "детских" ошибок, так что как его не называй, в учебном языке его лучше бы минимизировать.

Цитата(baldina @  16.11.2012,  16:41 Найти цитируемый пост)
хотя википедия думает иначе: 


И правильно делает. 

Это, впрочем, следует даже из самого простого соображения: любая разумная классификация должна разбивать рассматриваемые объекты на группы сравнимого размера, а не относить все к одной группе. Если считать C++ строго типизированным языком, то практически все другие языки попадут в ту же самую категорию, поскольку в том или ином виде  вывод типов или их явное указание присутствуют почти везде, за исключением раритетов вроде Forth.

Автор: baldina 16.11.2012, 18:58
Цитата(Фантом @  16.11.2012,  17:56 Найти цитируемый пост)
поскольку в том или ином виде  вывод типов или их явное указание присутствуют почти везде

ну, это не единственное свойство. обобщение слишком вольное  smile 

Автор: Фантом 16.11.2012, 18:59
Цитата(baldina @  16.11.2012,  19:58 Найти цитируемый пост)

ну, это не единственное свойство.


Это достаточное условие для того, чтобы тип каждого выражения был определен. Соответственно...

Автор: volatile 17.11.2012, 00:03
Цитата(Фантом @  16.11.2012,  02:05 Найти цитируемый пост)
Это можно назвать "строгой типизацией"?

Ну смотря с чем сравнивать.
С таким лабораторным/академическим/полудохлым зыком как Ада, может быть
А можно сравнить например с Python. где вообще полный беспредел с типами. smile 
И ничо, тут даже его кто-то рекомендовал. Аду, кстати, пока не порекомендовали даже вы.

Причем я не знаю что хорошо.
Видимо как и во всех делах нужно искать золотую середину.
И С++ все-же от этой середины, сдвинут в сторону строгости, имхо.


Автор: Tikson 17.11.2012, 00:05
Remiznik, 
Понимаю код "кусками" и не весь.
Наверно проще всего будет дочитать книгу которую сейчас читаю (Прата Язык программирования c++ 2012)

Я хотел какой-нибуть ресурс типа вот этих http://habrahabr.ru/post/156241/. Но  там восновном веб прогармирование.

Автор: Фантом 17.11.2012, 00:45
Цитата(volatile @  17.11.2012,  01:03 Найти цитируемый пост)

С таким лабораторным/академическим/полудохлым зыком как Ада, может быть


Знаете, в первый раз вижу, чтобы к Ada применяли эпитеты "лабораторный" и "академический".  smile  "Полудохлый" (в смысле неиспользования хомячками) - еще более-менее.

Цитата(volatile @  17.11.2012,  01:03 Найти цитируемый пост)
А можно сравнить например с Python. где вообще полный беспредел с типами. smile 
И ничо, тут даже его кто-то рекомендовал.


В Python'е динамическая типизация, но в некотором смысле она даже более строгая, чем в C++. В качестве учебного языка он не особо пригоден, но в первую очередь из-за другого недостатка (кстати, общего с C++) - мультипарадигменности.

Цитата(volatile @  17.11.2012,  01:03 Найти цитируемый пост)
Аду, кстати, пока не порекомендовали даже вы.

Я бы с удовольствием порекомендовал, но ТС замучается искать литературу.

Автор: volatile 17.11.2012, 01:27
Цитата(Фантом @  17.11.2012,  00:45 Найти цитируемый пост)
(в смысле неиспользования хомячками)

В таком случае 99% программистов - хомячки.

Фантом, я не буду говорить плохого про Аду. я его не знаю. Смотрел пару раз код, поверхностно.
Оставил тяжелое впечателние.

Почему-то всегда находится какой-то любитель какого-то экзотического языка, вытащенного невесть откуда, и
превосносимого как наивысшее достижение программистской мысли.
Причем эти языки у каждого такого "маргинала" разные.
Был тут еще один, любитель фортрана и ... забыл название языка, сорри.
Тоже всех хомячками обывал.

Автор: Фантом 17.11.2012, 02:00
Цитата(volatile @  17.11.2012,  02:27 Найти цитируемый пост)

В таком случае 99% программистов - хомячки.


Ну, пожалуй, не настолько много...  smile 

Цитата(volatile @  17.11.2012,  02:27 Найти цитируемый пост)
я не буду говорить плохого про Аду. я его не знаю. Смотрел пару раз код, поверхностно.
Оставил тяжелое впечателние.

А, это всегда так - относительная многословность всех, привыкших к C-подобному синтаксису, поначалу пугает. Вот если бы Вы позанимались бы поддержкой кода на Аде, впечатление бы быстро поменялось. 

Цитата(volatile @  17.11.2012,  02:27 Найти цитируемый пост)

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


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

Цитата(volatile @  17.11.2012,  02:27 Найти цитируемый пост)
Был тут еще один, любитель фортрана и ... забыл название языка, сорри.
Тоже всех хомячками обывал.

Я тоже любитель Фортрана.   smile Однако слово "хомячок" употребил на форуме в первый раз, и то в основном в ответ на "полудохлость".   smile 

Если говорить серьезно, то у Ады есть своя ниша, в которой она активнейшим образом применяется по сей день. То, что эта ниша не совпадает с мэйнстримом - написанием прикладного софта для персоналок и гаджетов - не повод считать язык умершим.

Автор: volatile 17.11.2012, 19:12
Я вообще не считаю строгость типов плюсом языка.
В С++ и так слишком строго. (но это мое имхо, и я его никому не навязываю)

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

Ада у меня и  оставил впечатление, напоминающее протокол судебного заседания  smile
что-то казенно-неповоротливое.

Впрочем. ладно. все это суета. жизнь покажет.

Автор: xvr 19.11.2012, 13:43
Цитата(volatile @  17.11.2012,  00:03 Найти цитируемый пост)
С таким лабораторным/академическим/полудохлым зыком как Ада, может быть

Ada была созданна по заказу NASA, собственно там она и применяется. В остальных местах она применяется очень неохотно, ибо тяжко писать программы в смерительной рубашке  smile 

Кстати, даже самая строгая типизация и все закрученные гайки, какие только можно, еще не дают гарантии безошибочной программы. Достаточно вспомнить http://www.ima.umn.edu/~arnold/disasters/ariane.html (даже Ada не помогла  smile )

Автор: baldina 19.11.2012, 14:13
Ада наверно первый язык, у которого сначала появилась спецификация, а лишь затем реализация. Именно потому что
Цитата(xvr @  19.11.2012,  13:43 Найти цитируемый пост)
Ada была созданна по заказу NASA

про NASA не уверен, но военные - точно.

кстати, обобщенное программирование (в переводной книжке оно называлось родовое) впервые увидел в Аде, и оно меня тогда приятно удивило)))

Автор: baldina 19.11.2012, 14:28
Начал вспоминать и понял, что в обобщенном программировании в Аде было то, чего до сих пор нет в С++, хотя об этом много говорят: концепции (требования к обобщенному типу).

Автор: Фантом 19.11.2012, 14:58
Цитата(baldina @  19.11.2012,  15:13 Найти цитируемый пост)

про NASA не уверен, но военные - точно.


Именно Пентагон. NASA - просто один из "пользователей". Наше МО, кстати, ее тоже активно пользует.

Цитата(xvr @  19.11.2012,  14:43 Найти цитируемый пост)
собственно там она и применяется. В остальных местах она применяется очень неохотно, ибо тяжко писать программы в смерительной рубашке


Да нет, всякие системы управления и т.п. на Аде пишут довольно часто. 

Цитата(xvr @  19.11.2012,  14:43 Найти цитируемый пост)
Достаточно вспомнить Ariane 5 (даже Ada не помогла  smile )

Если бы удалось сделать язык, в котором невозможно совершить ошибку, было бы здорово... но, увы, пока это никому не удалось.

Автор: kamre 26.11.2012, 15:05
Цитата(borisbn @ 15.11.2012,  14:02)
Код
std::map< std::string, std::pair< int, std::string> > theMap;
for( std::map< std::string, std::pair< int, std::string > >::const_iterator it = theMap.begin(); it != theMap.end(); ++it ) {
    const std::pair< int, std::string > & value = (*it);
    // do some deal with value
}
vs
for ( value in theMap ) {
    // do some deal with value
}


Какой-то устаревший способ у с++ показан. Можно вот так же:
Код

#include <map>
#include <string>

int main()
{
  using namespace std;
  map<string, pair<int, string> > theMap;
  for (auto value : theMap) {
    // do some deal with value
  }
}

Автор: borisbn 26.11.2012, 16:57
Цитата(kamre @  26.11.2012,  15:05 Найти цитируемый пост)
Какой-то устаревший способ у с++ показан

язык, это, конечно, хорошо, но есть ещё такие вещи, как компиляторы. Так вот, ещё далеко не все 11-й поддерживают. Мало того, у меня есть проект, который нужно периодически поддерживать, написанный на Builder 5.0. Студийный компилятор поддерживает процентов на 30..40. Настоящая поддержка только у гцц и минГВ, и я их использую для новых проектов.

Цитата(kamre @  26.11.2012,  15:05 Найти цитируемый пост)
for (auto value : theMap) {

тогда уж
Код
for (const auto & value : theMap)

чтобы одинаково было ...

Автор: kamre 27.11.2012, 10:21
Цитата(borisbn @  26.11.2012,  16:57 Найти цитируемый пост)
Так вот, ещё далеко не все 11-й поддерживают. Мало того, у меня есть проект, который нужно периодически поддерживать, написанный на Builder 5.0

Вряд ли это можно считать аргументом при изучении современного C++, так можно и про Python 1.x вспомнить или еще постарше. Хотя у меня на работе тоже проекты на vc9 и без мегашаблонов/буста...

Автор: de_Nis 27.11.2012, 10:54
Tikson, может быть, попробовать зайти на сайт ИНТУИТ?
http://www.intuit.ru/catalog/all/
Там и теория есть, и практика с выставлением оценок.

Автор: danilkramatorsk 10.3.2013, 15:40
.

Добавлено через 1 минуту и 9 секунд
bsa, а во сколько лет ты начал программировать?

Автор: bsa 10.3.2013, 22:33
danilkramatorsk, лет в 14-15.

Автор: danilkramatorsk 10.3.2013, 22:37
bsa, твое мнение, мне 17 лет, программирование только начал изучать, очень нравится, но моментами тяжело), хотя после того как посижу над задачей, по строчке все разберу, не так все тяжело..., не поздно ли начал? в институт собираюсь поступить на ПИ ( прог. инженерию) думаю существенно поможет, твое мнение?

Автор: bsa 10.3.2013, 22:44
danilkramatorsk, главное желание и труд.
Изучать С я начал как раз в 17-18. До этого были Бейсик, Паскаль, Ассемблер. А С++ толком начал осваивать уже где-то в 25.

Автор: danilkramatorsk 10.3.2013, 22:51
bsa, сейчас по специальности работаешь, если да, то нравится и вообще как происходит работа, может вопрос глупый, но хочется узнать...

Автор: bsa 11.3.2013, 12:41
danilkramatorsk, специальность у меня - инженер-физик. Так что работая программистом работаю не по специальности  smile Более того, в основном пишу на Ассемблере.
У всех работа происходит по разному.
Работать нравится, если бы не нравилось, то ушел бы.

Автор: danilkramatorsk 11.3.2013, 15:32
bsa, вообщем ты самоучка?) как понял, можно научится программировать хорошо, было бы желание + труд для изучения, так?)

Автор: NoviceF 11.3.2013, 18:13
Цитата(danilkramatorsk @  11.3.2013,  16:32 Найти цитируемый пост)
можно научится программировать хорошо, было бы желание + труд для изучения, так?


За год, или быстрее, без профильного образования, параллельно работая 40 часов в неделю, можно выучить c++ на уровне,  чтобы взяли работать на полный рабочий день.

Спасибо borisbn, для меня это стало возможным, благодаря ему  smile .

Ну, и, конечно, благодаря всем остальным, кто помогал. Всем, кто постил разные увлекательные задачи и тем, кто постил их решения smile

Автор: danilkramatorsk 11.3.2013, 20:02
NoviceF, сейчас работаешь программистом?

Автор: NoviceF 11.3.2013, 21:17
Цитата(danilkramatorsk @  11.3.2013,  21:02 Найти цитируемый пост)
NoviceF, сейчас работаешь программистом? 


так.. начинающим smile

Автор: bsa 11.3.2013, 21:22
Цитата(danilkramatorsk @  11.3.2013,  16:32 Найти цитируемый пост)
bsa, вообщем ты самоучка?
Ну как сказать... В школе у меня были сначала Бейсик, потом Паскаль. Отец у меня кроме всего прочего знал Паскаль (по началу помогал разбирать ошибки в моих программах). Мама - ассемблер x86 (принесла книжку с работы, когда началась перестройка и всех посокращали). Затем в институте был курс С, правда, на примитивном уровне. После института я стал работать на ассемблере, периодически делая что-то на С/С++.

В любом деле главное желание. Если нет желания, то ничего и не получится.

Автор: danilkramatorsk 11.3.2013, 22:50
bsa, у меня в школе вообще этого нет и не было) Так что об программировании узнал только летом и решил попробовать, но это очень затягивает))) нравится очень) и желание есть, так что буду делать все возможное, что бы стать хорошим программистом, если что вы все равно поможете)))

Автор: bsa 12.3.2013, 09:53
В школе нет программирования?!? Это что за школа такая?

Автор: danilkramatorsk 12.3.2013, 09:58
Нет))И не было никогда, а на информатике писали определения, что такое периферийные устройства) 

Автор: bsa 12.3.2013, 10:01
ужасно... В моей школе уже в 90-х программирование изучали.

Автор: danilkramatorsk 12.3.2013, 10:03
bsa, что есть, то есть)))Так что об этом я позже узнал, чем остальные) Приходится наверстывать упущенное, надеюсь получится)

Автор: xsaro 26.1.2017, 02:13
Есть вопрос по программированию линукса 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)