Задачка на C++ ...
Автор |
|
anonymousПон, 30.05.11, 13:02 |
Та сестра ми има задачка на C++ и търси помощ. Компилатор: Code::Blocks 10.05 Трион. Дадено е едно число n и едномерен масив a с n елемента. Да се намери най-дългата "трионообразна" последователност от елементи в този масив, за който са изпълнени неравенствата a[i]<a[i+1]>a[i+2]<....>a[i+j] |
редактиран от anonymous на 30.05.11 13:03 редактиран от anonymous на 30.05.11 13:03 | | phrozencrewПон, 30.05.11, 18:50 | | | anonymousВто, 31.05.11, 09:03 |
Работата не стана ясна... Все пак благодаря, че опита да помогнеш. Сестрата прегледа това, но не можа да го разбере... | | phrozencrewВто, 31.05.11, 19:17 |
Предполагам, че се затруднява с четенето на C++ код. И на мен ми е мъгла и обикновено си правя транслация на друг по-разбираем език, като Perl, php или JavaScript, където не се налага да декларираш всичко само за един обикновен тест. Мисля, че задачката ще стане по-ясна, ако се опита да намери суб-масива (на български е отрязък) с най-дългата последователност от намалящи и нарастващи числа. Някак си е по-разбираемо от тия триони . Ако целта е да се разбере, то това е начина - от лесното към трудното. Даже намерих псевдо код на подобна функция, която обяснява в голяма степен проблема с отрязъците масиви: Longest Increasing Subsequence | | kookkiВто, 31.05.11, 22:32 | RE: Задачка на C++ ...
” Мисля, че задачката ще стане по-ясна, ако се опита да намери суб-масива (на български е отрязък) с най-дългата последователност от намалящи и нарастващи числа. „ И аз по този принцип гледам да си правя кода, Пич. Първо съставям ядрото на задачката и после добавям по малко логическите следствия. Така се откриват по-лесно грешките в кода ,а и по не си напрягам мозъка. Принципно предпочитам да пиша по-дълъг код, който да проследявам лесно, отколкото компактен и завъртян. Ристич, сестра ти на какво ниво е С-то, че не разбира кода - аз си стоя все още на ниво начинаещ, пък го схванах? Кода може да се напише и само с употреба на цикли и условни проверки, без да се използват функции, макроси и указатели, както е в примера на Недялко. Според мен е тъпо да учиш код, преди да си схванал принципите на езика. Целта на тия задачки в училище е да се приложи теорията на практика. | | anonymousСря, 01.06.11, 11:22 | RE: RE: Задачка на C++ ...
” И аз по този принцип гледам да си правя кода, Пич. Първо съставям ядрото на задачката и после добавям по малко логическите следствия. Така се откриват по-лесно грешките в кода ,а и по не си напрягам мозъка. Принципно предпочитам да пиша по-дълъг код, който да проследявам лесно, отколкото компактен и завъртян. Ристич, сестра ти на какво ниво е С-то, че не разбира кода - аз си стоя все още на ниво начинаещ, пък го схванах? Кода може да се напише и само с употреба на цикли и условни проверки, без да се използват функции, макроси и указатели, както е в примера на Недялко. Според мен е тъпо да учиш код, преди да си схванал принципите на езика. Целта на тия задачки в училище е да се приложи теорията на практика. „ Сестра ми е в 9-ти клас в паралелка Информатика, ИТ и математика в математическа гимназия и са силно начинаещи. Имат си достатъчно лесни задачи в учебника обаче към него има и приложение с решенията им и учителката решила да им даде задачки от друг сборник. В крайна сметка вчера (крайният срок за предаване на задачите) се оказало, че задачата е нерешима дори от учителката... До колкото разбрах сега сестра ми има ново задание. | | boy4oСря, 01.06.11, 12:34 |
Задачката, впрочем е класическа за началните курсове по програмиране, но е и един от най-костеливите орехи в програмирането изобщо. Във фундаменталната "Изкуството на програмирането" Д. Кнут привежда и подробно коментира шест (!) различни варианта с различна степен на ефективност. А в конкретния случай имаме класически пример колко неподходящ е език като С/С++ за начално обучение по програмилане. | | phrozencrewСря, 01.06.11, 20:07 | RE: Задачка на C++ ...
” А в конкретния случай имаме класически пример колко неподходящ е език като С/С++ за начално обучение по програмилане. „
Напълно споделям мнението на boy4o. Дори да разгледаме само работата с динамични масиви, което е основополагащо за съвременен код, и количеството писане в C/C++, спрямо по-съвременните езици. Пример (perl, php): $arr[]=$element_na_masiva |
Означава: 1. Декларирай масива $arr без да го ограничаваш в дължината, т.е. динамичен масив. 2. Добави в динамичния масив елемента $element_na_masiva, което ще промени дължината му с единица. А тая променлива може да се декларира в момента на добавянето.
А пък рязане, свързване, обработка и преобразуване на масивите в python и ruby са направо свръх опростени. За подобно елементарно нещо в C/C++ ще се счупиш от писане. Но пък писането на C/C++ е свързано с бързодействието на изпълнимото приложение и си има скрита красота. Както и по-горе споменах, според мен в програмирането трябва да се върви от простото към сложното. И колкото повече научаваш, толкова повече ти се иска да се върнеш към корена ... Assembler! | | Коментар |