Koja je razlika izmedju C,C++ i C#?
- +/- sve poruke
- ravni prikaz
- starije poruke gore
Koristit ću dadin primjer.
C proceduralan jezik, ne podržava OOP, "bliži" mašini, asambly-u, brži od C++a.
Zamisli kao da sastavljaš auto. Imaš samo djelove djelova. Znači sve moraš sastaviti od početka.
C++ Objektno Orjentisani Programski jezik, podržava i proceduralno i OOP. Malo si više od mašine.
Ovdje već imaš neke djelove(recimo, Bosch pumpa ili nebitno), sada od tih djelova sastavljaš kompletne djelove vozila(glava, blok...)
C# Potpuno OOP, znači odmah te tjera da radiš OOP, što je ako si početnik, najbolje, odmah usvojiš koncepte OOP-a.
Tu je super. Imaš već sve djelove, čak i gotov motor. Samo sastaviš. Naravno zahvaljujući .Netu ili Monou.
Jel mi može neko malo pojasnit kako,kada i zašto se koriste pokazivači u argumentima funkcije ? Npr. void zamjena(float* a, float* b) imam tracerovu knjigu i Demistificirani i ni iz jedne nemogu skuzit :S
To je prenos argumenata po referenci.
Jel mi može neko malo pojasnit kako,kada i zašto se koriste pokazivači u argumentima funkcije ? Npr. void zamjena(float* a, float* b) imam tracerovu knjigu i Demistificirani i ni iz jedne nemogu skuzit :S
Funkcija ima najviše jednu izlaznu vrijednost, a prilikom zamjene vrijednosti varijabli su potrebne 2 izlazne vrijednosti. Kada za argument funkcije staviš pokazivač onda možeš direktno mijenjati vrijednost varijable iz glavnog programa tako što češ promijeniti vrijednost u memoriji gdje se nalazi ta varijabla.
Jel mi može neko malo pojasnit kako,kada i zašto se koriste pokazivači u argumentima funkcije ? Npr. void zamjena(float* a, float* b) imam tracerovu knjigu i Demistificirani i ni iz jedne nemogu skuzit :S
To je zato sto se u funkcijama argumenti varijabli prenose po prinicpu Call by value tj. po vrijednosti varijable. Dakle ono kada ti funkciji proslijedis neku varijablu kao argument ti proslijedis samo vrijednost varijable, odnosno na sistemskome stacku napravi se nove varijable kojima se pridruze vrijednosti varijabli koje si poslao kao argument. Dakle sto god ti sa tim varijablama radio unutar funkcije, to ne utjece na vaijable koje poslao funkciji.
No u odredenim situcaijama trebamo provesti promjene na varijablama koje smo proslijedili funkciji. Tu se mozemo koristiti pokazivacima. Pokazivaci kao vrijednost imaju adresu memorije na koju pokazuju. Zato mi kada deklariramo argumente funkcije kao pokazivace, prosljedujemo adresu varijable i onda preko pokazivaca utjecemo na tu varijablu
#include <iostream>
using namespace std;
void inc1(int broj){
broj++;
}
void inc2(int* broj){
*broj++;
}
int main(){
int x=1;
cout<<x<<endl; //ispisujemo x prvi put i naravno ispisuje se 1
inc1(x); //koristimo funkciju kojoj prosjedujemo vrijednost varijable
cout<<x<<endl; // x ostaje nepromijenjen
inc2(&x); //proslijedujemo adresu varijable
cout<<x<<endl; // x se promjenio na 2 jer smo unutar funkcije djelovalo na varijablu
return 0;
}
Za ovakve namjenje je puno bolje koristiti reference koje dosta olaksavaju baratanje u ovim slucajevima. Prije svega ne moramo proslijedivati adresu varijable vec samo varijablu(odnosno vrijednost reference) i nemoramo varijabli pristupati preko operatore direferenciranja:
#include <iostream>
void inc(int& broj){ // referenca kao argument
broj++;
}
int main(){
int x=5;
inc(x);//proslijedujemo referencu
std::cout<<x<<endl; // x se promjenio jer smo utjecali na varijablu
return 0;
}
Jel mi može neko malo pojasnit kako,kada i zašto se koriste pokazivači u argumentima funkcije ? Npr. void zamjena(float* a, float* b) imam tracerovu knjigu i Demistificirani i ni iz jedne nemogu skuzit :S
Tri česte primjene:
1. parametar koji šalješ funkciji je ogroman (neka glomazna struktura, klasa, kontejner) pa bi kopiranje uzimalo previše memorije i resursa
2. želiš promijeniti vrijednost paranetara koje šalješ u funkciji
3. Želiš vratiti više od jednog objekta
Skuzio sam :) hvala puno svima
molio bih nekoga ko razumije c++ i spreman je odvojiti 15 min vremena da mi se javi na pm
Hvala
edit:bump
Pa postavi pitanje ovdje. Ili je rijec o zicanju rjesenja zadace pa ti je bed? :D
Pa moglo bi se reći da je zadaća, no ne smije se vidjeti zbog profesora...
uglavnom snašao sam se...
fala emerik-u
Da nije Tracer?
kašlj kašlj
ahahahahahahaha
Pa što nisi onda pitao profesora da ti pomogne kad ste već obojica na forumu, dao svoj kod i objasnio što ti je problem, ne bi čovjek zinuo pa te progutao.
Kad on već pomaže na forumu drugima, gdje neće tebi.
Kako da uradim ovaj program..
Treba da unesem rijec(primjer :Marko) i da je ispise ovako :
r
ark
marko
Spremiš u znakovno polje i onda se malo igraš sa petljama.
Pa što nisi onda pitao profesora da ti pomogne kad ste već obojica na forumu, dao svoj kod i objasnio što ti je problem, ne bi čovjek zinuo pa te progutao.
Kad on već pomaže na forumu drugima, gdje neće tebi.
neznam ja dal je profesor na forumu,al caka je u tome da sam ja dao vama zadatak i onda vi meni rješenje on bi to mogao pronaći...
lepo c/p u google i gle vidi vraga,točna takav zadatak koji je on nama zadal je na bug forumu,i gle X_ime i Y_prezime ima isti kod za taj zadatak... koja slučajnost....
da nije to on slučajno pitao i još gore prepisao kod....
prof: "evo tebi sinko 0 bodova...."
Ma nije naš Tracer takav, ako je on.
Bio je jedan slučaj ne davno.
Kako napisati ovakava način zbrajanja binarnih brojeva:
1011010101, Sn = 1 + (-1) + 1 + 1 + (-1) + 1 + (-1) + 1 +
(-1) + 1 = 2.
Znači jedan se zbraja kao 1 a nula se oduzima kao -1..
Kako napisati ovakava način zbrajanja binarnih brojeva:
1011010101, Sn = 1 + (-1) + 1 + 1 + (-1) + 1 + (-1) + 1 +
(-1) + 1 = 2.
Znači jedan se zbraja kao 1 a nula se oduzima kao -1..
To nije zbrajanje binarnih brojeva nego znamenki u binarnom broju. Unesi broj kao string i prodi kroz njega petljom testirajuci svaki znak i vrseci odgovarajucu racunsku operaciju.
Kako da uradim ovaj program..
Treba da unesem rijec(primjer :Marko) i da je ispise ovako :
r
ark
marko
char tekst[100] = "marko";
for(int i = 1; i <= strlen(tekst)/2 + 1; i++){
for(int j = strlen(tekst)/2-i+1; j < strlen(tekst)/2 + i; j++)
cout << tekst[j];
cout << endl;
}
ljudi triba mi nesto,ispiydia sam se više, kad snimam zvuk preko mikrofona koristeći funkcije iz xna studia, kao npr Microphone.Default.GetData , i zvuk snimljen spremim u byte array, kako se zove metoda kojom mogu pustit tu audio varijablu, izgugla sam život i pretražia cili msdn, nadem onu dynamicsoundeffect klasu koja ima neke metode al one su uglavnog sa puštanje efekata snimljenih u waw formatu na računalu, a to mi ne treba.
nadem onu dynamicsoundeffect klasu koja ima neke metode al one su uglavnog sa puštanje efekata snimljenih u waw formatu na računalu, a to mi ne treba.
a sto je ovo? :D
a ovdje ti je kompletna referenca:
nadem onu dynamicsoundeffect klasu koja ima neke metode al one su uglavnog sa puštanje efekata snimljenih u waw formatu na računalu, a to mi ne treba.
a sto je ovo? :D
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.dynamicsoundeffectinstance.submitbuffer.aspx
a ovdje ti je kompletna referenca:
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.audio.dynamicsoundeffectinstance_members.aspx
sve sam to isčita više puta ali nikako da uspijem iskodirat i da cujem to sta je u byte array-u, uvjek nesto podcrta,pokusavam vec 2 dana.
sve sam to isčita više puta ali nikako da uspijem iskodirat i da cujem to sta je u byte array-u, uvjek nesto podcrta,pokusavam vec 2 dana.
Pogledaj ovo, zapravo je jako jednostavno, ili se barem tako cini.
Postavis BufferDuration na 1000 milisekundi (to je maksimum), pozoves metodu Start, kada se buffer napuni dobit ces event BufferReady, tada valjda zaustavljas snimanje pozivom na metodu Stop, dohvatis snimljeni buffer pozivom na metodu GetData kopiras buffer u neki trajniji spremnik koji si postavio prije toga, ponovno pokreces snimanje pozivom na metodu Start... i tako u nedogled, tj. ponavljas postupak onoliko koliko ti treba.
Na kraju snimljeni buffer (onaj koji si prosirivao kopiranjem podataka iz manjeg buffera) samo proslijedis SubmitBuffer metodi objektu klase DynamicSoundeffect, te pozoves Play metodu kada zelis pustiti sadrzaj tog buffera.
koristia sam na kraju ovu mciSendstring funkciju i njom snimia zvuk u nešto, opet neznam kako da zvuk pustim:
private void button1_Click(object sender, RoutedEventArgs e)
{
mciSendString("open new Type waveaudio Alias recsound", "", 0, 0);
mciSendString("record recsound", "", 0, 0);
}
private void button2_Click(object sender, RoutedEventArgs e)
{
mciSendString("save recsound c:\\record.wav", "", 0, 0);
mciSendString("close recsound ", "", 0, 0);
Microphone.Default.Stop();
}
Cekaj u cemu je tocno problem sa SubmitBuffer metodom? Rekao si da ti nesto podcrta, imas greske u sintaksi?
Nazalost, ne mogu ti dati konkretan kôd jer C# i .Net nikada nisam koristio.
EDIT: iskopao sam jos nesto pogledaj obavezno.
Pozdrav ljudi,treba mi pomoć oko jednog zadatka. U zadatku se traži da korisnik unosi prirodne brojeve dok ne unese nulu te da se na kraju izbaci mjera tih prirodnih brojeva. Također,za svaki unos treba provjeriti je li ispravan. Pitanje koje mene muči je,gdje da ovdje ubacim uvjet da provjerava je li unešeni broj prirodan,tj. ako je manji od nule da izbaci pogrešku ali i nastavi sa radom te petlje. Ovo je dosada napravljen kod:
http://paste.strictfp.com/26734
Pokušavao sam i sa naredbama skoka,i sa ubacivanjem uvjeta na različita mjesta ali mi nikako ne paše. Hvala unaprijed :)
Cekaj u cemu je tocno problem sa SubmitBuffer metodom? Rekao si da ti nesto podcrta, imas greske u sintaksi?
Nazalost, ne mogu ti dati konkretan kôd jer C# i .Net nikada nisam koristio.
EDIT: iskopao sam jos nesto pogledaj obavezno.
ovo sta si nasa je prilicno detaljno, hvala,javim da li program radi.