Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.50/32: Рейтинг темы: голосов - 32, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 01.11.2018
Сообщений: 35

Сомнения, возникшие в процессе самостоятельного изучения

06.10.2020, 17:24. Показов 7158. Ответов 93
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток! Отмечу сразу, что мне 31 год, у меня НЕТ И НЕ БЫЛО технического образования, так как я гуманитарий. Следовательно мои познания в области математики и информатики оставляют желать лучшего. Относительно недавно мне стало очень интересно все, что связанно с информационными технологиями и разработкой ПО. Я начал изучать книгу Дейтелов: "Как программировать на С" и естественно решать задачи после каждой главы. Я изучил и прорешал 5 глав. Изучил простейшие арифметические операции, операторы выбора: if, else, switch, операторы повторения while, for. Остановился на функциях и рекурсии. По мере продолжения изучения я все больше и больше сталкиваюсь с тем, что я самостоятельно не могу написать код для решения задачи и мне все больше и больше приходится подглядывать уже готовый код и разбирать его, особенно в главе 5 функции и рекурсия. Скажите пожалуйста нормально ли это, особенно меня сбила с толку рекурсия, код каждой задачи мне приходится подглядывать так как сам его написать не могу. Естественно у меня появляются сомнения относительно того, получится у меня в будущем работать, хотя при всем при этом интерес у меня не теряется. Пожалуйста поделитесь своим мнением, так как мне больше не у кого спросить. С уважением!
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.10.2020, 17:24
Ответы с готовыми решениями:

Книга для самостоятельного изучения С++
Подскажите, пожалуйста, какую-нибудь нормальную книгу для самостоятельного изучения С++ (возможности теперь позволяют только...

материалы предназначеные для самостоятельного изучения языка с++
Внимание: данные материалы предназначены для самостоятельного изучения языка с++ используя Microsoft Visual Studio 2008 и не только,,, ...

посоветуйте учебник для самостоятельного изучения с++ (с нуля)
сабж

93
08.10.2020, 13:23
Студворк — интернет-сервис помощи студентам

Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
иди осёл
Цитата Сообщение от ram876 Посмотреть сообщение
в лице модераторов
исправьте:
*или осёл
:)

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.10.2020, 13:35
Цитата Сообщение от XLAT Посмотреть сообщение
на первом плане есть упорство барана?
а также на связанный с этим вопрос, если этого упорства нет, то ГДЕ ЕГО ВЗЯТЬ???
Важный момент. Наличие личного качества называемого талантом...И наличие личного качества называемого упорством. Но упорство это же тоже талант?
Это трудный вопрос. Его можно в любых терминах обсуждать. С одной стороны упёртым можно родиться. С другой стороны, известен эмпирический факт, состоящий в том, что баранами не рождаются... Это значит, что упёртость и упорство - две вещи суть различные.
Я говорил о рекурсии в плане обучения. Если определить начальное местоположение новичка на новом уровне в терминах "куска какашки", то тут главное - талант рождаться головой к выходу. Тогда можно ползти вперёд не думая о направлении. И выползая из... попадаешь в новую за... задачу. И ситуация повторяется. В новой задаче важно опять-же народиться головой к выходу. По ходу будут встречаться зигзаги и приметы предыдущих задач.
В терминах барана это может выглядеть так.
Первая фаза. На совершенно новую теорему мы смотрим как на новые ворота. Требуется скил и мы работаем над собой.
Вторая фаза. Мы идём на ворота и бодаем в самую середину, проходя насквозь.
Третья фаза. Пройдя предыдущие ворота мы понимаем, как доказать неправоту доказанной теоремы. И так старая теорема порождает новую.
Глядя на новые ворота, важно убив дракона породить нового барана дракона в себе. В момент, когда уже нет сил это сделать, творческий путь заканчивается.
Ну а научить бодаться креативно, невозможно. Пока что тайна человеческого творчества не разгадана. Машины сильнее, но ни один бульдозер не умеет блеять.
Это значит, - без нас - ни как!

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от XLAT Посмотреть сообщение
или осёл для сравния был бы лучше?
Задача Буриданова барана состоит в том, что видя двух ослов, баран не в силах решить кого забодать первым. Это очень интересная задача, кстати. Но она не совсем в тему. :)

1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
08.10.2020, 13:40

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Пройдя предыдущие ворота мы понимаем, как доказать неправоту доказанной теоремы. И так старая теорема порождает новую.
это как у Эйнштейна, что бы понять определенный уровень нужно подняться на уровень выше

0
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.10.2020, 13:54

Не по теме:

Цитата Сообщение от _stanislav Посмотреть сообщение
это как у Эйнштейна, что бы понять определенный уровень нужно подняться на уровень выше
У него нетипичная ситуация. С ним нельзя сравнивать ни кого. У него лоб был шире любой задачи. Пробивать бесполезно, - всё равно не пройти ни как. Он перепрыгивал. Но рекурсивно, да. Сначала он сделал теорию исходя из отсутствия эфира, а потом признал, что отсутствие эфира тоже отсутствует.
Оставалось доказать что отсутствие само по себе тоже отсутствует, но ... жизнь не безгранична. Вот некоторые мысли, которые посещали Мэтра в конце его пути:
https://www.cyberforum.ru/blog... g6673.html


1
08.10.2020, 14:51

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Вот некоторые мысли, которые посещали Мэтра в конце его пути:
интересно

0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.10.2020, 16:15
Цитата Сообщение от K_ILYA_V Посмотреть сообщение
судя по стилю вашего комментария "Тебе" нужен ответ с картинками.
ты не ответил на вопрос.

ты понимаешь, что означают эти две несвязанные друг с другом настройки?
что такое "резервируемый размер стека" ?
что такое "фиксируемый размер стека" ?
и в чем между ними разница?

например, ты захотел себе 4 мб.
какие именно гайки ты будешь подкручивать?

вот эта фраза без запятых:
Цитата Сообщение от K_ILYA_V Посмотреть сообщение
1МВ стека это размер по умолчанию при этом если не указать дополнительно то будет выделено всего 4КВ.
смешались в кучу кони, люди... (ц)
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.10.2020, 16:32
Цитата Сообщение от IGPIGP Посмотреть сообщение
Что касается переполнения стека, то вот тут я с удовольствием послушаю. Насколько мне известно нет от этого защиты.
Ну, как минимум, несложно сделать велосипед переводящий переполнение стека в обычное исключение.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class StackGuard
{
public:
    StackGuard()
    {
        if(!recursionLimit)
            throw std::runtime_error("Stackoverflow");
        --recursionLimit;
    }
    ~StackGuard(){++recursionLimit;}
private:
    static thread_local unsigned recursionLimit;
};
thread_local unsigned StackGuard::recursionLimit=128;
 
void deeepRecursion(unsigned limit)
{
    StackGuard stackGuard;
    if(limit)
        deeepRecursion(limit-1);
}
 
int main()
{
    deeepRecursion(256);
    return 0;
}
1
Комп_Оратор)
Эксперт по математике/физике
 Аватар для IGPIGP
9007 / 4708 / 630
Регистрация: 04.12.2011
Сообщений: 14,003
Записей в блоге: 16
08.10.2020, 17:09
Цитата Сообщение от Renji Посмотреть сообщение
Ну, как минимум, несложно сделать велосипед переводящий переполнение стека в обычное исключение.
Renji, чем оно лучше переполнения? Задача то не решена? Я понимаю, что можно и без исключения из многократно вложенного вызова обойтись. Можно иметь функцию диспетчер которая вызывает рабочую рекурсивную. Та что, вызвана считает вызовы и выходит до крэша вернув промежуточный результат и всю память. Диспетчер повторяет вызов с новым результатом и обнулённым счётчиком. И это не один-единственный вариант. Вопрос в том, что не все алгоритмы последовательно распределяются. И в том, что всё это не бесплатно.
Что касается стека сооружаемого в динамической памяти, то это тоже накладно.
Ну и... Renji, тема для ТС в том, что он нашёл стену. По всем попыткам - глухую. И спрашивает о том как быть. В этом ценность, мне кажется. А про рекурсию в самом простом варианте можно легко прочесть. Например здесь:
https://habr.com/ru/post/319790/
или
https://ru.wikipedia.org/wiki/... 0%B8%D1%8F
но что толку, если ещё непонятно, что такое вызов функции сам по себе? Как работает механизм стека? Что такое рекурсивные структуры данных и как рекурсивные алгоритмы работают с ними?
Нужно практиковать.
А в производстве оно применяется редко. Если вообще применяется.
0
2784 / 1937 / 570
Регистрация: 05.06.2014
Сообщений: 5,602
08.10.2020, 17:23
Цитата Сообщение от IGPIGP Посмотреть сообщение
Renji, чем оно лучше переполнения? Задача то не решена?
Тем же, чем throw bad_alloc лучше OOM Killer. В большинстве случаев программа работает (скажем, мы не ожидаем больше 16 уровней вложенности). В отдельных, редких ситуациях пишет "не достаточно ресурсов для выполнения запроса".

Вот, для примера, у нас регулярка вида (A|B)*. Работать она скорее всего будет по принципу "попробуй A. Если не выстрелило - откатись назад и пробуй Б. А если выстрелило - начинай сначала, рекурсивно". Скорее всего, переполнения не будет. Потому как автор регулярки представляет себе технические ограничения и пишет аккуратно. Но вдруг автор регулярки криворукий? Тут нам нужен какой-то ограничитель глубины рекурсии, выбивающий ошибку "ресурсов нема". Или какие-то шаманства с бесконечной глубиной рекурсии. Первое проще.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.10.2020, 17:59
Ограниченная по вложенности рекурсия встречается не так уж редко.
Например, при выполнении функций типа write() и read() может выполняться read() и write() в другие файлы.
В ответственных местах, конечно, чаще можно встретить что-то вроде очереди запросов, чем многоэтажный стек вложенных вызовов.
0
E=m*c^2
 Аватар для K_ILYA_V
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
08.10.2020, 18:09
Цитата Сообщение от hoggy Посмотреть сообщение
ты не ответил на вопрос...
я дал вам ответ, вы не_захотели / не_смогли / не_желаете его понять.

Цитата Сообщение от hoggy Посмотреть сообщение
например, ты захотел себе 4 мб.
какие именно гайки ты будешь подкручивать?
/STACK:0x100000,0x100000

Цитата Сообщение от hoggy Посмотреть сообщение
...смешались в кучу кони, люди... (ц)
без комментариев.
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.10.2020, 19:03
Цитата Сообщение от K_ILYA_V Посмотреть сообщение
/STACK:0x100000,0x100000
И сколько это в байтах?

Добавлено через 39 секунд

Не по теме:

Цитата Сообщение от K_ILYA_V Посмотреть сообщение
/STACK:0x100000,0x100000
И сколько это в байтах?

0
Just Do It!
 Аватар для XLAT
4220 / 2683 / 656
Регистрация: 23.09.2014
Сообщений: 9,236
Записей в блоге: 3
08.10.2020, 19:21
Цитата Сообщение от politoto Посмотреть сообщение
И сколько это в байтах?
C++
1
2
3
4
5
6
7
8
#include <iostream>
#include <cmath>
 
int main()
{   if(0x100000 == pow(16, 5))
    {   std::cout << 0x100000 << " == " << (int)pow(16, 5) << '\n';
    }
}
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.10.2020, 19:39
Цитата Сообщение от K_ILYA_V Посмотреть сообщение
я дал вам ответ, вы не_захотели / не_смогли / не_желаете его понять.
я задал тебе конкретные вопросы:
Цитата Сообщение от hoggy Посмотреть сообщение
ты понимаешь, что означают эти две несвязанные друг с другом настройки?
что такое "резервируемый размер стека" ?
что такое "фиксируемый размер стека" ?
и в чем между ними разница?
ты не ответил.

ты просто не знаешь ответов на эти вопросы?

Цитата Сообщение от K_ILYA_V Посмотреть сообщение
/STACK:0x100000,0x100000
зачем ты задаешь оба параметра?
думаешь, если задашь только один,
размер стека не изменится?
0
E=m*c^2
 Аватар для K_ILYA_V
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
08.10.2020, 19:51
Цитата Сообщение от politoto Посмотреть сообщение
И сколько это в байтах?
вообще то конечно это 16МВ, а просили 4МВ, так что правильней будет:
/STACK:0x400000

Если предполагается что приложение будет однопоточное то так:
/STACK:0x400000,0x400000
тогда все 4МВ будут выделены первому и единственному потоку.

если нет то второе число определяет сколько стека получит первый поток и сколько по умолчанию будут получать инициированные им потоки.

Добавлено через 6 минут
Цитата Сообщение от hoggy Посмотреть сообщение
я задал тебе конкретные вопросы:...
мне испугаться? впасть в панику? встать в стойку смирно и громко и четко дать прямой и ясный ответ?

Цитата Сообщение от hoggy Посмотреть сообщение
ты не ответил.
ты просто не знаешь ответов на эти вопросы?
ваши вопросы не вызвали во мне интереса, как следствие я не нахожу для себя надобности давать на них ответы.

Цитата Сообщение от hoggy Посмотреть сообщение
зачем ты задаешь оба параметра?
думаешь, если задашь только один,
размер стека не изменится?
я задаю оба параметра что бы первый поток получил весь зарезервированный размер стека
0
Модератор
2131 / 1000 / 170
Регистрация: 23.07.2018
Сообщений: 3,349
Записей в блоге: 3
08.10.2020, 20:09
Не пойму, при чём тут дополнительные потоки, если конечно мы Windows обсуждаем
https://docs.microsoft.com/en-... llocations
0
E=m*c^2
 Аватар для K_ILYA_V
160 / 47 / 10
Регистрация: 04.02.2019
Сообщений: 263
Записей в блоге: 5
08.10.2020, 20:15
Цитата Сообщение от politoto Посмотреть сообщение
Не пойму, при чём тут дополнительные потоки, если конечно мы Windows обсуждаем
https://docs.microsoft.com/en-... llocations
дополнительные потоки, но не буду утверждать что новые процессы, получают стек из "зарезервированного стека" в размере "зафиксированного стека"

у "стандартного" приложения 1МВ, но каждому потоку из него, в том числе и первому, выдают только 4КВ, если иное не будет задано при создании потока.
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
08.10.2020, 20:18
Цитата Сообщение от K_ILYA_V Посмотреть сообщение
ваши вопросы не вызвали во мне интереса, как следствие я не нахожу для себя надобности давать на них ответы.
я так и понял, что ты не знаешь.
если б знал, не мешал бы в одну кучу

Цитата Сообщение от K_ILYA_V Посмотреть сообщение
я задаю оба параметра что бы первый поток получил весь зарезервированный размер стека
поток итак может пользоваться всем зарезервированным для него объёмом.
для того, что бы увелить размер стека, параметр commit трогать не нужно.

есть два параметра: reserve и commit

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

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


если, допустим, commit 4 кб, а reserve 1мб, и при этом поток уже отожрал свои 4кб,
тогда система задействует резерв: начнет подкачивать дополнительную память.
манипуляции с виртуальной памятью - не бесплаты.
и вот что бы минимизировать обращение к резерву,
можно увеличить объем физической памяти.

вот что я от тебя ожидал услышать с самого начала.
ну ладно хоть ты запятые начал вставлять в нужные места.
уже хорошо.
1
1 / 1 / 0
Регистрация: 16.10.2019
Сообщений: 106
08.10.2020, 20:18
Новичку главное 2 вещи - найти интересное задание и решить это задание красивым кодом. И если с поиском интересных заданий ещё более менее, то узнать насколько хорошо ты его выполнил - вот это проблема. Может все работать исправно и выполнять свою функцию, но в конечном итоге может оказаться, что код написан либо ногами и нормальные люди так никогда не кодят, либо код вообще неправильный и работает вопреки здравому смыслу. И вот как в этом вопросе совершенствоваться лично я не знаю.
0
08.10.2020, 20:31

Не по теме:

Цитата Сообщение от K_ILYA_V Посмотреть сообщение
у "стандартного" приложения 1МВ, но каждому потоку из него, в том числе и первому, выдают только 4КВ, если иное не будет задано при создании потока.
Можно о резервировании и выделении страниц стекам потоков ещё раз почитать тут, а потом проверить на практике
https://docs.microsoft.com/en-... eatethread
https://docs.microsoft.com/en-... stack-size

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.10.2020, 20:31

Посоветуйте материал для самостоятельного изучения С/С++/С#
Посоветуйте эффективный методический материал (книги, сайты и т.д.) для самостоятельного изучения С/С++/С#. А так же принципов ООП. Уж...

Книги для самостоятельного изучения PHP
Добрый день. После 3 лет работы сисадмином, понял что кодить нравится больше, чем админить, выбрал web на php backend. Заказал данную...

Сроки самостоятельного изучения 3ds max
Скажите можно ли самостоятельно научиться 3д максу, и сколько времени это займёт?

Литература для самостоятельного изучения теории вероятности
Посоветуйте учебники и сборники задач с примерами для самостоятельного теории вероятности. Желательно ePub или fb2. Спасибо!

Материалы для самостоятельного изучения языка SQL
Всем привет! Посоветуйте, пожалуйста, хороший видеокурс или другие материалы для самостоятельного изучения языка SQL. Заранее спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru