Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A „Programozási alapismeretek” 2. gyakorlat

Hasonló előadás


Az előadások a következő témára: "A „Programozási alapismeretek” 2. gyakorlat"— Előadás másolata:

1 A „Programozási alapismeretek” 2. gyakorlat
Szlávi Péter

2 Alapvető kódolási tudnivalók
„Stílusbeállítás” Code::Blocks-ban Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 2/37

3 Alapvető kódolási tudnivalók
„Stílusbeállítás” Code::Blocks-ban Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 3/37

4 Alapvető kódolási tudnivalók
Programozási alapismeretek Alapvető kódolási tudnivalók „Stílusbeállítás érvényesítése” Code::Blocks-ban Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 4/37 Szlávi-Zsakó: Programozás alapjai 2. Szlávi-Zsakó: Programozás alapjai 2. 4

5 Alapvető kódolási tudnivalók
Skalár beolvasása –általános– eset-ben (szintaktikus és szemantikus ellenőrzéssel): Értelemszerűen csak bizonyos típusú változóba történő olvasásnál alkalmazható (pl. valamely szám típusúba). A beolvasáshoz szükséges lokális változók. bool hiba; string tmp; … Az újdonságokat (a szintaktikus ellenőrzést végző részeket) pirossal emeltem ki. Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 5/37

6 Alapvető kódolási tudnivalók
Skalár beolvasása –általános– eset-ben (szintaktikus és szemantikus ellenőrzéssel): Értelemszerűen csak bizonyos típusú változóba történő olvasásnál alkalmazható (pl. valamely szám típusúba). cin-nek – mint objektumnak (bemeneti folyamnak) vannak metódusai/tagfüggvényei. Pl. a fail(), peek(). Algoritmikusan: Be: sv [Helyes(sv)] bool hiba; string tmp; … do{ cout << "kérdés:"; cin >> sv; hiba=cin.fail() || cin.peek()!='\n'; if (hiba || !Helyes(sv)) { cout << "hibaüzenet" << endl; cin.clear(); getline(cin,tmp,’\n’); } }while (hiba || !Helyes(sv)); A szintaktikus ellenőrzést végző részeket pirossal, a szemantikus ellenőrzést végzőket kékkel emeltem ki. Figyelem: amíg a string konstanst "-k veszi körül, addig a karakter konstanst '-ok. A fail() metódus értéke akkor hamis, amikor a beolvasás során az input változóba konvertálás közben hiba keletkezett. A megkezdett konvertálást megállítja egy olyan jel, amely egy számban illegális. Pl. szóköz vagy sorvégjel. Ha a konvertálás érdemben elindult, akkor a fail() függvény nem jelez hibát, még akkor sem, ha egyébként valami olyan jelnél szakadt meg a konverzió, amely teljeséggel értelmetlen azon a helyen. Pl. "12.45hat" esetében a konverzió re vezet, a cin.fail()=false. A peek() metódus értéke a folyambeli, még fel nem dolgozott első karakter. A konvertálás megakadásának okát vizsgáljuk a fenti kóddarabban a peek() függvénnyel. Az előbbi példa esetében a cin.peek()='h' lesz. Tehát a fenti kóddarab csak a számokban legálisan előforduló jelekből álló számként értelmezhető jelsorozatot fogad el jóként. (A nyitó szóközöket a rendszer automatikusan lenyeli, így ez észrevétlen marad a kóddarab számára.) Az input-puffer alaphelyzet-be állítása, törlése. Kód jegyzet- ként Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy '\n' = sorvégjel; olvasás sorvégjelig 6/37

7 Alapvető kódolási tudnivalók
Skalár beolvasása –kivételes– eset-ben (szemantikus ellenőrzéssel, megállással): Pl. ha fájlból történik a beolvasás: Olvas(fájl,sv) [Helyes(sv)] Akkor persze értelmetlen a kérdés. cout << "kérdés:"; cin >> sv; if (cin.fail() || cin.peek()!='\n' || !Helyes(sv)) { cout << "hibaüzenet" << endl; exit(hibakód); } Jó szokás a hibátlansághoz rendelni a 0 megállási kódot, s az ettől eltérőt a különleges hibaesetekhez. Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 7/37

8 Alapvető kódolási tudnivalók
Várakozás billentyűlenyomásra: pl. a program vége után (az ablak becsukódás megakadályozására), vagy több „lapos” szöveg lapokra tagolásánál cout << endl; //Minek? Találja ki! char c; cin >> c; //platform-független vagy int system ( const char * str ); C-stílusú string egy operációs rendszerbeli parancs; hatása: meghívja a parancsprocesszort és átadja neki paraméter szöveget végrehajtásra. Kell hozzá az #include <stdlib.h>. cout << endl; //Minek? Találja ki! system("pause"); //Windows-ban működő Megjegy- zést l. a jegyzetben Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

9 „Programozási alapismeretek” tárgy
Feladat – 1 Feladat: „Adott egy tetszőleges pont a koordinátáival, határozzuk meg, hogy melyik síknegyedbe esik!” Specifikáció: Be: x,yR Ki: síknegyedZ Ef: – Uf: (0x  0y  síknegyed=1)  (0>x  0y  síknegyed=2)  … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 9/37

10 „Programozási alapismeretek” tárgy
Feladat – 1 Algoritmizálás1: Globális adatok deklarálása Változó x,y:Valós síknegyed:Egész A továbbiakban a globális adatok deklarálását a gyakorlaton elhagyjuk. De tudjunk róla: a „tisztességes” algoritmizálás 1. lépése! Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 10/37

11 „Programozási alapismeretek” tárgy
Feladat – 1 Algoritmizálás2: Kód: 0x és 0y 0>x és 0y 0>x és 0>y egyébként Változó x,y:Valós síknegyed:Egész int main() { double x,y; int siknegyed; Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 11/37

12 „Programozási alapismeretek” tárgy
Feladat – 1 Algoritmizálás2: Kód: 0x és 0y 0>x és 0y 0>x és 0>y egyébként Változó x,y:Valós síknegyed:Egész int main() { double x,y; int siknegyed; //beolvasáshoz: bool hiba; string tmp; … … do{ cout << "x-koordináta:"; cin >> x; hiba=cin.fail() || cin.peek()!='\n'; if (hiba) { cout << "Hibás koordináta!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 12/37

13 „Programozási alapismeretek” tárgy
Feladat – 1 Algoritmus: Kód: 0x és 0y 0>x és 0y 0>x és 0>y egyébként int main() { double x,y; int siknegyed; //beolvasáshoz: bool hiba; string tmp; … … do{ cout << "x-koordináta:"; cin >>x; hiba=cin.fail() || cin.peek()!='\n'; if (hiba) { cout << "Hibás koordináta!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … do{ cout << "y-koordináta:"; cin >> y; hiba=cin.fail() || cin.peek()!='\n'; if (hiba) { cout << "Hibás koordináta!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 13/37

14 „Programozási alapismeretek” tárgy
Másolja a kódot a Code::Blocks-ba! Nyomkövesse! Figyelje a lokális változók értékeit! Feladat – 1 Algoritmus: Kód: 0x és 0y 0>x és 0y 0>x és 0>y egyébként int main() { double x,y; int siknegyed; … … do{ cout << "x-koordináta:"; cin >>x; hiba=cin.fail() || cin.peek()!='\n'; if (hiba) { cout << "Hibás koordináta!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … do{ cout << "y-koordináta:"; cin >>y; hiba=cin.fail() || cin.peek()!='\n'; if (hiba) { cout << "Hibás koordináta!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … if (0<=x && 0<=y) { siknegyed=1; } else if (0>x && 0<=y) { siknegyed=2; } … cout << "Síknegyed:" << siknegyed << endl; … Nyomkövesse az alábbi kódot! A kurzort tegye a main törzsének nyitó zárójelére, majd „Run to cursor”! Mit lát? Mi van a lokális változókkal? Debug -> Debuging windows -> Watches: Megjelenik a Watches ablak. Majd F7 („Next line”)! Mi a változás a Watches ablakban? Értelmezze a változók értékeit? Folytassa a nyomkövetést, figyelje az értékek változását! Másodikként helyezze a programparamétereket (x,y,siknegyed) ki a main függvény fejsora elé, azaz tegye őket globális változókká! Mit tapasztal az újrafordítás, és a nyomkövetéskor? (Vegye föl ezeket is a Watches ablakba! Figyelje meg ezek kezdőértékét!) //Szlávi Péter //SZPKAFT.ELTE //FELADAT: // Adott egy tetszőleges pont a koordinátáival, // határozzuk meg, hogy melyik síknegyedbe esik! #include <iostream> #include <stdlib.h>//az exit-hez, a höz using namespace std; int main() { double x,y;//bemeneti változók int siknegyed;//kimeneti változó //a beolvasás: bool hiba; string tmp; do{ cout << "x-koordinata:"; cin >> x; hiba=cin.fail(); if (hiba) cout << "Hibas koordinata!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); cout << "y-koordinata:"; cin >> y; //a lényeg: if (0<=x && 0<=y) siknegyed=1; else if (0>x && 0<=y) siknegyed=2; else if (0>x && 0>y) siknegyed=3; else siknegyed=4; //a kiírás: cout << siknegyed << ". siknegyed" << endl; return 0; Kód jegyzet- ként Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 14/37

15 „Programozási alapismeretek” tárgy
Feladat – 2 Feladat: „Határozzuk meg az együtthatóival megadott, ax + b = 0 alakú elsőfokú egyenlet megoldását!” Specifikáció: Be: a,bR Ki: xR, üzenetS Ef: – Uf: (a=0  b=0  üzenet="Azonosság")  (a=0  b0  üzenet="Ellentmondás")  (a0  x=−b/a  üzenet="") Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 15/37

16 „Programozási alapismeretek” tárgy
Feladat – 2 Algoritmizálás1,2: ??? Kód: int main() { ??? … … ??? … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 16/37

17 „Programozási alapismeretek” tárgy
Feladat – 3 Feladat: „Határozzuk meg az n! értékét!” Specifikáció: Be: NN Ki: faktNN Ef: – Uf: faktN= Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 17/37

18 „Programozási alapismeretek” tárgy
Feladat – 3 Algoritmus: Kód: Változó i:Egész int main() { int N,faktN; //beolvasáshoz: bool hiba; string tmp; … … do{ cout << "N:"; cin >>N; hiba=cin.fail() || cin.peek()!='\n'; if (hiba || 0>N) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba || 0>N); … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 18/37

19 „Programozási alapismeretek” tárgy
Feladat – 3 Algoritmus: Kód: Változó i:Egész int main() { int N,faktN; //beolvasáshoz: bool hiba; string tmp; … … do{ cout << "N:"; cin >>N; hiba=cin.fail() || cin.peek()!='\n'; if (hiba || 0>N) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba || 0>N); … … faktN=1; for (int i=1;i<=N;i++) { faktN=faktN*i; } cout << N << "!=" << faktN << endl; return 0; } ++i Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy 19/37

20 „Programozási alapismeretek” tárgy
Feladat – 4 Feladat: „Határozzuk meg két természetes szám szor-zatát úgy, hogy nem használjuk a szorzás mű-veletét, legfeljebb a 2-vel való szorzást, és a 2-vel való osztást engedjük meg, no meg az összeadást és dekrementálást!” Specifikáció: Be: a,bN Ki: szorzatN Ef: – Uf: szorzat=a*b Ötlet: a*b = (a Div 2)*(b*2), ha 2|a a*b = (a–1)*b + b, egyébként A feladat „értelmességéről”: A megengedett műveletek mindegyike processzor művelet, így gyorsan végrehajtható. Pl. a „x Div 2”  „RightShift(x,1)”; a „x * 2”  „LeftShift(x,1)” … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

21 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Próbálja ki (pl. a=22, b=5): Változó a,b, szorzat:Egész a * b szorzat 11-1= =10 5-1= =30 1-1= =110 Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

22 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a,b,szorzat; //beolvasáshoz: bool hiba; string tmp; … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

23 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a,b,szorzat; //beolvasáshoz: bool hiba; string tmp; … … //a beolvasása: do{ cout << "a:"; cin >> a; hiba=cin.fail() || cin.peek()!='\n’ || 0>a; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

24 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a0,b0; //beolvasáshoz: bool hiba; string tmp; … … //a beolvasása: do{ cout << "a:"; cin >> a; hiba=cin.fail() || cin.peek()!='\n’ || 0>a; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //b beolvasása: do{ cout << "b:"; cin >> b; hiba=cin.fail() || cin.peek()!='\n’ || 0>b; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

25 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a0,b0; //beolvasáshoz: bool hiba; string tmp; … … //a beolvasása: do{ cout << "a:"; cin >> a0; hiba=cin.fail() || cin.peek()!='\n’ || 0>a0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //b beolvasása: do{ cout << „b:"; cin >> b0; hiba=cin.fail() || cin.peek()!='\n’ || 0>b0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //szorzat=a*b számítása: int a0=a; int b0=b0; //kiíráshoz megőrizzük szorzat=0; while (a>0){ if (a%2==0) { a=a/2; b=b*2; }else{ szorzat=szorzat+b; a=a-1; //szorzat+=b; a-=1; } } … Vegyük észre a szorzat kiszámítására a két, alternatív C++ megoldást! Az operátorok egy operátorcsalád tagjai: "+=", "-=", "*=", "/=", … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

26 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a0,b0; //beolvasáshoz: bool hiba; string tmp; … … //a beolvasása: do{ cout << "a:"; cin >> a0; hiba=cin.fail() || cin.peek()!='\n’ || 0>a0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //b beolvasása: do{ cout << „b:"; cin >> b0; hiba=cin.fail() || cin.peek()!='\n’ || 0>b0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //szorzat=a*b számítása: int a0=a; int b0=b; //kiíráshoz megőrizzük szorzat=0; while (a>0){ if (a&1==0) {//ÉS bitművelet(0) = a%2== a=a>>1; //jobbra léptetés 1 bittel = a/2 b=b<<2; //balra léptetés 1 bittel = b*2 }else{ //szorzat=szorzat+b; a=a-1; szorzat+=b; a-=1; } } … … //szorzat=a0*b0 számítása: int a=a0; int b=b0; szorzat=0; while (a>0){ if (a%2==0) { a=a/2; b=b*2; }else{ szorzat=szorzat+b; a=a-1; //szorzat+=b; a-=1; } } … Vegyük észre a szorzat kiszámítására a két, alternatív C++ megoldást! Az operátorok egy operátorcsalád tagjai: "+=", "-=", "*=", "/=", … Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

27 „Programozási alapismeretek” tárgy
Feladat – 4 Algoritmus: Kód: Változó a,b, szorzat:Egész int main() { int a0,b0; //beolvasáshoz: bool hiba; string tmp; … … //a beolvasása: do{ cout << "a:"; cin >> a0; hiba=cin.fail() || cin.peek()!='\n’ || 0>a0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //b beolvasása: do{ cout << „b:"; cin >> b0; hiba=cin.fail() || cin.peek()!='\n’ || 0>b0; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); … … //szorzat=a*b számítása: int a0=a; int b0=b; //kiíráshoz megőrizzük szorzat=0; while (a>0){ if (a&1==0) {//ÉS bitművelet(0) = a%2== a=a>>1; //jobbra léptetés 1 bittel = a/2 b=b<<2; //balra léptetés 1 bittel = b*2 }else{ //szorzat=szorzat+b; a=a-1; szorzat+=b; a-=1; } } … … //szorzat=a0*b0 számítása: int a=a0; int b=b0; szorzat=0; while (a>0){ if (a%2==0) { a=a/2; b=b*2; }else{ szorzat=szorzat+b; a=a-1; //szorzat+=b; a-=1; } } … … //szorzat-kiírás: cout << a0 << '*' << b0 << '=' << szorzat; return 0; //Szerző: // Szlávi Péter // SZPKAFT.ELTE // //Feladat: // Határozzuk meg két természetes szám szorzatát úgy, hogy nem használjuk a szorzás műveletét, // legfeljebb a 2-vel való szorzást, és a 2-vel való osztást engedjük meg, // no meg az összeadást és dekrementálást! //Specifikáció: // Be: a,b:Egész // KI: szorzat:Egész // Ef: a>=0 ÉS b>=0 // Uf: szorzat=a*b // Ötlet: a*b = (a Div 2)*(b*2), ha 2|a // a*b = (a–1)*b + b, egyébként #include <iostream> #include <stdlib.h> using namespace std; int main() { int a,b,szorzat; //beolvasáshoz: bool hiba; string tmp; //a beolvasása: do{ cout << "a:"; cin >> a; hiba=cin.fail() || cin.peek()!='\n' || 0>a; if (hiba) { cout << "Hibás szám!" << endl; cin.clear(); getline(cin,tmp,'\n'); } }while (hiba); //b beolvasása: cout << "b:"; cin >> b; hiba=cin.fail() || cin.peek()!='\n' || 0>b; //szorzat=a*b számítása: int a0=a; int b0=b; //kiíráshoz megőrizzük a és b kezdő értékét szorzat=0; while (a>0){ if (a&1==0) {//ÉS bitművelet(0) = a%2==0 a=a>>1; //jobbra léptetés 1 bittel = a/2 b=b<<2; //balra léptetés 1 bittel = b*2 }else{ //szorzat=szorzat+b; a=a-1; szorzat+=b; a-=1; //szorzat-kiírás: cout << a0 << '*' << b0 << '=' << szorzat; cout << endl; system("pause"); return 0; Kód jegyzet- ként Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

28 Kitérő1 – az I/O „átirányítása” fájlba
Az I/O fájlba irányítható: prog1.exe <input.txt >output.txt input.txt ≡ konzol input (billentyűzet); output.txt ≡ konzol output (képernyő) Próbálja ki az elkészült bináris prog-ramra ezt a ‚command’ ablakban! (Használja a cmd / cd / dir parancso-kat!) Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

29 Kitérő2 – az outputok „osztályozása”
A kiírás céljai: segítő információk adása, hibaüzenet, eredményközlés. A kódban válassza szét a kiírást így: segítő információk adása  clog (cout), hibaüzenet  cerr (cout), eredményközlés  cout. Írja át e szerint a korábbi forrást! Próbálja ki normálisan és átirányítva! Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

30 Kitérő3 – az outputok „szétválasztása”
Az output 2 fájlba szétválasztható: prog2.exe <input.txt >output.txt 2>err_log.txt input.txt ≡ cin; output.txt ≡ cout; err_log.txt ≡ cerr+clog. Próbálja ki az elkészült bináris prog-ramra ezt! Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

31 „Programozási alapismeretek” tárgy
Feladat – 4 Kód (clog+cerr+fail+peek-es kódolás): int a0,b0,szorzat; //beolvasáshoz: string tmp; //temporális változó a beolvasáshoz bool hiba; //van-e hiba? //a-beolvasás (a0-ba): do{ clog << "a:"; cin >> a0; hiba=cin.fail() || cin.peek()!='\n' || a0<0; if (hiba) { cerr << "Helytelen ertek." << endl; cin.clear(); getline(cin,tmp,’\n’); } }while (hiba); //b-beolvasás (b0-ba): do{ clog << "b:"; cin >> b0; hiba=cin.fail() || cin.peek()!='\n' || b0<0; if (hiba) { cerr << "Helytelen ertek." << endl; cin.clear(); getline(cin,tmp,’\n’); } }while (hiba); //Szerző: // Szlávi Péter // SZPKAFT.ELTE // //Feladat: // Határozzuk meg két természetes szám szorzatát úgy, hogy nem használjuk a szorzás műveletét, // legfeljebb a 2-vel való szorzást, és a 2-vel való osztást engedjük meg, // no meg az összeadást és dekrementálást! //Specifikáció: // Be: a,b:Egész // KI: szorzat:Egész // Ef: a>=0 ÉS b>=0 // Uf: szorzat=a*b // Ötlet: a*b = (a Div 2)*(b*2), ha 2|a // a*b = (a–1)*b + b, egyébként //Bemenet: // 'a' és 'b' egy-egy sorban, azaz sorvégjellel lezárva #include <iostream> #include <stdlib.h> using namespace std; int main() { int a0,b0,szorzat; ///beolvasáshoz: string tmp; ///temporális változó a beolvasáshoz bool hiba; ///van-e hiba? ///a-beolvasás (a0-ba): do{ clog << "a:"; cin >> a0; hiba=cin.fail() || cin.peek()!='\n' || a0<0; if (hiba) cerr << "Helytelen ertek." << endl; cin.clear(); getline(cin,tmp,'\n'); ///exit(1); } }while (hiba); ///b-beolvasás (b0-ba): clog << "b:"; cin >> b0; hiba=cin.fail() || cin.peek()!='\n' || b0<0; ///exit(2); ///szorzat=a0*b0 számítása: int a=a0; int b=b0; szorzat=0; while (a>0) if ((a&1)==0)///ÉS-bitművelet: 0. bit leválasztása, azaz a%2==0 a=a>>1; b=b<<1;///jobbra léptetés 1-bittel; balra léptetés 1 bittel, azaz a=a/2; b=b*2; else ///szorzat=szorzat+b; a=a-1; szorzat+=b; a-=1; ///szorzat-kiírás: cout << a0 << "*" << b0 << "=" << szorzat; cout << endl; ///system("pause");///ezt ki kell hagyni! Próbálja ki fájl átirányítással, hogy miért! return 0; Kód jegyzet- ként Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

32 A Biró feladatkiértékelő rendszerről
Célja Helye: Belépés Használat lépései Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy


Letölteni ppt "A „Programozási alapismeretek” 2. gyakorlat"

Hasonló előadás


Google Hirdetések