C/C++

M

Mr.InF3ction

Гостин
Прво условот на циклусот смени p->link != NULL затоа што внатре користиш (p->link)->info (тука ќе падне програмата пошто некогаш p->link ќе биде NULL, и од NULL ќе сакаш да земеш info.).
Потоа нема смисла да правиш: p->link = d->link, free(d->link), на наредиот циклус што ќе биде p->link? бриши само "d".

Инаку како што гледаш погоре се користи код таг кога се постира код :)
 

/МIRЧ3_МкД\

Временски патник
Член од
7 март 2012
Мислења
380
Поени од реакции
102
готово, free(d->link) ми било грешка цело време, и да while(p->link!=NULL) треба,
иначе се однесуваше на сите дупликати во сортирана листа, така да , еден после друг се
 
Член од
11 септември 2013
Мислења
33
Поени од реакции
17
готово, free(d->link) ми било грешка цело време, и да while(p->link!=NULL) треба,
иначе се однесуваше на сите дупликати во сортирана листа, така да , еден после друг се
probaj poslednite dve da ti se ednakvi, t.e. duplikati
i vidi ako uslovite dozvoluvaat dali programata ti e validna za 3 ili poveke isti vrednost edna do druga
 
Член од
5 август 2009
Мислења
1.295
Поени од реакции
484
Код:
poc1=p;
while(p!=NULL){
if(p->info==((p->link)->info)){
d=p->link;
p->link=d->link;
free(d->link);
}
else {p=p->link;}
 
}//gi briseme duplikatite od p listata
p=poc1;
Зошто циклусот постојано кружи? иначе алгоритмот би требало да ги брише сите дупликати од листата.. poc1,p и d се пок ?
while(p!=NULL) ... koga ke bide NULL?

едит: Човек не смее да чита друга тема, одма сто одговори во меѓувреме :)
 

Донев

★★
Член од
9 мај 2008
Мислења
35.551
Поени од реакции
52.343
Дадена ми е една двојно порвзана листа. Треба да ја поделам на две нови. Во едната да се непарните броеви, а во другата парните. Сугестии за алгоритмот? Само функцијата кај што се дели листата.
 
Член од
14 јануари 2008
Мислења
4.251
Поени од реакции
909
Дадена ми е една двојно порвзана листа. Треба да ја поделам на две нови. Во едната да се непарните броеви, а во другата парните. Сугестии за алгоритмот? Само функцијата кај што се дели листата.
Напрај фор циклус кој ќе ја помине цела листа, проверувај го секој елемент дали е парен (%2==0) и копирај во соодветната листа.
Ако незнаеш како да направиш фор циклус за листи, гуглај.

едит: Не видов дека е темава за ц и ц++, во јава има лесни функции за додавање бришење јазли и сл... за во ц++ ке мора рачно се да праиш ваљда? Незнам точно.
 
M

Mr.InF3ction

Гостин
Сите структури во било кој програмски јазик имаат ист/сличен интерфејс.

Инаку креирај 2 празни листи, една за парни и една за непарни броеви. Потоа главната листа која што ги содржи сите елементи измини ја со некој циклус и провери го тековниот објект во циклусот дали вредноста е парен/непарен па според тоа искористи готова функција за додавање на крај во листата за парни/непарни броеви соодветно.
 
Член од
14 септември 2013
Мислења
86
Поени од реакции
19
Имам задача и гласи: од стандарден влез се читаат знаци. Се чита се додека не се појави знакот '-'. Меѓу знаците има скриени броеви. Најдете го збирот на броевите. пр. Dime ima 12 denari i kupuva 3 knigi-
Излез: 15
Задачата треба да ја решам БЕЗ НИЗИ, само со циклуси, if - else, такво нешто. Имам идеја и таа изгледа вака:
Код:
#include<stdio.h>
int main()
{
    char znak;
    int pomosna,dodatna,nova;
    while(scanf("%c", &znak))
    {
        if(znak=='-')break;
        else{
            if(znak>=48&&znak<=57)
                {
                    pomosna=(int)znak-48;
                }
        }
    }
    return 0;
}
Она што не знам како да го реализирам е како да се прочита и следниот знак и доколку тој е цифра исто, да се додаде на претходната прочитана цифра (пр. првата е 1, втората е 2, па заедно 12). Ова треба да се повторува додека следниот знак е цифра (доколку е повеќе од еден). Се надевам дека ќе ми помогнете.
Фала ви за одвоеното време однапред.
Поздрав :)
 
Член од
28 август 2013
Мислења
3.983
Поени од реакции
11.881
Имам задача и гласи: од стандарден влез се читаат знаци. Се чита се додека не се појави знакот '-'. Меѓу знаците има скриени броеви. Најдете го збирот на броевите. пр. Dime ima 12 denari i kupuva 3 knigi-
Излез: 15
Задачата треба да ја решам БЕЗ НИЗИ, само со циклуси, if - else, такво нешто. Имам идеја и таа изгледа вака:
Код:
#include<stdio.h>
int main()
{
    char znak;
    int pomosna,dodatna,nova;
    while(scanf("%c", &znak))
    {
        if(znak=='-')break;
        else{
            if(znak>=48&&znak<=57)
                {
                    pomosna=(int)znak-48;
                }
        }
    }
    return 0;
}
Она што не знам како да го реализирам е како да се прочита и следниот знак и доколку тој е цифра исто, да се додаде на претходната прочитана цифра (пр. првата е 1, втората е 2, па заедно 12). Ова треба да се повторува додека следниот знак е цифра (доколку е повеќе од еден). Се надевам дека ќе ми помогнете.
Фала ви за одвоеното време однапред.
Поздрав :)
Код:
#include<stdio.h>
int main()
{
    char znak;
    int pomosna,zbir;
    zbir = 0;
    pomosna = 0;
 
    while(scanf("%c", &znak))
    {
            if(znak>=48&&znak<=57)
            {
                    pomosna =  pomosna * 10;
                    pomosna+=(int)znak-48;
             }
             else
             {
                  zbir += pomosna;
                  pomosna = 0;
                  if(znak=='-')break;
              }
    }
 
    return 0;
 
}
 

edin4o

Продуцент
Член од
4 април 2010
Мислења
1.419
Поени од реакции
461
Ова за циклуси, да во почеток знаат да бидат малку покмплицирани, но прво мора убаво да ги разбереш како функцинираат, а после само решавање на задачи, што повеќе задачи решаваш тоа ке се ти полесни. А до првиот колоквиум нема уште многу време. Моја препорака почни да ги решаваш сам задачите само така ке научиш да програмираш, затоа што од готови решенија тешко се учи.

Дали треба да се знае математика од претходно за да се научи смислата и логиката позади ваквиот тип на задачи? Пошто мене ми изгледа дека треба :)
Јас еве не бев баш најдобар во математика и колку да и пробувам да ги сфатам овие задачи, неможам. Зошто? Бидејќи незнам што значи да решаваш во Diamond shape, или попросто трансформација на број, или најпросто НЗД (секогаш ми претставувало проблем НЗД да најдам. Не дека ако не седнам нема да го научам тоа, него дека го немам вежбано многу)
Е сега, друго прашање:
Доцна ли е да се вратам на ваквиот тип математика?
 

Ilumious

Патник, педер, поет, администратор, масон
Член од
29 јануари 2007
Мислења
84.962
Поени од реакции
195.489
Дали треба да се знае математика од претходно за да се научи смислата и логиката позади ваквиот тип на задачи? Пошто мене ми изгледа дека треба :)
Јас еве не бев баш најдобар во математика и колку да и пробувам да ги сфатам овие задачи, неможам. Зошто? Бидејќи незнам што значи да решаваш во Diamond shape, или попросто трансформација на број, или најпросто НЗД (секогаш ми претставувало проблем НЗД да најдам. Не дека ако не седнам нема да го научам тоа, него дека го немам вежбано многу)
Е сега, друго прашање:
Доцна ли е да се вратам на ваквиот тип математика?
Не бе па ти шема е тоа, само треба да ја вметнеш. Програмерите што прават програми за економски пресметки мислиш знаат економска математика , им ја даваат формулата и си тераат по нивната логика.
 
Член од
14 септември 2013
Мислења
86
Поени од реакции
19
Код:
scanf("%d", &brojce);
    for(nova=brojce-1;nova>0;nova--)
треба да внесам број и потоа да барам број помал од внесениот кој треба да исполнува некакви услови. она што сакам да прашам е како треба да се дефинираат деловите во for, за да врти циклусот од внесениот број, наназад до нула?
дали добро е напишано или треба да се измени распоредот (или нешто трето)?
Фала :)
 

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.141
Поени од реакции
1.084
Код:
scanf("%d", &brojce);
    for(nova=brojce-1;nova>0;nova--)
треба да внесам број и потоа да барам број помал од внесениот кој треба да исполнува некакви услови. она што сакам да прашам е како треба да се дефинираат деловите во for, за да врти циклусот од внесениот број, наназад до нула?
дали добро е напишано или треба да се измени распоредот (или нешто трето)?
Фала :)
Па мене ми изгледа добро напишано, го иницијализираш бројачот на 1 помало од дадениот број а потоа бројачот ти врти надоле со намалување за 1 во секоја итерација се додека не стигне до нула. За вакви (кратки) прашања најубаво ќе ти биде да си го искомпајлираш, стај му еден printf внатре и готово, наместо да чекаш одговор на форум :)
 
Член од
14 септември 2013
Мислења
86
Поени од реакции
19
Па мене ми изгледа добро напишано, го иницијализираш бројачот на 1 помало од дадениот број а потоа бројачот ти врти надоле со намалување за 1 во секоја итерација се додека не стигне до нула. За вакви (кратки) прашања најубаво ќе ти биде да си го искомпајлираш, стај му еден printf внатре и готово, наместо да чекаш одговор на форум :)
Имаш право, не ми текна прво на тоа. Фала ти многу за одговорот. Поздрав :)
 

Kajgana Shop

На врв Bottom