C++ zadaci,resenja,pitanja,tutoriali

evo da pokrenem novu temu za sve nas koji radimo u c++
za pocetak evo jedan prost zadacic

1 napisati program koji racuna koren celih brojeva i resenje izbacuje u celom broju
ovo je veoma lako jer ne treba racunati decimalne vec samo cele

Resenje

Kod:
/*Ovaj program racuna koren celih brojeva
 i rezultat ispisuje u obliku celog broja takodje*/
#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char** argv)
{
    int Broj,Brojac;
    int Rezultat;
    cout << "Unesite ceo broj ";
    cin >> Broj;
    for (Brojac=0; Brojac<=Broj; Brojac++)
    {
        if (Brojac*Brojac==Broj)
        {
            Rezultat=Brojac;
        }
    }
    cout << Rezultat << endl;
    return 0;
}

kasnije stizu i neki tutoriali za sve one koji pocinju da uce ovaj veoma odlican jezik

mali pozdrav

... ..."veoma odličan jezik"....ahahahahah:hahaha::dash:
 
... ..."veoma odličan jezik"....ahahahahah:hahaha::dash:

Bez uvrede, ali ne spamuj ako nemaš šta pametno da kažeš. Ako već želiš da kažeš da ti je smiješno, a ti makar pokušaj da doprineseš temi nekim kodom. ;)


Obećao sam da ću i ja ponešto staviti na temu. Evo jedan fin objektni zadatak.

Написати на језику C++ класу за времена представљена помоћу броја часова, минута и секун-
ди. Предвидети:
• стварање времена на основу броја часова, минута и секунди (подразумевано (0,0,0)),
• дохватање делова времена,
• израчунавање збира два времена,
• упоређивање два времена (резултат је набрајање са могућим вредностима PRE, ISTO и
POSLE, зависно од односа упоређиваних времена),
• читање времена с главног улаза, и
• писање времена на главном излазу.
Написати на језику C++ програм који прочита динамички низ времена, израчуна збир нај-
мањег и највећег елемента низа, испише резултат на главном излазу и понавља претходне ко-
раке све док за дужину низа не прочита недозвољену вредност.

A evo i koda:

Ovdje je smještena deklaracija klase i par definicija metoda.
Kod:
// class header file

#ifndef TIME_H
#define TIME_H

#include <iostream>
//using namespace std; not used, we use std::istream and std::ostream instead istream and ostream

class Time {
	int sec;
public:
	enum Order { BEFORE, SAME, AFTER };

	Time (int _h = 0, int _m = 0, int _s = 0) {
		sec = _h * 3600 + _m * 60 + _s;
	};

	Time (const Time &t) {
		sec = t.sec;
	}

	int getHour () const { return sec / 3600; }
	int getMinute () const { return sec / 60 % 60; }
	int getSecond () const { return sec % 60; }

	friend Time & operator+ (const Time &a, const Time &b);
	friend Order compare (const Time &a, const Time &b);

	friend std::ostream & operator<< (std::ostream &os, const Time &v) {
		os << v.getHour () << ':' << v.getMinute () << ':' << v.getSecond ();
		return os;
	}

	friend std::istream & operator>> (std::istream &is, Time &v) {
		int h, m, s;
		is >> h >> m >> s;
		v.sec = h * 3600 + m * 60 + s;
		return is;
	}
};

#endif

Ovdje su smještene definicije metoda klase i globalnih f-ja (friend f-je klase su globalne f-je):
Kod:
#include "Time.h"

using namespace std;

Time & operator+ (const Time &a, const Time &b) {
	static Time &k = Time ();
	k.sec = a.sec + b.sec;
	return k;
}

Time::Order compare (const Time &a, const Time &b) {
	if (a.sec < b.sec) return a.BEFORE;
	else if (a.sec > b.sec) return a.AFTER;
	else return a.SAME;
}

I ovdje je main fajl u kojem se koristi ono što smo napisali u prethodna dva.
Kod:
#include "Time.h"

using namespace std;

void main () {
	while (true) {
		cout << "How many time elements? ";
		int n; cin >> n;
		if (n < 1) break;
		Time *a = new Time[n];
		for (int i = 0; i < n; i++) cin >> a[i];

		Time min = Time (a[0]); Time max = Time (a[0]);
		
		for (int i = 1; i < n; i++)
			if (compare (a[i], min) == Time::BEFORE) min = Time (a[i]);
			else if (compare (a[i], max) == Time::AFTER) max = Time (a[i]);

		Time k = Time ();
		k = min + max;
		cout << "\nSum of shortest and longest time: " << k << endl;

	}
}


Program prvo pita koliko vremenskih termina želite da unesete. Zatim unosite po tri cijela broja za svaki element (sati, minute i sekunde). Nakon toga program će da u tom nizu vremena nađe najkraće i najduže (preko definisane metode i enumeracije), te će izvršiti sabiranje (definisali smo operator sabiranja kako će se ponašati). Takođe smo definisali i operatore unosa i ispisa podataka koji će da rade sa našim složenim tipom podataka klase Time. To su is (za in stream) i os (za out stream).

Ako vam treba pomoć, javite. Inače ovo je jako fin oop zadatak koji pokriva klase, konstruktore i operatore. Destruktore nisam ubacio jer je dovoljan podrazumjevani jer nema pokazivačkih tipova podataka unutar same klase (jer nije isto definisati niz objekata neke klase i niz podataka unutar jednog objekta, kada nam trebaju posebni konstruktori i destruktori). Konstruktori ovdje služe samo za inicijalizaciju početnih vrijednosti i za kopiranje (mada možda i nije bio potreban konstruktor kopije, ali neka ga, fino je za shvatiti :) ).
 
E hvala bas sam trazio ovako nesto...doduse koliko sam provalio ovo je vise u pitanju operator overloading sto je super jer pre i nisam video neki razlog da se to primeni...jedini deo koda koj me malo buni je ovaj:

Kod:
Time::Order compare (const Time &a, const Time &b) {
	if (a.sec < b.sec) return a.BEFORE;
	else if (a.sec > b.sec) return a.AFTER;
	else return a.SAME;
}

Sad sta je compare?Da li je to ustvari objekat enum Order..posto prvi put vidim da se enum na taj nacin koristi..
 
E hvala bas sam trazio ovako nesto...doduse koliko sam provalio ovo je vise u pitanju operator overloading sto je super jer pre i nisam video neki razlog da se to primeni...jedini deo koda koj me malo buni je ovaj:

Kod:
Time::Order compare (const Time &a, const Time &b) {
	if (a.sec < b.sec) return a.BEFORE;
	else if (a.sec > b.sec) return a.AFTER;
	else return a.SAME;
}

enum Order je dio klase, a ne objekat klase. Objekat klase je konkretan skup svih elemenata prema definiciji klase, dok je enumeracija dio definicije te klase. Time::Order služi da kažemo koja je povratna vrijednost metode (funkcije klase) compare.

Sad sta je compare?Da li je to ustvari objekat enum Order..posto prvi put vidim da se enum na taj nacin koristi..

compare je metoda, a Order je ime enumeracije koje sadrži elemente BEFORE, EQUAL, AFTER. Pošto je enumeracija dio klase, njoj se pristupa kao imeklase::element_enumeracije za globalni pristup, odnosno imeobjekta.element_enumeracije. Znači compare je metoda koja ima povratnu vrijednost tipa date enumeracije.

Dakle, compare pozivamo i prosleđujemo dva objekta tipa Time. Poredimo prvi u odnosu na drugi. Zato ćemo vratiti iz prvog elementa jednu od tri vrijednosti enumeracije, tj. pošto je prvi argument predstavljen preko upućivača a, to vraćamo a.BEFORE, a.EQUAL, a.AFTER. Pošto je metoda compare tipa Time::Order, tj. tipa enumeracije, mi u glavnom programu možemo reći if (compare (t1, t2) == Time::BEFORE) ... itd.... Moramo navesti Time::BEFORE u poređenju, jer je enumeracija član klase Time.

Ne znam da li sam pogodio poentu, reci ako još uvijek nije jasno. ;)
 
Dobro ok je sad...samo nisam ja mislio da je enum Order objekat te klase(naravno da nije) vec sam mislio da je to compare objekat za pristupanje vrednosti u Orderu

znaci npr.

enum Order {BEFORE,SAME,AFTER};

i sad da bih pristupili tome

Order compare;
compare.BEFORE;

Sad koliko sam ja shvatio iz tvog objašnjenja compare() je ustvari metoda/funkcija čiji clanovi mogu da pristupe enuma Order.
 
Dobro ok je sad...samo nisam ja mislio da je enum Order objekat te klase(naravno da nije) vec sam mislio da je to compare objekat za pristupanje vrednosti u Orderu

znaci npr.

enum Order {BEFORE,SAME,AFTER};

i sad da bih pristupili tome

Order compare;
compare.BEFORE;

Sad koliko sam ja shvatio iz tvog objašnjenja compare() je ustvari metoda/funkcija čiji clanovi mogu da pristupe enuma Order.

compare() je metoda koja sama može da primi vrijednost Time::BEFORE, Time::AFTER ili Time::SAME. Takođe možeš pristupati preko konkretnog objekta, a.BEFORE, a.SAME, a.AFTER. ;)
 
evo jedan mali tutorial

ako niste primetili do sada smo se bavili samo konzolnim aplikacijama koje za obicne korisnike i nisu toliko zanimljive

ali sad je pitanje
Kako u C++ napraviti gui aplikaciju???

Odgovor je veoma jednostavan

treba koristiti neki gui framework

a sad koji????

pa ja preporucujem QT iz nekoliko razloga
1 Multiplatform osobina
2 dosta funkcionalan
3 jako dobra dokumentacija
ima jos dobrih stvari o njemu ali to mozete da pogledate na Nokia-nom sajtu

pa hajde da pocnemo

znamo osnove cpp-a
znamo makar malo objektno programiranje (OOP)

to je sve sto nam treba

hajde da napravimo prvu gui aplikaciju koja ce imati samo jedan prazan prozor

Kod:
#include <QApplication>
#include <QWidget>

int main() 
{
     QApplication app;
     QWidget form1;
     form1.show();
     return app.exec();
}

prvo smo prikljucili biblioteku QApplication da bi koristili osnovu QT-a
pa onda smo prikljucili QWidget i pozvali funkciju show()

nadam se da ste shvatili

neka neko postavi jos nesto

pozzz
 
Nemoj me Stefane pogrešno shvatiti, ali prvo treba savladati rad sa nizovima, listama, klasama, preklapanjem operatora, izvedenim klasama, template-ima, standardnom bibliotekom, rad sa fajlovima, pa tek onda preći na neko grafičko okruženje. Nemoj previše da žuriš, ako želiš kako treba savladati programiranje. :-/
 
Evo još jedan dobar zadatak, ovdje imamo preklapanje operatora i to za više različitih klasa, niz objekata jedne klase kao argument druge klase (doduše samo kao niz elemenata, ne kao niz pokazivača na elemente).


Postavka:
Написати на језику C++ следеће класе:

• Једнакокраки троугао се задаје основицом a и краком b (подразумевано 1, 1). Могу да се
дохвате димензије троугла (две методе), да се израчуна површина троугла
( P = a * sqrt (4b[SUP]2[/SUP] − a[SUP]2[/SUP]) / 4 ), да се испита да ли два троугла имају једнаке димензије (tro1==
tro2), да се испита да ли је површина једног трoугла мања од друге (tro1<tro2), да се
троугао прочита из улазног тока (ut>>tro) и да се троугао упише у излазни ток
(it<<tro) у облику (a,b).

• Листа једнакокраких троуглова се ствара празна после чега се троуглови додају један по
један на крај листе (lst+=tro). Може да се пронађе најмањи троугао у листи и да се
листа упише у излазни ток (it<<lst) у облику [tro1,tro2,…].
Написати на језику C++ програм који прочита с главног улаза број троуглова, читајући троу-
глове с главног улаза направи листу, испише направљену листу на главном излазу, проналази и
испише на главном излазу најмањи троугао у листи.


trougao.h
Kod:
#include <iostream>
using namespace std;

#ifndef TROUGAO_H
#define TROUGAO_H

class Trougao {
	double a, b;
public:
	Trougao (double osnovica = 1, double krak = 1);
	double uzmiOsnovicu () const { return a; }
	double uzmiKrak () const { return b; }
	double Povrsina () const;
	Trougao& operator= (const Trougao& t);
	friend Trougao operator+ (const Trougao& a, const Trougao& b);
	friend bool operator== (const Trougao& a, const Trougao& b);
	friend bool operator< (const Trougao& a, const Trougao& b);
	friend ostream& operator<< (ostream& it, const Trougao& t);
	friend istream& operator>> (istream& ut, Trougao& t);
};

#endif


trougao.cpp
Kod:
#include "trougao.h"
#include <iostream>
#include <cmath>
using namespace std;

Trougao::Trougao (double osnovica, double krak) {
	if (osnovica <= 0 || krak <= 0 || osnovica >= 2*krak) exit (1);
	a = osnovica; b = krak;
}

double Trougao::Povrsina () const {
	return a * sqrt(4*b*b - a*a) / 4;
}

Trougao& Trougao::operator= (const Trougao& t) {
	this->a = t.a; this->b = t.b;
	return *this;
}

Trougao operator+ (const Trougao& a, const Trougao& b) {
	Trougao temp = Trougao (a.a + b.a, a.b + b.b);
	return temp;
}

bool operator== (const Trougao& a, const Trougao& b) {
	return (a.a == b.a && a.b == b.b);
}

bool operator< (const Trougao& a, const Trougao& b) {
	return (a.Povrsina () < b.Povrsina ());
}

ostream& operator<< (ostream& it, const Trougao& t) {
	return it << '(' << t.a << ',' << t.b << ')';
}

istream& operator>> (istream& ut, Trougao& t) {
	double osnovica, krak; cin >> osnovica >> krak;
	Trougao temp = Trougao (osnovica, krak);
	t = temp;
	return ut;
}


lista.h
Kod:
#include "trougao.h"
#include <iostream>
using namespace std;

#ifndef LISTA_H
#define LISTA_H

class Lista {
	int kap, duz;
	Trougao *a;
public:
	explicit Lista (int k = 10);
	~Lista () { delete [] a; }
	int uzmiDuzinu () const { return duz; }
	int uzmiKapacitet () const { return kap; }
	Trougao& uzmiElement (int i) const { return a[i]; }
	Lista& operator+= (const Trougao& t);
	Trougao minTrougao () const;
	friend ostream& operator<< (ostream& it, const Lista& l);
};

#endif


lista.cpp
Kod:
#include "lista.h"
#include <iostream>
using namespace std;

Lista::Lista (int k) {
	a = new Trougao[kap = k]; duz = 0;
}

Lista& Lista::operator+= (const Trougao& t) {
	if (duz == kap) exit (1);
	a[duz++] = t;
	return *this;
}

Trougao Lista::minTrougao () const {
	if (a == 0) exit (1);
	Trougao *m = &a[0];
	for (int i = 1; i < duz; i++)
		if (a[i] < *m) m = &a[i];
	return *m;
}

ostream& operator<< (ostream& it, const Lista& l) {
	cout << '[';
	for (int i = 0; i < l.uzmiDuzinu () - 1; i++)
		cout << l.uzmiElement (i) << ',';
	cout << l.uzmiElement (l.uzmiDuzinu () - 1) << ']' << endl;
	return it;
}


main.cpp
Kod:
#include "trougao.h"
#include "lista.h"
#include <iostream>
#include <cstdlib>
using namespace std;

int main () {
	Trougao t;
	cout << "Unesite broj trouglova: ";
	int n; cin >> n;
	Lista lst = Lista (n);
	for (int i = 0; i < lst.uzmiKapacitet (); i++) {
		cin >> t;
		lst += t;
	}
	//t = lst.uzmiElement (0) + lst.uzmiElement (1) + lst.uzmiElement (2);
	t = lst.minTrougao ();
	cout << lst << endl;
	cout << "Najmanji trougao je: " << t << endl << endl;
	system ("PAUSE");
}

Mislim da je cilj programa jasan iz postavke. Ako nešto nije jasno, pitajte. Imao sam problema sa ovim, ali sam uspio pohvatati sve te stvarčice zašto se dešavaju, pa je sad u redu. :D

Edit: Ovo pod comment lst.uzmiElement (0) + .... služi samo da pokaže da je operator + ovako kako je definisan moguće koristiti za više od dva sabirka, zbog kako da kažem, "rekurzivnosti" koja proizilazi iz definicije. :)
 
Poslednja izmena:
necemo dakle da ulazimo u to sta je za sta namenjeno i sta je bolje.......c# je manje popularan jer je jos dete 8 godina a c++ je napravljen pre skoro 30 godina.......kada c# bude toliko onda razmatrajte ove postove..............i uopste nije slabiji jezik........recimo da je potpuno oo za razliku od c++................i da omogucava wpf app pisane u xaml-u.............nepobitno je da je c++ jezik koji je vise u upotrebi a koliko je bolji i dali je uopste o tome treba pricati.........


EDIT: @Stefan a molim te kako c++ stedi memoriju....??
 
Poslednja izmena:
lepo
koristi pointere :D
pa i c++ je potpuno oo
reci ti meni da li C# podrzava QT ili da li podrzava GTK
ako to podrzava i ako moze da se izvrsi na linuxu omah cu priznati da gresim

EDIT to sto ti nisi uspeo da naucis oo u c++ ne znaci da je C# bolji i da je potpuno oo
ustvari sta ti znaci to "potpuno oo"
 
c# je programski jezik koji ms najvise "forsira".....ako si cuo za xna Game Studio (koji je PRAVLJEN u c#) znaces da sve sve igice koje se prave u njemu pisu i c# jezikom.....tj. napisane su u c#............takodje Visual3D Game Engine koristi C#................a to sto c++ stedi memoriju ne znaci nista jer se i u c# mogu koristiti pointeri (to je stvar programera)..........
potpuno oo znaci da je 100% objektno orjentisan a c++ nije..............i C# MOZE DA RADI NA LINUX-U preko Mono-a.....informisi se............mono radi i na win. i na linuxu.....eto....imas jos nesto ??
 
Pa prvo ovu uopste nije tema c++ vs c#....
Ta tvoja recenica "@Stefan a molim te kako c++ stedi memoriju....??" govori da ti i nisi najbolje proucio c++ jer je on po tome i poznat po brzini, zapravo ja mislim da je to i glavni njegov adut sad brzini tvog koda zavisi od razlicitih faktora ja mislim da je najbitnije kako programer zapravo uradi program jer dzabe ako je jezik brz i stedljiv ako je kod nije optimizovan.C++ pod jedan nema garbage collector,nije zavistan ni od jednog framework-a kao sto je c#, multi-platformski je, takodje mi mozemo odluciti gde cemo trpati memoriju u heap ili stack itd...sad da ne nabrajam...Samo se zapitaj zasto se sve AAA igre prave u njemu?(preformanse)

Sad to sto c++ nije u potpunosti oop ja to vise vidim kao prednost nego manu..

Sad rekao si da Microsoft forsira c# i to je i logicno kad radi na njihovom framework-u(njihov je i jezik valjda?)a da budemo realni microsoft bi forsirao i gov*o samo da je njihovo(iako c# je ok jezik)

E sad ovo je moje mišljenje u kojem ne tvrdim da je ni jedan jezik bolji ni lošji oba su ok...A ti 2 pac si krajnje ne ozb. prvo prouci jezike kako treba pre nego sto ih pljujes ili hvališ...Nije mi jasno kako mozes da komentarises c++ ako neznas sta su pointeri i reference i nijedan aspekt oo u njemu ako je nesto lakse neznaci da je momentalno bolje.

Tek sam sad procitao: kakve veze sad XNA ima sa c# to je samo jedan game engine napisan u c# i sto tamo jos neki engini postoje...skoro svi high-level jezici imaju i napisane game engine...mogu iz glave da nabrojim neke napisane u c/c++,javi,python-u,as3..itdrealno sto se tice game-dev c++ je jos uvek tata-mata
 
Poslednja izmena:
E sad ovo je moje mišljenje u kojem ne tvrdim da je ni jedan jezik bolji ni lošji oba su ok...A ti 2 pac si krajnje ne ozb. prvo prouci jezike kako treba pre nego sto ih pljujes ili hvališ...Nije mi jasno kako mozes da komentarises c++ ako neznas sta su pointeri i reference i nijedan aspekt oo u njemu ako je nesto lakse neznaci da je momentalno bolje.

Ja što sam napisao o tome koji je bolji napisao sam čitajući šta stručniji ljudi kažu, jer sam skoro počeo učiti C++, a C# još nisam. Oni kažu da managed code ima 90% performanse ne-managed code-a... tako da je C++ nešto brži...

2pac, ti si koliko juče počeo učiti prvo C++, bio ti težak, pa si prešao na C# i to što si naučio pisati nešto koda (jako malo si naučio, da budem iskren, prema onome što sam do sad vidio) ne znači da si kompetentan da ocjenjuješ koji je bolji. Nisam ni ja, ali ja to ne potenciram.

Uostalom jezik je jedna od poslednjih stvari koja se gleda pri optimizaciji programa/igre. Hoću da kažem da je izbor pravog algoritma na pravom mjestu jako važan. Ako izabereš pogrešan algoritam, džaba ti da u simboličkom mašinskom programiraš.

I pretvorismo temu u C++ vs C#, počeli smo da spamujemo, a iskreno rečeno nijedan od nas nije dovoljno upućen u ovu oblast da bi mogao argumentovano da raspravlja. A i ne treba ovdje da se svađamo, hajde da se fokusiramo na zadatke. :)
 
u pravu si to za spamovanje.......nisam toliko strucan da sudim alki smatram da je malo ko na forumu.......i jos nesto........ja sa nekoliko prijatelja radim razne projekte tj. programe za koje naravno uzimamo pare i sve to..........prvenstveno zbog gui-a radimo u c#........a ja i dalje radim c++ kada su u pitanju zadaci tako da...........nebitno samo hocu da dokazem da c# nije deciji jezik kao sto mnogi misle..............
 

Back
Top