510 likes | 770 Views
C++ in Visual C++. What is the difference between C++ and Visual C++? C++ is the language itself, Visual C++ is a compiler that tries to implement the language. http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.5. C++ in Visual C++.
E N D
C++ in Visual C++ What is the difference between C++ and Visual C++? C++ is the language itself, Visual C++ is a compiler that tries to implement the language. http://www.parashift.com/c++-faq-lite/compiler-dependencies.html#faq-38.5
C++ in Visual C++ What is the difference between C++ and Visual C++? C++ is a programming language. Visual C++ is Microsoft's implementation of it. When people talk about learning Visual C++, it usually has more to do with learning how to use the programming environment, and how to use the Microsoft Foundation Classes (MFCs) for Windows rather than any language issues. Visual C++ can and will compile straight C and C++. (http://www.faqs.org/faqs/C-faq/learn/)
C++ in Visual C++ How do I BEGIN to write C or C++ under Visual or Borland C++? This question is, strictly speaking, off-topic, but is answered here since it's one that seems to plague many beginners. To start with, you need to make sure that you are not writing a Windows application. Try creating a new project or application to target MS-DOS, QuickWin or Win32 Console depending on your compiler version. You can then use the Standard C and C++ libraries to write strictly conforming programs. It's best to learn to write standard-conforming programs first before branching off into writing Windows programs. If you find that you are having a lot of trouble setting up your compiler, a good place to ask questions is a newsgroup devoted to your compiler. (http://www.faqs.org/faqs/C-faq/learn/)
Funkcije Neja Zupan
Top-Down pristop ponavljaj vnesi ure dela vnesi urno postavko izračunaj dnevni zaslužek vprašanje “novi podatki?” ponavljaj do odgovora “ne”
Kdaj uporabiti funkcijo? ponavljaj vnesi ure dela vnesi urno postavko pokliči funkcijo izrac_zas(ura,cena,placa) vprašanje “novi podatki?” ponavljaj do odgovora “ne”
Prednosti • top-down pristop (večji problem razdelimo na več manjših) • možnosti ponovne uporabe funkcij v drugih programih (library) • timsko delo, delitev nalog glede na področje znanja
Prednosti • program preglednejši in razumjlivejši • ni ponavljanja enakega zaporedja stavkov • lažje in kvalitetnejše testiranje • funkcije lahko izvršujemo poljubno mnogokrat
Naloga • Tek na smučeh: vsak tekač štarta posebej. • Za vsakega tekača posebej je izmerjen čas začetka teka in čas v cilju v urah, minutah in sekundah. • Število tekačev je znano in znana je dolžina proge v kilometrih. Napišite psevdo kodo tako, da se za vsakega tekača s štartno številko izpiše njegovo ime, čas štarta in čas v cilju, porabljen čas za tek v minutah in hitrost teka. Nakažite, katere korake lahko povežemo v funkcijo.
Psevdokoda Ponavljaj tolikokrat,kot je tekačev izpiši startno številko, ime izpiši čas starta, čas v cilju kliči funkcijo za porabljen čas za tek kliči funkcijo za hitrost teka izpiši čas teka in hitrost Konec
Funkcija • V algebri funkcija pove odnos med vrednostmi: neodvisno in odvisno spremenljivko • f(x) = 2x + 5, pomeni f(1) = 7, f(2) = 9, and f(3) = 11 • 1, 2, in 3 so argumenti • 7, 9, in 11 so vrednosti funkcije
Vrste funkcij • funkcija main() • preddefinirane funkcije (knjižnice) – funkcije brez podatkovnega tipa • funkcije, ki jih napiše programer (FP) • vrne vrednost • ne vrne ničesar tip ime (argumenti) { stavki; } TIP_KI_GA_FUNKCIJA_VRAČA IME_FUNKCIJE (TIP_PARAMETRA1 IME_PARAMETRA1, TIP PARAMETRA2 IME_PARAMETRA2, TIP_PARAMETRA_N IME_PARAMETRA_N){// PROGRAMSKA KODA (TELO)}
Preddefinirane funkcije • Preddefinirane funkcije so organizirane v posebnih knjižnicah • Preddefinirane funkcije se nahajajo v glavi programa
<algorithm> <bitset> <cassert> <cctype> <cerrno> <cfloat> <ciso646> <climits> <clocale> <cmath> <complex> <csetjmp> <hash_set> <iomanip> <ios> <iosfwd> <iostream> <iso646.h> <istream> <iterator> <limits> <list> <locale> <map> <memory> Standard C++ Library <csignal> <cstdarg> <cstddef> <cstdio> <cstdlib> <cstring> <ctime> <cwchar> <cwctype> <deque> <exception> <fstream> <functional> <hash_map> <new> <numeric> <ostream> <queue> <set> <sstream> <stack> <stdexcept> <streambuf> <string> <strstream> <utility> <valarray> <vector> http://msdn2.microsoft.com/en-us/library/ct1as7hw(VS.80).aspx
math.h • Funkcija kvadratni korensqrt(x) • izračuna kvadratni koren pozitivnega števila x >= 0.0 • sqrt(2.25) je 1.5 • ima en parameter in je tipa double • Funkcija floor(x) • vrne najvišje celo število, ki ni večje od x • floor(48.79) je 48.0 • ima en parameter in je tipa double
math.h • Funkcija pow(x,y) • izračuna potenco števila x; potenca je y • pow(2,3) = 8.0 • ima dva parametra (x in y) in je tipa double
cmath.h • acos(x) • asin(x) • atan(x) • cos(x) • sin(x) • tan(x) • exp(x) • log(x) • sqrt(x) • fabs(x) • floor(x) • ceil(x)
FP • FP: funkcije, ki jih definira programer • Void funkcija – nima podatkovnega tipa • Funkcije, ki vrnejo vrednost – so določenega podatkovnega tipa • vključimo jih z navedbo #include, če so shranjene v drugi datoteki • imajo ime • imajo točno določeno število parametrov (lahko tudi 0) • vsi parametri so določenega tipa • funkcija je določenega tipa
FP-vrne vrednost • Vrednost, ki jo funkcija vrne: • shranimo za nadaljne izračunavanje • uporabimo v nadaljnjih izračunih (Vrednost funkcije lahko priredimo v stavku) • natisnemo • Deklaracija funkcije je zelo pomembna functionType functionName(formal parameter list) { statements; }
FP-vrne vrednost • Sintaksa parametrov: • podatkovniTip1ime1, podatkovniTip2ime2 • Sintaksa klica funkcije: • ime funkcije(lista parametrov) • Sintaksa parametrov v klicu funkcije: • spremenljivka ali izraz
FP-vrne vrednost TipFunkcijeImeFunkcije (lista parametrov) { lokalne definicije; implementacija funkcije; } float razdalja(float x, float y)// vrne razdaljo medtočko T(x,y) in koordinatnim izhodiščem { float raz; //lokalna spremenljivka raz = sqrt(x * x + y * y); return raz; }
// function example #include <iostream> int odstevanje (int a, int b) { int r; r=a-b; return (r); } int main () { int x=5, y=3, z; z=5; z = odstevanje (7,2); cout << “Prvi rezultat je " << z << '\n'; cout << “Drugi rezultat je " << odstevanje(7,2) << '\n'; cout << “Tretji rezultat je " << odstevanje(x,y) << '\n'; z= 4 + odstevanje (x,y); cout << “Cetrti rezultat je " << z << '\n'; return 0; } FP
Analiza programa • z = odstevanje (7, 2); • intodstevanje (inta, intb) 5
#include <iostream.h> #include <iomanip.h> #include <math.h> // deklaracija funkcije float razdalja(float,float); void main() { float x,y,raz; cout << “Testiranje razdalje tocke(x,y)" << endl; cout << “Vnesite vrednost tock x in y: "; cin >> x >> y; raz = razdalja(x,y); cout << “Razdalja tocke (" << x << ',' << y << ") od izhodisca " << raz << endl; } // konec main // definicija funkcije float razdalja(float x, float y) { float raz; raz = sqrt(x * x + y * y); return raz; } FP
Analiza programa • raz = razdalja (x,y); • float razdalja(float x, float y)
/*Izris trikotnika neke visine*/ #include <iostream.h> void NarisiTrikotnik(int visina) //visina je vhodni argument { //funkcija izriše trikotnik velikosti visina for (int i=1; i<=visina; i++) { for (int j=0; j<i; j++) cout << "*"; cout << endl; } } int main() { int h; //deklaracija visine trikotnika cout << "Vpisi visino trikotnika:"; cin >> h; //Klic funkcije z argumentom NarisiTrikotnik(h); return 0; } FP
Naloga • S pomočjo uporabe funkcije zapišite program za izračun seštevka dveh realnih števil • rezultat = a+b;
// seštevanje #include <iostream> float addition (float a, float b) { float r; r=a+b; return (r); } void main () { float z; z = addition (5,3); cout << “Rezultat je " << z; } FP REŠITEV
Naloga • S pomočjo uporabe funkcije zapišite program za izračun fakultete naravnega števila n, ki ga vnese uporabnik • V programu preverite ali je uporabnik vnesel naravno število • rezultat = n!
//Funkcija za izračun fakultete števila #include <iosteram.h> int Fakulteta(int stevilo) //stevilo je argument { int f=1; for (int k=2; k<=stevilo; k++) f *= k; return f; //tu se funkcija konča in vrne vrednost } int main() { int a; //spremenljivka za celo stevilo cout << "Vpisi naravno stevilo:"; //navodilo cin >> a; if (a>0) //sledi klic funkcije z dejanjskim argumentom cout << a "! = " << Fakulteta(a); //izpise se vrnjena vrednost return 0; } FP REŠITEV
Prenos vrednosti po referenci raz = razdalja (a, b); float razdalja (float x, float y) void podvoji (int & a, int & b, int & c); podvoji (x, y, z) x y z
// vrne vec vrednosti #include <iostream> void prevnext (int x, int& prev, int& next) { prev = x-1; next = x+1; } int main () { int x=100, y, z; prevnext (x, y, z); cout << “prejšnji=" << y << ", naslednji=" << z; return 0; } FP
Privzete vrednosti argumentov // Privzete vrednosti argumentov v funkcijah #include <iostream> int deli (int a, int b=2) { int r; r=a/b; return (r); } int main () { cout << deli (12); cout << endl; cout << deli (20,4); return 0; }
Prekrivanje funkcij #include <iostream> int operate (int a, int b) { return (a*b); } float operate (float a, float b) { return (a/b); } int main () { int x=5,y=2; float n=5.0,m=2.0; cout << operate (x,y); cout << "\n"; cout << operate (n,m); cout << "\n"; return 0; }
Rekurzija //računanje fakultete #include <iostream> long factorial (long a) { if (a > 1) return (a * factorial (a-1)); else return (1); } int main () { long number; cout << “Vpišite celo število: "; cin >> number; cout << number << "! = " << factorial (number); return 0; }
Naloga Kaj vrne spodnji program? void change(int& y) { y = 1; } void main() { int x; x = 0; change(x); cout << x << endl; }
FP-ne vrne vrednost • Funkcije “void” in funkcije, ki vrnejo vrednost imajo podobno strukturo • Funkcije “void” • pred glavnim programom main() • za glavnim programom main()
FP-ne vrne vrednost • funkcije “void” so brez stavka return • return v funkciji “void” se uporablja izključno za namene predčasenga končanja funkcije • funkcije “void” imajo ali pa nimajo parametrov • klic funkcije “void” se izvrši enako kot pri ostalih funkcijah
FP-ne vrne vrednost • Sintaksa funkcije “void”: void functionName(void) { statements; } • Sintaksa za klic funkcije “void” functionName();
// void primer #include <iostream> void printmessage () { cout << “Jaz sem funkcija!"; } int main () { printmessage (); return 0; } FP
Analiza void printmessage (void) { cout << “Jaz sem funkcija!"; } printmessage ();
#include <iostream.h> #include <iomanip.h> // Deklaracija funkcije void skipthree(void); void main() { cout << “Testiranje funkcije, ki ne vrned vrednosti" << endl; skipthree(); cout << “Stestirano" << endl; } // Konec main // Definicija funkcije void skipthree(void) // izpusti tri prazne vrstice v izpisu { cout << endl << endl << endl; } FP
Naloga • Z uporabo funkcij napišite program, ki izpiše sledeče znake: * ** *** ****
// izpis * #include <iostream.h> void izpis(int n) { int i; for (i=0; i<n; i++) cout << “*”; cout << endl; } void main () { int z; cout << “Vpišite celo stevilo ” << endl; cin>> z; for (int i=1; i<=z; i++) izpis(i); } FP REŠITEV