Programozás C nyelven 5. ELŐADÁS Sapientia EMTE 2015-16
1
while vs. for int szam, s; cin >> szam; s = 0; while ( szam > 0 ){ s += szam%10; szam /= 10; } cout << “szamjegyosszeg” << s; int szam, s; cin >> szam; for ( s = 0 ; szam > 0 ; szam /= 10 ){ s += szam%10; } cout << “szamjegyosszeg” << s;
2
for – ciklus int n, i; 5 cin >> n; for ( i=1 ; i<=n ; ++i ){ (1)(2)(3)(4)(5)_ cout << ‘(‘ << i << ‘)‘; } int n; 5 cin >> n; (5)(4)(3)(2)(1)_ for ( ; n ; --n ){ cout << ‘(‘ << n << ‘)‘; }
7 (0)(6) (1)(5) (2)(4) _
int n, i, j; cin >> n; for ( i=0,j=n-1; i<j ; ++i,--j ){ cout << ‘(‘ << i << ‘)‘ << ‘(‘ << j << “)\n”; }
5 (0)(4) int n, i; (1)(3) cin >> n; (2)(2) for ( i=0; i
3
for – ciklus int n, i, j; cin >> n; for ( i=0; i
5 ){ (0)(1)(2)(3)(4) << ‘)’; (0)(1)(2)(3)(4) _ ){ << ‘)’;
int n, i, j; cin >> n; for ( i=0; i
(4,0)(4,1)(4,2)(4,3)(4,4) _
4
Egymásba ágyazott ciklusok Jelenítsünk meg a képernyőn nxn méretű csillag-mátrixot! int main(){ int main(){ int n, i; int n, i, j; cin >> n; fin >> n; for( i=0 ; i < n*n ; ++i){ for( i=1 ; i <= n ; ++i){ if (i%n == 0){ for( j=1 ; j <= n ; ++j){ cout << ‘\n’; //n-szer cout << ‘*’; //n*n-szer } } cout << ‘\n’; //n-szer cout << ‘*’; //n*n-szer } } return 0; return 0; 5 5 } } ***** ***** ***** ***** ***** *****_
***** ***** ***** ***** _
5
Egymásba ágyazott ciklusok int main(){ int n, i, j; fin >> n; for( i=0 ; i < n ; ++i){ if (i%2){ for( j=0 ; j < n ; ++j){ cout << ‘-’; } } else{ for( j=0 ; j < n ; ++j){ cout << ‘+’; } } 5 cout << ‘\n’; } +++++ return 0; ----} +++++
----+++++ _
int main(){ int n, i, j; fin >> n; for( i=1 ; i <= n ; ++i){ for( j=1 ; j <= n ; ++j){ if (i<j){ cout << ‘-’; } else if(i>j){ cout << ‘+’; } else{ cout << ‘o’; } 5 } o---cout << ‘\n’; +o--} return 0; ++o-} +++o-
++++o 6 _
Adott egy nxm méretű mátrix a be.txt állományban. Írassuk ki a képernyőre az elemek összegét. int main(){ ifstream fin; fin.open(“be.txt”); be.txt if (!fin.is_open()) {cout << “No file!”; return 0;} int szam, n, m, i, s; 2 3 fin >> n >> m; 44 5 13 s = 0; 7 -10 11 for( i=1 ; i <= n*m ; ++i){ fin >> szam; //(n*m)-szer s += szam; //(n*m)-szer int main(){ ifstream fin; fin.open(“be.txt”); } if (!fin.is_open()) {. . .} fin.close(); int szam, n, m, i, j, s = 0; cout << s; fin >> n >> m; return 0; for( i=1 ; i <= n ; ++i){ } for( j=1 ; j <= m ; ++j){ fin >> szam; //(n*m)-szer s += szam; //(n*m)-szer
be.txt 2 3 44 5 13 7 -10 11
} } fin.close(); cout << s; return 0; }
7
Adott egy nxm méretű mátrix a be.txt állományban. Írassuk ki az elemek soronkénti összegeit. int main(){ be.txt ifstream fin; fin.open(“be.txt”); if (!fin.is_open()) {cout << “No file!”; return 0;} 2 3 int szam, n, m, i, s; 44 5 13 fin >> n >> m; 7 -10 11 s = 0; for( i=0 ; i < n*m ; ++i){ fin >> szam; //(n*m)-szer int main(){ ifstream fin; fin.open(“be.txt”); s += szam; if (!fin.is_open()) {. . .} if (i%m == m-1){ int szam, n, m, i, j, s; cout << s; s = 0; //n-szer fin >> n >> m; } for( i=1 ; i <= n ; ++i){ } s = 0; //n-szer fin.close(); for( j=1 ; j <= m ; ++j){ return 0; fin >> szam; //(n*m)-szer } s += szam; //(n*m)-szer } cout << s << ‘\n’; //n-szer
be.txt
} fin.close(); return 0;
2 3 44 5 13 7 -10 11 }
8
Adott egy nxn méretű mátrix a be.txt állományban. Írassuk ki a főátló feletti elemek összegeit. int main(){ be.txt ifstream fin; fin.open(“be.txt”); 3 3 if (!fin.is_open()) {cout << “No file!”; return 0;} 44 5 13 int szam, n, k, i, j, s; fin >> n; 7 -10 11 s = 0; 6 7 1 for( k=0 ; k < n*n ; ++k){ int main(){ fin >> szam; ifstream fin; fin.open(“be.txt”); i = k/m; j = k%m; if (!fin.is_open()) {. . .} if (i < j){ int szam, n, i, j, s = 0; s += szam; fin >> n; } for( i=1 ; i <= n ; ++i){ } for( j=1 ; j <= n ; ++j){ cout << s; fin >> szam; fin.close(); if (i < j){ return 0; s += szam; } } } be.txt } cout << s; 3 3 44 5 13 7 -10 11 6 7 1 fin.close(); return 0; 9 }
Egymásba ágyazott ciklusok Adott n természetes szám. Hány közülük prím? int n,i,j,szam,k; cin >> n; k = 0; for( i=1 ; i<=n ; ++i ){ cin >> szam; if ( szam == 0 || szam == 1 ) {continue;} bool prim = true; for( j=2 ; j<=sqrt(szam) ; ++j ){ if ( szam%j == 0 ){ prim = false; break; } } if ( prim ) { ++k; } } cout << k;
10
TOP-DOWN programozás bool prim_e (int); int main(){ int n,i,szam,k; cin >> n; k = 0; for( i=1 ; i<=n ; ++i){ cin >> szam; if ( prim_e(szam) ) { ++k; } } bool prim_e (int x){ cout << k; int i; return 0; if (x==0 || x==1) {return false;} } for( i=2 ; i<=sqrt(x) ; ++i ){ if ( x%i == 0 ){ return false; } } return true; }
11
Természetes számokat olvasunk be 0 végjelig. Hány közülük szuper-prím? bool prim_e (int); int main(){ bool szuperprim_e (int); int szam,k; k = 0; for( ; ; ){ cin >> szam; if ( !szam ) { break; } if ( szuperprim_e(szam) ) { ++k; } } cout << k; return 0; bool szuperprim_e (int x){ } while ( x ) { if ( !prim_e(x) ){ bool prim_e (int y){ int i; return false; if (y==0 || y==1) {return false;} } for( i=2 ; i<=sqrt(y) ; ++i ){ x /= 10; if ( y%i == 0 ){ } return false; return true; } } }
2333
233 23
2
return true; }
12
Generáljunk n véletlen számot a [0,10000) intervallumból. Hánynak prím a számjegyösszege? bool prim_e (int); int main(){ int szamjegyosszeg(int); int szam,k=0,n,i; cin >> n; srand(time(0)); // <stdlib.h>,
for( i=1 ; i<=n ; ++i){ szam = rand() % 10000; if ( prim_e( szamjegyosszeg (szam) ) ) { ++k; } } cout << k; return 0; bool prim_e (int y){ } int i; int szamjegyosszeg (int x){ if (y==0 || y==1) {return false;} int s =0; for( i=2 ; i<=sqrt(y) ; ++i ){ while ( x ) { if ( y%i == 0 ){ s += x%10; return false; x /= 10; } } } return s; return true; } 13 }
ÖSSZEFOGLALÓ • Egymásba-ágyazott ciklusok • TOP-DOWN programozás
• Szám-sorozatok: – generáljuk • szabály • véletlen
– beolvassuk
FÜGGVÉNYEK
• billentyűzetről • állományból
– ismert elemszám / végjelig
• Számpár-sorozatok
• Prím-tesztelés technikája
• Mátrixok 14
Függvény DEKLARÁCIÓ
(, …, ); HÍVÓ Függvény Függvény HÍVÁS
= (, …, ); ( , …, ){ o o o
„forgatókönyv” o o o
return <eredmény>; }
Függvény DEFINÍCIÓ 15
• szereplők
deklaráció
Claudius Hamlet definíció Polonius Horatio Laertes Gertrude Ophelia ...
• színészek
Makranczi Zalán Szabó Kimmel Tamás Rába Roland Mátyássy Bence Szatory Dávid Söptei Andrea Radnay Csilla dublőr 16 ...