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

poruka: 7.285
|
čitano: 1.725.643
|
moderatori: XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
captain_soap_McTawish kaže...
Mitsuoka kaže...

 

@captain_soap_McTawish meni to ništa ne znači kada je to zadatak za kolokvij. Ja ništa tu nisam pisao... Tako da mi ne trebaju savjeti kako nešto napisat, nego zašto nešto ispiše tako kako je... 

Ocito nisi procitao moj post dobro. Naime:

#include <stdio.h>

int main(){
    int i=10;
    printf("i=%d i=%d i=%d",++i,i++,i);
    return 0;
}

ovaj kod ce meni ispisati 12,10,12 sto se moze ciniti potpuno nelogicno medutim nije. Argumenti se ne izracnavaju po redu kako se salju u funkciju. tj. program prije nego sto proslijedi argument mora izracunati vrijednost argumenata, ali on nece racunati ovim redom:

++i,i++,i sto bi bilo 11,11,12 vec ce ici nekim drugim redom. U ovom slucaju prvo i++,++i,i. I red kojim ce compiler racunati argumente nije odreden, pa to ovisi o compileru.

Nisi ni ti moj... 

 

Jer ovako nešto je bilo u kolokviju i što sad? Profesorica će tražit rješenje koje nije definirano? Očigledno ne... BTW i meni će to dat 12, 10, 12, a kopiraj cijeli zadatak i vidjet ćeš da će i tebi dat 13, 14, 14

Ste videli lepote, ko sredi noci Zapiha veter samote Rosa, reke in morja R.I.P. EnlightenedPhoenix 24.6.2011.
15 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Je li baš onaj o godinama i mjesecima tako lagan

input je starost u godinama i mjesecima, a output godina i mjesec rođenja

Dobro si primjetio, ovo sto sam ja napisao nema veze s nicim. Ofrlje sam citao postove...

 

Ovo sto se u zadatku trazi je zapravo jos lakse od onoga sto sam ja isao piskarati. Samo trebas danasnji datum i onda oduzimas...

My computer once beat me at chess, but we got even after a round of boxing.
Poruka je uređivana zadnji put uto 6.12.2011 20:32 (rustweaver).
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Znači, kao što sam kolegi rekao, izgleda da je stvar compiler-specific:

 

C++ Builder 2010 compiler C++ Builder 2010 compiler
 

http://www.chess.com/livechess/profile/Tracer1808
Poruka je uređivana zadnji put uto 6.12.2011 20:42 (TracerCPP).
Moj PC  
0 0 hvala 0
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Ja sam pocetnik i imam pitanje:

Zasto pises:

 

printf ("i = %d", i);

 

a ne samo

 

printf ("%d", i);

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

printf ("i = %d", i);

Ako je i jednako 10;

Ispisati će:
i=10

 

printf ("%d", i);

Ako je i jednako 10;

Ispisati će:

10

 

%d ti je samo format integera.

Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put uto 6.12.2011 20:46 (royalhero).
14 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

A joj da zaboravio sam... %d je format a ovo ostalo je tekst (u " ")...

Buzzzzzzzzzzzzzzzzzzzzzzzzzz
Poruka je uređivana zadnji put uto 6.12.2011 20:47 (Games 4 life).
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
TracerCPP kaže...

Znači, kao što sam kolegi rekao, izgleda da je stvar compiler-specific:

 

 

Eto nista da zakljucimo, nama je profesorica dala zadatak kojemu je jedino točno rješenje u kolokviju 13 14 14, a to ovisi o compileru.. Malo glupo i retardirano.. al eto. 

 

A sad da dodem do jednog drugog zaključka... mi to pišemo na papiru gdje nema utjecaja compilera, pa kako bi zaista trebalo bit? Jel prefix ima prednost nad postfixom, ili nesto drugo? 

Ste videli lepote, ko sredi noci Zapiha veter samote Rosa, reke in morja R.I.P. EnlightenedPhoenix 24.6.2011.
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

#include<iostream>
using namespace std;
int main()
{
    int i = 0, a=5;
printf("i = %d\n", i); //0//
 
for (i = 3; i < 10; i++);
 
printf("i = %d\n", i);                        //10//
printf("i = %d\n", ++i);                       //11//
printf("i = %d\n", i);                        //11//
printf("i = %d i=%d i=%d\n", i++, i, i++);                       //12, 13, 11
// printf("i = %d\ti = %d\ti =%d\t\n", i++, i , ++i);           //14, 15, 15
 printf("i = %d\ti = %d\ti = %d\t\n", ++i, i, i++);             //15, 15, 13

    return 0;
   }
Izgleda da se u funkciji za ispis inkrementiranje vrši ovom logikom:

- operator i se uvijek ispisuje u stvarnom stanju kad je stavljen sam bez obzira da li je prethodno postfiks inkrementiran

- inkrementiranje operatora se vrši s desna na lijevo, a ako je prefiks operator najdesniji, pošto on mora dati ispis jednak stvarnoj vrijednosti varijable i, računaju se operatori postfiks lijevo od njega prvi i ispisuju u stvarnoj trenutnoj  vrijednosti koja ulazi u postfiks inkrement.

Meni u VS-u radi tom logikom.

Poruka je uređivana zadnji put uto 6.12.2011 22:43 (Floki).
 
6 0 hvala 5
16 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

E to je to što mi je trebalo... 

 

Hvala puno na objašnjenju.

Ste videli lepote, ko sredi noci Zapiha veter samote Rosa, reke in morja R.I.P. EnlightenedPhoenix 24.6.2011.
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
Mitsuoka kaže...

E to je to što mi je trebalo... 

 

Hvala puno na objašnjenju.

ne uzmi zdravo za gotovo, protestiraj ovo detaljnije i prosurfaj malo za potvrdu, ja sam to onako empirijski

nemoj da ona kaže da ne valja, pa da ja budem kriv{#}

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

A joj, ekipo, malo nam C šteka...

 

Pisat ću u C++ sintaksom, jer je, imho, puno čitljivija...

 

int i = 12;

 

cout<<i++<<i<<++i<<endl;

 

Kompajler će prvo prirediti red za ispis, a onda ga ispisati. Ovo je školski primjer kako NE pisati program i u teoriji baza podataka ovako nešto bi se zvalo, mislim, s*anje od koda jer se događaju 5 radnji nad memorijskom lokacijom u kojoj je smještena varijabla i i to 3 čitanja i 2 pisanja.

Kao prvo kompajler će povećati vrijednost na 13 zbog pre-inkrementa - pre-inkrement mu govori da prvo mora napraviti operaciju nad mem. lokacijom a onda obaviti čitanje mem. lokacije. I u trenutku innicijalnog ispisa

 

cout<<i++

 

vrijednost i će biti 13, zbog zadnjeg ++i koji je reko da prije nego što se s ičime krene da vrijednost na mem. lokaciji se mora povećati za 1. Nakon tog ispisa, njemu se nalaže da on obavi 2. pisanje u memoriji koje dolazi nakon čitanja varijable (i++), te će vrijednost biti 14.

Tada dolazi do i, koji govori samo da želi ispisati na konzolu vrijednost i ispisuje (14), te potom opet dolazi do i koji je već "ispucao" pre-ikrement (prije nego je ovaj uopće počeo ispisivati na konzolu) i samo ispisuje stanje memorije.

 

Kod mbaksinog primjera treba se uzeti još jedna stvar, a to je pravilo s desna na lijevo (odnosno da kompajler parsira kod s desna na lijevo, obrnuto čita nego mi).

Eh sad znači imamo

 

int i = 12;

cout<<i++<<i<<i++<<endl;

 

Doći će do najdesnijeg i-a i ispisati ga, te povećati vrijednost za 1 na mem. lokaciji na kojoj se nalazi varijabla i. Eh sada, on će doći do i-a, "zanemariti" ga jer postoji još operacija write prije njegovor reada, i preći će naprijed na najlijeviji i, kojeg ispisuje (13) i povećava za 1, vraća se na mjesto gdje mu je read (i) i ispisuje njegovu vrijednost (14).

 

Znači pravilo, parsiranje ide s desna na lijevo, kada naiđe na pre-inkrement, isucavaju se svi pre-inkrementi do slijedeće operacije (post-inkrement) i na tom mjestu ostane jedino čitanje vrijednosti mem. lokacije,  kada naiđe na i++, ispisuje ga i nakon ispisa povećava vrijednost za 1, te na kraju obavi read mem. lokacije (i), i ispiše finalnu verziju. 

Stavite nešto tipa

 

cout<<i++<<i<<i++<<i<<++i<<i<<++i<<i++<<endl;

 

i provjerite.

 

EDIT: Floki me preteko...

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
Poruka je uređivana zadnji put uto 6.12.2011 21:04 (Bukva).
17 godina
moderator
offline
Re: Programiranje u C++-u - pitanja i odgovori
Floki kaže...

Izgleda da se u funkciji za ispis inkrementiranje vrši ovom logikom:

- operator i se uvijek ispisuje u stvarnom stanju kad je stavljen sam bez obzira da li je prethodno postfiks inkrementiran

- inkrementiranje operatora se vrši s desna na lijevo, a ako je prefiks operator najdesniji, pošto on mora dati ispis jednak stvarnoj vrijednosti varijeble i, računaju se operatori postfiks lijevo od njega prvi i ispisuju u stvarnoj trenutnoj  vrijednosti koja ulazi u postfiks inkrement.

Meni u VS-u radi tom logikom.

Da nisam morao skočiti u dućan, možda bih i ja došao do toga. {#} Skužio sam to da ga ne muči je li operator post ili prefiks i činilo mi se da ide od zadnjeg prema prvome, ali nisam uspio sve to povezati prije odlaska u dućan. Bravo.

17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...
Floki kaže...

Izgleda da se u funkciji za ispis inkrementiranje vrši ovom logikom:

- operator i se uvijek ispisuje u stvarnom stanju kad je stavljen sam bez obzira da li je prethodno postfiks inkrementiran

- inkrementiranje operatora se vrši s desna na lijevo, a ako je prefiks operator najdesniji, pošto on mora dati ispis jednak stvarnoj vrijednosti varijeble i, računaju se operatori postfiks lijevo od njega prvi i ispisuju u stvarnoj trenutnoj  vrijednosti koja ulazi u postfiks inkrement.

Meni u VS-u radi tom logikom.

Da nisam morao skočiti u dućan, možda bih i ja došao do toga. {#} Skužio sam to da ga ne muči je li operator post ili prefiks i činilo mi se da ide od zadnjeg prema prvome, ali nisam uspio sve to povezati prije odlaska u dućan. Bravo.

Hvala!{#}

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

Znači, kao što sam kolegi rekao, izgleda da je stvar compiler-specific:

 

 

Fora je jedino što kompajleri koriste drugačije lockove.

U ovom slučaju prvo se naprave sve writeovi, a onda se prelazi na readove, što je po meni jako limitirajuće, jer bih ja trebao imati kontrolu nad njima u tako niskom jeziku kao što je C.

 

Evo probao sa forcanjem ISO C specifikacije (-pedantic-errors flag) i radi kako sam gore opisao...

You can patch technical vulnerabilities as they evolve, but there is no patch for stupidity, or rather gullibility. - Kevin Mitnick
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

U pravilu, ova situacija je ne-definirana i ovisi o compileru. I za rezultat 13, 13, 13 postoji jednostavna logika kojom se do toga dođe no jednostavno treba izbjegavati višestruke inkremente (postfix, prefix) kao parametre funkcije. Evo još jednog primjera gdje se od compilera napravi idiota:

 

const int n = 5;
const int* cpn = &n;  // pokazivač na konstanti int

int *pn = const_cast<int*>(cpn);  // konstantni pointer u obični
*pn = 10;  // službeno definirano kao "undefined behavior"

cout << n << " " << *cpn << " " << *pn;  // 5 10 10

 

I sad.. ovim komadom koda se i jest i nije promjenila vrijednost varijable na 10 {#}.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
1 0 hvala 0
13 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

Da li mi neko može malo objasnit static naredbu ? Npr. static_cast,static_char itd...

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

static_cast možeš shvatiti kao klasičnu C pretvorbu. Npr;

 

float r = 3.14;

int n = static_cast<int>(r);  // tj. int n = (int)r;

 

a za dynamic_cast, const_cast ili reinterpret_cast su pretvorbe vezane uglavnom za pokazivače i klase pa prije nego njih naučiš - ne muči se.

http://www.chess.com/livechess/profile/Tracer1808
15 godina
offline
Programiranje u C++-u - pitanja i odgovori

ljudi evo 2. dumpovim ciklusom c++ predavanja sam izvrsno utvrdio varijable, grananje,petlje(for,while,do while),kolekcije(vector) i funkcije , oni će opet ponavljat cikluse i krajem godine će bit grupa za napredne, sve je to super ali ja bi rado išao dalje, oni su stvarno lijepo i radionice za vježbe održavali, pa me zanima kad bi kupio knjigu demistificirani c++ 3. izdanje da li bi mi bilo dobro po njoj ućiti, da li unutra ima zadataka za vježbanje i da li bi bilo bolje da uzmem nju ili odmah neku c# knjigu pa da pređem na njega, što vjerojatno nebi bilo baš praktićno jer će ovi grupu za napredne održavat radeći u c++ :D,  jer ovako nasumićno traženje i kopanje po netu je malo neuredno xd.

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
Moj PC  
0 0 hvala 0
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Koliko vidim, ljudi ovde najcesce nemaju problema sa C++om vec neznaju napisati algoritam.

 

Kada napises algoritam, lako ga je prebacit u bilo koji programski jezik. Tako da zapravo mislim da je vecina postova ovde promasilo temu. Bilo bi bolje da otvorite temu - Algoritmi - pomoc.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
 
1 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
tnakir kaže...

Koliko vidim, ljudi ovde najcesce nemaju problema sa C++om vec neznaju napisati algoritam.

 

Kada napises algoritam, lako ga je prebacit u bilo koji programski jezik. Tako da zapravo mislim da je vecina postova ovde promasilo temu. Bilo bi bolje da otvorite temu - Algoritmi - pomoc.

ma znam kako se lako prebacit uz jezika u jezik,dump je održavao i c# ciklus, doslovno par pi_darija i možeš pisat sta te volja u c#,ali ipak me zanimaju mišljenja u vezi ove knjige.

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
Poruka je uređivana zadnji put sri 7.12.2011 9:23 (athlon64).
17 godina
offline
Programiranje u C++-u - pitanja i odgovori

Zapravo C# nije slican C++ (iako je povukao dosta stvari iz njega). Slicniji je Javi.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
 
1 0 hvala 0
15 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
tnakir kaže...

Zapravo C# nije slican C++ (iako je povukao dosta stvari iz njega). Slicniji je Javi.

nije toliko slićan ali je jako lako preć na njega, a to da, ćuo sam da ako znaš c# znaš i javu praktićki.

Nikad te necemo zaboraviti. RIP EnlightenedPhoenix 24.6.2011.
17 godina
moderator
offline
Re: Programiranje u C++-u - pitanja i odgovori
tnakir kaže...

Zapravo C# nije slican C++ (iako je povukao dosta stvari iz njega). Slicniji je Javi.

C# je Microsoftova Java. {#} Dakle, cross-platformski potpuno objektni programski jezik zasnovan na sintaksi C++-a, s tim da je, kako je kasnije nastao, ispravio neke karakteristike jave.

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

C# je odličan jezik, koristi mast iz .Net-a, prelazak sa C++a je bezbolan, ali po meni isplativ, .Net je odličan.

Programming is understanding. – Kristen Nygaard
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
mbaksa kaže...

C# je Microsoftova Java. {#} Dakle, cross-platformski potpuno objektni programski jezik zasnovan na sintaksi C++-a, s tim da je, kako je kasnije nastao, ispravio neke karakteristike jave.

A i ovo je pitanje koliko je cross-platform...

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
13 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
Programming is understanding. – Kristen Nygaard
Poruka je uređivana zadnji put sri 7.12.2011 11:22 (royalhero).
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori

Upravo na to sam i ciljao. Situacija sa Monom, Microsoftom i Linuxom bas i nije bajna. Radije ne.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
14 godina
neaktivan
offline
Programiranje u C++-u - pitanja i odgovori

.. a vidjeti ćemo što će biti i od C++ Builder + FireMonkey. Trenutno podrška samo za Mac ali za sljedeću verziju najavljuju i za Linux.

http://www.chess.com/livechess/profile/Tracer1808
Moj PC  
1 0 hvala 0
17 godina
offline
Re: Programiranje u C++-u - pitanja i odgovori
1domagoj1 kaže...

Upravo na to sam i ciljao. Situacija sa Monom, Microsoftom i Linuxom bas i nije bajna. Radije ne.

Zapravo i nije toliko losa. Mono pokriva cca 90% funkcionalnosti .Net frameworka. U ostalom, kod se najprije kompalira u CLR a sa njim mozes sto hoces.

Computer games do not affect kids: I mean if Pacman affected us as kids we'd all be running around in darkened rooms, munching magic pills while listening to repetitive electronic music!
17 godina
neaktivan
offline
Re: Programiranje u C++-u - pitanja i odgovori
tnakir kaže...

Zapravo i nije toliko losa. Mono pokriva cca 90% funkcionalnosti .Net frameworka. U ostalom, kod se najprije kompalira u CLR a sa njim mozes sto hoces.

Pa i nije toliko losa. Neke tehnologije koje daju potpunu kompatibilnost s Windows sustavom nisu u potpunosti implementirane u Monu, upravo zbog Microsofta i patenata. One su tu za developere koji trebaju potpunu kompatibilnost, ali nisu u potpunosti dio Mona. Ukoliko bi se pojavili patentni problemi, Mono projekt ima strategiju:

  • workaround da koriste drugaciju implementaciju koja zadrzava API, ali mijenja mehanizam, a ukoliko to nije moguce tada bi
  • maknuli dijelove koda koji potpadaju pod te patente ili bi
  • trazili prior art (ne znam nas termin - uglavnom informacija koja je bila javno dostupna prije datuma nego je patent postao patent, tako nesto xD) koji bi onda patent ucinio nevazecim

Mono je takoder dio liste softvera koji se Open Invention Network zaklela zastititi.

Zasad su svi ti patentni problemi na razini potencijalnih prijetnji i niti Canonical Ltd. niti Fedora Projekt ne razmisljaju o izbacivanju Mona sve dok tak i ostane, tek kad postanu stvarne prijetnje onda ce nesto uciniti. Zasad su stvari okej, ali ono, osobno mi se to niti najmanje ne svida.

C provides a programmer with more than enough rope to hang himself. C++ provides a firing squad, blindfold and last cigarette.
E-mail:
Lozinka:
 
vrh stranice