Programiranje u C++-u - pitanja i odgovori izdvojena tema

poruka: 7.285
|
čitano: 1.616.455
|
moderatori: Lazarus Long, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
13 godina
odjavljen
offline
Re: Programiranje u C++-u - pitanja i odgovori
Ahaa, zato unija ima veze s embeddedom.
Na koji način bi šaltao između membera, a da ne dođe do overlapa?
Dobar primjer su sobe u hotelu, i gosti.

A to znači da mogu dvije strukture/objekta staviti u uniju, i onda koristiti jedan objekt, pa kad ga ne trebam, onda koristim drugi. Recimo da jedan objekt je 50B, a drugi je 30B. Zajedno bi zauzimali 80B, a ovako uzimaju 50B
13 godina
odjavljen
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav 

Kako definirati matematičku operaciju nad strukturom?

Tipa imam dvije iste strukture, koje imaju a i b kao članove

I sad kad idem zbrojiti dvije strukture, gdje i kako definiram pravila? 

 
0 0 hvala 0
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Dex.pwn kaže...

Pozdrav 

Kako definirati matematičku operaciju nad strukturom?

Tipa imam dvije iste strukture, koje imaju a i b kao članove

I sad kad idem zbrojiti dvije strukture, gdje i kako definiram pravila? 

Hm, rekao bih da ti treba ovo.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
4 godine
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Stavio sam. Ne radi.

4 godine
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
andrijam kaže...

Provjeri još jednom dali si dobro konfigurirao projekt. Najlakše da uzmeš jedan postojeći koji radi i u njega kopiraš kod.

Nisam siguran dali ti treba u ovom kodu using namespace std. 

 Vraćam se opet na onaj program koji bi trebao simulirati kretanje 6 loptica korištenjem polja. Dakle, projekt je dobro konfiguriran. Kad izostavim using namespace std, javlja mi još i dodatne greške.

4 godine
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Djuro von Prekoplotovich kaže...
safin kaže...

Provjerio sam, sve je u redu, al ne radi. Prvotno sam i izostavio using namespace std, al onda imam problem s korištenjem polja pa mi javlja iste greške plus još ovo: 

 

1>c:\users\mario\documents\visual studio 2015\projects\allegroprojekt39\main.cpp(94): error C2065: 'vector': undeclared identifier

 

#include <vector>

 Naredba #include <vector> je u programu. Program i greške su na str. 240

Poruka je uređivana zadnji put uto 2.6.2020 1:56 (safin).
4 godine
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Djuro von Prekoplotovich kaže...
safin kaže...

Provjerio sam, sve je u redu, al ne radi. Prvotno sam i izostavio using namespace std, al onda imam problem s korištenjem polja pa mi javlja iste greške plus još ovo: 

 

1>c:\users\mario\documents\visual studio 2015\projects\allegroprojekt39\main.cpp(94): error C2065: 'vector': undeclared identifier

 

#include <vector>

Naredba #include <vector> je u programu. Program i greške su na str. 240

Poruka je uređivana zadnji put uto 2.6.2020 1:58 (safin).
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

Ukratko imam ovakvu situaciju,

 

- imam dva pokrenuta procesa koji komuniciraju preko shared_memory ( od boosta library koristim)

 

- tipa Proces1 mi salje bytove na shared_memory i onda Proces2 sa shared_memory kopira ih u svoj buffer.

 

- ono sto zelim je da Proces2 meni posalje svoj buffer, odnosno memorijsku lokaciju svojeg buffera i onda da ga ja na Procesu1 punim.

 

Pa me zanima da li je uopce moguce tako nesto, da na jednom procesu imas pristup nekoj memorijskoj adresi koja se inicijalizirala na drugom procesu. Trenutno dobivam access violation error pokusavam napuniti buffer. 

 
0 0 hvala 0
12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
cale kaže...

Ukratko imam ovakvu situaciju,

 

- imam dva pokrenuta procesa koji komuniciraju preko shared_memory ( od boosta library koristim)

 

- tipa Proces1 mi salje bytove na shared_memory i onda Proces2 sa shared_memory kopira ih u svoj buffer.

 

- ono sto zelim je da Proces2 meni posalje svoj buffer, odnosno memorijsku lokaciju svojeg buffera i onda da ga ja na Procesu1 punim.

 

Pa me zanima da li je uopce moguce tako nesto, da na jednom procesu imas pristup nekoj memorijskoj adresi koja se inicijalizirala na drugom procesu. Trenutno dobivam access violation error pokusavam napuniti buffer. 

Možda bi trebao koristiti read-write način rada? Pretpostavljam da je to dokumentacija library-ja kojeg koristiš.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 1.9.2020 17:11 (pr0n_addict).
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

vise ne znam kaj radim...di koji pointer, al evo recimo neki example code.

 


void* buffer = malloc(4); 

 

std::cout << buffer << std::endl;

char bytes[sizeof(void*)]; 

 

memcpy(bytes, &buffer, sizeof(void*)); AKO DOBRO RAZUMIJEM, SAD SAM RECIMO IZVADIO BYTEOVE IZ OVOG POINTER-a


void* pointerToPointer = malloc(sizeof(void*)); SAD ZELIM TE BYTOVE NATRAG PRETVORITI U POINTER 

memcpy(pointerToPointer, bytes, sizeof(void*));


void** casted = reinterpret_cast<void**>(pointerToPointer);

memcpy(*casted, (const void*)5, sizeof(int));



delete buffer; - OVDJE MI PUKNE I KAZE ACCESS VIOLATION READING
delete pointerToPointer;

12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
cale kaže...

vise ne znam kaj radim...di koji pointer, al evo recimo neki example code.

 


void* buffer = malloc(4); 

 

std::cout << buffer << std::endl;

char bytes[sizeof(void*)]; 

 

memcpy(bytes, &buffer, sizeof(void*)); AKO DOBRO RAZUMIJEM, SAD SAM RECIMO IZVADIO BYTEOVE IZ OVOG POINTER-a


void* pointerToPointer = malloc(sizeof(void*)); SAD ZELIM TE BYTOVE NATRAG PRETVORITI U POINTER 

memcpy(pointerToPointer, bytes, sizeof(void*));


void** casted = reinterpret_cast<void**>(pointerToPointer);

memcpy(*casted, (const void*)5, sizeof(int));



delete buffer; - OVDJE MI PUKNE I KAZE ACCESS VIOLATION READING
delete pointerToPointer;

Miješanje malloc/calloc C-ovskih funkcija i delete operatora baš i nije najbolja ideja. Probaj radije koristiti free() funkciju za dealokaciju u tom slučaju (čemu onda uopće C++ za ovako nešto?) ili new/new[] operator za alokaciju.

Inače, ima tu još problema s veličinama nizova (ovako na prvu), a i nije mi baš jasno što točno pokušavaš postići.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 1.9.2020 20:16 (pr0n_addict).
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

PROCES 1

   -na ovom procesu se recimo nalazi neki "buffer", neka alocirana adresa

 

PROCES 2

   -na njemu se nalazi recimo neka vrijednost, neka bude integer 

 

Ja sad zelim "buffer" napuniti s vrijednoscu koja se nalazi na PROCESU_2. Jedan od nacina koji sam ja napravio je koristeci shared_memory od boosta. No dosta izgubim na brzini na taj nacin, jer prvo value kopiram na shared_memory i onda iz njega kopiram u buffer, izgubim takoder dosta zbog sinkronizacije shared_memoria

 

Pa me zanima da li kako PROCES_2 moze direktno upisati ovu vrijednost na "buffer".

 

Moja prvotna ideja je bila da probam nekako adresu buffera. Doslovno da void* a pretvorim u niz charova koje onda preko shared_memory posaljem PROCESU_2, i da onda on taj niz natrag pretvori u void* i u nju zapise vrijednost.

12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
cale kaže...

PROCES 1

   -na ovom procesu se recimo nalazi neki "buffer", neka alocirana adresa

 

PROCES 2

   -na njemu se nalazi recimo neka vrijednost, neka bude integer 

 

Ja sad zelim "buffer" napuniti s vrijednoscu koja se nalazi na PROCESU_2. Jedan od nacina koji sam ja napravio je koristeci shared_memory od boosta. No dosta izgubim na brzini na taj nacin, jer prvo value kopiram na shared_memory i onda iz njega kopiram u buffer, izgubim takoder dosta zbog sinkronizacije shared_memoria

 

Pa me zanima da li kako PROCES_2 moze direktno upisati ovu vrijednost na "buffer".

 

Moja prvotna ideja je bila da probam nekako adresu buffera. Doslovno da void* a pretvorim u niz charova koje onda preko shared_memory posaljem PROCESU_2, i da onda on taj niz natrag pretvori u void* i u nju zapise vrijednost.

Cijela poanta tog library-ja je da se izbjegne potreba za dvostrukim kopiranjem pa mi se čini da ti vlastiti buffer nije niti potreban, ali moguće da sam u krivu. Vidi ako ti se netko drugi javi na upit.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Aha, a nista back to documentation :)

12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
cale kaže...

Aha, a nista back to documentation :)

Čini mi se da ti PROCES 1 treba write prava (create only), a PROCES 2 read prava (open only - bacit će exception ako ne postoji mem segment s traženim nazivom što je ok) i to je to.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put uto 1.9.2020 20:48 (pr0n_addict).
11 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
cale kaže...

PROCES 1

   -na ovom procesu se recimo nalazi neki "buffer", neka alocirana adresa

 

PROCES 2

   -na njemu se nalazi recimo neka vrijednost, neka bude integer 

 

Ja sad zelim "buffer" napuniti s vrijednoscu koja se nalazi na PROCESU_2. Jedan od nacina koji sam ja napravio je koristeci shared_memory od boosta. No dosta izgubim na brzini na taj nacin, jer prvo value kopiram na shared_memory i onda iz njega kopiram u buffer, izgubim takoder dosta zbog sinkronizacije shared_memoria

 

Pa me zanima da li kako PROCES_2 moze direktno upisati ovu vrijednost na "buffer".

 

Moja prvotna ideja je bila da probam nekako adresu buffera. Doslovno da void* a pretvorim u niz charova koje onda preko shared_memory posaljem PROCESU_2, i da onda on taj niz natrag pretvori u void* i u nju zapise vrijednost.

Osim shared memory, mozes pogledat i pipes. Ili preko sockets sto mi je jos veci overhead.

Ovo sto bi ti htio nece proci, barem ne na x86/x64 PC-ima - kao prvo, proces ne moze pristupat lokalnoj memoriji drugog procesa, a kao drugo, memorija je virtualizirana, svaki proces ima svoje mapiranje u fizicku memoriju, sirova vrijednost void* oznacava odredjenu mem adresu u tom procesu, ali ima posve drugo znacenje u nekom drugom.

12 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
CyberK kaže...
...

... kao prvo, proces ne moze pristupat lokalnoj memoriji drugog procesa, ...

Na Windozerima postoji ReadProcessMemory API funkcija baš za tu svrhu, ali naravno za to su potrebna elevated prava (switch iz user u kernel mode) i handle na proces čijoj se memoriji želi pristupiti.

0100011001000001010100000010000000110100001000000100110001001001010001100100010100100001
Poruka je uređivana zadnji put sri 2.9.2020 13:11 (pr0n_addict).
4 godine
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Ovo je program(igrica) u kojem 2 kauboja imaju revolveraški obračun. U trenutku kada je jedan od njih pogođen, on ispušta krik, ostaje nepomičan, igrica se završava. U program treba unijeti izmjene tako da se može igrati više rundi dvoboja. Dakle, nakon što je jedan kauboj pogođen, program treba čekati recimo 2 sekunde i onda novi dvoboj. Za vrijeme 'čekanja' bi se ovaj 'živi' kauboj trebao moći i dalje pomicati gore dole. Isto tako, u slučaju da su oba kauboja potrošila sve metke, trebalo bi na sličan način pričekati isto recimo 2 sekunde, pa nanovo dvoboj. Evo tog programa, pa ako neko zna kako da preuredim kod, a da ispuni te nove zahtjeve u zadatku.

 

#include <allegro.h>
#include <assert.h>
#include <deque>
using namespace std;
typedef int Color;

const double brzinaMetka=1.5;
const double brzinaKauboja=0.5;
const int kapacitetRevolvera=6;

const int kaubojH= 75;
const int kaubojW= kaubojH/3;
const double revolverRelY=0.48;
const int polumjerMetka=3;

Color crna;
Color bijela;

struct KoordinatePiksela
{
int x;
int y;
};

class Metak
{
public:
Metak(double parX,double parY,int parSmjer) {
x=parX;
y=parY;
smjer=parSmjer;
}
void Pomakni(int protekloVrijeme);
void NacrtajMetak(BITMAP* povrsina);
bool JestUnutarProzora();
double X() { return x; }
double Y() { return y; }
private:
double x;
double y;
int smjer;
};

class Kauboj
{
public:
Kauboj(double parX, double parY, int parSmjer){
x=parX;
y=parY;
smjer=parSmjer;
brojMetaka=kapacitetRevolvera;
jestPogodjen=false;
}
void NacrtajKauboja(BITMAP* povrsina);
void PomakniGore(double udaljenost);
void PomakniDolje(double udaljenost);
Metak Pucaj();
bool RevolverNijePrazan();
void ProvjeriPogodakMetkom(Metak metak);
bool JestPogodjen() { return jestPogodjen; }

private:
double x;
double y;
int smjer;
int brojMetaka;
bool jestPogodjen;

void NacrtajUmirucegKauboja(BITMAP* povrsina);
void NacrtajZivogKauboja(BITMAP* povrsina);
};

KoordinatePiksela KPKauboja(
double x,double y,
int smjer, double xRel, double yRel)
{
KoordinatePiksela rezultat;
if (smjer==-1) xRel=1-xRel;
rezultat.x=int(x)+int(kaubojW*xRel);
rezultat.y=int(y)+int(kaubojH*yRel);
return rezultat;
}
void NacrtajCrnuLinijuMedjuKoordinatama(
BITMAP* povrsina,
KoordinatePiksela k1,
KoordinatePiksela k2)
{
line(povrsina, k1.x, k1.y, k2.x, k2.y,crna);
}

void Metak::Pomakni(int protekloVrijeme) {
x+=brzinaMetka*protekloVrijeme*smjer;
}
void Metak::NacrtajMetak(BITMAP* povrsina) {
circlefill(povrsina,x,y,polumjerMetka,crna );
}
bool Metak::JestUnutarProzora() {
if (x+polumjerMetka<0) return false;
if (x+polumjerMetka>SCREEN_W) return false;
return true;
}

void Kauboj::ProvjeriPogodakMetkom(Metak metak){
if ( metak.X() > x
&& metak.X() < x+kaubojW
&& metak.Y() > y
&& metak.Y() < y+kaubojH
)
jestPogodjen=true;
}
void Kauboj::PomakniGore(double udaljenost){
if (JestPogodjen()) return;
y-=udaljenost;
if (y<=0) y=0;
}
void Kauboj::PomakniDolje(double udaljenost){
if (JestPogodjen()) return;
y+=udaljenost;
if (y>=SCREEN_H-kaubojH) y=SCREEN_H-kaubojH;
}
bool Kauboj::RevolverNijePrazan() {
return brojMetaka>0;
}
Metak Kauboj::Pucaj() {
assert( RevolverNijePrazan() );
brojMetaka--;
if (smjer==-1)
return Metak(x, y+int(revolverRelY*kaubojH), smjer);
else
return Metak(x+30, y+int(revolverRelY*kaubojH), smjer);
}
void Kauboj::NacrtajKauboja(BITMAP* povrsina){
if (JestPogodjen())
NacrtajUmirucegKauboja(povrsina);
else
NacrtajZivogKauboja(povrsina);
}
void Kauboj::NacrtajZivogKauboja(BITMAP* povrsina) {
KoordinatePiksela k1=KPKauboja(x,y,smjer,0 ,1 );
KoordinatePiksela k2=KPKauboja(x,y,smjer,1 ,1 );
KoordinatePiksela k3=KPKauboja(x,y,smjer,0.5 ,0.66);
KoordinatePiksela k4=KPKauboja(x,y,smjer,0.5 ,0.34);
KoordinatePiksela k5=KPKauboja(x,y,smjer,0.5 ,0.38);
KoordinatePiksela k6=KPKauboja(x,y,smjer,0.87,0.59);
KoordinatePiksela k7=KPKauboja(x,y,smjer,1.29,0.51);
KoordinatePiksela k8=KPKauboja(x,y,smjer,1.15,0.56);
KoordinatePiksela k9=KPKauboja(x,y,smjer,1.20,revolverRelY);
KoordinatePiksela k10=KPKauboja(x,y,smjer,1.58,revolverRelY);
KoordinatePiksela k11=KPKauboja(x,y,smjer,0.5 ,0.17);

NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k1,k3);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k2,k3);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k3,k4);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k5,k6);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k6,k7);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k8,k9);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k9,k10);
circlefill(povrsina, k11.x, k11.y, k4.y-k11.y, crna);
}
void Kauboj::NacrtajUmirucegKauboja(BITMAP* povrsina) {
textout_ex(povrsina,font,"Aarghh!",x,y-16,crna,bijela);

KoordinatePiksela k1=KPKauboja(x,y,smjer,0 ,1 );
KoordinatePiksela k2=KPKauboja(x,y,smjer,1 ,1 );
KoordinatePiksela k3=KPKauboja(x,y,smjer,0.48,0.85);
KoordinatePiksela k4=KPKauboja(x,y,smjer,0.45,0.67);
KoordinatePiksela k5=KPKauboja(x,y,smjer,0.35,0.34);
KoordinatePiksela k6=KPKauboja(x,y,smjer,0 ,0.55);
KoordinatePiksela k7=KPKauboja(x,y,smjer,0.4 ,0.45);
KoordinatePiksela k8=KPKauboja(x,y,smjer,0.43,0.17);

NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k1,k3);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k2,k4);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k3,k4);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k4,k5);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k5,k6);
NacrtajCrnuLinijuMedjuKoordinatama(povrsina,k6,k7);
circlefill(povrsina, k8.x, k8.y, k5.y-k8.y, crna);
}

int brojTikova=0;
void Kucalo() { brojTikova++; }

int main()
{
if (allegro_init()!= 0) return 1;
if (set_gfx_mode(GFX_AUTODETECT_WINDOWED,640,480,0,0)!=0) return 2;
BITMAP* povrsina=create_bitmap(SCREEN_W, SCREEN_H);
install_keyboard();
install_timer();
install_int(Kucalo, 1);
Kauboj kauboj1(50,SCREEN_H/2,1);
Kauboj kauboj2(SCREEN_W-kaubojW-50,SCREEN_H/2,-1);
deque<Metak> metak;
crna=makecol(0,0,0);
bijela=makecol(255,255,255);

bool pucanje1BiloPritisnuto=false;
bool pucanje2BiloPritisnuto=false;

int prethodniBrojTikova=brojTikova;

while (!key[KEY_ESC] && !key[KEY_SPACE] && !key[KEY_ENTER])
{
int protekloVrijeme = brojTikova - prethodniBrojTikova;
prethodniBrojTikova = brojTikova;

//ulaz -kauboj 1
if (key[KEY_Q])
kauboj1.PomakniGore(brzinaKauboja*protekloVrijeme);
if (key[KEY_A])
kauboj1.PomakniDolje(brzinaKauboja*protekloVrijeme);
if (!pucanje1BiloPritisnuto && key[KEY_D]) {
pucanje1BiloPritisnuto=true;
if (kauboj1.RevolverNijePrazan() && !kauboj1.JestPogodjen() ) {
Metak noviMetak=kauboj1.Pucaj();
metak.push_back(noviMetak);
}
}
if (!key[KEY_D])
pucanje1BiloPritisnuto=false;

//ulaz -kauboj 2
if (key[KEY_7_PAD])
kauboj2.PomakniGore(brzinaKauboja*protekloVrijeme);
if (key[KEY_4_PAD])
kauboj2.PomakniDolje(brzinaKauboja*protekloVrijeme);
if (!pucanje2BiloPritisnuto && key[KEY_6_PAD]) {
pucanje2BiloPritisnuto=true;
if (kauboj2.RevolverNijePrazan() && !kauboj2.JestPogodjen() ) {
Metak noviMetak=kauboj2.Pucaj();
metak.push_back(noviMetak);
}
}
if (!key[KEY_6_PAD])
pucanje2BiloPritisnuto=false;

//obrada
if (!metak.empty() && !metak[0].JestUnutarProzora())
metak.pop_front();
for (int i=0;i<int(metak.size());i++)
metak[i].Pomakni(protekloVrijeme);
for (int i=0;i<int(metak.size());i++) {
kauboj1.ProvjeriPogodakMetkom(metak[i]);
kauboj2.ProvjeriPogodakMetkom(metak[i]);
}

//izlaz
clear_to_color(povrsina, bijela);
kauboj1.NacrtajKauboja(povrsina);
kauboj2.NacrtajKauboja(povrsina);
for (int i=0;i<int(metak.size());i++)
metak[i].NacrtajMetak(povrsina);
show_mouse(povrsina);
vsync();
blit(povrsina, screen, 0,0,0,0,SCREEN_W,SCREEN_H);
show_mouse(NULL);
rest(1);
}
return 0;
}
END_OF_MAIN()

 
0 0 hvala 0
14 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav, evo me n C++-u.

 

Zadatak glasi ovako:

 

Napišite program koji u vektor učitava niz studenata, a za svakog studenta i popis njegovih upisanih kolegija te ocjenu iz svakog od tih kolegija. Nakon učitavanja svih podataka potrebno je napisati globalnu funkciju ProsjekKolegijakoja prima taj vektor inaziv odabranog kolegija te vraća prosjek ocjena svih studenata iz tog kolegija. Studente i kolegije potrebno je predstaviti istoimenim klasama.

 

Zadatak ovako treba ici:

 

Unesite broj studenata: 3

 

Unesi ime i prezime 1.studenta: Ante Antic

Unesi broj kolegija studenta: 2

Unesite naziv i ocjenu za 1. kolegij: Matematika 3

Unesite naziv i ocjenu za 2. kolegij: Fizika 4

 

Unesi ime i prezime 2.studenta: Pero Peric

Unesi broj kolegija studenta: 3

Unesite naziv i ocjenu za 1. kolegij: Matematika 4

Unesite naziv i ocjenu za 2. kolegij: Fizika 3

Unesite naziv i ocjenu za 3. kolegij: Programiranje 4

 

Unesi ime i prezime 3.studenta: Ana Anic

Unesi broj kolegija studenta: 2

Unesite naziv i ocjenu za 1. kolegij: Matematika 4

Unesite naziv i ocjenu za 2. kolegij: Programiranje 5

 

Unesite naziv kolegija: Matematika

Prosjek ocjena iz kolegija Matematika iznosi 3.66667

 

Uspio sam sve osim prosjeka:

 

#include <iostream>
#include <vector>
#include <string.h>

using namespace std;

class Student
{
public:
    string ime;
    string prezime;
};

class Kolegij
{
public:
    string naziv;
    int ocjena;
};

int main()
{
    int brojStudenata;

    cout << "Unesite broj studenata: ";
    cin >> brojStudenata;
    vector <Student> studenti(brojStudenata);
    string imeStudenta;
    string prezimeStudenta;

    for (size_t i = 0; i<studenti.size();i++)
    {
        cout << "Unesi ime i prezime " << i +1 << ". studenta:" << endl;  
        cin >> studenti[i].ime;
        cin >> studenti[i].prezime;
        cout << "Unesite broj kolegija studenta:" << endl;
        int brojKolegija;
        cin >> brojKolegija;
        vector <Kolegij> kolegiji(brojKolegija);

        for (size_t j = 0; j < kolegiji.size();j++)
        {
            cout << "Unesite naziv i ocjenu za " << j + 1 << ".kolegij" << endl;
            cin >> kolegiji[j].naziv;
            cin >> kolegiji[j].ocjena;
           
        }

    }


    return 0;
   
}

 

Može netko pomoći kako napraviti prosjek kao funkciju.

Poruka je uređivana zadnji put pon 22.3.2021 20:13 (Hazar).
 
0 0 hvala 0
3 godine
protjeran
offline
Programiranje u C++-u - pitanja i odgovori

Prosijek računaš na isti način na koji si i upisivao učenike i ocjene.

Radiš loop kroz sve učenike. Za svakog učenika radiš loop kroz sve kolegije.

 

String trazimKolegij = "Matematika"; // Valjda ide ovako, nisam u C++u, samo C-string! :D

uint16_t brojKolegija = 0;

uint16_t zbrojOcjena = 0;

 

for (...) // Kroz učenike

{

for (...) // Kroz kolegije

{

if (provjera da li je naziv kolegija isti trazimKolegij)

{

brojKolegija++;

zbrojOcjena += kolegij_taj_i_taj.ocjena;

}

}

}

 

cout << "Prosijek je " << zbrojOcjena/brojKolegija << endl;

Life is meant to die. Accept your fates.
 
0 0 hvala 1
13 godina
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav ekipa, evo trebao bih pomoc oko ovog zadatka, ako bi mi netko znao rijesiti. Znam da je vjv jako lako ali sam nov u progamiranju tako da..

 

1. Neka korisnik unosi prirodne brojeve (veće od 0) sve dok se ne unese prirodni broj veći od 30. Program treba ispisati najveći uneseni neparni broj.

Moj PC  
0 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
i7 extreme kaže...

Pozdrav ekipa, evo trebao bih pomoc oko ovog zadatka, ako bi mi netko znao rijesiti. Znam da je vjv jako lako ali sam nov u progamiranju tako da..

 

1. Neka korisnik unosi prirodne brojeve (veće od 0) sve dok se ne unese prirodni broj veći od 30. Program treba ispisati najveći uneseni neparni broj.

 

C++ rješenje:

 

1. std::vector<int> nums;

    int n;

2. do-while petlja std::cin >> n, if n <= 0 continue, if n > 30 break, nums.push_back(n)

3. Nakon petlje std::sort vektora i onda std::reverse istog vektora

4. Iteriraj po vektoru ili koristi C++ ekvivalent for_each,odnosno "for (int &num : nums)" dok ne pogodiš prvi neparni broj.

5. std::cout << "Najveci neparni broj je: " << num << std::endl

6. Je li broj neparan provjerava se pomoću modulo operatora i broja 2.

 

 

Joj!
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Radim u codeblocksu, jel bi mogo to nekako prilagodit da mi bude jasnije malo?

Poruka je uređivana zadnji put čet 24.6.2021 13:28 (i7 extreme).
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori

Sto znas, tj do kud si dosao, gdje je zapelo? 

 

Ne ocekuj bas da ce ti ljudi rijesit zadatak liniju po liniju. Covjek ti je dao postupak kako rijesiti zadatak, tj korake.

 

Probaj, napisi nesto, pa kad zapnes pitaj opet. 

The best thing about having a penis is sharing it with people who don&#39;t
13 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
CalvinRi kaže...

Sto znas, tj do kud si dosao, gdje je zapelo? 

 

Ne ocekuj bas da ce ti ljudi rijesit zadatak liniju po liniju. Covjek ti je dao postupak kako rijesiti zadatak, tj korake.

 

Probaj, napisi nesto, pa kad zapnes pitaj opet. 

 A ma znam da, zapelo je vec na početku haha

Znaci while petlju dobro napravim za unos brojeva ali kad okinem broj recimo 31, izađe iz petlje ali mi i njega unese? 

10 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

 

 @i7 extreme

 

Druže, vidjeh tvoje pitanje, a pošto sam ovih dana nekaj u dobrom starom C-u, rekoh ajd, da probam riješiti, da vidim kakav sam...

 

Znam nije C plus plus, al' je C, pa ga preoblikuj u C++.

 

Ako kome treba, evo on line kompajlera.

Može biti puno elegantnije, al' ovako na prvu:

Evo rješenja:


#include <stdio.h>

int main()
{
printf("Unos brojeva:::");

int broj, neparni_broj;
int niz[5] = {0};
int i = 0;

do{

scanf("%d", &broj);

if(broj < 30){

if(broj%2 != 0 ){
neparni_broj = broj;
niz[i] = neparni_broj;
i++;
}

}

}while(broj<=30);

int najveci = 0;

for(int i =0; i<niz[i]; i++){
if(niz[i]>najveci);
najveci = niz[i];

}

printf("Najveci neparni broj jest: %d",najveci);


return 0;
}

 

Panzerkampfwagen.dzg-C++-USA. :-) CZ-75
9 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Pozdrav ekipa, skinuo sam C++ Builder i ne radi mi intellisense iliti code insight. Jel ima neki fix za to? Ne radi na najobicnijem primjeru tipa gumb u groupboxu sa Edit1. Kad napisem Edit1-> ne izbacuje nista ni kad stisnem ctrl + space. Na google nisam nasao nista od pomoci, jel ima netko nekakvu ideju?

 
0 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
PzKpfw kaže...

 

 @i7 extreme

 

Druže, vidjeh tvoje pitanje, a pošto sam ovih dana nekaj u dobrom starom C-u, rekoh ajd, da probam riješiti, da vidim kakav sam...

 

Znam nije C plus plus, al' je C, pa ga preoblikuj u C++.

 

Ako kome treba, evo on line kompajlera.

Može biti puno elegantnije, al' ovako na prvu:

Evo rješenja:


#include <stdio.h>

int main()
{
printf("Unos brojeva:::");

int broj, neparni_broj;
int niz[5] = {0};
int i = 0;

do{

scanf("%d", &broj);

if(broj < 30){

if(broj%2 != 0 ){
neparni_broj = broj;
niz[i] = neparni_broj;
i++;
}

}

}while(broj<=30);

int najveci = 0;

for(int i =0; i<niz[i]; i++){
if(niz[i]>najveci);
najveci = niz[i];

}

printf("Najveci neparni broj jest: %d",najveci);


return 0;
}

 

Nisam izbildao, niti pokrenuo ali odoka gledano, imas dosta bugova :)

 

int niz[5] //5 fiksnih elemenata

 

Ne vidim da dalje u kodu igdje imas provjeru da li si prekardasio sa indexom:

1. u do/while petlji 

niz[i] = neparni_broj;//tu ce vrisnut nakon 5 unesenih

2. for petlja kasnije ima takodjer neki cudan uvjet:

for(int i =0; i<niz[i]; i++)

 

plus si mogao stavit break kad nadjes najveci...

 

al vidim da se OP ne buni, valjda je njemu ok :)

 

The best thing about having a penis is sharing it with people who don&#39;t
10 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

@CalvinRi

 

Jep,slažem sa tobom i hvala na prijedlozima.

Dugo nisam pipao po C-u, pa malo ishlapi. A, i bilo na brzinu.

 

Bez obzira na to stižem me opravdana kritika.

Panzerkampfwagen.dzg-C++-USA. :-) CZ-75
Moj PC  
1 0 hvala 0
12 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
CalvinRi kaže...
Nisam izbildao, niti pokrenuo ali odoka gledano, imas dosta bugova :)

 

int niz[5] //5 fiksnih elemenata

 

Ne vidim da dalje u kodu igdje imas provjeru da li si prekardasio sa indexom:

1. u do/while petlji 

niz[i] = neparni_broj;//tu ce vrisnut nakon 5 unesenih

2. for petlja kasnije ima takodjer neki cudan uvjet:

for(int i =0; i<niz[i]; i++)

 

plus si mogao stavit break kad nadjes najveci...

 

al vidim da se OP ne buni, valjda je njemu ok :)

 

 

Probaj unijeti broj manji od 0.

Ne treba niti niz. Dovoljan je jedan integer za spremanje najveće vrijednosti i jedan za spremanje trenutnog unosa.

 

Iako autor to tvrdio, rješenje nije valjani "C" kod.

Kompajlira se bez prijavljivanja tog upozorenja (GCC 10.3, -Wall, -Wextra, -fpedantic) , izvršava se bez rušenja, ali pedantni će lako vidjeti gdje je problem.

 

Prijavljena upozorenja:

Po mom skromnom mišljenju, a pošto je ovo C++ tema, najbolje rješenje uključivalo bi barem jedan template (npr. "veći-od"), lambdu i Boost za parsanje inputa.

U prethodnom prijedlogu nisam se dovoljno potrudio.

Joj!
Poruka je uređivana zadnji put pet 25.6.2021 11:59 (Djuro von Prekoplotovich).
Nova poruka
E-mail:
Lozinka:
 
vrh stranice