C/C++

Член од
22 јануари 2012
Мислења
5
Поени од реакции
1
Да, задачата не е сложена јас пробав да ја решам денеска ја решив до некаде и имам грешки, ве замолувам ако знаете да ми ги најдите грешките и да ја дорешите главната програма...и секако не ми е целата иднина да сум програмер.
Еве ја задачата што ја решавав:
#include <iostream>
using namespace std;
class Figura
{
protected:
int str;
public:
Figura(){};
Figura(int str=0)
{
str=a;
}
virtual void perimetar()=0;
virtual void plostina()=0;
}
static void SmeniBrojac(int b)
{
brojac=b;
}
};

class Kvadrat:public Figura
{
int br;
public
Kvadrat (int bk; int a):Figura(a)
{
br=bk;
}
void perimetar()
{
cout<<"perimetarot nakvadrat e"<<4*a<<endl;
}
void plostina()
{
cout<<"plostinata na kvardrat e "<<a*a<<endl;
}
};
class Pravoagolnik:public Figura
{
int brojac;
int a;
public:
Pravoagolnik (int bp; int a, int b):Figura(a)
{
brojac=bp;
{
void perimetar()
{
cout<<"perimetarot na pravoagolnik e"<<2*(a+b)<<endl;
}
void plostina()
{
cout<<"plostinata na pravoagolnik e"<<a*b<<endl;
}
};

void main()
{
Figura

--- надополнето: 23 јануари 2012 во 00:26 ---
Аман овде нема ништо сложено, отвори книгата за ОО и поминија уште еднаш. Ако ова неможеш да го направиш што остана за понатака. Ако ти е целта во иднина да си програмер послушај ме.
Да, задачата не е сложена јас пробав да ја решам денеска ја решив до некаде и имам грешки, ве замолувам ако знаете да ми ги најдите грешките и да ја дорешите главната програма...и секако не ми е целата иднина да сум програмер.
Еве ја задачата што ја решавав:
#include <iostream>
using namespace std;
class Figura
{
protected:
int str;
public:
Figura(){};
Figura(int str=0)
{
str=a;
}
virtual void perimetar()=0;
virtual void plostina()=0;
}
static void SmeniBrojac(int b)
{
brojac=b;
}
};
class Kvadrat:public Figura
{
int br;
public
Kvadrat (int bk; int a):Figura(a)
{
br=bk;
}
void perimetar()
{
cout<<"perimetarot nakvadrat e"<<4*a<<endl;
}
void plostina()
{
cout<<"plostinata na kvardrat e "<<a*a<<endl;
}
};
class Pravoagolnik:public Figura
{
int brojac;
int a;
public:
Pravoagolnik (int bp; int a, int b):Figura(a)
{
brojac=bp;
{
void perimetar()
{
cout<<"perimetarot na pravoagolnik e"<<2*(a+b)<<endl;
}
void plostina()
{
cout<<"plostinata na pravoagolnik e"<<a*b<<endl;
}
};
void main()
{
Figura
 

SinisteR.

Is this your homework Larry?
Член од
10 јуни 2011
Мислења
2.823
Поени од реакции
7.032
оваја да не е од испит на електро?
 
Член од
22 јануари 2012
Мислења
5
Поени од реакции
1
Член од
25 јануари 2012
Мислења
1
Поени од реакции
0
Ke moze li da dobijam odgovor za 1 problem. Glasi vaka: Napravi program koj od dadena niza broevi ke gi izbere broevite koj mozat da dadat zbir koj e za sho e mozno pomalku pogolem od nekoj drug daden broj.
Primer imame niza 5,6,2,7,3,8,8,2,4 i daden broj 24 i sega prvo programot treba da broba da dojde do zbir 25 ... dokolku nemoze da dojde do zbir 25 probue 26 ... se dodeka ne dojde do zbirot koj e za sho e mozno pomalku pogolem od dadeniot broj. Vo c++
 
M

Mr.InF3ction

Гостин
Ke moze li da dobijam odgovor za 1 problem. Glasi vaka: Napravi program koj od dadena niza broevi ke gi izbere broevite koj mozat da dadat zbir koj e za sho e mozno pomalku pogolem od nekoj drug daden broj.
Primer imame niza 5,6,2,7,3,8,8,2,4 i daden broj 24 i sega prvo programot treba da broba da dojde do zbir 25 ... dokolku nemoze da dojde do zbir 25 probue 26 ... se dodeka ne dojde do zbirot koj e za sho e mozno pomalku pogolem od dadeniot broj. Vo c++
Друже еве нешто направив. Интересна задача ...не знам дали има некој алгоритам за тоа ...но јас ја решив вака :
Код:
#include <iostream>
using namespace std;
int main ()
{
    int a[100],b[100],n,brn,i,j,suma=0,tmp,br=0;
 
    cout <<"Vnesi N ";
    cin >>n;
    cout <<"Kolku cifri ke vneses? ";
    cin >>brn;
    for(i=0;i<brn;i++)
        {
            cin>>a[i];
            b[i]=a[i];
        }
    for(i=0;i<brn;i++)
        for(j=0;j<brn;j++)
            if(b[j]<b[j+1])
                {
                    tmp=b[j];
                    b[j]=b[j+1];
                    b[j+1]=tmp;
                }
    j=0;
    while(suma!=n+j)
    {
        for(i=0;i<brn;i++)
        {
            if(suma+b[i]<=n+j)
                {
                    suma+=b[i];
                    a[br]=b[i];
                    br++;
                }
        }
   
        if(suma!=n+j)
        {
            suma=0;
            j++;
            br=0;
        }
    }
    for(i=0;i<br;i++)
    {
        if(i<br-1)
            cout<<a[i]<<"+";
        else
            cout<<a[i]<<"="<<n+j;
    }
}
Малце е зезнато што може да има повеќе конбинации за да се дојде до тој N број....според мене најлесно беше да ја сортирам низата и после од најголемиот до најмалиот да додавам еден по еден се додека не дојде до N број..ако не бројот N се зголемува за еден и пак истото.
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
Друже еве нешто направив. Интересна задача ...не знам дали има некој алгоритам за тоа ...но јас ја решив вака :
Код:
#include <iostream>
using namespace std;
int main ()
{
    int a[100],b[100],n,brn,i,j,suma=0,tmp,br=0;
 
    cout <<"Vnesi N ";
    cin >>n;
    cout <<"Kolku cifri ke vneses? ";
    cin >>brn;
    for(i=0;i<brn;i++)
        {
            cin>>a[i];
            b[i]=a[i];
        }
    for(i=0;i<brn;i++)
        for(j=0;j<brn;j++)
            if(b[j]<b[j+1])
                {
                    tmp=b[j];
                    b[j]=b[j+1];
                    b[j+1]=tmp;
                }
    j=0;
    while(suma!=n+j)
    {
        for(i=0;i<brn;i++)
        {
            if(suma+b[i]<=n+j)
                {
                    suma+=b[i];
                    a[br]=b[i];
                    br++;
                }
        }
 
        if(suma!=n+j)
        {
            suma=0;
            j++;
            br=0;
        }
    }
    for(i=0;i<br;i++)
    {
        if(i<br-1)
            cout<<a[i]<<"+";
        else
            cout<<a[i]<<"="<<n+j;
    }
}
Малце е зезнато што може да има повеќе конбинации за да се дојде до тој N број....според мене најлесно беше да ја сортирам низата и после од најголемиот до најмалиот да додавам еден по еден се додека не дојде до N број..ако не бројот N се зголемува за еден и пак истото.
Ова решение не е точно, има две грешки... :)
Првата, во задачава се бараат цифрите чиј збир е за што опмалце поголем од дадениот број (пример ако бројот е 24, програмата треба да ги испечати цифрите чиј збир е 25, ако нема такви цифри бара дали има цифри кои даваат збир 26, па 27... се така дури да се дојде цифрите чиј збир е за што помалце поголем од дадениот број).
Втората грешка е што неможе да се реши со сортирање и класично изминување на елементите односно мора да се направат повеќе комбинации затоа што во овој случај ако имаш да речеме 5 елементи и ако најмалиот и најголемиот елемент го даваат точното решение програмата ќе ја скокне таа комбинација и ќе испечати нешто трето.
Пример:
дадениот број = 20
низата = {2,12,13,14,19}
во овој случај треба да ги испечати 19 и 2 (19+2=21), а програмата ќе испечати нешто друго.

Оваа задача се решава со динамичко програмирање или рекурзија каде што ќе се генерираат комбинации/пермутации, логички вака ќе му дојде некако:
Код:
// deklarirash promenlivi
const int dolzina_na_niza = 10;
int niza[dolzina_na_niza] = {...}
int matrica[dolzina_na_niza+1][MAX_INT]
// deklariras matrica koja ke ima edna kolona poveke od dolzinata na nizata od dadenie
// pravis povtoruvacki ciklus koj ke generira kombinacii od dadenata niza i nivniot zbir ke go zapisuvas vo dodatnata kolona
// na kraj ja izminuvas samo dodatnata kolona i go baras zbirot shto e za shto pomalce pogolem od dadeniot broj i koga ke go najdes go pecatis cel red od matricata (tamu vsushnost ti e zapishana kombinacijata od cifrite)
 
/* Drugo reshenie (rekurzija) */
// ako nizata ima poveke od 10 elementi ke go nadmines limitot na int
// kako inicijalna vrednost ja cuvas prvata kombinacija i zbirot na nivnite cifri, pravish povtoruvachki ciklus koj ke generira kombinacii od dadenata niza i proveruvash dali novata generirana kombinacija ima zbir za pomalce pogolem od dadeniot broj, ako ima, gi zamenuvash pishanata kombinacija i zbirot so novo generiranata kombinacija i nejziniot zbir
За ваков тип на задачи веќе има развиено на алгоритми, треба само да се разбарате на нет. Овие задачи се од типот на Knapsack problem.
Кој разбра разбра, кој не... :D
 
M

Mr.InF3ction

Гостин
^ Се согласувам со тебе.
Пробав да ја решам затоа што е интересна задача и не ми делува како лесна барем за мене како почетник. И решението не е точно. Но ете за некои случаеви дава точен резултат..сепак има повеќе конбинации за да се дојде до тој број...и тоа е моментот каде што програмата треба да ја најде најдобрата конбинација од елементите од низата.
Ако имаш некое решение што си решил ти или од нет нешто може да постираш? ме интересира многу :)
 
Член од
14 јануари 2008
Мислења
4.251
Поени од реакции
909
Можеш да ги најдеш збировите на сите броеви во низата, со два for циклуси ја поминуваш цела низа секој со секого, под услов да не се исти броеви, т.е. да не се собира бројот сам со себе, ставаш уште еден услов за збировите да бидат поголеми од дадениот број, и ги додаваш само тие збирови во нова низа. (не е битно ако се повторуваат).

Останува само да ја подредиш низата по растечки редослед. Првиот елемент во низата е бројот(збирот) шо е потребен и шо го задоволува условот. Бидејки нели тој е најмалиот збир кој е поголем од дадениот број. И потоа пак ја минуваш првата низа и ги бараш броевите чиј збир е еднаков на тој најмал збир...
Ова онака, прво шо ми текна... :)
Иначе сигурно има други далеку поелегантни и поефикасни решенија.
 

SkyDriver

Would like my bananna ?
Член од
31 јули 2008
Мислења
2.140
Поени од реакции
221
^ Се согласувам со тебе.
Пробав да ја решам затоа што е интересна задача и не ми делува како лесна барем за мене како почетник. И решението не е точно. Но ете за некои случаеви дава точен резултат..сепак има повеќе конбинации за да се дојде до тој број...и тоа е моментот каде што програмата треба да ја најде најдобрата конбинација од елементите од низата.
Ако имаш некое решение што си решил ти или од нет нешто може да постираш? ме интересира многу :)
Имам само којзнае каде ми се по CDињава некаде, одамна не сум решавал алгоритми за да имам нешто такво при рака :)
Еве на брзинка решение во PHP (има подобра стандардна библиотека, во C/C++ треба ептен аргатско, а мака ми е да мислам сеа) :/

PHP:
    <?php
        function find() {
            $sum = 24;
            $array = array(5,6,2,7,3,8,8,2,4);
         
            $best_combination = array();
            $best_sum = 100000000;
     
            $results = array(array( ));
            foreach ($array as $element)
            {
                foreach ($results as $combination)
                {
                    array_push($results, array_merge(array($element), $combination));
                    $sum_of_combination = array_sum(array_merge(array($element), $combination));
                    if($sum_of_combination > $sum && $sum_of_combination < $best_sum)
                    {
                        $best_sum = $sum_of_combination;
                        $best_combination = array_merge(array($element), $combination);
                    }
                }
            }
            return $best_combination;
        }
    ?>
Излезот од ова е ваков:
array
0 => int 8
1 => int 3
2 => int 7
3 => int 2
4 => int 5
Ако некој не го мрзи може да го преве кодов :)
А за други решенија можеш да се разбараш по нетов нешто од типот dynamic programming, knapsack, combination, permutations и слични алгоритми. :)
 
Член од
12 јуни 2010
Мислења
200
Поени од реакции
61
Код:
#include <iostream>
using namespace std;
int main()
{
      int DD,DM,DG,DR,MR,GR,D,M,G;
      cout<<"Vnesete ja vasata data na ragjanje (Den,Mesec,Godina)"<<endl;
      cin>>DR;
      cin>>MR;
      cin>>GR;
      cout<<endl;
      cout<<"Vnesete go denesniot datum (Den,Mesec,Godina)"<<endl;
      cin>>DD;
      cin>>DM;
      cin>>DG;
      cout<<endl;
      cout<<"Vie ste stari "<<D<<" denovi "<<M<<" Meseci i "<<G<<endl;
     
      if (DR>DD)
      {
      DD=DD+30;
      D=DD-DR;
      DM=DM-1;
      }
      else
    {
      D=DD-DR;
      }
      if (MR>DM)
    {
      DM=DM+12;
      M=DM-MR;
      DG=DG-1;
      }
     
      else
      M=DM-MR;
     
      G=DG-GR;
      system("pause");
      return(0);
}

Помош со овој код ако може,поточно треба да пресметува колку години си стар,со внесено твоја дата на раѓање и денешен ден,што е грешката не пресметува точно односно што и да внесеш дава исти повекецифрени месеци,години....
 
Член од
5 јуни 2008
Мислења
3.632
Поени од реакции
5.724
Код:
#include <iostream>
using namespace std;
int main()
{
      int DD,DM,DG,DR,MR,GR,D,M,G;
      cout<<"Vnesete ja vasata data na ragjanje (Den,Mesec,Godina)"<<endl;
      cin>>DR;
      cin>>MR;
      cin>>GR;
      cout<<endl;
      cout<<"Vnesete go denesniot datum (Den,Mesec,Godina)"<<endl;
      cin>>DD;
      cin>>DM;
      cin>>DG;
      cout<<endl;
      cout<<"Vie ste stari "<<D<<" denovi "<<M<<" Meseci i "<<G<<endl;
   
      if (DR>DD)
      {
      DD=DD+30;
      D=DD-DR;
      DM=DM-1;
      }
      else
    {
      D=DD-DR;
      }
      if (MR>DM)
    {
      DM=DM+12;
      M=DM-MR;
      DG=DG-1;
      }
   
      else
      M=DM-MR;
   
      G=DG-GR;
      system("pause");
      return(0);
}

Помош со овој код ако може,поточно треба да пресметува колку години си стар,со внесено твоја дата на раѓање и денешен ден,што е грешката не пресметува точно односно што и да внесеш дава исти повекецифрени месеци,години....
cout<<"Vie ste stari "<<D<<" denovi "<<M<<" Meseci i "<<G<<endl; спушти го пред system("pause"); и ќе работи како што треба, освен за престапни години, секако :)
 

Kajgana Shop

На врв Bottom