C++ 11 ima unordered_set.
Programiranje u C++-u - pitanja i odgovori
- poruka: 7.283
- |
- čitano: 1.510.269
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Spremiti rijeci (string) u vector pa, ili pomocu iteratora, ili koristeci neku od metoda(tipa find) provjeriti sadrzi li vector tu random rijec ?
@malak Zahvaljujem i tebi i Boo-boo-u :D
Vjerojatno misli na deklaraciju i definiciju funkcije
int pomnozi(int x,int y)
{
........
}
int main()
{
..............
p=pomnozi (a,b);
......
}
2 Vrsta
p=pomnozi (a,b);
int main(){
..............
}
int pomnozi(int x,int y)
{
........
}
Mislim da je to to
Daj nam primjer što je profesor dao
"Forward deklaracija", mozes googlat za vise. Moras ili potpuno definirat funkciju prije koristenja u source fileu ili barem deklarirat prototype a definirat tijelo kasnije.
Nuzna je ako imas "vezane rekurzivne" funkcije tipa A zove B i B zove A. Osim toga je vise stvar preferenci. Prednost fwd deklaracije je da ne moras brinut oko poretka funkcija.
Pozdrav!
Trebao bih pomoć oko ovog zadatka: Ulaz: prirodan broj N, Izlaz: Zbroj svih neparnih potencija broja 2 kojima su eksponenti od 0 do N. Pritom se nesmije koristiti cmath biblioteka.
Ja sam to ovako zamislio, ali program mi iz nekog razloga ne izbacuje rezultat:
#include <iostream>
using namespace std;
int main()
{
int N;
int a = 2;
int b = 0;
cout << "Broj N: ";
cin >> N;
while(N < 0 && N > 32)
{
cout << "Neispravan unos! Unesite prirodan broj: ";
cin >> N;
}
while(N > 0 && N < 32)
{
for(int i = 1; i <= N; i++)
{
a = a * a;
if((i%2) != 0)
{
b += a;
}
}
}
cout << "Zbroj je = " << b << endl;
system("pause");
return 0;
}
while(N > 0 && N < 32)
Jer imaš beskonačnu petlju, ovaj uvjet je uvijek istinit. Ovako nabrzinu, nešto u ovom stilu:
int sum = 0;
for(int i = 0; i <= N; i++) {
int a = 1;
for(int j = 1; j <= i; j++)
a *= a;
if(a%2 != 0)
sum += a;
}
#include <iostream>
using namespace std;
int power(int x,int y){
int result = 1;
for (int i=0; i<y; i++){
result *= x;
}
return result;
}
int main()
{
int N;
int a = 2;
int suma = 0;
cout << "Broj N: ";
cin >> N;
while(N < 0){
cout << "Neispravan unos! Unesite prirodan broj: ";
cin >> N;
}
while(N > 32){
cout << "Neispravan unos! Unesite broj manji od 32: ";
cin >> N;
}
for (int i=1;i<=N;i++){
if(i%2 == 0){
continue;
}
suma += power(a, i);
}
cout << "Zbroj je = " << suma << endl;
return 0;
}
EDIT: Ovo sam napisao u hodu, mislim da si na ovo ciljao, kada ti ne daju da koristiš pow() iz math.h, napiši fino svoju funkciju ;)
@wAlpha Da, probao sam sad na taj način, ali mi ne izbacuje točan rezultat (kada je N = 6, na izlazu bi trebao biti 42). Osim ako nisam negdje napravio grešku:
#include <iostream>
using namespace std;
int main()
{
int N;
int a = 1;
int b = 0;
cout << "Broj N: ";
cin >> N;
while(N < 0 && N > 32)
{
cout << "Neispravan unos! Unesite prirodan broj: ";
cin >> N;
}
for(int j = 0; j <= N; j++)
{
for(int i = 1; i <= j; i++)
{
a = a * a;
if((a%2) != 0)
{
b += a;
}
}
}
cout << "Zbroj je = " << b << endl;
system("pause");
return 0;
}
@Mr.ddevil Rado bih ja to tako, ali na faksu idemo postupno s gradivom naprijed i nažalost smijemo koristiti u kodu samo ono što smo dosad radili (do while petlja zadnje), tako da nemam ni tu mogućnost da napišem svoju funkciju (barem za sada). :)
Krivo si prepisao, if nejde pod drugu petlju.
Ako za N=6 rezultat mora biti 42, onda ti moje rješenje paše, ali nije mi jasno što provjeravaš ovim uvjetom:
"while(N < 0 && N > 32)"
Ovo ti znači N manji od nula i n veći od 32, vraća true samo ako su oba uvjeta ispunjena
@wAlpha Stavio sam if sad pod prvu petlju, ali mi za N=6 vraća 7.
@Mr.ddevil Da, imaš pravo. Tu treba ići logički operator OR, ispravio sam. Hvala :)
Btw Evo uspio sam doći do rješenja koje mi odgovara:
#include <iostream>
using namespace std;
int main()
{
int N;
int a = 1;
int b = 2;
int c = 0;
cout << "Broj N: ";
cin >> N;
while(N < 0 || N > 32)
{
cout << "Neispravan unos! Unesite prirodan broj: ";
cin >> N;
}
for(int i = 1; i <= N; i++)
{
a = a * b;
if((i%2!=0))
{
c += a;
}
}
cout << "Zbroj je = " << c << endl;
system("pause");
return 0;
}
Pozdrav,
Jel mi možete pomoći oko izrade funkcije koja bi radila sljedeće:
- Funkcija bi trebala usporediti prošlu vrijednost(prije nego što se vrijednost spremila) sa sadašnjom(iz RAMa). U toj usporedbi se treba vidjeti koji su bajtovi promjenjeni.
Kako misliš iz RAM-a? U programiranju postoji samo stack i heap. Misliš iz heapa? Preko pointera? Programiraš na windowsima? Možeš koristiti globalnu varijablu ili static varijablu za spremanje stare varijable i XOR operaciju za provjeru promjene bitova/baytova. AND koristiš za provjeru svakog pojedinačnog bita.
Npr ako je vrijednost prije spremanja bila 10, a sada je 200, trebao bi spremiti samo zadnji bajt (4. bajt ako se gleda s lijeva na desno).
Predpostavljam da do 255 se mijenja samo zadnji bajt, od 255 do 65535 se mijenja sami zadnja dva
-loša ideja, pogrešna.. ne možeš tako uštedjeti vrijeme-cikluse, naprotiv, .. imao bi dio koda koji konstantno usproava rad besmislenim traženjem izuzetka da bi uštedio koji byte u takvom izuzetku.. a podatak moraš učitati da bi mogao usporediti.. ne isplati se, čak ni s eepromom.
Mislim da nepotrebno kompliciraš. Ili ne razumjem zašto ti to treba. Nije valjda da konstantno nešto zapisuješ.
Svako zapisivanje bajta uzme cca 5ms(zbog eeproma) koje mi zamrzne MCU. To zapisivanje ću prebaciti na pagewrite no želim dodatno ubrzati pojedinačno zapisivanje kako bi čuvao eeprom
pogrešan pristup.. sve pripremiš pa onda zapišeš (može i backup prije..), koristit kao sekvencijalne memorije, ne kao ram.. jer je to eeprom (sporo). Zato se u nromalnom radu i ne koriste romovi nego se kopiraju u ram itd..
tj KISS kaže, što manje čačkanja eeproma, ako je moguće skoro nikad.. za pristup-korištenje koristiti bilo što drugo, sd/flash/ssd... ili ram ako ga ima dovoljno, jer eeprom nije ram.