PDA

Pogledaj cijelu verziju : c++ - trebam pomoc



crash_override
22-02-2009, 18:11
ovako je zadano..

za brojeve 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...itd., ako upisem 15 na izlazu treba da daje 2 , ako upisem 20, na izlazu treba da daje 1...

kuzi li neko kako to odraditi... dajte ista.. XD

DragonSoul
22-02-2009, 18:21
De napiši cijeli zadatak, jer iz ovoga ne možeš doći do algoritma.

crash_override
22-02-2009, 18:27
De napiši cijeli zadatak, jer iz ovoga ne možeš doći do algoritma.

heh, rado bih ti ga napisao cijelog, ali ovako mi ga prof. zadao.. xD... ne znam sta da ti jos kazem tu.... imas ikakvu ideju?

Luka
22-02-2009, 18:59
Nema nekog smisla zadatak, ili si krivo prepisao... jedina "pravilnost" je da su u 15 dvije znamenke veće od 0, pa zato daje 2, a u 20 samo jedna. A to sigurno nije ono što se traži :D

DragonSoul
22-02-2009, 21:47
De napiši cijeli zadatak, jer iz ovoga ne možeš doći do algoritma.

heh, rado bih ti ga napisao cijelog, ali ovako mi ga prof. zadao.. xD... ne znam sta da ti jos kazem tu.... imas ikakvu ideju?

Onda ćete svi dobiti 1 O_o

coyote
23-02-2009, 18:47
Zadatak je naravno da se gleda po znamenkama.

Drugim riječima:
Niz
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
treba gledati kao
1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5

Tada je 15-ti član niza 2, a 20-ti član ovog niza je 5 itd.

crash_override
25-02-2009, 20:41
Evo da ga sad malo detaljnije postavim...

Znaci... ispisati program koji ispisuje broj zeljene pozicije sa niza 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15...

Upisem 3, na izlazu daje 3, jer je to treca pozicija.... upisem 9, davat ce ovamo 9.... al' sad kod dvocifrenih npr. ako upisem 13, na izlazu treba da bude 1.... ako upisem 17, na izlazu treba biti 3... itd..

znaci niz 1 2 3 4 5 6 7 8 9....1 0......1 1.......1 2.......1 3........1 4.......1 5
________1 2 3 4 5 6 7 8 9...10 11...12 13...14 15....16 17.....18 19......20 21


a ovi ispod brojevi su ti npr. koje upisujem da bih dobio ove gore.... znaci kod ovih dvocifrenih ( nekako sam to iskombinovao tu, pa mozda kuzite na sto mislim ) vidite sad kako treba da bude... upisem 10 na izlazu treba davati 1, ako upisem 11, na izlazu treba davati 0, ako upisem 12, na izlazu treba 1... itd.

???

DragonSoul
25-02-2009, 21:25
Ono što ti je netko gore već rekao (nisam sad pratio). Ugl. zadan ti je maksimalan N (broj koji se unosi). Izgeneriraš taj niz i onda vraćaš niz[n-1]. Trebat će ti ugnježdene petlje, koje će ti izgenerirate te brojeve. Znači gornja petlja će ti biti n/9 (jer imaš 9 znamenki), a druga će ići od 1 do 9. Fino tako napraviš niz, niz ti je niz[max+1]S(+1 za svaki slučaj) i vraćaš n-1. Ili, napraviš tako da korisnik prvo unese N, onda ti izgeneriraš niz do N. Ili, napraviš tako da ti je jedna varijabla onaj broj koji bi zapravo dodijelo u niz, onda ti je zadnji broj koji dodjeliš toj varijabli zapravo traženi broj. Ili možeš napraviti polje da se kružno popunjava, pa je onda zadnje popunjeno polje traženi broj, ili... Ma imaš milijun načina, napravi onak kak ti je najbrže, najlakše i najoptimalnije.. ili tak da dobiješ 5 kad prof vidi kakvo si remek dijelo napravio.

DragonSoul
25-02-2009, 22:44
Eh, šteta što ne radi taj edit nakon 15 min. Ugl, nakon ponovnog čitanja zadatka zaključih da ne valjaju moji umni izljevi. Ja sam mislio da ide niz 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9..., ali ne ide. Možda da se riješi s % i /, tako da se odredi znamenka pa doda u niz. Al ono, ima pametnije riješenje. Luka?

Luka
25-02-2009, 23:00
Ovako nešto, nisam provjerio ali trebalo bi raditi. Nije ni efikasno, ali nigdje ne piše da treba biti :P



int upisani_broj;
cin >> upisani_broj;
stringstream polje; // iz <sstream> zaglavlja
int trenutni = 1;
while (polje.str().size() < upisani_broj) polje << (trenutni++);
cout << polje.str()[upisani_broj - 1];

Tracer
26-02-2009, 10:13
#include <iostream.h>

int main()
{
int i, n = 25;
char pom[5], niz[200]S= "";

for(i = 1; i <= n; i++){
cout << i << " ";
itoa(i, pom, 10);
strcat(niz, pom);
}
cout << "\n";
for(i = 0; i < n; i++){
if(i >= 10) cout << " ";
cout << niz[i]S<< " ";
}
return 0;
}

Evo, i sad si samo modificiraj da ti ispisuje za određenu poziciju. To ti ne bi trebao biti problem.

coyote
27-02-2009, 17:01
Ja bih to riješio ovako... Ovo rješenje radi i za velike brojeve, ne troši memoriju, i brzo je.

Prvo primijetimo da možemo niz podijeliti u grupe jednoznamenkastih, dvoznamenkastih, troznamenkastih, itd. brojeva.
1 .. 9 -> 9 brojeva, ukupno 9 znamenaka
10 .. 99 -> 90 brojeva, ukupno 180 znamenaka
100 .. 999 -> 900 brojeva, ukupno 2700 znamenaka
1000 .. 9999 -> 9000 brojeva, ukupno 36000 znamenaka
itd.

Ideja je da za traženi n nađemo u koju grupu pada. Onda nađemo točan višeznamenkasti broj iz te grupe u koji nam pada traženi n, te na kraju izvučemo iz tog broja traženu znamenku.

Npr. potražimo 560-tu znamenku iz niza.
Lako se vidi da se 560 znamenka nalazi u grupi troznamenkastih brojeva.
560 - 10 - 180 = 370 -> 560 znamenka je 370Sznamenka u nizu troznamenkastih brojeva.

Treba primijetiti da znamenke u grupi brojimo od 0 !!

Sada nađemo troznamenkasti broj u kojem se nalazi tražena znamenka:
370S/ 3 = 123 (cjelobrojno dijeljenje!)
Kako je prvi broj u grupi troznamenkastih 100 onda je konačan troznamenkasti broj u kojem se nalazi tražena znamenka:
100 + 123 = 223
Znamenka se nađe pomoću ostatka:
370S% 3 = 1
(ostatak 0 nam ukazuje na prvu znamenku s lijeva, 1 na drugu s lijeva, itd...)

Znači tražena znamenka je 223.

Ok. Evo i programa:

int f( int n ) {

//otpilimo "pametnjakoviće" koji nam pokušavaju srušiti program
//testirajući ga s nulom ili s negativnim brojem ;)

if( n < 1 ) {
return -1 ;
}

//riješimo trivijalan slučaj

if( n < 10 ) {
return n ;
}

//od sad pa na dalje, n će biti nula baziran index znamenke od
//početka svake grupe

n -= 10 ;

int grupa = 2 ; //krećemo s grupom dvoznamenkastih brojeva
int prvi_broj_u_grupi = 10 ; //prvi broj u grupi dvoznam. brojeva je 10
int br_brojeva_u_grupi = 90 ; //10 .. 99 -> ima točno 90 dvoznam. brojeva u grupi
int br_znamenaka_u_grupi = grupa * br_brojeva_u_grupi ; //ukupno 180 znamenaka u grupi

int konacni_broj, index_znamenke_u_konacnom_broju, trazena_znamenka ;

//nađimo grupu u kojoj se nalazi tražena znamenka i adekvatno postavimo n

while( n >= br_znamenaka_u_grupi ) {

n -= br_znamenaka_u_grupi ;

grupa ++ ;
prvi_broj_u_grupi *= 10 ; //grupe počinju s 10, 100, 1000, ...
br_brojeva_u_grupi *= 10 ; //brojeva u grupama ima 90, 900, 9000, ...
br_znamenaka_u_grupi = grupa * br_brojeva_u_grupi ;
}

//nađimo grupa-znamenkasti broj u kojem se onda nalazi tražena znamenka

konacni_broj = prvi_broj_u_grupi + n / grupa ; //"n / grupa" je cjelobrojno dijeljenje !!

//nađimo index znamenke unutar tog grupa-znamenkastog broja

index_znamenke_u_konacnom_broju = n % grupa ; //0 -> prva znamenka s lijeva, 1 -> druga s lijeva itd.

//izvucimo traženu znamenku iz broja

trazena_znamenka = konacni_broj / pow( 10, grupa - 1 - index_znamenke_u_konacnom_broju ) ;
trazena_znamenka %= 10 ;

return trazena_znamenka ;
}

Luka
27-02-2009, 20:41
Efikasno i elegantno, bravo ;)

AresCro
06-06-2009, 17:22
Ja takoder imam problem sa zadatkom u C++. Moglo bi se reci da sam jos uvijek pocetnik. Naime, radim program koji bi nam prikazivao cijene pojedinih artikala u trgovini. Imamo ovako: u trgovini postoje 3 vrste proizvoda - prehrambeni, tehnicki i igracke. I sada, korisnik bi trebao stisnuti odredeni broj da bi dosao u odredenu grupu proizvoda (npr. stisnemo "1" i ulazimo u dio s prehrambenim proizvodima). Tamo mozemo birati izmedu nekoliko proizvoda, npr. stisnemo "21" i prikaze nam se cijene "brasna". Ja sam poceo nesto ali sam zapeo.



#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int i;
int broj;
cout<<"Dobrodosli u ponudu nase trgovine!" <<endl;
cout<<"Za Vas nudimo izbor najpovoljnije robe na trziztu." <<endl;
cout<<"Kako bi dosli do zeljenog proizvoda, slijedite ove upute:" <<endl;
cout<<" -za PREHRAMBENE proizvode stisnite 1" <<endl;
cout<<" -za TEHNICKE proizvode stisnite 2" <<endl;
cout<<" -za IGRACKE stisnite 3" <<endl;
cin>>broj;
if (broj=1)
cout<<"Izaberite zeljeni proizvod:";

system("PAUSE");
return EXIT_SUCCESS;
}


Ja hocu uci u "prehrambene proizvode" i za to mi je potrebna tipka "1" ali on ulazi i kad stisnem bilo koji drugi broj. Nadam se da ste me shvatili. Molio bih za pomoc. Hvala. :thumbs2:

cerberi
06-06-2009, 17:47
probaj sa

if(broj==1)
{
cout<<"izaberite željeni proizvod";
}

nikad neznaš, može bit...ja sam imao tone bugova sa takvim stvarima u nekoliko prog.jezika

Luka
06-06-2009, 20:29
hehe, tipična početnička

operator "=" je pridruživanje vrijednosti, npr. "a = 5" će pridružiti broj 5 varijabli a; (ne moraš znati zasad, ali ako te zanima: rezultat izraza pridruživanja je vrijednost koja je pridružena, u ovom slučaju 5; ona se svodi na bool po pravilu vrijednost != 0)

operator "==" je provjera jednakosti, npr. 5 == 5 će dati true, a 5 == 4 će dati false

dakle, samo zamijeni u if-u = sa ==

AresCro
07-06-2009, 08:43
Hvala :thumbs2:
Sad imam drugi problem. Kako napraviti da mogu odmah uci u drugi dio, u tehnicke proizvode. Kada pritisnem 2 onda se nista ne dogada nego moram najprije unijeti 1 za ulazak u prehrambene proizvode i onda tamo moram odabrati proizvod npr. 11 je za mlijeko. Tek nakon toga mogu uci u tehnicke proizvode. Kako da napravim da bi mogao odmah u tehnicke? Nadam se da kuzite pitanje :D

SkunK
07-06-2009, 10:06
Hvala :thumbs2:
Sad imam drugi problem. Kako napraviti da mogu odmah uci u drugi dio, u tehnicke proizvode. Kada pritisnem 2 onda se nista ne dogada nego moram najprije unijeti 1 za ulazak u prehrambene proizvode i onda tamo moram odabrati proizvod npr. 11 je za mlijeko. Tek nakon toga mogu uci u tehnicke proizvode. Kako da napravim da bi mogao odmah u tehnicke? Nadam se da kuzite pitanje :D


Da bi riješili taj problem moraš nam dati cijeli source code.

Luka
07-06-2009, 11:01
Pretpostavljam da si ovako nešto napravio:


if (n == 1)
{
if (n == 2)
{
}
}

a trebao si ovako:


if (n == 1)
{
}
if (n == 2)
{
}

AresCro
07-06-2009, 11:17
Hvala svima na dosadasnjoj pomoci. Jos uvijek neznam u cemu je problem. Evo koda:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
int n;
cout<<"Dobrodosli u ponudu nase trgovine!" <<endl;
cout<<"Za Vas nudimo izbor najpovoljnije robe na trzistu." <<endl;
cout<<"Kako bi dosli do cijene zeljenog proizvoda, slijedite ove upute:" <<endl;
cout<<endl;
cout<<" -za PREHRAMBENE proizvode stisnite 1" <<endl;
cout<<" -za TEHNICKE proizvode stisnite 2" <<endl;
cout<<" -za IGRACKE stisnite 3" <<endl;

cin>>n;
if (n==1)
{
cout<<"Izaberite zeljeni proizvod:"<<endl;
cout<<endl;
cout<<" -za MLIJEKO stisnite 11" <<endl;
cout<<" -za BRASNO stisnite 12" <<endl;
cout<<" -za KRUH stisnite 13" <<endl;
cout<<" -za RIBA stisnite 14" <<endl;
cout<<" -za PILETINA stisnite 15" <<endl;
cout<<" -za CRVENO MESO stisnite 16" <<endl;
cout<<" -za SOK OD JABUKE stisnite 17" <<endl;
cout<<" -za JAGODE stisnite 18" <<endl;
cout<<" -za ANANAS stisnite 19" <<endl;
}
cin>>n;
if (n==11)
{
cout<<"Mlijeko -> 5kn/l";
}
cout<<endl;
if (n==12)
{
cout<<"Brasno -> 3kn/kg";
}
cout<<endl;
if (n==13)
{
cout<<"Kruh -> 6kn";
}
cout<<endl;
if (n==14)
{
cout<<"Riba -> 26kn/kg";
}
cout<<endl;
if (n==15)
{
cout<<"Piletina -> 18kn/kg";
}
cout<<endl;
if (n==16)
{
cout<<"Crveno meso -> 42kn/kg";
}
cout<<endl;
if (n==17)
{
cout<<"Sok od jabuke -> 5kn/l";
}
cout<<endl;
if (n==18)
{
cout<<"Jagode -> 6kn/kg";
}
cout<<endl;
if (n==19)
{
cout<<"Ananas -> 18kn/kg";
}
cout<<endl;

cin>>n;
if (n==2)
{
cout<<"Izaberite zeljeni proizvod:"<<endl;
cout<<endl;
cout<<" -za TELEVIZOR stisnite 21" <<endl;
cout<<" -za DVD PLAYER stisnite 22" <<endl;
cout<<" -za GLAZBENA LINIJA stisnite 23" <<endl;
cout<<" -za STOLNO RACUNALO stisnite 24" <<endl;
cout<<" -za PRINTER stisnite 25" <<endl;
cout<<" -za MOBITEL stisnite 26" <<endl;
cout<<" -za SAT stisnite 27" <<endl;
cout<<" -za LAPTOP stisnite 28" <<endl;
cout<<" -za PROJEKTOR stisnite 29" <<endl;
}
cin>>n;
if (n==21)
{
cout<<"Televizor -> 1999,99kn";
}
cout<<endl;
if (n==22)
{
cout<<"Dvd player -> 449,99kn";
}
cout<<endl;
if (n==23)
{
cout<<"Glazbena linija -> 899,99kn";
}
cout<<endl;
if (n==24)
{
cout<<"Stolno racunalo -> 3699,99kn";
}
cout<<endl;
if (n==25)
{
cout<<"Printer -> 599,99kn";
}
cout<<endl;
if (n==26)
{
cout<<"Mobitel -> 999,99kn";
}
cout<<endl;
if (n==27)
{
cout<<"Sat -> 59,99kn";
}
cout<<endl;
if (n==28)
{
cout<<"Laptop -> 5999,99kn";
}
cout<<endl;
if (n==29)
{
cout<<"Projektor -> 7569,99kn";
}
cout<<endl;

cin>>n;
if (n==3)
{
cout<<"Izaberite zeljeni proizvod:"<<endl;
cout<<endl;
cout<<" -za AUTO NA DALJINSKI stisnite 31" <<endl;
cout<<" -za PLISANI MEDVJEDIC stisnite 32" <<endl;
cout<<" -za BARBIE LUTKA stisnite 33" <<endl;
cout<<" -za PLASTICNI VOJNIK stisnite 34" <<endl;
cout<<" -za NOGOMETNA LOPTA stisnite 35" <<endl;
cout<<" -za SET ZA BADMINTON stisnite 36" <<endl;
cout<<" -za STOLNI NOGOMET stisnite 37" <<endl;
cout<<" -za SKATEBOARD stisnite 38" <<endl;
cout<<" -za PUSKA NA VODU stisnite 39" <<endl;
}
cin>>n;
if (n==31)
{
cout<<"Auto na daljinski -> 299,99kn";
}
cout<<endl;
if (n==32)
{
cout<<"Plisani medvjedic -> 69,99kn";
}
cout<<endl;
if (n==33)
{
cout<<"Barbie lutka -> 139,99kn";
}
cout<<endl;
if (n==34)
{
cout<<"Plasticni vojnik -> 250,99kn";
}
cout<<endl;
if (n==35)
{
cout<<"Nogometna lopta -> 489,99kn";
}
cout<<endl;
if (n==36)
{
cout<<"Set za badminton -> 75,99kn";
}
cout<<endl;
if (n==37)
{
cout<<"Stolni nogomet -> 350,99kn";
}
cout<<endl;
if (n==38)
{
cout<<"Skateboard -> 320,99kn";
}
cout<<endl;
if (n==39)
{
cout<<"Puska na vodu -> 162,99kn";
}
cout<<endl;

fps_gamer
07-06-2009, 11:43
ae, mislim da ti je cin >> n; viška iznad tehnickih i ovog jos dolje...


a da ti to rijesis pomocu switcha, biti ce lakse i preglednije (valjda)?

edit: i ovi drugi ifovi bi trebali biti u ovom velikom (1, 2 ili 3) koliko mi se cini...

Luka
07-06-2009, 11:56
da, drugi ifovi moraju biti u velikom

znači

if (n == 1)
{

cin >> n;

if (n == ...)
if (n == ...)
if (n == ...)

}

AresCro
07-06-2009, 12:17
Hvala vam decki, sad radi :thumbs2:

Deadwalker
01-12-2009, 23:13
Ovako, imam zadacu iz programiranja u c++. Objektno orjentirano programiranje. Ovo je program:


#include <iostream>
#include <cmath>
using namespace std;
class cpravokutnik {
public: char naziv[40];
public: float x1,y1,x2,y2;
private: float sirina, visina, pov;
public:
float povrsina(){
sirina=x2-x1;
visina=y2-y1;
if(sirina<=0&visina<=0)
return pov=-1;
else
return pov=sirina*visina;
};
void unos(){
cout<<"Unesite naziv pravokutnika: ";
cin.ignore();
cin.getline(naziv, 40);
cout<<"Unesite vrijednost koordinate x1: ";
cin>>x1;
cout<<"Unesite vrijednost koordinate y1: ";
cin>>y1;
cout<<"Unesite vrijednost koordinate x2: ";
cin>>x2;
cout<<"Unesite vrijednost koordinate y2: ";
cin>>y2;
};
void ispis(){
cout<<endl<<"Naziv trokuta: "<<naziv<<endl;
cout<<"Koordinata x1: "<<x1<<endl;
cout<<"Koordinata y1: "<<y1<<endl;
cout<<"Koordinata x2: "<<x2<<endl;
cout<<"Koordinata y2: "<<y2<<endl;
cout<<"Povrsina: "<<povrsina()<<endl;
};
};
class cvrijeme{
private:
clock_t vrijeme1,vrijeme2;
double razlika;
public:
double pocetak(){
vrijeme1=clock();
return (double)vrijeme1;};
double kraj(){
vrijeme2=clock();
return (double)vrijeme2;};
double proteklo(){
razlika=vrijeme2-vrijeme1;
return razlika;};
};
int main(){
cpravokutnik *pravokutnici;
cvrijeme *vrijeme;
int bral=0;
int brel=0;
int iz,n,i,p,r,j;
int sirina, visina;
float povrsina;
float pom, bla;
char trok[40], naz[40],pom1[40];
do {
cout<<endl;
cout<<"0. Dinamicka alokacija polja pravokutnika i polja vremena"<<endl;
cout<<"1. Unos podataka o pravokutnicima"<<endl;
cout<<"2. Ispis podataka o svim unesenim pravokutnicima"<<endl;
cout<<"3. Ispravak podataka o pravokutnicima"<<endl;
cout<<"9. Izlaz iz programa"<<endl;
cout<<"Vas izbor: ";
cin>>iz;
switch (iz){
case 0:
if (bral==0){
cout<<"Unesite zeljeni broj elemenata polja: ";
cin>>bral;
pravokutnici=new cpravokutnik [bral];
vrijeme=new cvrijeme [bral];
}
else cout<<"Velicina polja: "<<bral;
break;
case 1:
if (bral==0) cout<<"Polja nisu alocirana!"<<endl;
else {
cout<<"Broj alociranih elemenata: "<<bral<<endl;
cout<<"Broj unesenih pravokutnika: "<<brel<<endl;
vrijeme[brel].pocetak();
pravokutnici[brel].unos();
vrijeme[brel].kraj();
brel++;
}
break;
case 2:
cout<<"Zelite li ispis: 1) samo podatke za pravokutnike, 2) svih zapisa?"<<endl;
cin>>n;
switch (n){
case 1:
for (i=0;i<brel;i++){
if ((!sirina<=0||visina<=0));
else cout<<"Povrsina je: "<<povrsina<<endl;{
pravokutnici[i].ispis();
cout<<"Proteklo vrijeme: "<<vrijeme[i].proteklo()/1000<<" sekundi"<<endl;
cout<<endl;
}
}
break;
case 2:
for (i=0;i<brel;i++){
pravokutnici[i].ispis();
cout<<"Proteklo vrijeme: "<<vrijeme[i].proteklo()/1000<<" sekundi"<<endl;
if (sirina<=0||visina<=0)cout<<"Površina je -1!"<<endl;
else cout<<"Povrsina je: "<<povrsina<<endl;
cout<<endl;
}
break;
} //switch
break;
case 3:
cout<<"Unesite naziv pravokutnika: ";
cin.ignore();
cin.getline(trok, 40);
for (j=0;j<brel;j++){
if (strcmp(pravokutnici[j].naziv, trok)==0) r=j;
}
pravokutnici[r].ispis();
cout<<"Zelite li promijeniti: 1) naziv, 2) koordinatu x1, 3) koordinatu y1, 4) koordinatu x2, 5) koordinatu y2?";
cin>>n;
switch (n){
case 1:
cout<<"Unesite novi naziv: ";
cin.ignore();
cin.getline(naz, 40);
strcpy(pom1,pravokutnici[r].naziv);
strcpy(pravokutnici[r].naziv, naz);
break;
case 2:
cout<<"Unesite novu stranicu x1: ";
cin>>bla;
pom=pravokutnici[r].x1;
pravokutnici[r].x1=bla;
break;
case 3:
cout<<"Unesite novu stranicu y1: ";
cin>>bla;
pom=pravokutnici[r].y1;
pravokutnici[r].y1=bla;
break;
case 4:
cout<<"Unesite novu stranicu x2: ";
cin>>bla;
pom=pravokutnici[r].x2;
pravokutnici[r].x2=bla;
break;
case 5:
cout<<"Unesite novu koordinatu y2: ";
cin>>bla;
pom=pravokutnici[r].y2;
pravokutnici[r].y2=bla;
break;
}
cout<<"Novi zapis: "<<endl;
pravokutnici[r].ispis();
cout<<endl<<"Zelite li potvrditi promjenu? 1) da, 2)ne ";
cin>>p;
if (p==2) {
cout<<"Potvrda nije potvrdjena, vraceni su stari podatci!"<<endl<<endl;
switch (n){
case 1:
strcpy(pravokutnici[r].naziv, pom1);
break;
case 2:
pravokutnici[r].x1=pom;
break;
case 3:
pravokutnici[r].y1=pom;
break;
case 4:
pravokutnici[r].x2=pom;
break;
case 5:
pravokutnici[r].y2=pom;
break;
}
pravokutnici[r].ispis();
}
else cout<<"Promjena potvrdjena!"<<endl;
break;
} //switch
} while (iz!=9);
delete pravokutnici;
delete vrijeme;
system ("pause");
return 0;
}


Problem mi je izracun povrsine. To radi ovaj potprogram koji se kasnije poziva u main-u:

Spublic:
float povrsina(){
sirina=x2-x1;
visina=y2-y1;
if(sirina<=0&visina<=0)
return pov=-1;
else
return pov=sirina*visina;
};
Potprogram bi trebal ako je visina i sirina manja ili jednaka nuli izbacivati povrsinu vrijednosti -1, a ako su vrijednosti vece od nule, racunati prema formuli povrsina=visina*sirina.
Meni konstantno baca vrijednost povrsine -1, iako su vrijednosti vece od nule prilikom unosa.

Muci me jos ispis. Treba izgledati ovako:

Koristiti metodu ispis() klase cpravokutnik za ispis podataka o pravokutnicima. Uz svaki pravokutnik treba ispisati i vrijeme potrebno za unos podataka (metoda proteklo() iz klase cvrijeme). Treba od korisnika zatražiti da izabere hoće li ispisivati:
a.) samo podatke za pravokutnike (=pozitivne vrijednosti širine i visine) ili
b.) sve unose, s tim da treba ispisati odgovarajuću poruku, ako je širina<=0 ili visina<=0

Ja sam ga napisao ovako:

case 2:
cout<<"Zelite li ispis: 1) samo podatke za pravokutnike, 2) svih zapisa?"<<endl;
cin>>n;
switch (n){
case 1:
for (i=0;i<brel;i++){
if ((!sirina<=0||visina<=0));
else cout<<"Povrsina je: "<<povrsina<<endl;{
pravokutnici[i].ispis();
cout<<"Proteklo vrijeme: "<<vrijeme[i].proteklo()/1000<<" sekundi"<<endl;
cout<<endl;
}
}
break;
case 2:
for (i=0;i<brel;i++){
pravokutnici[i].ispis();
cout<<"Proteklo vrijeme: "<<vrijeme[i].proteklo()/1000<<" sekundi"<<endl;
if (sirina<=0||visina<=0)cout<<"Površina je -1!"<<endl;
else cout<<"Povrsina je: "<<povrsina<<endl;
cout<<endl;
}
break;
} //switch
break;

Radi, ali ne kako bi trebao. U biti, nisam ni skuzio sta tocno traze s tom opcijom 1 ili 2, kada su meni prakticki iste. :?
Eto, ako se nekome da gnjavit da mi s time pomogne bio bih krajnje zahvalan.
Inace, ovako glasi cijela zadaca:


• Potrebno je definirati klasu cpravokutnik, koja definira sljedeće članove:
naziv – naziv pravokutnika (javni atribut, znakovni niz)
x1,y1,x2,y2 – koordinate vrhova pravokutnika (javni atributi tipa float)
sirina, visina – privatni atributi tipa float
povrsina() – javna metoda tipa float, koja računa površinu pravokutnika:

sirina = x2 - x1, visina = y2 -y1

povrsina = sirina * visina ili
povrsina=-1 , ako je sirina<=0 ili visina <= 0

unos() – javna metoda za unos naziva pravokutnika i koordinata vrhova
ispis() – javna metoda za ispis naziva pravokutnika, koordinata vrhova i površine pravokutnika
• Za mjerenje vremena koristiti metode iz klase cvrijeme (biblioteka 'biblioteka_vrijeme.cc').

Za 1 bod:

Mogućnost 0. Ako su polja već alocirana, ispisati veličinu polja (broj alociranih elemenata) i vratiti se u glavni izbornik. U suprotnom upitati korisnika za broj elemenata, te dinamički alocirati oba polja (broj elemenata je jednak).

Mogućnost 1. Ispisati podatke o broju alociranih elemenata polja pravokutnika i polja vremena, te o broju upisanih pravokutnika. Ako polja nisu alocirana, ispisati odgovarajuću poruku i vratiti se u glavni izbornik. Unijeti podatke o pravokutniku pomoću metode unos() (upita korisnika za naziv pravokutnika i koordinate vrhova x1, y1, x2, y2). Izmjeriti vrijeme unosa podataka pomoću odgovarajućeg elementa polja vremena (=isti broj indeksa u polju, kao element polja pravokutnika).

Za 2 boda:

Mogućnost 2. Koristiti metodu ispis() klase cpravokutnik za ispis podataka o pravokutnicima. Uz svaki pravokutnik treba ispisati i vrijeme potrebno za unos podataka (metoda proteklo() iz klase cvrijeme). Treba od korisnika zatražiti da izabere hoće li ispisivati:
a.) samo podatke za pravokutnike (=pozitivne vrijednosti širine i visine) ili
b.) sve unose, s tim da treba ispisati odgovarajuću poruku, ako je širina<=0 ili visina<=0

Za 3 boda:

Mogućnost 3. Upitati korisnika za naziv pravokutnika. Ispisati podatke o odgovarajućem pravokutniku, zajedno s vremenom potrebnim za unos podataka. Upitati korisnika želi li promijeniti naziv pravokutnika ili koordinate vrhova x1, y1, x2, y2). Ispisati podatke o pravokutniku nakon ispravka te zatražiti od korisnika da potvrdi ispravak. Ako ne potvrdi, vratiti stare podatke i vratiti se u glavni izbornik.

Inace, prosli zadatak koji sam imao bio je jako slican ovome, pa sam sada samo modificirao prijasnji. Tako da vjerojatno ima jos zaostalih deklariranih nepotrebnih varijabli, moram ga jos sredit do kraja.