Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.702.993
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
drnde kaže...

Unit testing anyone ?

In computer programming, unit testing is a method by which individual units of source code are tested to determine if they are fit for use. A unit is the smallest testable part of an application. In procedural programming a unit may be an individual function or procedure.

Zasto mislis da to vec ne radim? Ali ako mislis na nekakve frameworke za automatizirano testiranje, onda lol. Niti sam profesionalac, niti pisem toliko kôda...

 

Moja me metoda do sada dobro sluzila.

My computer once beat me at chess, but we got even after a round of boxing.
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Istina, CppUnit sam namjeravao u doglednoj buducnosti poceti koristiti, za testiranje klasa ponajvise...

 

@rustweaver

Hehe, tak i ja Python kod debuggiram, s print-om xD

Gentoo... it's like wiping your ass with silk. Or sandpaper.
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hm, jel itko od vas tu barata STL-om? Naime, muci me jedna stvar kod unosa (std::cin). Ne mogu bas skontati kak prekinuti unos u ovom slucaju:

 

std::vector<int> data;
std::copy(std::istream_iterator<int>(std::cin),
          std::istream_iterator<int>(),
          std::back_inserter(data));

 

E sad, ja tu unosim integere dok god ne unesem neki znak. No, problem je kad imam npr. vektor stringova, onda koji god znak unesem, unos se ne prekida. Zanima me dakle, kako ovdje ograniciti unos (i jel se moze uopce), dali se moze ograniciti broj unesenih znakova - recimo da imam polje integera velicine 4, na ovaj nacin stalno me trazi unos dok god ne unesem znak, onda mi kod ispisa ispise ovih 4 integera, a dalje dobim segfault - te moze li se recimo unos ograniciti na nacin da kad upisem recimo stop onda prekine unos?

 

Znam da ovo ima veze s iteratorima, a njih nisam jos u potpunosti prozvakao, pa ako netko bolje kuzi ovo, svaka pomoc je dobrodosla.

Gentoo... it's like wiping your ass with silk. Or sandpaper.
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ako želiš definirati broj unosa onda je bolje umjesto copy ovako:

 

vector<double>data;
double pom;
istream_iterator<double>double_itr(cin);
do {
    pom = *double_itr;
    if (pom != 0.0) {
       data.push_back(pom);
       ++double_itr;
    }
}
while (pom != 0.0);
for (int i = 0; i < data.size(); i++)
    cout << data[i] << " ";

 

Ovdje npr. unosi se sve dok ne uneseš 0, ili jednostavno staviš for petlju koja će učitati koliko ti treba.

Poruka je uređivana zadnji put ned 11.9.2011 22:15 (TracerCPP).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Ako želiš definirati broj unosa onda je bolje umjesto copy ovako:

 

vector<double>data;
double pom;
istream_iterator<double>double_itr(cin);
do {
    pom = *double_itr;
    if (pom != 0.0) {
       data.push_back(pom);
       ++double_itr;
    }
}
while (pom != 0.0);
for (int i = 0; i < data.size(); i++)
    cout << data[i] << " ";

 

Ovdje npr. unosi se sve dok ne uneseš 0, ili jednostavno staviš for petlju koja će učitati koliko ti treba.

Aha, dobro mislim, ovo razumijem, ali bas me zanimalo konkretno za onaj primjer, dali je moguce njega kontrolirati, jer ono ce raditi dok god ne dode do neke greske u streamu ili dok god je operator >> definiran za odredeni tip, u onom slucaju int.

Gentoo... it's like wiping your ass with silk. Or sandpaper.
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ono gore ima smisla tek kad je riječ o ulazu koji ima konačan kraj. Npr. pri učitavanju datoteke (fstream). No kod cin (tipkovnice) to je beskonačna petlja jer možeš "beskonačno" dugo utipkavati brojeve.

Moj PC  
1 0 hvala 2
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Ono gore ima smisla tek kad je riječ o ulazu koji ima konačan kraj. Npr. pri učitavanju datoteke (fstream). No kod cin (tipkovnice) to je beskonačna petlja jer možeš "beskonačno" dugo utipkavati brojeve.

E hvala, to me kopkalo, sad je sve jasno. :)

Gentoo... it's like wiping your ass with silk. Or sandpaper.
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Jos jedno pitanje. Sto je to tocno integer literal? Kolko sam ja skuzio, kad napisem recimo 32412 -> to je integer literal?

Gentoo... it's like wiping your ass with silk. Or sandpaper.
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Da. To bi trebala biti nekakva konkretna vrijednost (konstanta) tipa int.

14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

zanima me kako mogu zaokruzit neki realan broj na odredeni broj decimala

lol
 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
neznam_ime kaže...

zanima me kako mogu zaokruzit neki realan broj na odredeni broj decimala

Za ispis, ili bas zelis izmijeniti broj?

 

Za C:

Ako je za ispis onda koristis format "%.Xf" gdje je X broj koji odreduje koliko decimala zelis ispisati.

npr:

 

printf("%.2f", nekibroj);

 

Za C++:

Koristis setprecision(X), gdje je X maksimalni broj znamenki koje zelis prikazati

npr:

 

cout << setprecision(4) << nekibroj << endl;

 

Ako bas zelis zaokruzivati broj u varijabli tj. mijenjati mu vrijednost, onda se stvari malo kompliciraju, referiraj se na ovo

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put uto 13.9.2011 12:58 (rustweaver).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Hm.. ovo je zanimljivo. Skoro pa izazov :)

 

float Zaokruzi(float broj, int decimala) {
    int p = pow(10, decimala+1);
    int ostatak = (int)(broj * p) % 10;
    float tmp;

    broj = broj * p/10;
    if(ostatak < 5) // provjera zadnje znamenke
        tmp = int(broj);
    else
        tmp = int(broj) +1; // ili + 0.5 (svejedno)
    return (float)tmp*10 / p;
}

Poruka je uređivana zadnji put uto 13.9.2011 14:04 (TracerCPP).
Moj PC  
1 0 hvala 0
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Vrlo bitna stvar, kod floating aritmetike treba paziti. Stvar je u unutarnjem prikazu broja (unutar računala) pomoću mantise i eksponenta. Najbolje pokazati na primjeru.

 

#include <cassert>

int main()
{
   float a(0.03f);
   float b(10.0);
   float c(0.3);
   assert(a * b == c);

   return 0;
}

 

Ovaj assertion će failati, a ako napravite pojedinačni ispis a*b i c, dobit ćete 0.3. U čemu je onda stvar? Stvar je u unutarnjem prikazu broja. Naime, broj 0.3 dobiven umnoškom a i b te broj 0.3 dobiven direktnom pretvorbom broja 0.3 u binarni zapis (unutar računala) se razlikuju iako se oba na standardni izlaz ispisuju kao 0.3. Točnije, razlikuju se u 22. značajnom bitu. Zato je floating aritmetika malko zaje*bana stvar ako ne znate na koji način radi. Tak da kad radite kalkulacije, malo treba pripaziti oko toga.

Gentoo... it's like wiping your ass with silk. Or sandpaper.
 
2 0 hvala 1
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Evo još jednog primjera zezanja s realnim brojevima:

 

for(float f = 0; f != 1; f+= 0.1)
    cout << f << endl;

 

Beskonačna petlja!

Poruka je uređivana zadnji put uto 13.9.2011 14:33 (TracerCPP).
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Zato ja izbjegavam floate kad god mogu, nepouzdani su. Modifikacija gornje petlje tako da se izbjegne float tamo gdje ga ne mora biti:

 

for (int i=0; i<10; i++)
    cout << (float)i/10 << endl;

My computer once beat me at chess, but we got even after a round of boxing.
14 godina
offline
Programiranje u C++-u - pitanja i odgovori

ima neko voljan malo vremena da mi riješi jedan zadatak?

 

trebao bih program koji će nakon upisa broja provjerit dal je on djeljiv s svojim zbrojem znamenaka

pretpostavljam da bi to trebalo rijesiti pomocu polja, a neznam s njima radit pa bi mi jako dobro došlo rješenje jednog ovakvog zadatka da proucim i shvatim kako to ide

 

ili se može drukčije riješit?

★★★★★☆
Moj PC  
0 0 hvala 0
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Evo.

EDIT:Znam da ćete prigovarat na razmještaj zagrada :D

 

//Provjerava da li je broj djeljiv sa sumom svojih znamenki#include <iostream>using namespace std;int main() {    int y,pom,broj,i,brojZnamenki,suma;    cout<<"Upisi broj :";    cout<<endl;    cin>>broj;    brojZnamenki = 0;    pom = broj;    while (pom >0) {       pom = pom/10;       brojZnamenki++;                  }         pom = broj;         suma = 0;    for(i=0;i<brojZnamenki;i++) {       y =  pom % 10;       suma = suma + y;        pom = pom/10;        }      if (( broj % suma)  == 0){       cout<<"Broj je djeljiv sa sumom svojih znamenki"<<endl;       }    else  {           cout<<"Broj nije djeljiv sa sumom svojih znamenki"<<endl;           }    system("Pause");    return 0;                                                }    

HTC Desire Android
Poruka je uređivana zadnji put sri 14.9.2011 19:26 (emerik).
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Kad prelazis u novi red, radi to sa Shift + Enter, a ne obicni Enter. Boli me glava od ovih crta.

Gentoo... it's like wiping your ass with silk. Or sandpaper.
 
1 0 hvala 1
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Imam problem, jos sam pocetnik. Dobila sam zadacu, al imam problema s izradom. Bila bih zahvalna kad bi meni uradio zadatak :$ Ispisat sve neparne brijeve od 50 do 150, s tim da prvi krece od 50 a drugi od 150 (51-149-53-147) i ponovo se smjenjuju. Zahvaljujem!

 
0 4 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Uspjela sam uradit. Al sad imam problem, je l' zna iko kako se radi? treba mi da se program zaustavi kad se izjednace brojevi pri ispisu, mogu ja navest da je to 99 da ga manuelno zaustavim al imam neka opcija za to?

17 godina
moderator
online
Re: Programiranje u C++-u - pitanja i odgovori
Enchyy kaže...

Uspjela sam uradit. Al sad imam problem, je l' zna iko kako se radi? treba mi da se program zaustavi kad se izjednace brojevi pri ispisu, mogu ja navest da je to 99 da ga manuelno zaustavim al imam neka opcija za to?

Kako ćemo mi to napamet napraviti, ako ne znamo koje nazive varijabli koristiš i što si uopće radila? Daj kod koji si dosad napisala.

14 godina
protjeran
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...
Enchyy kaže...

Uspjela sam uradit. Al sad imam problem, je l' zna iko kako se radi? treba mi da se program zaustavi kad se izjednace brojevi pri ispisu, mogu ja navest da je to 99 da ga manuelno zaustavim al imam neka opcija za to?

Kako ćemo mi to napamet napraviti, ako ne znamo koje nazive varijabli koristiš i što si uopće radila? Daj kod koji si dosad napisala.

Je li ispisala?

SENAID
Poruka je uređivana zadnji put čet 15.9.2011 18:48 (Senaid_gates).
16 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Evo,ja sam ti ga rijesio.

 

//Program ispisuje sve neparne brojeve od 50 do 150,naizmjence od početka i kraja
#include<iostream>
using namespace std;
int main() {
   int x,y;
   cout<<"Neparni brojevi naizmjence su"<<endl;
   x=50;
   y=150;
   while(x != y){
      if ((x % 2) != 0)
         cout<<x<<endl;
      if ((y % 2) != 0)
         cout<<y<<endl;
      x++;
      y--;             
      }
   system("Pause");
   return 0;   
     }

HTC Desire Android
17 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Par malih pitanja. Poceo sam raditi nesto malo s custom tipovima. Za primjer je odabran tip racionalnog broja. Dakle, broj prikazan u razlomku. E sad, imam sve vise manje definirano, od tipa, konstruktora, bool operatora, aritmetickih operatora, skoro sve. Sad radim na I/O operatorima. Kod ide ovako:

 

std::istream& operator>>(std::istream& in, rational& rati)
{
    int n(0), d(0);
    char sep('\0');
    if (not (in >> n >> sep))
        in.setstate(std::cin.failbit);
    else if (sep != '/')
    {
        in.unget();
        rati.assign(n, 1);
    }
    else if (in >> d)
        rati.assign(n, d);
    else
        in.setstate(std::cin.failbit);

    return in;
}


E sad, da vidim jel sam dobro shvatio. Dakle, broj se unosi u obliku a/b. Sad me zanima, kod ovog if-a, kad unesem prvi broj on ga spremi u n, a kad lupim space, sljedeci znak koji cu unijeti spremit ce u sep? Nadalje, ako sve unosim bez razmaka, npr. 1/2, on ce jedinicu staviti u n, vidjeti da je sljedeci character znak pa "/" potrpati u sep, kako zna koji character gdje utrpati? Ako je unos slucajno 2 3, odvrtit ce se prvi else if, unget() ce dekrementirati get pointer i na taj nacin maknuti zadnji character? Kod drugog else if-a me zanima isto, kak on zna koji znak iz streama potrpati u koju varijablu? Ocito da mi input streamovi nisu najjasniji. Te zadnja stvar, return. Potrazio sam sto vraca, vraca sami objekt (*this), ali kome ga vraca?

Gentoo... it's like wiping your ass with silk. Or sandpaper.
 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

A zašto komplicirati? Napravi samo jedan unos i tretiraj ga kao string pa ga onda interno razdjeli na brojnik i nazivnik.

 

Edit: (*this) se obično vraća kad je riječ o članskim operatorskim funkcijama (onim s jednim parametrom):

 

Kompleksni operator +(double re);

....

 

Kompleksni Kompleksni::operator+(double re){

    this->re += re;

    // return Kompleksni(this->re + re, this->im); - vraćanje pomoću privremenog objekta ili...

    return *this;

}

Poruka je uređivana zadnji put pet 16.9.2011 23:55 (tvzovac).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
tvzovac kaže...

A zašto komplicirati? Napravi samo jedan unos i tretiraj ga kao string pa ga onda interno razdjeli na brojnik i nazivnik.

Ma nisam ja ovo izmislio xD, ovo je samo primjer iz jedne knjige, namjerno tak napisan, da se pokrije vise manje sve glede custom tipova. Od samih custom tipova, preko custom operatora do custom I/O operatora. Pa me zanima detaljno na koji nacin radi kod. Jos sam nesto skuzio, da mi je ovaj unget() mozda cak i nepotreban.

 

EDIT: A i ne znam kak bih izveo ovo sa stringom, ako mi kod ide ovako:

int main()
{
    rational a(0);
   
    std::cin >> a;
    std::cout << a;

    return 0;
}
Dakle, a mi je tipa rational, ne vidim u tom slucaju nacina da to izvedem preko stringa...

Gentoo... it's like wiping your ass with silk. Or sandpaper.
Poruka je uređivana zadnji put pet 16.9.2011 23:56 (1domagoj1).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Da budem iskren, sad mi je malo kasno za toliko kreativnog razmišljanja {#} Idem upaliti xbox

 

Edit 352: zbrisano nepotrebno

Poruka je uređivana zadnji put sub 17.9.2011 0:03 (tvzovac).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
tvzovac kaže...

Da budem iskren, sad mi je malo kasno za toliko kreativnog razmišljanja {#} Idem upaliti xbox

 

Edit 352: zbrisano nepotrebno

Aj :D, al sutra ako bi mi mogao objasniti ovo pitanje glede operatora >>, na koji tocno nacin uzima input sa tipkovnice, u stream i ono sto me muci, kome vraca objekt?

 

EDIT: Aaahaa, kuzim return. Jel to referenca na objekt tipa istream zato da se omoguci ulancavanje operacija upisivanja?

Gentoo... it's like wiping your ass with silk. Or sandpaper.
Poruka je uređivana zadnji put sub 17.9.2011 1:52 (1domagoj1).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Evo ti jedan primjer koji sam sad nabrzaka sklepao:

 

#include <iostream>
using namespace std;

class Kompleksni{
    public:
       double re, im;
       Kompleksni(){re = 0; im = 0;}
};
ostream& operator << (ostream& ulaz, Kompleksni Z){
    ulaz << Z.re << ((Z.im >= 0) ? "+" : "") << Z.im << "i";
    return ulaz;
}
istream& operator >> (istream& izlaz, Kompleksni& Z){
    izlaz >> Z.re >> Z.im;
    return izlaz;
}

 

 

i sad...

 

Kompleksni A;
cin >> A;
cout << A << endl;

cin i cout su ništa drugo već derivati istream i ostream a da bi se ulančavanje moglo nastaviti vraća se referenca na jedan od tih tipova streamova.

14 godina
offline
Programiranje u C++-u - pitanja i odgovori

Trebam pomoć oko zadatka:

 

 

Mirko i Slavko su se upisali na tečaj step dance-a. Taj ples se uglavnom svodi na lupanje posebno 

dizajniranom cipelom o pod. Kako Mirko i Slavko sve brzo savladaju, odlučili su osmisliti svoju plesnu 

koreografiju.

Cijela koreografija se može opisati kao niz slova 'L' i 'R'. Slovo 'L' označava lupanje lijevom nogom o 

pod, a slovo 'R' desnom. Mirko je shvatio da su najuzbudljiviji dijelovi plesa oni u kojima se izmjenjuju

udarci lijevom i desnom nogom, preciznije vrijednost koreografije je najduži uzastopni podniz u 

kojemu se stalno izmjenjuju slova 'L' i 'R'.

Svi znamo da je pisanje koreografije mukotrpan posao, s puno prepravaka, Slavko vas moli da za svaku 

prepravku koreografije ispišete vrijednost koreografije.   Prepravka na koreografiji je mijenjanje nekog 

slova iz 'L' u 'R' ili obrnuto. Na početku se koreografija sastoji samo od slova 'L'. 

LAZNI PODACI

U prvom retku se nalaze dva prirodna broja  N, duljina koreografije i  Q broj izmjena u koreografiji 

(N,Q ≤ 200 000).

U svakom od sljedećih  Q redaka se nalazi po jedan prirodni broj, koji označava koji element 

koreografije Mirko i Slavko prepravljaju.

IZLAZNI PODACI

Treba ispisati  Q redova, u  i-tom retku pisati jedan prirodan broj, vrijednost koreografije nakon  i-te

izmjene na njoj

 

Hvala.

griješiti je ljudski al je osjećaj božanski
 
0 0 hvala 0
Nova poruka
E-mail:
Lozinka:
 
vrh stranice