#define kao promijenjiva.

poruka: 4
|
čitano: 1.343
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
12 godina
neaktivan
offline
#define kao promijenjiva.

Dakle, kao i što sam naslov upućuje.

Može li se C++ Directive #define koristiti kao promijenjiva ili ona uvijek ostaje konstanta, ili da mu se dodjeli varijabla kao vrijednost.

npr. 

imam na početku koda definiran Broj otpornika.

#define BROJ_OTPORNIKA 3

 

I da li ja sad mogu na zahtjev korisnika da broj otpornika promijenim ? Nešto kao.

 

cout << "Nema više otpornika. Dodaj otpornik (Y/N)" << endl;
cin >> o;
if (o = 'Y') {
cout << "Unesite ukupan broj otpornika" << endl;
cin >> otp;
#undef BROJ_OTPORNIKA
#define BROJ_OTPORNIKA otp;
goto c;
}
else if (o = 'N'){
goto a;
}
else{
goto a;
}

a: return 0;

 

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: #define kao promijenjiva.

Koja je poanta ovog isječka? Što uopće želiš postići s tim #define?

12 godina
neaktivan
offline
Re: #define kao promijenjiva.
TracerCPP kaže...

Koja je poanta ovog isječka? Što uopće želiš postići s tim #define?

 

#include <iostream>
#include <cstdlib>
#include <string>
using namespace std;
#define BROJ_OTPORNIKA 3

int main(){
int a[BROJ_OTPORNIKA], b[BROJ_OTPORNIKA], c[BROJ_OTPORNIKA], n = 0, otp;
char o;

c: for (n = 0; n < BROJ_OTPORNIKA; n++){
cout << "Unesite vrijednost napona(U) za otpornik R" << n + 1 << endl;
cin >> a[n];
cout << "(U=" << a[n] << "V). Unesite vrijednost struje(I) za otpornik R" << n + 1 << endl;
cin >> b[n];
cout << "(U=" << a[n] << "V, I=" << b[n] << "A)." << endl;
c[n] = a[n] / b[n];
cout << "Otpor u otporniku R" << n + 1 << " iznosi " << c[n] << " Ohma" << endl;
}
cout << "Nema više otpornika. Dodaj otpornik (Y/N)" << endl;
cin >> o;
if (o = 'Y') {
cout << "Unesite ukupan broj otpornika" << endl;
cin >> otp;
#undef BROJ_OTPORNIKA
#define BROJ_OTPORNIKA otp;
goto c;
}
else if (o = 'N'){
goto a;
}
else{
goto a;
}

a: return 0;
}

 

Dakle kao što vidiš na početku je broj otpornika podešen na 3 i sada nakon toga kada program završi da korisnik sam unese broj otpornika kojima želi da izračuna otpor i kada unese da se Broj otpornika promijeni ukoliko je to moguće.

Nadam se da sad razumiješ, i kad smo već tu što mi u cout kada stavim n++(n=n+1) očita opet 0 ? A kada stavim n+1 onda očita 1 što je u ovom slučaju uredu ?

Poruka je uređivana zadnji put pon 11.5.2015 18:50 (_roodrd).
14 godina
neaktivan
offline
Re: #define kao promijenjiva.

Ovo je toliko puno grešaka da mi je brže sve odjednom prepraviti nego li objašnjavati dio po dio. Ukratko

 

1) ZABORAVI goto naredbu. To ne znam tko ti je pokazao ali to je greška. Koristi do-while u ovom slučaju umjesto toga.

2) Statičko polje se ne može na ovakav način proširivati sve do C++14 standarda. Do tada možeš koristiti dinamičku alokaciju memorije ili vektore.

 

#include <iostream>
#include <vector>
using namespace std;

int main(){
   int BROJ_OTPORNIKA = 3;
   vector<float> a(BROJ_OTPORNIKA), b(BROJ_OTPORNIKA), c(BROJ_OTPORNIKA);
   char o;

   do{
      for (int n = 0; n < BROJ_OTPORNIKA; n++){
         cout << "Unesite vrijednost napona(U) za otpornik R" << n + 1 << endl;
         cin >> a[n];
         cout << "(U=" << a[n] << "V). Unesite vrijednost struje(I) za otpornik R" << n + 1 << endl;
         cin >> b[n];
         cout << "(U=" << a[n] << "V, I=" << b[n] << "A)." << endl;
         c[n] = a[n] / b[n];
         cout << "Otpor u otporniku R" << n + 1 << " iznosi " << c[n] << " Ohma" << endl;
      }
      cout << "Nema više otpornika. Dodaj otpornik (Y/N)" << endl;
      cin >> o;
      if (o == 'Y') {
         cout << "Unesite ukupan broj otpornika" << endl;
         cin >> BROJ_OTPORNIKA;
         if (BROJ_OTPORNIKA > 0){
            a.resize(BROJ_OTPORNIKA);
            b.resize(BROJ_OTPORNIKA);
            c.resize(BROJ_OTPORNIKA);
         }
      }
   } while (o == 'Y' && BROJ_OTPORNIKA > 0);

 return 0;
}

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice