A „Programozási alapismeretek” 2. gyakorlat

Slides:



Advertisements
Hasonló előadás
Bevezetés a C# nyelvbe Az alapok összefoglalása Farkas Csaba.
Advertisements

A képzett szakemberekért AZ ÖNÉRTÉKELÉS FOGALMA, LÉNYEGE, SZEREPE A MINŐSÉGFEJLESZTÉSBEN 3.2. előadás.
 Alap tudnivalók Alap tudnivalók  Az If és a While folyamatábrák Az If és a While folyamatábrák  Probléma Probléma  A while ciklus (általános alak,
A kamara szerepvállalása a felnőttképzésben évi LXXVII. tv. főbb rendelkezései Tv. hatálya elsődlegesen az állam által elismert vizsgával záruló,
1 Az önértékelés mint projekt 6. előadás 1 2 Az előadás tartalmi elemei  A projekt fogalma  A projektek elemei  A projekt szervezete  Projektfázisok.
Forrás: Reiter István C_Sharp programozás lépésről lépésre (frissített tartalommal )
BME VEGYÉSZMÉRNÖKI ÉS BIOMÉRNÖKI KAR
Script nyelvek előadás
Fájlkezelés.
Operációs rendszerek.
A kérdőívek, a kérdőívszerkesztés szabályai
Adatbázis normalizálás
WE PROVIDE SOLUTIONS.
Alhálózat számítás Osztályok Kezdő Kezdete Vége Alapértelmezett CIDR bitek alhálózati maszk megfelelője A /8 B
Programstruktúrák.
Programozási alapismeretek 3. előadás
Becslés gyakorlat november 3.
Microsoft Excel BAHAMAS tanfolyam
Scilab programozás alapjai
PHP - függvények.
Mesterséges intelligencia
LabVIEW bevezetéstől a feszültség-áram karakterisztikáig Vida Andrea
Tömörítés.
Programozás I. Gyakorlás egydimenziós tömbökkel Többdimenziós tömbök
CSOPORT - A minőségellenőrök egy megfelelő csoportja
Algoritmusok és Adatszerkezetek I.
Lexikális elemző: lex (flex)
Munka és Energia Műszaki fizika alapjai Dr. Giczi Ferenc
Gazdaságstatisztika Korreláció- és regressziószámítás II.
Nyelvek típusossága.
Adatbázis-kezelés (PL/SQL)
INFOÉRA 2006 Véletlenszámok
2. Bevezetés A programozásba
VB ADATTÍPUSOK.
Adatbevitel, értékadás, típuskonverzió
Közigazgatási alapvizsga a Probono rendszerben
Business Mathematics
Regressziós modellek Regressziószámítás.
Számítógépes Hálózatok
Tilk Bence Konzulens: Dr. Horváth Gábor
AVL fák.
Aritmetikai kifejezések lengyelformára hozása
Informatikai gyakorlatok 11. évfolyam
B M Java Programozás 4. Gy: Java GUI IT A N Tipper, MVC kalkulátor
Kifejezések kiértékelése * Lengyel-forma
Új pályainformációs eszközök - filmek
A minőségellenőrzést támogató program bemutatása, Kérdőívek értékelése
B M Java Programozás 9. Gy: Java alapok IT A N Adatkezelő 5.rész
Bináris kereső fák Definíció: A bináris kereső fa egy bináris fa,
A Lineáris Keresés Buktatói
Ez az előadás alcíme vagy a tárgy neve vagy a konferencia neve
SZAKKÉPZÉSI ÖNÉRTÉKELÉSI MODELL I. HELYZETFELMÉRŐ SZINT FOLYAMATA 8
További rendező és kereső algoritmusok
1.5. A diszkrét logaritmus probléma
A szállítási probléma.
I. HELYZETFELMÉRÉSI SZINT FOLYAMATA 3. FEJLESZTÉSI FÁZIS 10. előadás
Dr. Varga Beatrix egyetemi docens
Vállalati brosúra A cég általános célkitűzése
Erasmus+ hallgatói mobilitásra jelentkezéshez
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
Mintaillesztés Knuth-Morris-Pratt (KMP) algoritmus
Tájékoztató az EPER pályázati folyamatáról
Körmentes irányított gráfban legrövidebb utak
Áramlástan mérés beszámoló előadás
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Vektorok © Vidra Gábor,
Erasmus+ hallgatói mobilitásra jelentkezéshez
A POWERPOINT 2007 újdonságai
Algoritmusok.
Munkaszámos munkaidő nyilvántartás
Előadás másolata:

A „Programozási alapismeretek” 2. gyakorlat Szlávi Péter szlavip@elte.hu

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

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

Alapvető kódolási tudnivalók Programozási alapismeretek 2018.12.26. 2018.12.26. 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

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

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ó 12.45-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

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

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

„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

„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

„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

„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

„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

„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 //szlavip@elte.hu //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 10.05-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

„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

„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

„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

„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

„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

„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

„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 22 5 0 11 10 0 11-1=10 10 0+10=10 5 20 10 5-1=4 20 10+20=30 2 40 30 1 80 30 1-1=0 80 30+80=110 Programtervező informatikus Bsc szak „Programozási alapismeretek” tárgy

„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

„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

„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

„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

„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==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=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

„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==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=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 // szlavip@elte.hu //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

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

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

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

„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 // szlavip@elte.hu //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

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