|
Programiranje Programski jezici, tehnike, alatke... |
|
Alatke vezane za temu | Vrste prikaza |
|
26.1.2012, 4:44 | #1 |
Veteran
|
How to... C++
Kako krenem da ucim jezik, tako pocinju teme How to....
Kod: Spoiler za Kod:
I izlazi mi stalno problem "vector subscript out of range", a ja nemam pojma kako to da popravm.Video sam da ima neke veze sa indeksima elemenata, ali ja ne vidim problem. |
26.1.2012, 15:42 | #2 |
Član
|
Re: How to... C++
Pogledao sam malo kod iako nisam najbolje ukapirao sta pokusavas, ali koliko vidim ti pravis ovakav input "less nekistring" ili "add nekistring" i u tom slucaju se desava error.
Problem je sto ti kad koristis >> on ne izvuce celu recinicu vec samo prvu rec do whitespace-sa i ti kad pristupas x[1] to je nepostojece i prekoracavas granice vektora i otuda ta greska ptistupas necemu sto nema, uglavnom kad imas takvu gresku znaci da si prekoracio granice vektora. Mozes da koristis getline() da bi uzeo celu linuju, uostalom vidi da li je to greska pa se snadji |
Sledeći korisnik se zahvaljuje korisniku NISAM NESTO SMART na korisnoj poruci: | ||
Ivan-94 (27.1.2012) |
27.1.2012, 14:58 | #3 |
Veteran
|
Re: How to... C++
E sad jos jedan program...
kod: Spoiler za kod:
I uvek dobijam neki cudni output kao: 0x28fe78. |
27.1.2012, 15:18 | #4 |
V.I.P. Programiranje
Član od: 29.8.2007.
Lokacija: Valjevo
Poruke: 1.349
Zahvalnice: 983
Zahvaljeno 371 puta na 280 poruka
|
Re: How to... C++
Kod:
cout << tst.str(); Kod:
//#include <string.h> // fflush(stdin) #include <limits> #ifdef max // glupavi M$ makro #undef max #endif ... cin.ignore( numeric_limits< streamsize >::max(), '\n'); cin.get(); Poslednja ispravka: Belphegor (27.1.2012 u 15:40) |
Sledeći korisnik se zahvaljuje korisniku Belphegor na korisnoj poruci: | ||
Ivan-94 (27.1.2012) |
28.1.2012, 13:43 | #5 |
V.I.P. Programiranje
|
Re: How to... C++
Možda sam zakasnio, ali @Ivan-94, prvi post: taj pristup će ti probiti vremenski limit u tom zadatku. (O-recnik, kvalifikacije za okružno 2012, ako se ne varam.) Probaj da razmisliš koju strukturu podataka da iskoristiš kako bi malo efikasnije tražio i dodavao reči
|
Sledeći korisnik se zahvaljuje korisniku Geomaster na korisnoj poruci: | ||
Ivan-94 (28.1.2012) |
9.2.2012, 14:41 | #6 |
Član
|
Re: How to... C++
Da ne otvaram novu temu a imamm pitanje vezano za C++. Kako biste u matricu 9x9, nasumično smestili 81 broj na što brži način?
Evo mog pokušaja, iz nekog razloga ne štampa ništa: Kod:
#include<iostream> #include <stdlib.h> #include <time.h> using namespace std; int randomBroj() { srand ( time(NULL) ); int random = rand() %9; return random; } int main() { int indexi[9][9],i=0,x,y; for(int a=0;a<9;a++) { for(int b=0;b<9;b++) { indexi[a][b]=0; } } while(i<81) { x=randomBroj(); //funkcija koja vraca y=randomBroj(); //nasumicni broj u intervalu 0-8 if(indexi[x][y]==0) { indexi[x][y]=i+1; i++; } } for(int a=0;a<9;a++) { for(int b=0;b<9;b++) { cout<<indexi[a][b]; } } getchar(); getchar(); } Poslednja ispravka: Luigi (9.2.2012 u 15:10) |
17.9.2012, 1:35 | #7 |
Veteran
|
Re: How to... C++
Pokusavam da uradim najednostavniju multithreaded aplikaciju:
Kod:
#include <iostream> #include <thread> #include <chrono> using namespace std; void f() { while(1) { cout << "From SIDE thread." << endl; this_thread::sleep_for(chrono::seconds(2)); } } int main(int argc, _TCHAR* argv[]) { thread t1(f); t1.join(); while(1) { cout << "From MAIN thread." << endl; this_thread::sleep_for(chrono::seconds(2)); } return 0; } Tj. hocu da output bude, malo iz jedne f-je malo iz main. Sta radim pogresno? Poslednja ispravka: Ivan-94 (17.9.2012 u 1:44) |
17.9.2012, 11:14 | #9 |
Veteran
|
Re: How to... C++
Ok ali kako da ne cekam da se zavrsi, nego da odmah posle pokretanja nastavi?
|
17.9.2012, 11:21 | #10 |
V.I.P. Programiranje
|
Re: How to... C++
Pa nemoj da pozivaš join() na tom objektu
|
17.9.2012, 11:33 | #11 |
Veteran
|
Re: How to... C++
Joj, cek, mozda nisam lepo formulisao pitanje.
Kako da pokrenem dve f-je odjednom i da jedna malo dobije vreme procesora malo druga? |
18.11.2012, 17:36 | #12 |
Član
Član od: 21.7.2012.
Lokacija: Srbija
Poruke: 31
Zahvalnice: 5
Zahvaljeno jedanput na jednoj poruci
|
Re: C++
Ljudi, treba mi pomoc oko stringova.
Kako da uporedim string zapamcen u nizu od 15 karaktera sa nekim konstantnim stringom? Skontao sam da mogu da uporedjujem skaki pojedinacni karakter (if (ff[0]=='T' && itd... do '\0')) Ali to je naporno jer ima mnogo konstantnih stringova sa kojim treba uporediti. Moze tako da radi jedino ako napravim funkciju u koja ce da uporedjuje 2 stringa koja jos se posalju, ali sigurno postoji jednostavniji nacin, zar ne? |
18.11.2012, 17:43 | #13 |
Starosedelac
Član od: 23.2.2006.
Lokacija: Tamo gde su kuće od čokolade i prozori od marmelade....
Poruke: 1.579
Zahvalnice: 195
Zahvaljeno 301 puta na 171 poruka
|
Re: C++
|
22.11.2012, 15:05 | #14 |
V.I.P. GNU/Linux
Član od: 1.11.2005.
Poruke: 11.221
Zahvalnice: 2.133
Zahvaljeno 4.961 puta na 2.887 poruka
|
Re: C++
Radi sigurnosti, koristi strncmp (kao treći argument prosledi dužinu prvog stringa od 15 karaktera).
|
12.12.2012, 22:29 | #15 |
Član
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: How to... C++
Jel bi mogao neko da mi za ovaj algoritam tj kod da mi napise ulaz i izlaz tj da program moze da cita sa standardnog ulaza i izbacuje resenje na standardni izraz. Ja bi to sam uradio al neki delovi mi nisu bas jasni pa ce mi ovako biti lakse da posmatram posle u kompajleru korak po korak sta program radi pa da razumem. Hvala unapred
Kod:
#include <string> #include <cctype> using namespace std; class Parser { string input; bool isValid; bool isEnd(size_t pos) const { return pos >= input.size(); } bool readChar(size_t &pos, char c) const { if (isEnd(pos) || input[pos] != c) { return false; } ++pos; return true; } bool readString(size_t &pos, const string &str) const { if (input.substr(pos, str.size()) != str) { return false; } pos += str.size(); return true; } bool isLetter(size_t pos) const { return isEnd(pos) == false && isalpha(input[pos]); } bool isAlphanumeric(size_t pos) const { return isEnd(pos) == false && isalnum(input[pos]); } bool readPropositionalLetter(size_t &pos) const { if (isLetter(pos) == false) { return false; } do { ++pos; } while (isLetter(pos)); return true; } bool readSubformula(size_t &pos) const { if (isEnd(pos)) { return false; } if (readChar(pos, '-')) { return readSubformula(pos); } if (readChar(pos, '(')) { return readSubformula(pos) && readChar(pos, '>') && readSubformula(pos) && readChar(pos, ')'); } return readPropositionalLetter(pos); } bool findImplication(size_t &pos) const { int brackets = 0; for (; isEnd(pos) == false; ++pos) { if (brackets == 0 && input[pos] == '>') { ++pos; return true; } if (input[pos] == '(') { ++brackets; } else if (input[pos] == ')') { --brackets; } } return false; } public: Parser(const string &input) : input(input) { size_t pos = 0; if (readSubformula(pos) == false) { isValid = false; return; } if (isEnd(pos)) { isValid = true; return; } pos = 0; isValid = readSubformula(pos) && readChar(pos, '>') && readSubformula(pos) && isEnd(pos); } bool axiom1() const { if (isValid == false) { return false; } if (input.size() >= 2 && input[0] == '(' && input[input.size() - 1] == ')') { Parser tmp(input.substr(1, input.size() - 2)); if (tmp.axiom1()) { return true; } } size_t pos = 0; if (findImplication(pos) == false) { return false; } string a = input.substr(0, pos - 1); return readChar(pos, '(') && findImplication(pos) && readString(pos, a + ")") && isEnd(pos); } bool axiom2() const { if (isValid == false) { return false; } if (input.size() >= 2 && input[0] == '(' && input[input.size() - 1] == ')') { Parser tmp(input.substr(1, input.size() - 2)); if (tmp.axiom2()) { return true; } } size_t pos = 0; if (readChar(pos, '(') == false || findImplication(pos) == false) { return false; } string a = input.substr(1, pos - 2); if (readChar(pos, '(') == false || findImplication(pos) == false) { return false; } string b = input.substr(a.size() + 3, pos - a.size() - 4); pos = 0; if (findImplication(pos) == false) { return false; } string c = input.substr(a.size() + b.size() + 4, pos - a.size() - b.size() - 7); return readString(pos, string("((") + a + ">" + b + ")>(" + a + ">" + c + "))") && isEnd(pos); } bool axiom3() const { if (isValid == false) { return false; } size_t pos = 0; if (readString(pos, "((")) { Parser tmp(input.substr(1, input.size() - 2)); return tmp.axiom3(); } if (readString(pos, "(-") == false || findImplication(pos) == false) { return false; } string b = input.substr(2, pos - 3); pos = 0; if (findImplication(pos) == false) { return false; } string a = input.substr(b.size() + 4, pos - b.size() - 6); return readString(pos, string("(") + a + ">" + b + ")") && isEnd(pos); } }; |
12.12.2012, 23:15 | #16 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
Re: How to... C++
Ovako nešto:
Kod:
#include <iostream> #include <iomanip> #include <iterator> // ... parser kod ... // int main() { std::string input(std::istream_iterator<std::string::value_type>(std::cin), std::istream_iterator<std::string::value_type>()); Parser parser(input); std::cout << std::boolalpha; std::cout << parser.axiom1() << "\n"; std::cout << parser.axiom2() << "\n"; std::cout << parser.axiom3() << "\n"; return 0; } |
12.12.2012, 23:31 | #17 | |
Član
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: How to... C++
Citat:
Jel ovo Ctrl+Z moze da se promeni da radi na neku drugu komandu tipa da kad kliknes na tab da krene da radi? |
|
13.12.2012, 0:07 | #18 |
Veteran
Član od: 27.12.2005.
Lokacija: Vremenske Grobnice, Hiperion
Poruke: 680
Zahvalnice: 99
Zahvaljeno 124 puta na 82 poruka
|
Re: How to... C++
Ne znam za tab, ali, ako ti odgovara da ulaz obrađuješ liniju po liniju (tj. kad pritisneš enter, on pozove parser) onda možeš da uradiš ovako nešto:
Kod:
#include <iostream> #include <iomanip> #include <iterator> // ... parser kod ... // int main() { std::string line; while(std::getline(std::cin, line)) { if( line == "exit" ) break; Parser parser(line); std::cout << std::boolalpha; std::cout << parser.axiom1() << "\n"; std::cout << parser.axiom2() << "\n"; std::cout << parser.axiom3() << "\n"; } return 0; } Ne znam kako uraditi to sa tabovima bez neke GUI biblioteke, ali to mi je overkill za aplikaciju ovog tipa. |
18.12.2012, 21:39 | #19 | |
Član
Član od: 10.9.2008.
Lokacija: Beograd
Poruke: 81
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: How to... C++
Jel moze neko da mi napise kako bi se mogao dotati neki text ispred ovoga true i false?
Citat:
Poslednja ispravka: Ozzy (19.12.2012 u 20:03) |
|
7.7.2013, 16:30 | #20 |
Novi član
Član od: 6.7.2013.
Poruke: 1
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
Re: How to... C++
Ukoliko zelis nauciti C/C++ mozes pogledati i ovaj uvod>
www.scribd.com/duskoKoscica Kompletno besplatno. |
Bookmarks sajtovi |
Tagovi |
c++, how to, pomoc, programiranje |
|
|