C/C++

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

Инаку како што гледаш погоре се користи код таг кога се постира код :)
 
готово, free(d->link) ми било грешка цело време, и да while(p->link!=NULL) треба,
иначе се однесуваше на сите дупликати во сортирана листа, така да , еден после друг се
 
готово, 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
 
Код:
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?

едит: Човек не смее да чита друга тема, одма сто одговори во меѓувреме :)
 
Дадена ми е една двојно порвзана листа. Треба да ја поделам на две нови. Во едната да се непарните броеви, а во другата парните. Сугестии за алгоритмот? Само функцијата кај што се дели листата.
 
Дадена ми е една двојно порвзана листа. Треба да ја поделам на две нови. Во едната да се непарните броеви, а во другата парните. Сугестии за алгоритмот? Само функцијата кај што се дели листата.

Напрај фор циклус кој ќе ја помине цела листа, проверувај го секој елемент дали е парен (%2==0) и копирај во соодветната листа.
Ако незнаеш како да направиш фор циклус за листи, гуглај.

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

Инаку креирај 2 празни листи, една за парни и една за непарни броеви. Потоа главната листа која што ги содржи сите елементи измини ја со некој циклус и провери го тековниот објект во циклусот дали вредноста е парен/непарен па според тоа искористи готова функција за додавање на крај во листата за парни/непарни броеви соодветно.
 
Имам задача и гласи: од стандарден влез се читаат знаци. Се чита се додека не се појави знакот '-'. Меѓу знаците има скриени броеви. Најдете го збирот на броевите. пр. 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). Ова треба да се повторува додека следниот знак е цифра (доколку е повеќе од еден). Се надевам дека ќе ми помогнете.
Фала ви за одвоеното време однапред.
Поздрав :)
 
Имам задача и гласи: од стандарден влез се читаат знаци. Се чита се додека не се појави знакот '-'. Меѓу знаците има скриени броеви. Најдете го збирот на броевите. пр. 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;
 
}
 
Ова за циклуси, да во почеток знаат да бидат малку покмплицирани, но прво мора убаво да ги разбереш како функцинираат, а после само решавање на задачи, што повеќе задачи решаваш тоа ке се ти полесни. А до првиот колоквиум нема уште многу време. Моја препорака почни да ги решаваш сам задачите само така ке научиш да програмираш, затоа што од готови решенија тешко се учи.


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

Па мене ми изгледа добро напишано, го иницијализираш бројачот на 1 помало од дадениот број а потоа бројачот ти врти надоле со намалување за 1 во секоја итерација се додека не стигне до нула. За вакви (кратки) прашања најубаво ќе ти биде да си го искомпајлираш, стај му еден printf внатре и готово, наместо да чекаш одговор на форум :)
 
Па мене ми изгледа добро напишано, го иницијализираш бројачот на 1 помало од дадениот број а потоа бројачот ти врти надоле со намалување за 1 во секоја итерација се додека не стигне до нула. За вакви (кратки) прашања најубаво ќе ти биде да си го искомпајлираш, стај му еден printf внатре и готово, наместо да чекаш одговор на форум :)
Имаш право, не ми текна прво на тоа. Фала ти многу за одговорот. Поздрав :)
 

Kajgana Shop

Back
На врв Bottom