Programiranje u C++-u - pitanja i odgovori
- poruka: 7.285
- |
- čitano: 1.719.357
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Evo jedan program koj sam napravio al ima error tj. nezeli inicijalizirati varjablu.
#include <iostream>
using namespace std;
class ZbrajanjeOduzimanje
{
public : double c;
public : double Zbroji(float a, float b)
{
c = a + b;
return c;
}
float Oduzmi(float a, float b)
{
c = a - b;
return c;
}
};
class Identifikacija
{
private : string username;
username = "David";
private : string password;
password = "mypwdavid123";
public : string un;
public : string pw;
public : bool IsDavid(string un, string pw)
{
if(un == username && pw == password)
{
return true;
}
return false;
}
};
int main()
{
string operacija;
double unos1, unos2;
ZbrajanjeOduzimanje obj1;
Identifikacija id;
cout << "Korisnicko ime:";
cin >> id.un;
cout << "Lozinka:";
cin >> id.pw;
if(id.IsDavid(id.un, id.pw) == true)
{
cout << "Unesi recunsku operaciju koju zelis izvesti (+,-) :";
cin >> operacija;
if(operacija == "+")
{
cout << "Odabrali se racunsku operaciju zbrajanje" << endl;
cout << "Unesite brojeve koje zelite zbrojiti" << endl;
cin >> unos1 >> unos2;
cout << "Rezultat je:" << obj1.Zbroji(unos1, unos2) << endl;
}
if(operacija == "-")
{
cout << "Odabrali se racunsku operaciju oduzimanje" << endl;
cout << "Unesite brojeve koje zelite oduzeti" << endl;
cin >> unos1 >> unos2;
cout << "Rezultat je:" << obj1.Oduzmi(unos1, unos2) << endl;
}
}
return 0;
}
Errori:
||=== OOP, Debug ===|
C:\Users\David\Dropbox\C++\OOP\main.cpp|26|error: 'username' does not name a type|
C:\Users\David\Dropbox\C++\OOP\main.cpp|30|error: 'password' does not name a type|
||=== Build finished: 2 errors, 0 warnings ===|
edit
Kako mogu vremenski ograničiti izvršavanje niti ako koristim _beginthread()?
Recimo imam nit u kojoj se računa nešto što optereti jezgru procesora na 100%, ali htio bih vremenski ograničiti koliko dugo da se izvršava.
I onda ako imam više niti da se za svaku može odvojeno vrijeme izvršavanja postaviti, kako bi se to moglo?
Napravio sam ovako(u klasi Identifikacija):
void SetID(string a, string b)
{
username = a;
password = b;
}
i u int main()
id.SetID(David, mypwdavid123)
i dobijem:
C:\Users\David\Dropbox\C++\OOP\main.cpp||In function 'int main()':|
C:\Users\David\Dropbox\C++\OOP\main.cpp|59|error: 'David' was not declared in this scope|
C:\Users\David\Dropbox\C++\OOP\main.cpp|59|error: 'mypwdavid123' was not declared in this scope|
||=== Build finished: 2 errors, 0 warnings ===|
Kako mogu vremenski ograničiti izvršavanje niti ako koristim _beginthread()?
Koristeci GetTickCout kako bi dobio vrijeme u milisekundama, i onda prekidaj izvrsavanje funkcije nakon odredenog vremena.
Napravio si grešku u tome što ne možeš inicijalizirati podatkovne članove klase na način kako si to učinio.
Najbolje je to učiniti preko konstruktora.
Obrati pažnju kako sam podatkovne članove klase stavio pod private, a metode pod public, to sam učinio zato jer mi nema što vanjski kod brljati po podatkovnim članovima klase.
A zaboravio si i u headeru uključiti string, neophodno za uspoređivanje stringova.
Zašto kao argumente funkcija Zbroji i Oduzmi koristiš float tip za argumente, a klasa ima double podatkovni član - nepotreban casting koji može dovesti do gubitka podataka.
Klasu ZbrajanjeOduzimanje bi trebalo drukčije napisati, odnosno da funkcija na osnovu argumenta + ili - kao trećeg računa rezultat, a ne u vanjskom kodu raditi komplikacije, ali to ostavljam tebi.
#include <iostream>
#include<string>
using namespace std;
class ZbrajanjeOduzimanje
{
private :
double c;
public :
double Zbroji(double a, double b)
{
c = a + b;
return c;
}
float Oduzmi(double a, double b)
{
c = a - b;
return c;
}
};
class Identifikacija
{
private :
string username;
string password;
public :
Identifikacija()
{
username = "David";
password = "mypwdavid";
}
bool IsDavid(string un, string pw)
{
if((un == username) && (pw == password))
{
return true;
}
return false;
}
};
int main()
{
string operacija, username, password;
double unos1, unos2;
ZbrajanjeOduzimanje obj1;
Identifikacija id;
cout << "Korisnicko ime:";
cin >> username;
cout << "Lozinka:";
cin >> password;
if(id.IsDavid(username, password))
{
cout << "Unesi recunsku operaciju koju zelis izvesti (+,-) :";
cin >> operacija;
if(operacija == "+")
{
cout << "Odabrali se racunsku operaciju zbrajanje" << endl;
cout << "Unesite brojeve koje zelite zbrojiti" << endl;
cin >> unos1 >> unos2;
cout << "Rezultat je:" << obj1.Zbroji(unos1, unos2) << endl;
}
if(operacija == "-")
{
cout << "Odabrali se racunsku operaciju oduzimanje" << endl;
cout << "Unesite brojeve koje zelite oduzeti" << endl;
cin >> unos1 >> unos2;
cout << "Rezultat je:" << obj1.Oduzmi(unos1, unos2) << endl;
}
}
return 0;
}
Kako to predajes stringove funkciji crni Davide. Gdje su dvostruki navodnici?
David i mypaw123 nisu varijable, ako su parametri znakovni niz, tj. string, u tvom slučaju jesu, moraš ih navesti pod navodnim znacima, dvostrukim, naravno.
Vidi stvarno tu sam fulao,ma navika iz onog fcking PAWN-a.
Kako mogu vremenski ograničiti izvršavanje niti ako koristim _beginthread()?
Koristeci GetTickCout kako bi dobio vrijeme u milisekundama, i onda prekidaj izvrsavanje funkcije nakon odredenog vremena.
Dakle prije izvršavanja u jednu varijablu spremim vrijeme i onda kad se izvršava provjeravam je li GetTickCount npr za 10.000 veći od vrijednosti te varijable (ako hoću da se vrti 10.000 milisekundi)?
Ako svaka nit poziva istu funkciju, kako mogu u svakoj pozvanoj funkciji imati različito vrijeme (da jedna traje npr 30 sekundi, druga 50, treća 80, četvrta 40,..)?
U biti morao bih za svaku nit imati odvojenu/drugu funkciju, bar mislim da se drugačije ne može riješiti. Ne bih znao.
Kako to predajes stringove funkciji crni Davide. Gdje su dvostruki navodnici?
David i mypaw123 nisu varijable, ako su parametri znakovni niz, tj. string, u tvom slučaju jesu, moraš ih navesti pod navodnim znacima, dvostrukim, naravno.
Na što misliš?
Nije tu bila greška, nego ne može izvršiti inicijalizaciju podatkovnog člana na taj način.
Ovo je inače dozvoljena operacija:
string username;
username = "fgdt";
Deklaracija, pa inicijalizacija.
Druga stvar je što se ne može vršiti inicijalizacija podatkovnog člana klase na ovaj način.
Aha, misliš na onaj SetID funkciju, je, to je greška, u pravu si.
Dakle prije izvršavanja u jednu varijablu spremim vrijeme i onda kad se izvršava provjeravam je li GetTickCount npr za 10.000 veći od vrijednosti te varijable (ako hoću da se vrti 10.000 milisekundi)?
Upravo tako. Na pocetku funkcije pozoves GetTickCount da dobijes pocetno vrijeme, i onda ides dok razlika izmedu pocetnog vremena i trenutnog vremena ne iznosi 10 000 milisekundi.
U biti morao bih za svaku nit imati odvojenu/drugu funkciju, bar mislim da se drugačije ne može riješiti. Ne bih znao.
Ne. Sredi da trajanje u milisekundama proslijedujes kao argument funkciji.
Na što misliš?
Nije tu bila greška, nego ne može izvršiti inicijalizaciju podatkovnog člana na taj način.
Da, ali ni sintaksa nije bila tocna. Valjda je na to mislio.
Kako to predajes stringove funkciji crni Davide. Gdje su dvostruki navodnici?
David i mypaw123 nisu varijable, ako su parametri znakovni niz, tj. string, u tvom slučaju jesu, moraš ih navesti pod navodnim znacima, dvostrukim, naravno.
Na što misliš?
Nije tu bila greška, nego ne može izvršiti inicijalizaciju podatkovnog člana na taj način.
id.SetID(David, mypwdavid123);
id.SetID( "David" , "mypwdavid123" );
Kako to predajes stringove funkciji crni Davide. Gdje su dvostruki navodnici?
David i mypaw123 nisu varijable, ako su parametri znakovni niz, tj. string, u tvom slučaju jesu, moraš ih navesti pod navodnim znacima, dvostrukim, naravno.
Na što misliš?
Nije tu bila greška, nego ne može izvršiti inicijalizaciju podatkovnog člana na taj način.
id.SetID(David, mypwdavid123);
id.SetID( "David" , "mypwdavid123" );
Aha, sorry, to nisam ni gledao.
Te dvije funkcije su inače nepotrebne, učini inicijalizaciju kroz konstruktor, ovako samo uvodiš dvije suvišne varijable u igru.
A program ima i logičku grešku, korisnik namješta username i password preko metoda, a onda ih unosi za provjeru.
Da, mislim na poziv funkcije SetID, pogrešno je predavao znakovni niz, to je rješenje zašto mu je compiler izbacivao greške da su David i mypw123 nepoznati pojmovi.
Evo ljudi ja sam malo krenuo u windows app vode pa me zanima kako u da u svoj windows app ubacim funkciju koja ce mi vratit string i kako da to ispisem
Nista mi nije jasno, kuzim da koristis standardni DevCpp predlozak za WinAPI aplikaciju, ali sto zelis napraviti? Sto ti nije jasno? Ne znas napisati funkciju koja vraca string? Ne znas ispisati taj string u prozor? Daj malo detaljnije, po mogucnosti i kôd.
U meduvremenu pogledaj si ovamo kako bi pohvatao konce sa nekim osnovama.
A ako si ozbiljan s time i ne kanis prijeci na nesto drugo (modernije, jednostavnije), onda si obavezno nabavi i ovu knjigu.
Evo i primjera koji pokazuje uporabu GetTickCount za ograničavanje vremenske duljine izvršavanja niti. Koristio sam tvoj prerađeni kôd jer si već upoznat s njime (i dodao sam pravilan način čekanja umjesto onog hacka sa sleep petljom).
#include <iostream>
#include <vector>
#include <process.h>
#include <cmath>
#include <windows.h>
using namespace std;
void prostbr(void*);
typedef struct
{
int interval;
int prosti;
unsigned long vrijeme;
vector<int> prosti_brojevi;
} THREAD_DATA, *PTHREAD_DATA;
int main()
{
HANDLE niti[3];
THREAD_DATA t1={0, 0, 20}, //interval=0, prosti=0, vrijeme=20
t2={0, 0, 40}, //interval=0, prosti=0, vrijeme=40
t3={0, 0, 80}; //interval=0, prosti=0, vrijeme=80
cout<<"\n Ovaj program ispisat ce sve proste brojeve do"
<<"\n unesenih brojeva...\n";
cout<<"\n Unesite brojeve: ";
cin>> t1.interval;
cin>> t2.interval;
cin>> t3.interval;
niti[0]=(HANDLE)_beginthread(prostbr, 0, (void*)&t1);
niti[1]=(HANDLE)_beginthread(prostbr, 0, (void*)&t2);
niti[2]=(HANDLE)_beginthread(prostbr, 0, (void*)&t3);
WaitForMultipleObjects(3, niti, TRUE, INFINITE);
/////////////////////////
cout<<"\n Evo svih prostih brojeva do "<<t1.interval<<".\n";
for (int n=0; n<t1.prosti_brojevi.size(); n++)
cout<<t1.prosti_brojevi[n] << " ";
cout<<endl<<"\nPostoji "<<t1.prosti
<<" prostih brojeva manjih ili jednakih "<<t1.interval<<".\n\n";
/////////////////////////
cout<<"\n Evo svih prostih brojeva do "<<t2.interval<<".\n";
for (int n=0; n<t2.prosti_brojevi.size(); n++)
cout<<t2.prosti_brojevi[n] << " ";
cout<<endl<<"\nPostoji "<<t2.prosti
<<" prostih brojeva manjih ili jednakih "<<t2.interval<<".\n\n";
/////////////////////////
cout<<"\n Evo svih prostih brojeva do "<<t3.interval<<".\n";
for (int n=0; n<t3.prosti_brojevi.size(); n++)
cout<<t3.prosti_brojevi[n] << " ";
cout<<endl<<"\nPostoji "<<t3.prosti
<<" prostih brojeva manjih ili jednakih "<<t3.interval<<".\n\n";
return 0;
}
// Funkcija za prepoznavanje prostih...
void prostbr(void *arg)
{
PTHREAD_DATA data=(PTHREAD_DATA)arg;
long double x=data->interval;
bool prost=true;
int broj2=(int)floor(sqrt(x));
//sacuvamo vrijeme pocetka izvrsavanja funkcije
unsigned long pocetno_vrijeme=GetTickCount();
for (int i=2; i<=x; i++)
{
for (int j=2; j<=broj2; j++)
{
//ako je vremenska razlika izmedu pocetnog i trenutnog vremena
//veca od data->vrijeme tada prekidamo izvrsavanje
if (GetTickCount()-pocetno_vrijeme>=data->vrijeme)
return;
if (i!=j && i%j==0)
{
prost=false;
break;
}
}
if (prost)
{
data->prosti_brojevi.push_back(i);
data->prosti+=1;
}
prost=true;
}
}
Inače, postoji još jedan način prekidanja niti a to je putem funkcije TerminateThread za koju moraš imati handle niti koju želiš prekinuti.
Više o WinAPI funkcijama za upravljanje nitima možeš pronaći ovdje.
Što se ovog gornjeg primjera tiče, prilično je neučinkovit zato jer provjera vremena u svakoj iteraciji petlje stvara velik overhead, to bi trebalo pametnije dizajnirati. Ali ionako to nije bila poanta primjera a niti ti tražiš učinkovito računanje, nego način da opteretiš procesor.
Dakle kao što se može vidjeti, prva petlja se prekida nakon 20 milisekundi izvršavanja (ako sama ne završi prije), druga nakon 40, a treća nakon 80 milisekundi. Ta su vremena približna zbog nepreciznosti defaultnog timera i nekih drugih čimbenika. Za preciznije mjerenje vremena treba koristiti precizniji timer.
Što se ovog djela tiče:
THREAD_DATA t1={0, 0, 20},
t2={0, 0, 40},
t3={0, 0, 80};
Ako te takvo inicijaliziranje strukture zbunjuje, zamisli si da umjesto toga piše:
THREAD_DATA t1, t2, t3;
t1.interval=0;
t1.prosti=0;
t1.vrijeme=20;
t2.interval=0;
t2.prosti=0;
t2.vrijeme=40;
t3.interval=0;
t3.prosti=0;
t3.vrijeme=20;
Ista stvar samo što je ovo gornje kraće.
@191x7
Program je bezveze kao program jer ispisivanje ne mozes raditi paraleleno (dobiti ces isprepleteni ispis mozda), a poanta threaded programiranja je da radis paraleleno stvari,
I ne moras koristiti nestandardne metode, a cak ne moras ni threads koristiti, iako su u C++11 standardu
Dakle
#include <future>
#include <vector>
#include <iostream>
using namespace std;
vector<int> prostbr(int x)
{
bool prost = true;
vector<int> primes;
for (int i = 1; i <= x; i++){
prost = true;
for ( int j = 2; j*j <= x; j++){
if ( i!=j && i % j == 0 ){
prost = false;
break;
}
}
if (prost){
primes.push_back(i);
}
}
return primes;
}
int main()
{
int x=10,y=20,z=40;
vector<future<vector<int>>> futures;
futures.push_back(std::move(async (prostbr,x)));
futures.push_back(std::move(async (prostbr,y)));
futures.push_back(std::move(async (prostbr,z)));
for(auto& ftr: futures)
{
const auto primes=ftr.get();
for(auto& el : primes)
{
std::cout << el <<endl;
}
cout << endl;
}
}
Evo i primjera koji pokazuje uporabu GetTickCount za ograničavanje vremenske duljine izvršavanja niti. Koristio sam tvoj prerađeni kôd jer si već upoznat s njime (i dodao sam pravilan način čekanja umjesto onog hacka sa sleep petljom).
...
Nije mi jasno kako da sredim da program nudi unos vremena koliko bih htjeo da se koja nit izvršava. Mislim znam dodati unos vrijednosti, no mući me kako ih pohraniti u tom obliku.
Trebam npr cinn>>t1.vrijeme; cinn>>t2.vrijeme; ili?
Kada to skužim trebam prilagoditi program da mogu unositi broj niti (npr da mogu unijeti 2 niti pa da se samo 2 izvršavaju ili npr 4 pa da se vrte 4 itd), da svaka nit traži proste do nekog ogromnog broja (recimo 9876543210) kako se ne bi završila prerano i da jedini uvijet kada će se koja nit završiti bude vrijeme izvršavanja (da ne mora naći i ispisati proste brojeve, samo da se troši procesorsko vrijeme).
Naravno, zahvalan sam na svakoj pomoći, kako i do sada tako i od sada.
Hvala još jednom.
Nije mi jasno kako da sredim da program nudi unos vremena koliko bih htjeo da se koja nit izvršava. Mislim znam dodati unos vrijednosti, no mući me kako ih pohraniti u tom obliku.
Trebam npr cinn>>t1.vrijeme; cinn>>t2.vrijeme; ili?
Da to bi tako nekako islo, medutim za ovo sto dalje zelis (varijabilan broj niti) ti je puno bolji izbor polje, nego hardkodiran broj struktura.
Kao sto vec rekoh, polja i petlje.
#include <iostream>
#include <vector>
#include <process.h>
#include <cmath>
#include <windows.h>
using namespace std;
void prostbr(void*);
typedef struct
{
int interval;
int prosti;
unsigned long vrijeme;
vector<int> prosti_brojevi;
} THREAD_DATA, *PTHREAD_DATA;
int main()
{
unsigned int broj_niti=1;
unsigned long pocetno_vrijeme;
HANDLE niti[256];
THREAD_DATA niti_podatci[256];
do
{
cout<<"Unesite broj niti: ";
cin>>broj_niti;
if (broj_niti>256)
cout<<"Unjeli ste prevelik broj. Maksimum je 256\n\n";
} while (broj_niti>256);
for (int n=0; n<broj_niti; n++)
{
cout<<"\nNit "<<n+1;
cout<<"\n Unesite broj: ";
cin>>niti_podatci[n].interval;
cout<<" Unesite trajanje niti u sekundama: ";
cin>>niti_podatci[n].vrijeme;
niti_podatci[n].vrijeme*=1000;
}
for (int n=0; n<broj_niti; n++)
niti[n]=(HANDLE)_beginthread(prostbr, 0, (void*)&niti_podatci[n]);
pocetno_vrijeme=GetTickCount();
cout<<"\nRacunanje sa "<<broj_niti<<" niti u tijeku...\n";
WaitForMultipleObjects(broj_niti, niti, TRUE, INFINITE);
cout<<"Dovrseno nakon "<<(GetTickCount()-pocetno_vrijeme)/1000.0<<"s\n";
return 0;
}
void prostbr(void *arg)
{
PTHREAD_DATA data=(PTHREAD_DATA)arg;
long double x=data->interval;
bool prost=true;
int broj2=(int)floor(sqrt(x));
unsigned long pocetno_vrijeme=GetTickCount();
//ponavljamo u beskonacnost dok ne prodje odredeno vrijeme
while (1)
{
for (int i=2; i<=x; i++)
{
for (int j=2; j<=broj2; j++)
{
//ako je vremenska razlika izmedu pocetnog i trenutnog vremena
//veca od data->vrijeme tada prekidamo izvrsavanje
if (GetTickCount()-pocetno_vrijeme>=data->vrijeme)
return;
if (i!=j && i%j==0)
{
prost=false;
break;
}
}
if (prost)
{
//ima li smisla pohranjivati izracunate brojeve
//ako nam ne trebaju?
//data->prosti_brojevi.push_back(i);
data->prosti+=1;
}
prost=true;
}
}
}
Primjeti da je hardkodirano ogranicenje broja petlji 256 sto je smijesno velik broj za takvo nesto, ali ako slucajno ti treba vise to se lako izmjeni. Uklonio sam i ispis izracunatih brojeva jer tebi ionako ne treba rezultat, takoder sam pod komentar stavio i liniju koja pohranjuje pronadene proste brojeve u vektor, jer ti izracunati brojevi uopce ne trebaju.
#include <iostream>
using namespace std;
//funkcija za 1. zadatak
void ispis_par(int a, int b) {
int pom = a;
for (;a < b; a++) {
if (a % 2) cout << a <<" ";
while (pom) {
if (pom % 2){
pom--;
break;
}
else {
cout << pom << " ";
pom--;
break;
}
}
}
}
int main()
{
//1. zadatak
int a,b;
do {
cout << "Unesite broj izmedju 4 i 22: ";
cin >> a;
} while( a < 4 || a > 22);
do {
cout << "Unesite broj izmedju 100 i 150: ";
cin >> b;
} while( b < 100 || b > 150);
ispis_par(a, b);
cout << endl;
system ("PAUSE");
return 0;
}
Može li mi netko objasniti što funkcija radi ukratko?
Kao sto vec rekoh, polja i petlje.
...
Primjeti da je hardkodirano ogranicenje broja petlji 256 sto je smijesno velik broj za takvo nesto, ali ako slucajno ti treba vise to se lako izmjeni. Uklonio sam i ispis izracunatih brojeva jer tebi ionako ne treba rezultat, takoder sam pod komentar stavio i liniju koja pohranjuje pronadene proste brojeve u vektor, jer ti izracunati brojevi uopce ne trebaju.
Vrhunski odrađeno. Baš proučavam kod.
Moram ja takvo programiranje dobro savladat, baš mi je super što imam tako nekoga da mi pomaže, puno je lakše učiti. Hvala ti.
Sutra ću još detaljno proučiti kod pa ako mi štogod ne bude jasno pitam opet.
Ako sam pretjerao s pitanjima ili imaš osjećaj da previše zanovijetam, slobodno mi reci. Bitno mi je ovo pa sam možda malo naporan.
Edit:
Našao sam problem - ako se kao broj niti unese 1 i unesemo broj, onda ispiše "unesite trajanje niti usekundama: " i odmah pokrene računanje bez da se unese trajanje niti.
Može li mi netko objasniti što funkcija radi ukratko?
Mozda bi ti bilo lakse shvatiti ako pojednostavnis funkciju kao:
void ispis_par(int a, int b) {
int pom = a;
while(a < b) {
if (a % 2){
cout << a <<" ";
}
if(pom > 0){
if (pom % 2 == 0){
cout << pom << " ";
}
pom--;
}
a++;
}
}
Uglavnom ispisuje a ako je neparan dok je a<b, i pom ako je paran dok je pom > 0,
sto to tocno "radi" nemam pojma.
Najlakse ti je jednostavno pokrenuti program, nema sta biti nejasno.
Našao sam problem - ako se kao broj niti unese 1 i unesemo broj, onda ispiše "unesite trajanje niti usekundama: " i odmah pokrene računanje bez da se unese trajanje niti.
Ne uspjevam reproducirati. Nakon sto upisem broj niti 1, i broj do kojega se racuna, mogu normalno upisati broj sekundi, ne preskace mi nista.
moze li me neko uputiti u ove naredbu
Struct ili strukture ...
Za sta se koristi :(
Našao sam problem - ako se kao broj niti unese 1 i unesemo broj, onda ispiše "unesite trajanje niti usekundama: " i odmah pokrene računanje bez da se unese trajanje niti.
Ne uspjevam reproducirati. Nakon sto upisem broj niti 1, i broj do kojega se racuna, mogu normalno upisati broj sekundi, ne preskace mi nista.
Nisi unio dovoljno veliki broj. Probaj npr 1234567891011 pa ćeš vidjeti.
Kad unesem npr 123456 onda radi. Ali meni treba baš za veliki broj, traženje do nekog malog broja mi ne optereti dovoljno i može se dogoditi da ne traje dovoljno.
Vrijednosti intervala bih eliminirao, da sve niti traže do broja zadanog, npr 9876543212345.
Dakle da se ne traži unos "do kojeg broja" za svaku nit, da se ne traži unos broja uopće već samo koliko niti i koliko vremena da vrti koju nit.
U biti vektor za pohranu do kojih brojeva se računa više mi nije potreban već samo jedna varijabla u koju bi bio pohranjen broj do kojeg se traži.
moze li me neko uputiti u ove naredbu
Struct ili strukture ...
Za sta se koristi :(
Nisi unio dovoljno veliki broj. Probaj npr 1234567891011 pa ćeš vidjeti.
Kad unesem npr 123456 onda radi. Ali meni treba baš za veliki broj, traženje do nekog malog broja mi ne optereti dovoljno i može se
dogoditi da ne traje dovoljno.
A joj, pa ti overflow radis.
Koliko velik broj moze drzati 32 bitni integer kada je signed, a koliko kada je unsigned?
Odgovor potrazi ovdje.
Ovaj tvoj broj je 574 puta veci od 32 bitnog signed integera. :D
Probaj kao broj upisati 2147483647, pa drugi puta 2147483648 i vidjet ces da na ovom drugom pocinje cudno ponasanje.
Cini se da iostream nakon loseg upisa ulazi u stanje greske nakon kojeg prekida sav ostali unos dodatnih podataka (to ce ti tracer ili floki znati bolje objasniti). Za vise o tome si procitaj ovdje.
Dakle ili prestani upisivati tako velik broj, ili dodaj ovo:
cin.clear();
poslije ove linije:
cin>>niti_podatci[n].interval;
Sto se ovih ostalih promjena tice, izrezuj sto ti je visak, to bar nije problem :D