Re: Додавання двох чисел у форматі linked list
(mapcar '+ '(1 2 3)'(3 4 5))
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Додавання двох чисел у форматі linked list
Так, будь-яка мова програмування після серії вдосконалень перетворюється на ЛІСП.
ur_naz, це ви про що? Невже, про те що задача з боку формату чисел вiдносно складення зводится до задачи:
Як скласти 765 та 876 щоб вийшло 1245, при чому у варiантi "задача задля особливо обдарованих", де правила кодування вже поясненi, наперед? Може й так.
Работа iз однозв'язним списком значно цiкавiша, сама по собi.
Teg Miles, у моєму кодi, видно щонайменше 2 проблеми. Одна з них - неефективне використання iнтерфейсу std::forward_list, i вона легко вирiшується. Друга, це вада самого iнтерфейсу цього класу у контекстi текучоi задачи i її виправлення не таке вже й просте, але можливе. Подивiться сам клас https://en.cppreference.com/w/cpp/conta … rward_list, та помiркуйте. Це буде корисно, якщо ви бачите себе як майбутнього програмiста C++. I це не заради розширеного розумiння std::forward_list, а саме задля того, щоб почути себе C++ програмером, що думає про деталi, аналiзує, копає, i iнодi розкопує) У цьому користь.
Хоча, якщо ви ще маєте запал на те, щоб по файнокодити на манер С, це теж має право на життя. Можна працювати у двох напрямках. У всiлякому разi, якби не вашi питання, то у цьому роздiлi форуму була б тиша. А так можна щось поробити. За це, вам подяка)
ur_naz дав ліспівський код замість сіплюсплюсного, а ЛІСП, як відомо, є мовою, спеціально зробленою для роботи зі списками, тому програма в нього максимально коротка. Які я бачу недоліки в цьому коді:
1) Нема переносу розрядів — а отже, для такої пари чисел:
(mapcar '+ '(1 2 3)'(8 9 5))
результат буде (9, 11, 8), а не (9, 1, 9), як нам би того хотілось.
2) В умові сказано, що довжина списків може бути різною — отже, коротший список слід попередньо доповнити нулями чи іншим способом урахувати цю різницю.
3) З урахуванням переносу розрядів, кінцевий список може вийти довшим, ніж початкові — цього теж нема в поточній реалізації.
Ба більше, в умові не просто аби-які списки, а зв'язні. Ліспівські списки, звісно, абстрактні і можуть бути реалізовані і на зв'язних, але мова досить чітко іде про явні структури, а не приховані.
ur_naz дав ліспівський код замість сіплюсплюсного, а ЛІСП, як відомо, є мовою, спеціально зробленою для роботи зі списками, тому програма в нього максимально коротка.
Ну поперше, ви у роздiлi С++, шановний. Тому ваша зневага у виглядi недо сіплюсплюсного висловлювання, не доречна. Я колись трохи кодив на auto-lisp, що є дiалектом Лiспу для AutoCAD. Це дивовижна мова, так. Але якщо казати про списки, то я б вже визначив LUA, тим бiшлше, що вона, iнколи зустрiчається у промислових С++ проектах.
Teg Miles, я все ж зроблю спробу розштурхати вас, до руху у корисному напрямку. Подивiться класс std::forward_list. Якщо спочатку буде незручно (iндусський дiалект англiйскої, навiгацiя по сайту, тощо), чи будуть питання з семантiки, - звертайтесь, - я вiдповiм. Але спочатку по-експерементуйте у кодi. Якщо, ви не вiдгукнентеся, менi доведеться самому продемонструвати, тi виправлення, що покращили б код, про який йшлося вище. Але, на жаль, тодi iнтрига буде втрачена, а моя спроба буде марною.
(mapcar '+ '(1 2 3)'(3 4 5 6))
ur_naz, у роздiлi https://replace.org.ua/forum/20/ є пiдроздiл Lisp. Останнє повiдомлення там датується 2016 (!!) роком. Спрямуйте свою енергiю на розвиток того роздiлу, замiсть забруднювати iнiшi.
Тут нецікаво
нi, це там точно не цiкаво. не набридло вам сiсiшки вiд голой дiвки м'яти? воно ще вчится, а ви нащо понасiли? Чи вам батога дати, щоб тс бити? чи вас самих бити? i окремого батога тим, хто розказує, що вказiвник в плюсах то є список, бо це не так, але не так.
ну, це ж неможливо терпiти...
Задачка в три дii: pop + push.
Користуватись треба тим, що вже є, що придумали неглупi люди, а не винаходити мопеди, яки вже давно винайдено.
Доречi forward_list - це яма, чи не так? то якого дiдька insert_after?
нi, це там точно не цiкаво. не набридло вам сiсiшки вiд голой дiвки м'яти? воно ще вчится, а ви нащо понасiли? Чи вам батога дати, щоб тс бити? чи вас самих бити?
Подивiтьcя на свiй пост з lisp кодом. Воно вигляда наче ви з якихось кущiв вискочили з плакатом. Тай зараз, про якiйсь батiг волаєте, наче воно в вас десь стiрчить, та нагадує i перетинає усi iншi слова.
i окремого батога тим, хто розказує, що вказiвник в плюсах то є список
Я такого не бачив, принаймнi там де був на цьому ресурсi. У цiй темi такого точно нема, то про що цей зойк?
Доречi forward_list - це яма
Про це б можна було поговорити, але треба вам вилiзти з кущiв, кинути плакат та винути батiг. Тодi при наявностi члено роздiльної речи, можна обговорювати. Якщо коротко то - нi, forward_list це не яма.
то якого дiдька insert_after?
Це зручно. Оскiльки Teg Miles поки мовчить, покажу:
LS &ls_first=ls1_sz<ls2_sz? ls1:ls2;
LS &ls_second=&ls_first==&ls1? ls2:ls1;
LS ls_res;
int remind(0), res(0);
l_it it_frst=ls_first.begin(),it_end=ls_first.end(),
it_sec=ls_second.begin(),it2_end=ls_second.end();
//////////////////////////////////////////////////////////////////////////
/*
res= *it_frst+*it_sec;
remind=res/10;
res%=10;
ls_res.push_front(res);
l_it it_res=ls_res.begin();
++it_frst;
++it_sec;
*/
/////////////////////////////////////////////////////////////////////////////////////
l_it it_res=ls_res.before_begin();//отака iнiцiалiзацiя дозволяє викинути блок коду, що закоментовано
for(;it_frst!=it_end; ++it_frst, ++it_sec)
{
res= *it_frst+*it_sec+remind;
remind=res/10;
res%=10;
it_res=ls_res.insert_after(it_res, res);
}
for(;it_sec!=it2_end; ++it_sec)
{
res=*it_sec+remind;
remind=res/10;
res%=10;
it_res=ls_res.insert_after(it_res, res);
}
if(remind)
ls_res.insert_after(it_res, remind);
for(auto el:ls_res)cout<<el<<' ';
return 0;
}
Саме insert_after працює тут разом з iтератором що вказуе на поле поперед begin(). Нi у якого контейнера std немає такого звiра як before_begin(). Це дозволяє почати список без стартового push_front().
P.Y. написав:ur_naz дав ліспівський код замість сіплюсплюсного, а ЛІСП, як відомо, є мовою, спеціально зробленою для роботи зі списками, тому програма в нього максимально коротка.
Ну поперше, ви у роздiлi С++, шановний. Тому ваша зневага у виглядi недо сіплюсплюсного висловлювання, не доречна. Я колись трохи кодив на auto-lisp, що є дiалектом Лiспу для AutoCAD. Це дивовижна мова, так. Але якщо казати про списки, то я б вже визначив LUA, тим бiшлше, що вона, iнколи зустрiчається у промислових С++ проектах.
Teg Miles, я все ж зроблю спробу розштурхати вас, до руху у корисному напрямку. Подивiться класс std::forward_list. Якщо спочатку буде незручно (iндусський дiалект англiйскої, навiгацiя по сайту, тощо), чи будуть питання з семантiки, - звертайтесь, - я вiдповiм. Але спочатку по-експерементуйте у кодi. Якщо, ви не вiдгукнентеся, менi доведеться самому продемонструвати, тi виправлення, що покращили б код, про який йшлося вище. Але, на жаль, тодi iнтрига буде втрачена, а моя спроба буде марною.
Я бачив ваше посилання на спеціалізований зв'язаний список зі стандартної бібліотеки.
Застосую його за нагоди, а зараз моя мета просто виконання завдань.
Наберу достатньо базових навичок, почну працювати з вдосконаленням.
Зарано мені на глибину, втоплюся:).
Зарано мені на глибину, втоплюся:).
Ми ж поряд. Не дамо вам втопитися. В мене за плечима, доречи, практика першої допомоги, тож померти спокiйно я нi кому не дам) Смiлiше, - уперед!
не набридло вам сiсiшки вiд голой дiвки м'яти?
Ви так це розписали, що аж захотілось перечитати Страуструпа.
Ви так це розписали, що аж захотілось перечитати Страуструпа.
Знiмаю, капелюха пред тими хто має для цього достатнiй рiвень. Перед тими хто тiльки починає шлях у C++, теж, але з iншiх мiркувань. Iз скорботою, тобто. Я б порадив Лiпмана i Ко. Прату, можна теж. Потiм, набувши трохи практичного досвiду, можна й iншi речi. А Страуструп, навiть тяжчий за Александреску. Тому й знiмаю капелюха, якщо воно вам вже заходить.
ur_naz написав:не набридло вам сiсiшки вiд голой дiвки м'яти?
Ви так це розписали, що аж захотілось перечитати Страуструпа.
Це конктретна алегорія на оце неподобство
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
Завдання з обучаючого сайту, що тут обговорюється є невдалим, але типовим. Це тому що, насправдi, анi в кого, майже, не має мети когось чомусь навчити. Це вже тут лунало. Це не є якоюсь вадою мови C++. Проте, якщо абстрагуватись вiд якостi завдання, його реалiзацiя має право на обговорення. Ви ж шановний, немаючи й вiддаленої гадки про мову взагалi, та объ'єкт однозв'язного списку у термiнинах C++, дозволяєте собi безглуздi висловлювання. На вiдповiдi не реагуєте. Це я про вашу яму та insert_after. Я зустрiчав таких на багатьох форумах i скажу, що такий тип учасника, це зло. Якщо нема iншiх людей у роздiлi Lisp, це логiчне пояснення, чому вiн у занепадi. Iдiть, шановний, туди та працюйте, а не шукайте мiсця де є якiсь люди серед якiх можно зробити амбре.
koala, прошу роздивитися та почистити тему.
steamwater, Тобi потеревенити, посратися, чи випендритися? На багатьох форумах, особливо росiйских я зустрiчав таких, як ти, персоналiй, що не знають кордонiв дозволеного. Дуже швидко такi кролi переходять на особистостi лише тому, що не дотягують рiвнем i не розумiють написаного, але ж треба завжди бути зверху, треба командувати тощо, а для цього навiть зневага пiдiйде. це якийсь комплекс неповноцiнностi, чи щось iнше, не знаю.
Тема вичерпана вже на минулiй сторiнцi. В твоєму кролiнгу нема потреби. Якщо мене зацепиш, могу i декласувати i перетворити на Вiталiка.
I останнє - питання: як правильно написати зв'язний список
Ти ба, навiть здатнiсть розмовляти прорiзалась. Що до здатностi думати, все погано. З етiкою та вихованням теж.
Що до написання списку, то це не є темою даного топiку. Є другi теми, пошукайте, або створiть свою. Я спробував вам вiдповiсти про яму та insert_after (два тупi питання), але не почув вiдповiдi. А вiдповiдати на питання що завершує чергогву купку лайна, у якостi маскування, вiдповiдати нема бажання.
Доречи, якщо ви, дiйсно були:
На багатьох форумах
i досi не зрозумiли, що до теми, а що нi, це багато про що говорить. Вам, особисте, не вiдповiдатиму доки не побачу людське обличча.
Тобто клас зв'язного списку ти написати не вмiєш, то навiщо пащу розкрив?