Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Требуется совет, проблемы с логикой в задачах.

20K
14 ноября 2006 года
anarx
9 / / 14.11.2006
Приветствую, хотелось бы услышать советов от знающих людей, начал изучать сначала Паскаль, затем Делфи, затем С++. Сами языки даются не сложно, проблема в том, что когда дается задание, примера "Найти периметр треугольника" сразу возникает ступор с логикой, не то чтобы саму формулу не знаю, а именно как это записать, тоесть как написать код программы, бывает что даже условие написать не могу. Как только вижу код решенной задачи, сходу могу объяснить что к чему ... Друг посоветовал мне заняться плотной практикой, тоесть решать-решать и решать типовые задачи. Вопрос заключается в том, поможет ли практика, что поможет вообще и поможет ли оно?

з.ы. с++ только шел среда, визуал еще не трогал, да и знания шел среды тоже очень скудны.

Спасибо.
22K
14 ноября 2006 года
Zyava
7 / / 10.11.2006
[QUOTE=anarx]Приветствую, хотелось бы услышать советов от знающих людей, начал изучать сначала Паскаль, затем Делфи, затем С++. Сами языки даются не сложно, проблема в том, что когда дается задание, примера "Найти периметр треугольника" сразу возникает ступор с логикой, не то чтобы саму формулу не знаю, а именно как это записать, тоесть как написать код программы, бывает что даже условие написать не могу. Как только вижу код решенной задачи, сходу могу объяснить что к чему ... Друг посоветовал мне заняться плотной практикой, тоесть решать-решать и решать типовые задачи. Вопрос заключается в том, поможет ли практика, что поможет вообще и поможет ли оно?

з.ы. с++ только шел среда, визуал еще не трогал, да и знания шел среды тоже очень скудны.

Спасибо.[/QUOTE]

Ну что тут можно предложить? Попробуй перед решением задачии написать словесно алгоритм, потом напиши его на псевдокоде (т.е. типа паскаля русскими словами, ШАЯ) а потом уже писать программу на си или паскале, думаю штук после 5-10 таких операций у тебя будет получаться лучше (так же можно попробовать по своему алгоритму на псевдокоде попробовать помоделировать работу программы - тоже полезное упражнение, поможет понять логику работы программы).
547
14 ноября 2006 года
Hydra
488 / / 20.06.2006
Программирование и кнопконажимательство - не совсем одно и то же.
Почитай книги по алгоритмизации - класику типа Кнутта, Пратта, Вирта
257
14 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=Hydra]Почитай книги по алгоритмизации - класику типа Кнутта, Пратта, Вирта[/quote]
ему пока ранова-то.
[quote=anarx]начал изучать сначала Паскаль, затем Делфи, затем С++. Сами языки даются не сложно, проблема в том, что когда дается задание, примера "Найти периметр треугольника" сразу возникает ступор с логикой, не то чтобы саму формулу не знаю, а именно как это записать, тоесть как написать код программы, бывает что даже условие написать не могу.[/quote]
странно изучать начал, а не можешь самое простое написать -> изучай лучше. есть такое понятие блок-схема. сначал прогу с помощью неё опиши. типовые задачи решать не советую, потом могут возникнуть определенные трудности. тебе надо над логикой поработать: решай больше алгебраических, а лучше геометрических задачек, и найди где-нибудь книжку по логике, такую чтоб больше повествовательного характера была, если сможешь найди где-нить сборничек отрывков из рассуждений Аристотеля и прочитай, для развития логики просто необходимо.
547
14 ноября 2006 года
Hydra
488 / / 20.06.2006
Цитата:

ему пока ранова-то.


Не солидарен. Такое никогда не рано - это основы основ.

16K
14 ноября 2006 года
PeaK
49 / / 02.10.2006
Берем простой пример - сложение. Реализуем его. Потом оформим как процедуру. Потом как рекурсивную функцию принимающую N параметров, потом как рекурсивную функцию принимающую указатель на первый элемент массива, потом на два массива, в первом числа, во втором - каким-то образом закодированные признаки операций сложения, вычитания, умножения и деления, соответствующие первому списку. Потом все делаете с односвязным списком. И так далее...
Возьмите простой пример, а потом добавляйте новое - в процессе программизма получите опыт и понимание алгоритмов. :)
3
14 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=kosfiz]типовые задачи решать не советую, потом могут возникнуть определенные трудности.[/QUOTE]
Какие?
257
14 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
Green
на мой взгляд типовые задачи предполагают какую-то шаблонность их решения и эти шаблоны запоминаются, т.к. решаешь таких задач много. а потом сталкиваешься с какой-то более сложной или просто сложной задачей и кажется тебе, что вот она хоть и сложная, но её можно разбить на вот такую и такую и т.д. по шаблонам. и в итоге пишешь правильный код, выполняющий всю необходимую работу, но оказывается, что если подумать, то можно прийти к решению, используя код в 2-3 раза меньше того, что есть у тебя и работающий быстрее. начинающим для того, чтобы писать правильный код не обязательно решать сотню задач по программированию, не надо хвататься сразу за клавиатуру и печатать код, а с листком бумаги и карандашом(ручкой и т.д.) в руках постараться понять смысл поставленной задачи, предложить варианты её решения, проанализировать каждый и выбрать оптимальный.
3
14 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=kosfiz]
на мой взгляд типовые задачи предполагают какую-то шаблонность их решения и эти шаблоны запоминаются, т.к. решаешь таких задач много. а потом сталкиваешься с какой-то более сложной или просто сложной задачей и кажется тебе, что вот она хоть и сложная, но её можно разбить на вот такую и такую и т.д. по шаблонам. и в итоге пишешь правильный код, выполняющий всю необходимую работу,
[/QUOTE]
Да, это так и это правильно.
Первая итерация - решить задачу простейшим способом, разделив её на простейшие подзадачи.

[QUOTE=kosfiz]
но оказывается, что если подумать, то можно прийти к решению, используя код в 2-3 раза меньше того, что есть у тебя и работающий быстрее.
[/QUOTE]
Это уже вторая итерация.
Решив задачу простейшим способом, разделив её на простейшие подзадачи, далее есть варианты оптимизации как самих решений подзадач, так и манипулированием решениями подзадач объядиняя их и упорядочивая различными способами.

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

Как метафора: задача "радиоприемник" распределяется на подзадачи "колебательный контур", "детектор", "усилитель". Далее эти подзадачи разделяются на более мелкие вплодь до конкретных радиоэлементов.
Задача решена. Далее оптимизируем: мы можем слить воедино колебательный контур и детектор, а можем влить в колебательный контур лишь часть элементов детектора; можем разделить усилитель на УНЧ и УВЧ, сделать УВЧ частью детектора и т.п. В любом случае мы оперируем элементами уже решенной задачи, а сл-но видим проблему целиком и как-бы подгоняем (оптимизируем) решение под уже известный результат.
Другой вариант придумать такой единый прибор, и вытачить его из единого куска кристалла.

[QUOTE=kosfiz]
начинающим для того, чтобы писать правильный код не обязательно решать сотню задач по программированию, не надо хвататься сразу за клавиатуру и печатать код, а с листком бумаги и карандашом(ручкой и т.д.) в руках постараться понять смысл поставленной задачи, предложить варианты её решения, проанализировать каждый и выбрать оптимальный.[/QUOTE]
Для решения задачи в любом случае нужен некоторый план действий, но не обязательно, что бы этот план был детальным. Для того чтобы уметь набросать такой универсальный план нужно иметь багаж знаний и опыта применения некоторых типовых решений (паттернов).
Решение же любой задачи влоб без использования априорного опыта (получаемого в практике решения типовых задач) очень трудоемкий и неоптимальный процесс.
Заходи в ветку "Общие вопросы программирования", там мы иногда решаем различные задачки и посмотри на сколько решение с использованием некоторых типовых решений получается стройнее, проще, а значит более пригодным для оптимизации, повторного использования, реализации и т.п.
20K
14 ноября 2006 года
anarx
9 / / 14.11.2006
Всем спасибо, ответы очень помогли, думаю проблема разрешиться. Еще раз всем спасибо.
257
14 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
напоследок т.к. тему видимо сейчас закроют:
[quote=Green]Ты почему-то считаешь, что решив задачу одним способом, а точнее набором типовых способов, программист не сможет придумать и другого решения.[/quote]
почему же сможет, но не всякий к этому стремится и не всякий способен придумать другое решение, другие же считают что шаблоны это и есть оптимальный вариант(особенно начинающие).
3
14 ноября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=kosfiz]но не всякий к этому стремится и не всякий способен придумать другое решение,
[/QUOTE]
Неспособный придумать другое решение без умения решать типовые задачи не придумает вообще никакого.

[QUOTE=kosfiz]
другие же считают что шаблоны это и есть оптимальный вариант(особенно начинающие).[/QUOTE]
Да так оно и есть. Типовые решения в большинстве случаев самые оптимальные. Другое дело, что многие не знают, что "придуманное" ими решение является типовым, и зная его они бы давно уже решили задачу, а не долбили бы гранит рядом с уже готовым тунелем.

Я так понял, что ты не любитель типовых решений. Отлично! Давай к нам:
http://forum.codenet.ru/showthread.php?t=30412
реши задачу любым нетривиальным способом так, чтоб она была быстрее O(n^3). Быстрее можно, как уже замеченно в теме. Тогда и разговор будет более предметным.
Ну или приведи пример своей задачи, которая подтверждала бы твои слова. Это тоже будет интересно.
257
15 ноября 2006 года
kosfiz
1.6K / / 18.09.2005
[quote=Green]Я так понял, что ты не любитель типовых решений. Отлично! Давай к нам:
http://forum.codenet.ru/showthread.php?t=30412
реши задачу любым нетривиальным способом так, чтоб она была быстрее O(n^3).[/quote]
обязательно посмотрю, может если и сам не смогу, то хотя бы гляну, что умные люди предлагают.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог