Kod mene u VS 2010 radi, dakle vjerojatno koristiš Dev C++ i on ne zna za defaultne parametre u konstruktoru.
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Niti C++ Builder ovo gore ne dopušta:
Reference initialized with 'Vektor', needs lvalue of type 'Vektor'. Type mismatch in parameter 'a' (wanted 'Vektor &', got 'Vektor')
S druge strane ako mu se predaju statički objekti inicijalizirani gornjim konstruktorima ili ako su parametri funkcije ZbrojiVektore konstantne reference onda radi (osim pristup privatnim članovima što se može riješiti pomoću friend).
Očito je da prevoditelj više ne dopušta programeru da mijenja privremeni objekt jer to u ovom slučaju niti nema smisla i može samo uzrokovati grešku (privremeni objekti iz funkcije main više ne postoje nakon poziva funkcije). Uostalom, privremeni objektni i jesu to - privremeni objekti koji postoje tek u određenom trenutku, a najčešće kao povratna vrijednost operatora;
Kompleksni operator + (Kompleksni Z1, Kompleksni Z2){
return Kompleksni(Z1.re + Z2.re, Z1.im + Z2.im);
}
Drugim riječima, prototip tvoje funkcije bi trebao biti ovakav:
void ZbrojiVektore(Vektor a, Vektor b, Vektor &rez);
jer nema nikakvog smisla niti potrebe koristiti reference za ulazne parametre a i b, već tek za onaj koji sprema rezultat.
U pravu si, probao sam u Dev C++ i ne prolazi sa referencom na privremene objekte, a bez referenci je OK.
U VS 2010 i VS 2012 bez problema prolazi sa referencama na privremene objekte.
Jesam ja isto mutav, a lijepo piše: invalid initialization of non-const reference of type 'Vektor&' from an rvalue of type 'Vektor'
Hvala.
Može još malo pomoći za početnika?
Zadatak je također iz knjige Demistificirani C++ (str. 104). Prvo je dan primjer koda čijim izvršavanjem se dobije tablica množenja do 10.
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
for (int redak = 1; redak <= 10; ++redak) {
for (int stupac = 1; stupac <= 10; ++stupac)
cout << setw(5) << redak * stupac;
cout << endl;
}
return 0;
}
Zadatak glasi: Modificirajte kod tako da se ispišu samo članovi u gornjem desnom trokutu. Uputa: unutar vanjske petlje smjestite dvije petlje po stupcima, s time da prva treba ispisivati odgovarajući broj praznina, a druga tražene brojeve.
Iako je dana uputa nisam uspio dobiti taj gornji desni trokut.
Hala unaprijed.
1 #include <iostream>
2 #include <iomanip>
3
4 using namespace std;
5 int main() {
6 for (int redak = 1; redak <= 10; ++redak) {
7 for (int stupac = 1; stupac <= 10; ++stupac)
8 cout << setw(5) << redak * stupac;
9 cout << endl;
10 }
11 return 0;
12 }
Uputa: unutar vanjske petlje smjestite dvije petlje po stupcima, s time da prva treba ispisivati odgovarajući broj praznina, a druga tražene brojeve.
Ne razumim zašto forsiraju petlje ovdje....
8. i 9, red zamjeni sa
if (redak > stupac) cout << "\t"; // (redak >= stupac) -> ako hoćeš isključiti dijagonalu iz ispisa
else cout << redak * stupac << "\t";
Vjerojatno zato jer je to poglavlje o petljama u Demistificiranom, pa je zadatak tako koncipiran da provjeri usvojenu teoriju o petljama.
Dakle, vanjska petlja ispisuje retke, a dvije unutarnje stupce. Prva unutarna i druga unutarnja se nadovezuju u ispisu jednog retka.
Pošto nam traže gornju dijagonalu, tehnika ispisa je ova:
Prva unutarnja petlja ispisuje za jedan razmak više po svakom retku od [0, 9] razmaka od prvog do desetog retka, a druga unutarnja
petlja se u svakom retku nadoveže na prvu ispisujući vrijednosti do uključno desete kolone. Kad se prođe jedan redak sa dvije unutarnje
petlje ide se u sljedeći redak.
#include <iostream>
using namespace std;
int main()
{
int stupac;
for (int red = 1; red <= 10; red++)
{
for (stupac = 1; stupac < red; stupac++)
cout<< "\t";
for (; stupac <= 10; stupac++)
cout<< red * stupac << "\t";
cout<< endl;
}
return 0;
}
Može li mi netko obajsniti zašto postoji sum = 0; u djelu koda kojega sam naznačio. sve ostalo mi je jasno.
#include <stdio.h>
int main()
{
int m, n, p, q, c, d, k, sum = 0;
int first[10][10], second[10][10], multiply[10][10];
printf("Enter the number of rows and columns of first matrix\n");
scanf("%d%d", &m, &n);
printf("Enter the elements of first matrix\n");
for ( c = 0 ; c < m ; c++ )
for ( d = 0 ; d < n ; d++ )
scanf("%d", &first[c][d]);
printf("Enter the number of rows and columns of second matrix\n");
scanf("%d%d", &p, &q);
if ( n != p )
printf("Matrices with entered orders can't be multiplied with each other.\n");
else
{
printf("Enter the elements of second matrix\n");
for ( c = 0 ; c < p ; c++ )
for ( d = 0 ; d < q ; d++ )
scanf("%d", &second[c][d]);
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
{
for ( k = 0 ; k < p ; k++ )
{
sum = sum + first[c][k]*second[k][d];
}
multiply[c][d] = sum;
sum = 0; // ZAŠTO TO MORA TU BITI?
}
}
printf("Product of entered matrices:-\n");
for ( c = 0 ; c < m ; c++ )
{
for ( d = 0 ; d < q ; d++ )
printf("%d\t", multiply[c][d]);
printf("\n");
}
}
return 0;
}
U pravilu ta incijalizacija se treba nalaziti prije petlje, a ne poslije nje. Međutim, kako na početku programa si deklarirao i inicijalizirao sum = 0 onda će i ovako raditi, ali ovaj način svakako izbjegavati.
U pravilu ta incijalizacija se treba nalaziti prije petlje, a ne poslije nje. Međutim, kako na početku programa si deklarirao i inicijalizirao sum = 0 onda će i ovako raditi, ali ovaj način svakako izbjegavati.
Problem mi je u tome što kada maknem taj sum = 0; kod polja a ostavim onaj već gore deklariran i inicijaliziran program mi daje potpuno drugačija rješenja kod odabiranja identičnih vrijednosti za pomnožit.
Već sam ti napisao gdje taj sum = 0 mora biti.
Već sam ti napisao gdje taj sum = 0 mora biti.
aha, ok hvala skužio sam što si mislio :)
pozdrav dali bi mi ko mogao napravit pascalov trokut u c++ , ja bi samo trebao unjet broj redaka i da između dva broja budu dva taba
pozdrav dali bi mi ko mogao napravit pascalov trokut u c++ , ja bi samo trebao unjet broj redaka i da između dva broja budu dva taba
Valjda receno po tri-cetiri puta na svakoj stranici, ne, ako sam ne probas i ne stavis kod gdje si zapeo i sto ti nije jasno, ne.
Pozdrav
ako mi mozete reci zato ugasi odam cmd prozor te mi ne kaze da pritisne bilo koju tipku
#include <stdio.h>
int main()
{
printf("oooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo");
return 0;
}
Hvala!
Pozdrav
ako mi mozete reci zato ugasi odam cmd prozor te mi ne kaze da pritisne bilo koju tipku
...
Zato sto to automatski radi Code::Blocks za tebe. Ti ocito onda njega ne koristis. Dodaj getchar(); na kraj i onda ti se nece prozor odmah ugasiti.
Pozdrav
ako mi mozete reci zato ugasi odam cmd prozor te mi ne kaze da pritisne bilo koju tipku
Zato što se program završio. Zašto bi ti prozor i dalje ostao otvoren? Ostane li ti browserov prozor otvoren nakon što klikneš na 'x' gore desno?
Ako želiš da se prozor ne zatvori jednostavno sredi program tako da se ne izvrši do kraja bez tvoje intervencije.
Šta je vector u c++? Za što se koristi i šta on predstavlja?
Šta je vector u c++? Za što se koristi i šta on predstavlja?
Spremnik slican polju koji moze dinamicki mijenjati velicinu.
Pozdrav
ako mi mozete reci zato ugasi odam cmd prozor te mi ne kaze da pritisne bilo koju tipku
...
Zato sto to automatski radi Code::Blocks za tebe. Ti ocito onda njega ne koristis. Dodaj getchar(); na kraj i onda ti se nece prozor odmah ugasiti.
funkcija getcher() mi ne pomaze kada napravim da moram unositi na zaslonu vrijednosti za varijable jer nakon 2. ENTERA ugasi se program
skuzio sam da kada stavim 5 getchar() morem stisnut 5 puta ENTER :)
mogoli jos kako zadrzat program upaljenim da
sta je taj code:bloks ?
Hvala!
funkcija getcher() mi ne pomaze kada napravim da moram unositi na zaslonu vrijednosti za varijable jer nakon 2. ENTERA ugasi se program
skuzio sam da kada stavim 5 getchar() morem stisnut 5 puta ENTER :)
mogoli jos kako zadrzat program upaljenim da
sta je taj code:bloks ?
Hvala!
Kako ne, getchar() samo stavis na kraj programa, prije return 0. getchar() je u biti funkcija koja ceka da uneses neki character.
Code::Blocks je IDE iliti integrirano razvojno okruzenje.
sto znaci ovaj F na kraju p=2000.0F
#include<stdio.h>
#include<math.h>
int main()
{
float p=2000.0F,V;
float m;
V=10;
m=p*V;
printf("\n Masa=%f kg",m);
getchar();
getchar();
return 0;
}
To ti je oznaka za float literal konstantu
100.505F float broj
100.505f float broj
100.505 double broj
Dakle, jesi li ovdje mogao bez oznake F. Naravno jesi, osim što bi onda float varijabli pridružio double literal konstantu, odnosno castao bi u niži raspon brojeva, dobio upozorenje o mogućem gubitku podataka i to je to.
Obrnuto, double ima vecu preciznost od floata.
Obrnuto, double ima vecu preciznost od floata.
float broj = 100.505
pa da, to sam i rekao, cast u niži raspon. Ovdje imamo cast double u float.
float broj = 100.505
pa da, to sam i rekao, cast u niži raspon. Ovdje imamo cast double u float.
Joj sry, krivo sam te skuzio. Zanemari.
float broj = 100.505
pa da, to sam i rekao, cast u niži raspon. Ovdje imamo cast double u float.
Joj sry, krivo sam te skuzio. Zanemari.
Ma sve 5, lako za to, mali nesporazum
Inače ja u stvari samo i koristim double, float sam potpuno izbacio. Baš radi preciznosti, a onda i konzistentnosti.
A i pisanje literala je tako postavljeno, za napisati double ne treba posebna oznaka.
Pozdrav
ako mi mozete reci zato ugasi odam cmd prozor te mi ne kaze da pritisne bilo koju tipku
#include <stdio.h>
int main()
{
printf("oooooooOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOoooooooooooooooo");
return 0;
}
Hvala!
napisi System("PAUSE"); prije return 0;
Windows Phone FTW
Pa, u svakom slucaju da, treba ti kompajler, to je u biti najbitnija komponenta od svih, jer upravo kompajler prevodi taj tvoj kod koji si napisao u instrukcije razumljive procesoru.
Da li si skinuo i instalirao s ove stranice onaj Code::Blocks koji ima 96.8 MB i u nazivu rijec "mingw"? Ako nisi, skini taj, nakon instalacije pitat ce te za kompajler, oznaci GCC (MinGW je port GCC-a na Windowse - pretpostavljam da si na Win, jer na Linuxu kompajler je defaultno instaliran i nemas brige) i stisni Set default. To bi trebalo biti to.

