J. Carelman: Leegyszer!sített számológép
Programozás I. A C programozás alapjai 1. Gyakorlat
2
Gyakorlatok
• Hely, id"pont: • D104, hétf" 10:55-12:35 • Gyakorlatvezet"k: • Heckenast Tamás, B603,
[email protected]
• Tormási Alex,
[email protected]
3
Gyakorlatok tematikája • • • • • • • • •
Bevezetés min. HW és op. rendszer ismeretek strukt. progr. alapok: algoritmusok, néhány adattípus, vezérlési szerkezetek fejleszt" környezetek Értékadás, elágazások, ciklusok Standard I/O, stringek Számábrázolás, portabilitás, printf String konverziók Bitm!veletek Keresés, string parzolás Rekurzív függvények Pointerek kezelése
• • •
4
Ajánlott irodalom • • • • • • •
B. W. Kernighan, D. M. Ritchie: A C programozási nyelv, M!szaki Könyvkiadó, 1985 Bauer Péter: Programozás I-II. C programnyelv, Universitas-Gy"r Kht., 2005 Németh János: Turbo C 2.0 fejleszt"rendszer, LSI Oktatóközpont, 1991 Peth" Ádám: abC C programozási nyelvkönyv, Számalk, 1990 B. W. Kernighan, R. Pike: A UNIX operációs rendszer, M!szaki Könyvkiadó, 1987 Pere László: UNIX - GNU/Linux programozás C nyelven, Kiskapu Kiadó, 2003 A. Koenig: C csapdák és buktatók, Kiskapu Kiadó, 2005
5
Oktatási anyagok
• https://ivi.sze.hu/main.php?
fajl=tantargyak&szervegys=in&SID
• http://www.sze.hu/~bauer/ Prog1fel.htm
• http://www.sze.hu/~heckenas/okt/
6
Fejleszt" környezetek
• Bármely ANSI C környezet, compiler, •
(csak standard I/O, karakteres felület) Borland Turbo C (DOS, “Windows”, DOSBox)
•
http://bdn.borland.com/museum/antiquesoftware
• gcc (Windows, Linux, Mac OS X) • stb. ...
7
Bevezetés • •
•
Miért éppen C? El"nyök népszer! és elterjedt - “hordozható” alacsonyszint! magasszint! programozási nyelv kevés szemantikai kényszer - elegáns szintaxis sok ráépül" további nyelv (C++, Objective-C, Java, C#, stb.) Hátrányok alacsonyszint! magasszint! programozási nyelv kevés szemantikai kényszer - elegáns szintaxis lapos tanulási görbe
• • • •
•
• • •
8
Alapfogalmak
• Hardver (HW) • Szoftver (SW) • Operációs rendszer (OR) • Algoritmus • Program • Programozási nyelv
9
HW és SW
• HW • az információs rendszer fizikai elektronikus és mechanikus részei • SW • a rendszer m!ködését megadó •
programok kódolt utasítások formájában Neumann elv memóriában tárolt program bináris rendszer
• •
10
HW és SW (folyt.)
• HW architektúra Memória
CPU
Sin
I/O vezérl!k
• SW rendszer HW OR mag OR szolg. Alkalmazások
Perifériák
11
Operációs rendszerek
• OR • a számítógépet funkcionálisan használhatóvá tév" irányító szoftver programok futtatása er"források lefoglalása ütemezés I/O kezelés felhasználói felület (parancs értelmez")
• • • • •
12
Algoritmusok
• Algoritmus • lépésr"l lépésre definiált eljárás
valamilyen probléma megoldására
• véges számú definiált szabály, utasítás
• véges lépésszám • ismétl"d" utasítások
13
Magasszint! programozási nyelvek • Prog. nyelv generációk • 1GL • 2GL • 3GL 2GL 3GL • Formális nyelvek • véges szókészlet, rögzített szintaktika és szemantika • Fordító programok • forráskód -> végrehajtható (natív) kód • Interpreterek • forrás nyelv értelmezése void main(void) { int x,y;
for (y=0;y<21;y++){ for(x=0;x<21;x++) if(x==y||x==20-y) printf("*"); else printf(" "); printf("\n"); }
}
Forráskód
Fordító program
int main(){ ... }
14
C történelem
• 1970 B - Bell Labs, Ken Thompson • 1972 C - Bell Labs, Dennis Ritchie • 1973 UNIX kernel C-ben átírva • 1978 Brian Kernighan & Ritchie: The C Programming Language • 1990 ANSI C
Thompson
Ritchie
Kernighan
Futtatható program 00111010 10101010 10101111
15
Programok
• Program: utasítások rendezett halmaza
• végrehajtás - folyamat
• Programozási szerkezetek • szekvencia • feltételes elágazások • ciklusok • eljárás absztrakció
16
Programok (folyt.)
• Program elemek • Adatok • M!veletek • Leírásuk • Nevek (referenciák, literálok) • változók • Típusok
17
Adatábrázolás
• Bináris reprezentációk • Numerikus értékek • egészek (el"jel?) • lebeg"pontos számok • Szöveg (karakterek) • Egyszer! adattípusok • Összetett adattípusok
18
M!veletek
• Operátorok • Aritmetikai m!veletek • Bit m!veletek • Logikai m!veletek • Vezérlési utasítások
19
Blokk diagramok
• Algoritmusok leírása Start
Feltétel
Input/ Output
Tevékenységek
Tevékenységek
Feltétel
Döntés
Tevékenység
Tevékenység
Elöltesztel"
Hátultesztel"
ciklus Stop
20
Struktúrált programozás
• Top-down megközelítés • Olvashatóbb, könnyebben karbantartható kód • Hierarchikus vezérlési szerkezetek • szekvencia • szelekció • ciklusok • csak egy belépési és kilépési pont
21
Példák Start
!"#$%&'(')*#+,-./)0'#12#'#134#1%45&%)6)#60#)%45&%)6)7
BE: r
!"#$%%&'()*($(%&+,-(.-/(0-10'012(3$45(0-10'*"46'('7($(3*+8*"*"9('78*4*:0%*'*1; !"#$%#%"'()*+,-&".-%%/&0"1"2"3$45$16,7-8.9-,"8#%-:;&"-$$-"1"<#8$1"=:>%-%%" !"#$%&'(')*#+,-./)0'#12#'#134#1%45&%)6)#60#)%45&%)6)7 ?881,@AB"C",#57:-%$-"-6-8#=%"=:4$:?==18"D-87-%%-=>%-%%/&B
Start
k=2*r*3.14 BE: r t=r*r*3.14 k=2*r*3.14 t=r*r*3.14 KI: k, t
!"#$%%&'()*($(%&+,-(.-/(0-10'012(3$45(0-10'*"46'('7($(3*+8*"*"9('78*4*:0%*'*1; O&@'D7E <:?@?%=1E P=>&% !"#$%#%"'()*+,-&".-%%/&0"1"2"3$45$16,7-8.9-,"8#%-:;&"-$$-"1"<#8$1"=:>%-%%" <('G-(%&+$-$ Q$"E% ?881,@AB"C",#57:-%$-"-6-8#=%"=:4$:?==18"D-87-%%-=>%-%%/&B
<('G-('*-6"*1*
O&@'D7E <('G-(1*-6"*1* <('G-(%&+$-$ <('G-('*-6"*1* <('G-(1*-6"*1*
'
<:?@?%=1E 1 ' 1
Q$"E%
P=>&% Q$"E% Q$"E% Q$"E% Q$"E%
KI: k, t Stop
Stop
8"#$%&'(')*#9:60,/)0%#12#',#%&;,;#$%&'(')<)#2=>?)%&&%=;4,600%&7
Start
<"$'=1%&'(,1($:(*"9:9(>-?+-$3&@'$1(A+B2(C?+B($(%&+,-(.-/(0-10'0@*'(D%$'(>?:71=#( 8"#$%&'(')*#9:60,/)0%#12#',#%&;,;#$%&'(')<)#2=>?)%&&%=;4,600%&7
Start
BE: r
#$"E%(0-10'*1(8?+$54?@(*";(F$($()*?"#$%?11($5$1(@*3(8*"*"(3*+($('G#*1*"30@B*'@*'2(
<"$'=1%&'(,1($:(*"9:9(>-?+-$3&@'$1(A+B2(C?+B($(%&+,-(.-/(0-10'0@*'(D%$'(>?:71=#( $''?-(7%301*"46'($:($5$1)*?"#$%,%1(37@5$557+2($3=+(C*"B*%(0-10'*1(@*3('$>&@'; #$"E%(0-10'*1(8?+$54?@(*";(F$($()*?"#$%?11($5$1(@*3(8*"*"(3*+($('G#*1*"30@B*'@*'2( $''?-(7%301*"46'($:($5$1)*?"#$%,%1(37@5$557+2($3=+(C*"B*%(0-10'*1(@*3('$>&@'; C"E-81@1%"6-548@?=?D4:".-:-==/&"9-"1"D?%F8%-=:%-8G"<;&8F=%("D;=:-,"1:"$"#$%#,-&"
BE: r
i
r<=0 i
22
9-48.1=?=?$1"8-518?99"-57=:-$"6;,@-,E#8-!-,"=:/&=#5/,&"8-=:B C"E-81@1%"6-548@?=?D4:".-:-==/&"9-"1"D?%F8%-=:%-8G"<;&8F=%("D;=:-,"1:"$"#$%#,-&" 9-48.1=?=?$1"8-518?99"-57=:-$"6;,@-,E#8-!-,"=:/&=#5/,&"8-=:B O&@'D7E <:?@?%=1E P=>&%
n r<=0 n k=2*r*3.14 t=r*r*3.14
<('G-(%&+$-$ O&@'D7E <('G-(%&+$-$ <('G-('*-6"*1* <('G-('*-6"*1* <('G-(1*-6"*1* <('G-(1*-6"*1*
k=2*r*3.14 t=r*r*3.14
KI: k, t KI: k, t
Stop
<:?@?%=1E - ' '1 1
Q$"E% P=>&% Q$"E% Q$"E% Q$"E% Q$"E% Q$"E%
Példák
Stop
@"#$%&'(')*#A'1)<42-&20#120,-./)-0' @"#$%&'(')*#A'1)<42-&20#120,-./)-0'
Start
Start
H*?"#$%$@5E(*+B(>?:71=#(*+0%:(%:,32(,I(J:,3=1%&'('7($:(,H(.8$'1?-7,"7%/(0-10'*12( H*?"#$%$@5E(*+B(>?:71=#(*+0%:(%:,32(,I(J:,3=1%&'('7($:(,H(.8$'1?-7,"7%/(0-10'*12( $:$:($:(*+0%:(%:,3?'(%:?-:$1,1()K19"(,K7+; $:$:($:(*+0%:(%:,3?'(%:?-:$1,1()K19"(,K7+;
elem=1 elem=1 i=1 i=1
I99-,"1:"-=-%9-,"%-&;,%=/,&"-8","-88-,G$:J%%-,"%J$%#,G"9-48.1=?=?%A8B"C"<#8"1:" I99-,"1:"-=-%9-,"%-&;,%=/,&"-8","-88-,G$:J%%-,"%J$%#,G"9-48.1=?=?%A8B"C"<#8"1:" -8J8%-=:%-8G"<;&8F="9-.-:-%#=-B"K;.-8"1:"-$-@6#,7",1574,",157$1",GD-%("-=-%8-5" -8J8%-=:%-8G"<;&8F="9-.-:-%#=-B"K;.-8"1:"-$-@6#,7",1574,",157$1",GD-%("-=-%8-5" %-
3F=?%".18A=,1&".?81=:%1,;B %-3F=?%".18A=,1&".?81=:%1,;B
BE:nn BE:
i<=n
i<=n i
i
elem=elem*i i=i+1 elem=elem*i i=i+1
n
n
O&@'D7E O&@'D7E <(8$'1?-7,"7%($"$>%:,3$2($(%?-?:$1(&1?"%E( <(8$'1?-7,"7%($"$>%:,3$2($(%?-?:$1(&1?"%E( *"*30@*'(7@5*R* *"*30@*'(7@5*R* <(%?-?:$1(*"*3*72($(%?-?:$1(&1?"%E(*"*3* <(%?-?:$1(*"*3*72($(%?-?:$1(&1?"%E(*"*3* <('7%:,3=1$@5E(%?-?:$1*"*3(7@5*R*
<('7%:,3=1$@5E(%?-?:$1*"*3(7@5*R*
<:?@?%=1E P=>&% P=>&% <:?@?%=1E @ S+0%:
@
*"*3 *"*3 7
7
S+0%:
S+0%: S+0%: S+0%:
S+0%:
KI: elem
KI: elem Stop
Stop
L(M(N
L(M(N
23
Házi feladat
• Oldjuk meg az el"z" feladatot az i segédváltozó használata nélkül (n értékét nem kell meg"rizni)!
Start
elem=1
BE: n
i=2, n
24
elem=elem*i
KI: elem
Stop
!"#$%&'(')*#+&',-).'#/)#'0#%&101#$%&'(')#2%34&(/./)#5367#8436# '0#9:;%,2<96%.#=>,&?.)#)'@)'&2'0049A !"#$%&'&('&)*'+*",-,&".+&",/*0.*'*1-2"3$014".*563,%.73*"3262',"15689':*!62",*6* 0;&03"*"#4".02",*1/<*'*1-2"3$014".*563,%.*(';$'=63<*7>56718,6.*>';'$0&";0&* ",('#4&%3: ?@57A03 !"#&7(,+0*%04"&%&.4/*-&C"&"4,+,/&("@(,%43" $%$-:5$7"05'$D$ !"4,+,/&("$%$-$0C"&"4,+,/&("@(,%43"$%$-$ !"704/*-1(&5'3"4,+,/&($%$-"05'$D$C" A07%@42*%(,/3
!/,5,41(3
B1.@4
5
EF:4/
$%$-
EF:4/
0
EF:4/
Példák B"#$%&'(')*#+(C49#2%3#8/@42#D40>)-;#;'&E.#.0/24)#9:;%,;1# .4@@%9(F%9A
BE: a
i
a<=0 n BE: b
i
b
i
c
!"#$%&'&(")*+,-".,/0(12"2&%34"4/*-"-,5,(,5"562$728"4,++$5'9$5"(6+(:58" 9$,%2&4*4&; ?&&*6.*',3',$'+16*3",,*'+*",/+/*@",'='&A'1*$"#6.$";&*(8&%,&".+&",/*563,%.&*'+*61>%&* ",,"1/;+0.0;":*B*(8;7$*.+8$*"#4*(8;7$.+-#*(8;7$*7,=',81'3*(7..+8&*@7#9'* &8;7,16C*30./AA*'*@",'='&7&*&728AA*@7#9%3*@"9,".+&"16:*D"#4E3*0.+;"<*(7#4*'* @7,4'$'&8A;'*6.$0&,/=/*;0.+"3"&*&';&',$'+F ?@57A03 !")*+,-4/6F"'",%'&%& !")*+,-4/6F"A",%'&%& !")*+,-4/6F"5",%'&%&
!/,5,41(3 & 9 A
B1.@4 G&%34 G&%34 G&%34
25
Példák i=0,2
!"#$%&'(')*#+,)'--'#,.#'/#%&0/0#$%&'(')# 1%23&(4-45'6#)'&4&7')8#.-19)&0(0# :;32;'1;9-/&%)%,%)<
BE: o[i]
i=0,2
!"#$%&'()*+"#$%&'"&,-.,$/.0"#&(()$1"1$%&,230"4+5()4%6" 7$,1&)80"#4,5411"1*'994/:";//40".)",4()".)"4,%1>040%4".)"?/-4@4?004,"A&+3/0"13-/?"#?7.10&)/?B"C+5"."#$%&'" .-.1"94&,7.($($1"4+5"/*740'>/54("D?0,3((.,"?("'4+&,-#.1230=" 0?0E()*9*,74"4))4,".)"4,<)<"'4+&,-$(9./",>7<"%4-3/-./D?$1B"!" F"/54,794/"."1*'9*0"?/-4@4,>(4"'?/-?+"GH7.,"04)-<-?0:
BE: o[i]
ok=1
n
i!=0 n i==0
i
i
i
o[i]
i
o[i]<=0
n
o[i]
n
AB7-C8D G8-3B(=$3.&)D0"1" .*'2"876,H,
in
o[0]<=0
n
ok=0
i
ok=0
!"#$%&'()*+" &36131871-"#&(()$." .$%&3D".*'2
i
E
8
I+5()
&JK
L13D(" ,3,',-2/3" $33D" #$%&',3,' M".*'2
Feltétel fennállása,
ok==0
o[0]+o[1]>o[2]
!)&7&(<.D
ok Egész ="#$%&'(')*#>&&':?)-'#1%2@#732A#'#74;31-/B2#'# segédváltozó 1%2'(3))#3&('&73--/',,' 1%2-/%;,%-/)7%)0C%< n
KI: "nem szerkeszthet "
i
!"#$%&'()*+"',+(),%-,().#,./0"#1"2$%',34"-5."&3613" #&(()$71-"*((),+,"71+4&220"'87."1"#1%'168-"&3613"#&(()19 I?74,".)".-.1&0"/*7407<"(&%%4/-94/"1.,$,#.18.0"'4+"." 1*'9*/"94,E,="4)>%1"'&(1"4,4+4/-<"D(.0".)"4,(<"0>1"4,4'" *(()4+>1"*(()4#.(&/,J1./?"."#.%'.-?0"4,4''4,B
KI: "szerkeszthet "
AB7-C8D !"#$%&'()*+" &36131871-" #&(()$.".$%&3D" .*'2
26
!)&7&(<.D &JK
Házi feladat
E
D"#$%&'(')*#>&&':?)-'#1%2@#732A#'#74;31-/B2# (%;9,-/B2EC%< !":8.#1+&%1();.5.,3"(,+<.(5+5=,3",36*7.#,./"1"-5%65(9
o[0]*o[0]+ o[1]*o[1]== o[2]*o[2]
n
;994/".)"4(4194/"?("(&0.1"(4+J1".)".-.1&0"/*7407<"(&%%4/-24=" !"#$%&'(')*#+,-./)0'#12#'#3-45.0,67#1%48&%)9)#90#)%48&%)9): KI: "nem der ksz g "
#?()4/"13-230="#&+5"."1*'9"4,(<"0>1"4,4'4".,0&1#.12."D(.0"."
i
k=0
i=0,2
k=k+o[i]
s=k/2 t=sqrt(s*(s-a)*(s-b)*(s-c))
KI: k, t
94A&+80.1B !"#$%&'$("#)*+,-.(,*/"(%)0),')*1"/"($%&'$("2$3)4"56%789#62'$("/'#/'-/+,*,0/'1"/" KI: "der ksz g " :6'#$%&'$(";!<":$'=/*+8,',*,0/'"*+)8(68"#>88?$8"-$4#/2=/(@A AB7-C8D !)&7&(<.D E
DE8#F)@ !"=,%7-*+>4" 7'3/'/)8/#" =7**+,("(,%7'@" (>-H N)#'E*0,'(7+@1" /+"7IJ"(>-H" )83$O$ !"=*+A"#$%&'$($ !"=*+A"($%&'$($ !"=*+A" :6'#$%&'$($1" *$4630,'(7+@
!+787*.(@ 7IJ
G.2E* !"#$%&'()*+" K/'@*" &36131871-" #&(()$.".$%&3D" $'$-$#HL'",''@" .*'2 =,%7-$'$-M" (>-H
)
P46*+
# (
K/'@* K/'@*
*
K/'@*
&JK
L13D(" ,3,',-2/3"$33D" #$%&',3,'M" .*'2
>"?"@
Héron képlet: