Pa nigdje se ne postavlja vrijednost varijable kockica,tj cijelo vrijeme je 0.
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.713.362
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Pa nigdje se ne postavlja vrijednost varijable kockica,tj cijelo vrijeme je 0.
Kako nije postavi se svaki puta kada je varijabla broj_jednakih veća od kockice, a to je sigurno prvi put.
Što je to kod klasa javno sučelje ?
To su svi javni clanovi klase kojim pristupas izvan klase.
nabavio sam ove headere gl3.h, wglext.h, glext.h i glxext.h. gl3.h je vjerojatno openGL 3.3 ali za ostale ne znam jesu li ekstenzije ili nešto drugo.
nabavio sam ove headere gl3.h, wglext.h, glext.h i glxext.h. gl3.h je vjerojatno openGL 3.3 ali za ostale ne znam jesu li ekstenzije ili nešto drugo.
Kome se obraćaš?, ili se onako hvališ da si nabavio headere? Daj SS foldera i svih tih ostalih fajlova.
@FireMan97 , koliko sam vidio ti najprije trebaš utvrditi fundamentalno gradivo, petlje, nested petlje, deklariranje i rad sa poljima, grananja. Sve ti to treba da bi ovaj zadatak efikasno riješio.
A onda trebaš usvojiti stil rada potreban za rješavanje ovakvih zadataka - tj. poželjno je da prije samog kucanja koda osmisliš koncept rješavanja, po potrebi taj koncept razradiš na papiru.
U praksi bi to izgledalo ovako:
- iz zadatka je vidljivo da nam treba jednodimenzionalno polje
- u tom polju svaki član moramo usporediti sa svima drugima članovima, a to je najefikasnije uraditi preko ugniježdđenih petlji, dakle svaki index vanjske petlje uspoređujemo sa svim indexima unutarnje petlje
- vidljivo je da ako usporedimo vrijednosti polje[0] == polje[1] da ne moramo uspoređivati vrijednosti polje[1] == polje[0]
- kad u obzir uzmemo gornju točku opseg vanjske petlje možemo postaviti da petlja kreće od početka polja tj. indexa 0, a završava na predposljednjem indexu polja, jer zadnji index u vanjskoj petlji ne treba na usporedbu
- a opseg unutarnje petlje možemo postaviti da petlja kreće od indexa tekuće iteracije vanjske petlje uvećano za 1 jer ne moramo uspoređivati vrijednosti na istom indexu polja, a petlja završava na zadnjem indexu polja
Kod izgleda ovako:
#include <iostream>
using namespace std;
int main()
{
int brojac, ponavljanja=1, polje[5];
for(int i=0; i<5; i++) // unos polja vršiš preko petlje
cin>> polje[i];
for(int i=0; i<5-1; i++) // vanjska petlja vrti do predposljednjeg indexa polja
{
brojac = 1; // restiranje brojača za svaku iteraciju vanjske petlje
for(int j=i+1; j<5; j++) // unutarnja petlja vrti od trenutne iteracije
{ // vanjske petlje + 1 mjesto, pa do kraja polja
if(polje[i] == polje[j])
brojac++; // ako su jednaki povećava brojač
}
if(ponavljanja < brojac)
ponavljanja = brojac; // ako je brojač trenutne iteracije vanjske petlje
} // veći od varijable ponavljanja, ponavljanja zauzima
cout<< ponavljanja << endl; // tu vrijednost
return 0;
}
Ne bi bilo loše da prođeš iteraciju po iteraciju petlji, koristit će ti.
Ne bi bilo loše da prođeš iteraciju po iteraciju petlji, koristit će ti.
Kako to misliš? Debuggerom ili onako na pamet?
Ne bi bilo loše da prođeš iteraciju po iteraciju petlji, koristit će ti.
Kako to misliš? Debuggerom ili onako na pamet?
kako god zna, zar je važno
kako god zna, zar je važno
Pa dobro, možda bi u Visual C++-u u debuggeru bilo lakše, ima uvid u sve, samo postavi breakpoint na odgovarajuće mjesto.
kako god zna, zar je važno
Pa dobro, možda bi u Visual C++-u u debuggeru bilo lakše, ima uvid u sve, samo postavi breakpoint na odgovarajuće mjesto.
otišao si u druge vode, ja sam naglasak stavio na rad nested petlji, bude li te pitao za debug mode, objasni mu
nabavio sam ove headere gl3.h, wglext.h, glext.h i glxext.h. gl3.h je vjerojatno openGL 3.3 ali za ostale ne znam jesu li ekstenzije ili nešto drugo.
Kome se obraćaš?, ili se onako hvališ da si nabavio headere? Daj SS foldera i svih tih ostalih fajlova.
ako ne znaš o ćemu pričam pogledaj stranice 95 i 96 ove teme. zanima me ćemu služe ti headeri i jel trebam include i lib fajlove za openGl3.3
nabavio sam ove headere gl3.h, wglext.h, glext.h i glxext.h. gl3.h je vjerojatno openGL 3.3 ali za ostale ne znam jesu li ekstenzije ili nešto drugo.
gl.h je header za OpenGL do verzije 1.3
gl3.h je header za OpenGL core profile, dakle GL 3.1 naviše (tek je u draft fazi, na stranicama još nema normalne verzije i nedostaje gl3ext.h). Sad bih ti trebao objasniti i što je točno core profile a što je compatibility profile, ali to pronađi na netu.
glext.h je header za sve OpenGL ekstenzije, i funkcije koje se ne nalaze u gl.h headeru. Ide do trenutne verzije, dakle 4.2
wglext.h je header funkcija za kreiranje OpenGL konteksta na Windows operacijskom sustavu.
glxext.h je header funkcija za kreiranje OpenGL konteksta pod X Windowsima (linux, macos i ostali *nixi).
glut.h i glu.h su GL Utility Toolkit, tj. stariji headeri koji sadrže razne pomoćne funkcije koje ti olakšavaju kreiranje OpenGL konteksta (dakle otvaranje prozora ili fullscreen) i neke druge stvarćice.
glaux.h je GL Auxiliary Library, također stariji header koji sadrži neke druge pomoćne funkcije. Često se koristi na raznim tutorijalima koji se bave starijim verzijama OpenGL-a.
Od biblioteka s kojima moraš linkati imaš opengl32.lib za MSC (Visual Studio) odnosno libopengl32.a za GCC, te još glaux.lib/libglaux.a i glut32.lib/libglut32.a za glaux i glut biblioteke.
Već sam ti dao link na jedan tutorial koji se bavi radom sa OpenGL 3.2 u visual studiu bez dodatnih pomoćnih biblioteka:
https://sites.google.com/site/opengltutorialsbyaks/introduction-to-opengl-3-2---tutorial-01
Za ostalo si pogledaj na netu GLEW koji uvodi reda u kaotičnu situaciju sa OpenGL headerima i njihovim verzijama. Za službena i detaljnija objašnjenja headera na ovoj stranici možeš pronaći specifikacije za razne verzije OpenGL-a.
Moja preporuka je da se okaniš i OpenGL-a i Allegra (s kojim si se također mučio) i jednostavno prijeđeš na XNA kada već ionako koristiš Visual Studio i Windows. Više orijentirano početnicima, i bez mučenja sa headerima, verzijama, različitim profilima i pomoćnim bibliotekama...
EDIT: kreiranje OpenGL rendering konteksta znači otvaranje neke površine na ekranu (bilo u prozoru ili fullscreen) na kojoj se iscrtava OpenGL grafika.
puno hvala, sad mi je sve jasnije. još me zanima samo jedna stvar- jel bolji Blender ili OpenSceneGraph za 3D modeliranje? i nije meni teško naučit sve te funkcije i procedure nego se izgubim u svim tim potrebnim datotekama a i one headere sam jedva našao.
još me zanima samo jedna stvar- jel bolji Blender ili OpenSceneGraph za 3D modeliranje?
Koliko ja znam Blender.
puno hvala, sad mi je sve jasnije. još me zanima samo jedna stvar- jel bolji Blender ili OpenSceneGraph za 3D modeliranje?
OpenSceneGraph ni nije software za 3D modeliranje. Za modeliranje od besplatnih imaš Blender, Wings3D, True Space, a od komercijalnih 3D Studio, Lightwave, Cinema4D, Softimage XSI, Modo, Maya...
Moze li mi netko objasnit kako rijesit ovaj zadatak: https://www.infokup.hr/Content/Downloads/2012/Algoritmi/Zadaci-Skolsko-2012-Algoritmi-Srednja-I.pdf
Zadatak:Gradovi
Evo sto sam ja napravio:
#include <iostream>
using namespace std;
int BrojGradova;
int SagradjeneCeste;
int main()
{
do
{
cin
}
while()
return 0;
}
Moze li mi netko objasnit kako rijesit ovaj zadatak: https://www.infokup.hr/Content/Downloads/2012/Algoritmi/Zadaci-Skolsko-2012-Algoritmi-Srednja-I.pdf
Zadatak:Gradovi
Evo sto sam ja napravio:
#include <iostream>
using namespace std;
int BrojGradova;
int SagradjeneCeste;
int main()
{
do
{
cin
}
while()
return 0;
}
Ja sam taj zadak rijesio na natjecanju pomocu algoritma koji se zove flood fill. No da bi ga znao promijeniti moraš znati neke osnove teorije grafova.
Hvala na odgovoru, to je ono sto sam trazio. Knjiga je inace iz 2010. i to je valjda u tadasnjim verzijama kompajlera bilo moguce. Sto se tice c++11 standarda, dosada sam se susreo sa konstruktorom pomaka(eng. move constructor) i nastojim koristiti njegove mogucnosti.
No malo zbunjuje taj C++11 standrad. Je li on sluzbeno prihvacen? g++ jos zahtijeva da se pomocu switcha( -std=c++11) posebno naglasi da se koristi taj standard.
Vjerovatno si do sada već sam provjerio a u slučaju da nisi i za onog koga zanima::
2011 ISO C++ standard je službeno prihvaćen 2011 god. i zadnja je verzija C++-a kao što je to prije nje bila C++ 03.
g++ 4.7 još zahtjeva kako si naveo. Kad će doći do full implementacije i podrške ne znam ali sa svakom ver. gcc-a stvari idu naprijed.
Komparacije radi
gcc 4.3 http://gcc.gnu.org/gcc-4.3/cxx0x_status.html
gcc 4.7 http://gcc.gnu.org/gcc-4.7/cxx0x_status.html
Negdje sam pročitao , ne mogu se sjetiti točno adrese da cijela stvar može potrajati 2-3 godine , doduše već je i prošao jedan dio od službenog prihvaćanja tako da treba oduzeti od te brojke.
Uglavnom , novina je puno te se svi kompajleri prilagođavaju ::
http://wiki.apache.org/stdcxx/C++0xCompilerSupport
bjarne stroustrup (tvorac jezika) o C++11
C++11 feels like a new language: The pieces just fit together better than they used to and I find a higher-level style of programming more natural than before and as efficient as ever.

ne uče se, ništa od algoritama za natjecanje se ne uči u školi u redovnoj nastavi (možda tu i tamo neki jako jednostavni algoritam)
sve ćeš morat doma učit, ako ti je lakše pokušaj naći neku knjigu pa po njoj učit
Pa to je i logično. U školama učiti algoritme za natjecanja bi bilo suludo. Ako to zanima tebe, mene, to ne znači da zanima cijeli razred. Dobro, sada bi mogli reći da onda možemo povući analogiju na matematiku, ali neće šljakati. Škola bi trebala dati osnovne smjernice potencijalnim programerima, i neke osnove. Osim ako se predmet ne zove Programiranje, a ne Informatika.
OnTopic:
Uzmi knjigu za algoritme i udri, druge ti nema. Eventualno čekaj zimu, osobno, preko ljeta ne mogu napisati funkciju za zbrajanje dva cjela broja.
Ako ti treba knjiga, ja se koristim Naprednim programiranjem i algoritmima u C-u i C++-u Domagoja Kusalića.
Meni je knjiga odlična, kreće od samih početaka do složenih algoritama.
Teorija grafova, tj. bar neki uvod u teoriju grafova se kod mene na faksu uci na drugoj godini, Matematika 3.
Ako ti treba knjiga, ja se koristim Naprednim programiranjem i algoritmima u C-u i C++-u Domagoja Kusalića.
Meni je knjiga odlična, kreće od samih početaka do složenih algoritama.
Odlicna preporuka, covjek je nedavno diplomirao, bio je na informatickoj olimpijadi, koliko sam skuzio bavi se genetskim programiranjem, umjetnom inteligencijom i te stvari, a knjiga mu je jako dobra.
Evo našao sam je ovdje, uopće nije skupa. 110 KN za dobre algoritme nije puno. Ali ja čekam AiP 2, imam prvo izdanje i tu mi se sviđa to što ne zalazi puno u detalje. Nauči te osnovne stvatri o toj lekciji i onda zadaci. Detalje je uvjek lako naći na Internetu.
Zasto kod char pokazivaca koji pokazuje na neki alocirani memorijski blok za spremanje neke vrijednosti u taj blok ne smijem koristiti operator diferenciranja kao sto to radim kod spremanja neke vrijednosti u memorijski blok na koji pokazuje pokazivac tipa int? Ako ipak koristim operator diferenciranja onda se spremi samo prvo slovo od unosa korisnika.
Isto tako kod ispisa vrijednosti iz memorijskog bloka na koji pokazuje pokazivac tipa int koristi se operator diferenciranja a kada se ne koristi operator diferenciranja onda se ispise adresa memorijskog bloka pohranjenog u pokazivacu dok je kod memorijskog bloka na koji pokazuje pokazivac tipa char opet drugacije i za ispis vrijednosti koje su pohranjene u memorijskom bloku se ne koristi operator diferenciranja jer inace ispise samo pocetno slovo unosa korisnika, takoder kako ispisati onda adresu memorijskog bloka na koji pokazuje pokazivac tipa char?
#include <iostream>
using namespace std;int main() { cout << "Unesite broj svojih godina: "; int *x; x = new int(100); cin >> *x; cout << *x << endl; //ispisuje vrijednost pohranjenu u memorijskom bloku na koji pokazuje pokazivac x cout << x << endl; //ispisuje adresu memorijskog bloka
delete x;
cout << "Unesite ime: "; char *y; y = new char(100); cin >> y; cout << y << endl; //ispisuje vrijednost pohranjenu u memorijskom bloku na koji pokazuje pokazivac y cout << *y << endl; //ispisuje prvo slovo unosa korisnika
delete y; return 0;}
Nadam se da sam shvatio što želiš. Dakle ti hoćeš da dereferenciranjem pokazivača ispišeš neki niz? To što ti radiš nije dobro. Recimo, imaš polje znakova char znaci[5]; Tada sâmo znaci, predstavlja adresu prvog elementa u nizu. Ako ga dereferenicraš dobit ćeš vrjednost na toj adresi. Dakle trebaš nekako se pomicati od prve adrese. Evo ti jedan primjer.
int main()
{
char niz[10];
gets(niz);
for(int i=0; *(niz+i)!='\0'; i++)
{
cout<<*(niz+i);
}
cout<<endl;
system("PAUSE");
return 0;
}
Dakle svakom iteracijom petlje dereferenciraš sljedeću adresu u polju, odnosno ispisuješ sljedeći element.
Ako sam gdje pogrješio, neka me neko ispravi.
Zasto kod char pokazivaca koji pokazuje na neki alocirani memorijski blok za spremanje neke vrijednosti u taj blok ne smijem koristiti operator diferenciranja kao sto to radim kod spremanja neke vrijednosti u memorijski blok na koji pokazuje pokazivac tipa int? Ako ipak koristim operator diferenciranja onda se spremi samo prvo slovo od unosa korisnika.
Zato što cin i cout objekti razlikuju tip varijable koji im prosljeđuješ. Kada dereferenciraš polje charova dobiješ vrijednost jednog char elementa, prema tome možeš pohraniti samo jedan char u element char polja koji si dereferencirao.
Isto tako kod ispisa vrijednosti iz memorijskog bloka na koji pokazuje pokazivac tipa int koristi se operator diferenciranja a kada se ne koristi operator diferenciranja onda se ispise adresa memorijskog bloka pohranjenog u pokazivacu dok je kod memorijskog bloka na koji pokazuje pokazivac tipa char opet drugacije i za ispis vrijednosti koje su pohranjene u memorijskom bloku se ne koristi operator diferenciranja jer inace ispise samo pocetno slovo unosa korisnika, takoder kako ispisati onda adresu memorijskog bloka na koji pokazuje pokazivac tipa char?
Pokazivač u sebi drži memorijsku adresu, ako ispisuješ pokazivač ispisat ćeš memorijsku adresu na koju on pokazuje. Operator dereferenciranja se koristi kako bi se dobila vrijednost na koju neki pokazivač pokazuje. Kako su polja samo pokazivači koji pokazuju na prvi element polja, dereferenciranje pokazivača u tom slučaju će ti dati vrijednost prvog elementa polja.
cout i cin objekti razlikuju tip varijabli koje im proslijeđuješ pa se prilagođavaju onome što misle da ti u stvari želiš raditi. Castaj char pointer u void pointer pa vidi hoće li ti ispis bez dereferenciranja dati memorijsku adresu ili sadržaj polja.
Ok to cu poslje probat,sad sam probao ovaj: https://www.infokup.hr/Content/Downloads/2012/Algoritmi/Zadaci-Skolsko-2012-Algoritmi-Srednja-I.pdf, Kockice i evo kod:
Trik je u tome da se svaki broj usporedi sa preostalim brojevima (ne svaki sa svakim). Taj slučaj eliminišeš tako što dodaš:
if (i!=j)
I da naravno imaš varijablu koja pamti količinu ponavljanja (kod mene TEMP), i uspoređuje sa glavnim brojem ponavljanja svaki krug u glavnoj petlji.
#include <iostream>
using namespace std;
int main()
{
int broj[4],TEMP(1),BrojPonavljanja(1);
cin>>broj[0]>>broj[1]>>broj[2]>>broj[3]>>broj[4];
for (int i=0;i<=5;i++)
{
TEMP = 1;
for (int j=0;j<=5;j++)
{
if (i!=j)
{
if (broj[i] == broj[j])
{
TEMP++;
}
if (TEMP > BrojPonavljanja)
{
BrojPonavljanja = TEMP;
}
}
}
}
cout<<endl<<BrojPonavljanja<<endl;
//***********//
system("pause");
return 0;
}
Imas par sitnih gresaka.
Prva ti je ovo:
int broj[4]
Ti si napravio polje sa samo 4 clana tipa int, a ispod ih koristis 5(0,1,2,3,4).
Brojevi se ne unose u intervalu [0,5] vec u intervalu [1,6], tako da ti ovaj dio sa for petljama treba biti prepravljen.
No ne vidim zasto nepotrebno komplicirate. Meni je puno jednostavnije i bolje rjesenje u kojem za svaki broj pamtimo koliko je puta bacen.
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int brojevi[6]={0};
for(int i = 0;i<5;i++){
int temp;
cin>>temp;
brojevi[temp-1]++;
}
int maxPonavljanja = 0;
for(int i = 0;i<6;i++)
maxPonavljanja = max(brojevi[i],maxPonavljanja);
cout<<maxPonavljanja<<endl;
return 0;
}
Prostorna slozenost je O(brojBrojeva), a vremenska(brojBacanja + 2 * brojBrojeva).