Pa budi precizan ako već želiš da te se ispravno shvati.
Inače, već sam editirao prethodni post (na prošloj stranici) gdje sam napisao svoj odgovor.
Pa budi precizan ako već želiš da te se ispravno shvati.
Inače, već sam editirao prethodni post (na prošloj stranici) gdje sam napisao svoj odgovor.
Izbacuje mi ovu gresku.
sta ne valja :)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long god,n,br=0;
cin>>god;
cin>>n;
int niz[n];
for (int i = 0;i < n;i++)
{
cin>>niz[i];
}
long a,b,c;
c=god%10;
b=(god/10)%10;
a=god/100%10;
long a1,b1,c1;
for (int i = 0; i < n;i++)
{
a1=(floor(niz[i]/100000000))%10;
b1=(floor(niz[i]/10000000))%10;
c1=(floor(niz[i]/1000000))%10;
}
if (a1==a && b1==b && c1==c)
{
br++;
}
cout<<br<<endl;
return 0;
}
a1=(floor(niz[i]/100000000))%10;
b1=(floor(niz[i]/10000000))%10;
c1=(floor(niz[i]/1000000))%10;
Problem je u ovim linijama koda odnosno u funkciji floor. Iako ta funkcija vraca cijeli broj, ona taj broj ne vraca u obliku cjelobrojnoga tipa(int), vec kao float, double ili long double ovisno o tipu poslane vrijednosti. Do greske dolazi zato sto pokusavas koristis operator % na tip koji nije cjelobrojni.
Sve sto moras je ono sto funkcija floor vrati castati u int:
a1 = (static_cast<int>( floor(niz[i]/100000000)))%10;
Ako koristis C onda to radis ovako:
a1=((int)floor(niz[i]/100000000))%10;
b1=(floor(niz[i]/10000000))%10;
c1=(floor(niz[i]/1000000))%10;
Zašto koristiš floor funkciju? Znaš li čemu ona služi? Za zaokruživanje realnih brojeva na prvi manji cijeli broj.
Kod cjelobrojnog dijeljenja (integer sa integerom) ona ti nije potrebna, jer je rezultat već sam po sebi cijeli broj.
Može mala pomoć, evo sat vremena nmg da skonta zašto mi ova funkcija neće da sortira niz već ga samo izbriše???
Vjerovatno je nešto bezveze jer nisam ove pokazivače još u glavi shvatio.
void sort(ucenik * neko,int vel)
{
bool promjena=true;
ucenik temp;
int j=0;
while(promjena){
promjena = false;
j++;
for(int i=0;i<vel-j;i++)
{
if(prosjek(neko,i) < prosjek(neko,i+1))
{
temp = neko[i];
neko[i] = neko[i+1];
neko[i+1] = temp;
promjena = true;
}
}
}
}
Dakle, ti sortiraš niz tipa podataka ucenik na osnovu ocjena.
Ne vidim da li se radi o strukturi ili klasi, tako da sam ja uzeo klasu. Pošto sam uzeo klasu, preopteretio sam operator usporedbe < tako da mogu njim uspoređivati instance objekta temeljem ocjena . Ostao sam kod niza, nisam htio uzeti klasu vector pa onda koristiti iteratore, da ne bude overkill. Uglavnom, nadam se da je ovo dovoljno za skužiti kako se to radi - jer je princip isti i ako se uzme niz, struktura i da se ne koristi preopterećenje operatora.
#include <iostream>
#include <string>
using namespace std;
class Ucenik
{
private:
int ocjena;
string ime;
public:
Ucenik() {};
Ucenik(string, int);
string GetIme();
bool operator < (Ucenik);
};
Ucenik::Ucenik(string ime, int ocjena)
{
this->ime = ime;
this->ocjena = ocjena;
}
string Ucenik::GetIme()
{
return ime;
}
bool Ucenik::operator< (Ucenik ucenik) // preopterećenje operatora <
{
return this->ocjena < ucenik.ocjena;
}
void Sort(Ucenik* ucenici) // sortiranje niza
{
for(int i=0; i<3; i++)
{
for(int j=i+1; j<3; j++)
{
if(ucenici[j]<ucenici[i])
{
Ucenik temp = ucenici[j];
ucenici[j] = ucenici[i];
ucenici[i] = temp;
}
}
}
}
int main()
{
Ucenik* ucenici = new Ucenik[3];
ucenici[0] = Ucenik("Janko", 4);
ucenici[1] = Ucenik("Marko", 2);
ucenici[2] = Ucenik("Stipe", 3);
for(int i=0; i<3; i++)
cout<< ucenici[i].GetIme() << endl;
cout<< endl;
Sort(ucenici);
for(int i=0; i<3; i++)
cout<< ucenici[i].GetIme() << endl;
return 0;
}
Da zaboravio sam napomenuti radi se o strukturi...
Kako i da li postoji način za odrediti koji se samoglasnik u riječi ponavlja najviše puta,a da se ne koristi ona metoda sa 5 brojača i onda usporedba koji ima najviše?
Kako i da li postoji način za odrediti koji se samoglasnik u riječi ponavlja najviše puta,a da se ne koristi ona metoda sa 5 brojača i onda usporedba koji ima najviše?
Gledaj nekako ih moraš prebrojati, a potom i razlikovati prebrojane samoglasnike. Ostalo su sve sitne varijacije na temu.
Ovo što si upravo napisao je kao da si rekao: kako da prebrojim broj čačkalica na stolu bez brojanja čačkalica.
Možeš jedino poboljšati metodu. Kažeš 5 brojača. Nadam se da to nije 5 zasebnih varijabli nego nekakvo polje.
Mislio sam da možda ima neki bolji način,al ok.
Evo mene opet :D
Hoću poslat određen string u console applikaciju i onda lupit enter (dok je minimizana)
ovaj kod mi pošalje samo prvo slovo, i ne lupi enter.
int main()
{
HWND hwndWindowTarget;
HWND hwndWindowNotepad = FindWindow(NULL, "console");
if (hwndWindowNotepad)
{
PostMessage(hwndWindowNotepad, WM_CHAR, 'a' , 0);
PostMessage(hwndWindowNotepad, WM_CHAR, 'a' , 0);
PostMessage(hwndWindowTarget, WM_CHAR, VK_RETURN, 0);
}
return 0;
}
edit: dodavanjem Sleep(1); sam uspio dobit i više charova, no kako enter?
Evo mene opet :D
Hoću poslat određen string u console applikaciju i onda lupit enter (dok je minimizana)
ovaj kod mi pošalje samo prvo slovo, i ne lupi enter.
edit: dodavanjem Sleep(1); sam uspio dobit i više charova, no kako enter?
Uf što to radiš? :D
Ovako, zapitaj se što radi enter tipka u tekstualnom okruženju? Stvara dva znaka, takozvanu CR LF kombinaciju (13, 10), to označava početak novog reda, odnosno kraj postojećeg.
Dakle:
PostMessage(hwndWindowNotepad, WM_CHAR, 13, 0);
PostMessage(hwndWindowNotepad, WM_CHAR, 10, 0);
Ovo gore će poslužiti za znatiželjno nabadanje, ali inače, za komunikaciju sa konzolnim procesom kojeg možeš spawnati iz svog programa pametnije bi bilo preusmjeriti standardni ulaz i izlaz. A ako je taj proces tvoj kojem možeš modificirati kod onda bi bolje bilo koristiti cijevi (pipes) za komunikaciju.
P.S.
Možeš probati i sa SendMessage funkcijom, isti su parametri, razlika je samo što ta funkcija blokira dok poruka ne bude primljena pa ti ne bi onda trebao sleep...
Thanks sve super radi, i već sam stavio sendmessage... :D
no jedino sam zamijetio mali problem, kada šaljem dva ista slova jedno za drugim primi samo jedno :/
Kako i da li postoji način za odrediti koji se samoglasnik u riječi ponavlja najviše puta,a da se ne koristi ona metoda sa 5 brojača i onda usporedba koji ima najviše?
Mozes to izvesti s 4 brojaca, hint: gledaj razlike.
S time da je to vise teoretski gledano, u praksi bi svatko normalan koristio 5. I s 4 brojaca se moze odredit koji samoglasnik se najvise puta ponavlja, ali ne i koliko puta.
Pretpostavljam da broj samoglasnika nije unaprijed poznat, inace je prilicno trivijalno to izvest s 4 brojaca.
Tehnicki bi mogao proci i s jednom varijablom uz puno petljanja s bitovima, no to su isto samo brojaci upakirani u jednu varijablu.
Iako ako cemo bas potpuno teoretski, moze se i s dva brojaca: sortiras in-place samoglasnike i linearno prodjes kroz njih. Ovo je i "best case" nacin za nalazenje "mode-a" u generalnom slucaju kad broj razlicitih elemenata nije 5, nego nesto puno vece gdje ni individualni brojaci za svaki element ni hash tablice nisu prakticne.
Kako i da li postoji način za odrediti koji se samoglasnik u riječi ponavlja najviše puta,a da se ne koristi ona metoda sa 5 brojača i onda usporedba koji ima najviše?
Mislio sam da možda ima neki bolji način,al ok.
DODANO:
Ha , ha , ha , tek sad vidim da sam fulao jer na brzinu pročitao tvoj post i krivo zaključio da trebaš isčupati samoglasnike a ne ih prebrojati.
Koja zabuna , ali neka ostane post , dobar je i brz način za selekciju željenih slova , ne moraju biti samoglasnici.
KRAJ DODATKA
Kastaš char u int vrijednost slova. Nakon toga pomnozis svih 5 vrijednosti a*e*i*o*u i imas nazovimo ga magicNumber.
Dalje je lako , kad dijelis magicNumber s bilo kojim od samoglasnika (a,e,i,o,u) imaš poslije modulo operatora(%) zero i tako hvataš samoglasnike. Pitanje je veće , dopuštaju li vam u školi ovakav način rada ili mora školski da svi razumiju a to bi bilo preko pet kondicija kontra samoglasnika kako si i naveo ?!?
#include <iostream>
#include <stack>
#include <ctype.h>
using namespace std;
/*barataj s long long jer na int puca
Integer overflow*/
long long setMagicNum(char* samoglasnik)
{
long long result = 1;
for(unsigned int i=0 ; i<5 ; i++)
{
result *= (long long)samoglasnik[i];
}
return result;
}
int main()
{
char samoglasnici[] = {'a','e','i','o','u'};
long long magicNum = setMagicNum(samoglasnici);
cout<< "unesi recenicu:\n";
string str;
getline (cin,str);
stack<char> result;
for(unsigned int i=0 ; i<str.size() ; i++)
{
if(isalpha(str[i]))
{
/*****IMAS SAMO JEDAN UVJET********/
if( magicNum%(tolower(str[i])) == 0)
{
result.push(str[i]);
}
/**********************************/
}
}
while(!result.empty())
{
cout<< result.top() << " ";
result.pop();
}
return 0;
}
Jako zanimljiv pristup ;)
Ovo mi je funkcija za sendanje stringa, nije mi jasno zašto nemogu biti dva ista znaka jedan za drugim :S
void PostString(char *a)
{
int i=0;
HWND hwndWindowTarget;
HWND hwndWindowNotepad = FindWindow(NULL, "cmddd");
printf("%d",hwndWindowNotepad);
if (hwndWindowNotepad)
{
for(i=0;i<strlen(a);i++)
{
SendMessage(hwndWindowNotepad, WM_CHAR, a[i] , 0);
}
SendMessage(hwndWindowNotepad, WM_CHAR, 13, 0);
//PostMessage(hwndWindowNotepad, WM_CHAR, 10, 0);
}
}
moze pomoc?
#include <iostream>
#include <ctime>
using namespace std;
int *stvoriPolje(int a, int b, int n) //U funkciji se alocira polje od n slucajno odabranih cijelih brojeva u intervalu [a,b]. Funkcija kao rezultat vraca pokazivac na navedeno polje.
{
int *p=new int[n];
cout<<"koliko elemenata polja zelis?"<<endl;
cin>>n;
cout<<"minimalni element? "<<endl;
cin>>a;
cout<<"maximalni element? "<<endl;
cin>>b;
srand(time(NULL));
for (int i=0; i<n; i++)
{
p[i]=rand()%(b-a+1)+a;
}
cout<<"ovo su elementi polja: "<<endl;
for (int i=0; i<n; i++) cout<<*p++<<endl;
//return p;
}
int main()//U glavnoj funkciji poziva se navedena funkcija, ispisuje polje i oslobada dinamicki alocirana memorija.
{
int a, b, n;
int p[n];
cout<<stvoriPolje(a,b,n);
// for (int i=0; i<n; i++) cout<<*p++;
//delete p;
system ("PAUSE");
return 0;
}
Pokazivačem adresiraš nulti element tog "vraćenog" polja:
int* p = stvoriPolje(...);
i sad to polje (p) ispišeš kroz for petlju.
Ovo mi je funkcija za sendanje stringa, nije mi jasno zašto nemogu biti dva ista znaka jedan za drugim :S
Moguće da je riječ o nekakvom filtriranju standardnog ulaza. Meni na WinXP recimo radi bez problema, mogu poslati i 10 istih znakova uzastopce ako želim.
Uglavnom, to dobiješ kada ideš nekakvim nestandardnim putevima kako bi nešto obavio. Jbg...
Ovo mi je funkcija za sendanje stringa, nije mi jasno zašto nemogu biti dva ista znaka jedan za drugim :S
Moguće da je riječ o nekakvom filtriranju standardnog ulaza. Meni na WinXP recimo radi bez problema, mogu poslati i 10 istih znakova uzastopce ako želim.
Uglavnom, to dobiješ kada ideš nekakvim nestandardnim putevima kako bi nešto obavio. Jbg...
Ja sam na Win7 64bit :/
Radi se o pisanju naredbi na konzolni server, ja samo kontroliram što on radi, nemam pristup njegovom kodu. No uglavnom do sada sam uspio sve obaviti i bez duplih slova, no htio bi da ispravno radi :D
BTW jel moguće pozvati MessageBox() bez zaustavljanja programa? ili da napravim poseban thread za to? -netreba mi nikakav input usera, nego samo kao notifikacija :)
Prilično sam siguran da nije. To i jest poanta.
Probaj ga pozvati iz drugog threada. Ili možeš pokušati nakuckati vlastiti notification window za to. Nije nekakav veliki problem...
BTW jel moguće pozvati MessageBox() bez zaustavljanja programa? ili da napravim poseban thread za to? -netreba mi nikakav input usera, nego samo kao notifikacija :)
Davno je to bilo, ali sjećam se da je bilo moguće. Obično prvi parametar je nekakav Handle (postoji preopterećenje MessageBox-a koji to ima). Ukoliko želiš da korisnik ne mora kliknuti OK (ili već koji gumb) tj. da mu dopustiš rad u programu bez obzira na MessageBox, onda bi za taj Handle trebalo postaviti vrijednost 0. No za notifikacije je pametnije koristiti labele, ili čak i tray icon hint.
S druge strane, ako ćeš updateati GUI iz thread-a nemoj zaboraviti na sinkronizaciju jer GUI nije thread-safe.
Davno je to bilo, ali sjećam se da je bilo moguće. Obično prvi parametar je nekakav Handle
Parent handle. Ne pomaže, jer je thread iz kojeg je MessageBox pozvan blokiran. Odnosno MessageBox funkcija ne završi dok korisnik ne klikne na neki button.
EDIT:
Koliko vidim prozor i dalje procesira poruke iako je message loop blokiran!? Heh...
Dakle blokira konzolnu aplikaciju, i do neke granice GUI aplikaciju (osim ako se ne proslijedi handle od prozora, onda blokira u potpunosti).
A evo i objašnjenja:
"In some situations, the operating system will call a window procedure directly, bypassing the queue."
http://msdn.microsoft.com/en-us/library/windows/desktop/ff381405%28v=vs.85%29.aspx
Ovako: treba mi za sutra hitno, napravio sam seminar preopterecenje funkcija,donekle je valjalo i sve, ali sada me profesorica trazi i primjer da napravim kao program u c++-u o temi preopterecenje funkcija...da se nesto moze nauciti i iz programa...Neznam tocno sto zeli,kakav program da napravim,ali nasamo sam 2 programa na netu o preopterecenju i trebam ih obrazlozit a neznam...moze neka pomoc ili nesto...naprimjer trebalo bi obrazlozit gdje se tu vidi tal overloading i overriding...
ovo u napomenama sa // sam pisao kao sta bi ja njoj trebao reci hahahaha...jer iskreno nisam neki strucnjak za c++ te znam samo osnove, tako da mi je sad to problem napravit -.-"
evo primjera za :
______________________
Overloading program 1
/*Overloading smo rekli da se desava ukoliko napravimo vise verzija funkcija.
Imamo 2 vrste: 1) Razliciti parametri funkcija traju , ili pod 2
2)povratni tip funkcije.
Ako koristite istu deklariranu funkciju dobit cete pogresku na
kompajleru jer nece znati koju funkciju koristiti.
Evo jos jedan jednostavan primjer:
*/
#include<stdio.h>
class SomeClass
{
public:
void SomeFunction(int &x) { x *= x; }
int SomeFunction(int x) { return x * x; }
};
//Int main()
SomeClass s;
int x = 5;
x = SomeFunction(x);
_____________________________
Overloading program 2
/*funkcija overloading se desi kada zelite imati istu funkciju s razlicitim
parametrima*/
#include<stdio.h>
void Call(string s);
void Call(int i);
class Animal//base class
{
public virtual void Walk(){//walks normally}
}
class Tiger:Animal//derived class
{
public override void Walk(){//walks like tiger}
}
_____________________________
primjer za overriding
#include<stdio.h>
int main()
{
class Base
{
public:
virtual void DoSomething() {x = x + 5;}
private:
int x;
};
class Derived : public Base
{
public:
virtual void DoSomething() { y = y + 5; Base::DoSomething(); }
private:
int y;
};
}
/*
Ovdje mozemo vidjeti deriviranu klasu u kojoj klasa nadjačava baznu
klasu. DoSomething ima svoju svrhu gdje daje varijablu, i onda
zaziva "parent" verziju funkcije pozivajuci Base::DoSomething()
tako da x varijabla porasta. Virtualna tipkovnica se koristi za razred
varijabla te moze shvatiti koja je metoda za poziv u runtime*/
________________________________________________________
P.S. Postavit ce mi 100 puta kako i zasto tako da molim sto detalnije...
Unaprijed hvala svima koji se barem potrude :D //neki programi i ne rade tako da...isprobajte ih
Pozdrav, treba mi pomoć oko infix to postfix konverzije. Imam ovaj kod, ali očito negdje ima bug (ili više bugova), pa ako možete pomoći, bio bih zahvalan :D
Algoritam s linka ima dvije greške u četvrtom koraku:
Kad ti traži jednostavnu stvar kao preopterećenje funkcija, ne idi u override funkcija u OOP, to su potpuno drukčiji pojmovi.
Svaka funkcija ima svoj potpis pomoću kojeg ih compiler razlikuje i u potpis funkcije spada ime funkcije i argumenti funkcije. To znači da možeš napisati više fukcija istog imena a različitih argumenata, a takve funkcije zoveš preopterećene funkcije. Oprez, povratna vrijednost funkcije ne spada u potpis funkcije, dakle ne možeš imati više funkcija istog imena i argumenata, a različite povratne vrijednosti.
Slijedi primjer preopterećene funkcije MaxNiz koja u jednoj verziji prihvaća int , a ui drugoj double niz i vraća najveći član niza.
E, to ti je preopterećenje ili oveloading funkcije, a override je pojam iz OOP i nema veze sa ovim.
#include <iostream>
using namespace std;
int MaxNiz(int* intNiz, int velicinaNiza)
{
int maxElement = intNiz[0];
for(int i= 1; i<velicinaNiza; i++)
{
if(intNiz[i] > maxElement)
maxElement = intNiz[i];
}
return maxElement;
}
double MaxNiz(double* doubleNiz, int velicinaNiza)
{
double maxElement = doubleNiz[0];
for(int i= 1; i<velicinaNiza; i++)
{
if(doubleNiz[i] > maxElement)
maxElement = doubleNiz[i];
}
return maxElement;
}
int main()
{
int intNiz[5] = {5, 8, 9, 4, 1};
double doubleNiz[5] = {4.5, 7.1, 9.3, 1.2, 7.4};
cout<< "Max int: " << MaxNiz(intNiz, 5) << endl;
cout<< "Max double " << MaxNiz(doubleNiz, 5) << endl;
return 0;
}
Hvala ti na brzom odgovoru,stvarno mi puno znaci...Vijerojatno si me spasio od kolca sutra :D Samo jedno pitanje....dali bi ovaj program trebao imati svrhu ili je samo da prikaze overloading ? Jer ona ce mene muciti barem 15 minuta o tome :D Ako ti ga nije problem malo pojasniti...sta koja funkcija u kojem djelu radi,deklarira,gdje je tocno greska itd...Ali u svakom slucaju hvala ti na proslom odgovoru :')
Hvala ti na brzom odgovoru,stvarno mi puno znaci...Vijerojatno si me spasio od kolca sutra :D Samo jedno pitanje....dali bi ovaj program trebao imati svrhu ili je samo da prikaze overloading ? Jer ona ce mene muciti barem 15 minuta o tome :D Ako ti ga nije problem malo pojasniti...sta koja funkcija u kojem djelu radi,deklarira,gdje je tocno greska itd...Ali u svakom slucaju hvala ti na proslom odgovoru :')
Što se tiče toga jesam li te spasio od kolca, ne znam, nemam vremena da ti objasnim override, pojam iz OOP, a možda ti i to traži.
Da, ovo preoptertećeje funkcija ima svrhu, prva verzija kao argument uzima niz cjelobrojnih elemenata, da imaš samo nju, ne bi mogao ubaciti double niz. Ovako tvoje je da ne razmišljaš koji si niz ubacio,a funkcija ima isto ime, ako si ubacio int niz automatski se poziva ta verzija funkcije, a isto tako ako ubaciš double niz automatski se poziva ta verzija funkcije.
Funkcije rade ovo:
1. za maxElemet uzme prvi član niza
2. kroz for petlju od drugog člana niza do zadnjeg ispituju da li je maxElement manji od pojedinog člana niza
3. ako je maxElement manji od pojedinog člana niza varijabli maxElement pridružuješ taj član niza
4. kad petlja završi maxElement sadrži najveći član niza
5. funkcija vraća maxElement