ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
-
Upload
aris-chaoswebdesigns -
Category
Documents
-
view
43 -
download
6
description
Transcript of ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ
-
EJNIKO KAI KAPODISTRIAKO
PANEPISTHMIO AJHNWN
TMHMA PLHROFORIKHS
KAI THLEPIKOINWNIWN
SHMEIWSEIS
EISAGWGHS STON PROGRAMMATISMO
PANAGIWTHS STAMATOPOULOS
AJHNA 2010
-
1EISAGWGH STON PROGRAMMATISMO
Kwdikc: K04
Kathgora: Kormc Plhroforikc kai Thlepikoinwnin
Exmhno: A'
Didskwn: Panagithc Stamatpouloc ([email protected], Grafeo A48)
Metaptuqiako Sunergtec:
Stfanoc Stamthc ([email protected])
Nkoc Pojhtc ([email protected])
Aristotlhc Glentc ([email protected])
Dhmtrhc Paprac ([email protected])
Qrsa Tzoma ([email protected])
Girgoc Kastrnhc ([email protected])
Dhmtrhc Rabiloc ([email protected])
Jodwrc Gewrgou ([email protected])
Mnoc Karbonhc ([email protected])
Orsthc Poluqronou ([email protected])
Qerlnt Klpic ([email protected])
Jnoc Doukoudkhc ([email protected])
Nkoc Prntezhc ([email protected])
Apstoloc Matsgkac ([email protected])
Girgoc Garmpc ([email protected])
Mnoc Koubarkhc ([email protected])
Mara Swthropolou ([email protected])
Kwnstantna Mperta ([email protected])
Mara Poutaqdou ([email protected])
Dmhtra Tsirkou ([email protected])
Stfanoc Tsklac ([email protected])
Istoselda majmatoc:
http://www.di.uoa.gr/~ip
Froum/Lsta epikoinwnac:
http://lists.di.uoa.gr
-
2Perieqmeno tou majmatoc
Genik per upologistn kai programmatismo upologistn{ Istorik anadrom
{ H dom tou upologist
{ H plhrofora ston upologist
Logismik kai glssec programmatismo{ Apaitseic ap ma diadikastik glssa
programmatismo
{ Ektelsima progrmmata
{ Metaglttish kai sndesh
H glssa programmatismo C{ Programmatistik peribllonta gia thn C
{ O metaglwttistc gcc
{ Paradegmata apln programmtwn sthn C
{ Qarakthristik kai dunatthtec thc C
Metablhtc, stajerc, tpoi kai dhlseic Entolc antikatstashc, telestc kai parastseic H ro tou elgqou Dom progrmmatoc, sunartseic kai exwterikcmetablhtc
Embleia kai qrnoc zwc metablhtn
-
3 Anadrom Dieujnseic jsewn mnmhc, dektec kai pnakec Dunamik dsmeush mnmhc Sumboloseirc Pnakec deiktn, dektec se dektec kai poludistatoipnakec
Dektec se sunartseic Orsmata grammc entoln Aparijmseic, domc, auto-anaforikc domc (lstec,duadik dntra), enseic, peda bit kai dhmiourga
nwn onomtwn tpwn
Esodoc kai xodoc Qeirismc arqewn Proepexergastc thc C kai makroentolc
{ Algrijmoi taxinmhshc pinkwn kai anazthshc se
pnakec
{ Odhgec swsto programmatismo
{ Suqn programmatistik ljh sthn C
Ergasthriakc askseic kai askseic gia kat' okon ergasa
-
4Eisagwgik jmata
Genik per upologistn Genik per programmatismo upologistn Istorik anadrom Kpoia upologistik problmata Pc na mjoume na programmatzoume; H dom tou upologist H plhrofora ston upologist Logismik kai glssec programmatismo
-
5Genik per upologistn
Upologistc enai na teqnht kataskeasma pou qei thnikanthta na epexergzetai na snolo ap dedomna pou
tou dnontai kai na pargei ta apaitomena apotelsmata.
To edoc thc epexergasac pou prpei na gnei epnw stadedomna prosdiorzetai ap na prgramma me to opoo
qoume trofodotsei ton upologist kai to opoo
apoteletai ap stoiqeideic ektelsimec entolc pou enai
se jsh na frei se prac o upologistc.
Giat qreiazmaste upologistc;{ Gia th grgorh ektlesh qronobrwn arijmhtikn
upologismn, gia pardeigma pso enai to , an2
6 =112 +
122 +
132 +
142 +
152 +
162 +
172 +
182 + : : :;
{ Gia thn apodotik diaqerish ogkwdn dedomnwn, gia
pardeigma trapezikn logariasmn.
{ Kai gia ta do prohgomena, tautqrona, gia
pardeigma sthn prgnwsh kairo.
H suggraf programmtwn gia upologistc anafretai meton genik ro programmatismc upologistn.
-
6Genik per programmatismo upologistn
Sth genik perptwsh, programmatismc (enc upologist)enai o safc kajorismc mac diadikasac, san na snolo
ap entolc (to prgramma), pou perigrfei leptomerc ta
bmata pou prpei na gnoun gia na epiluje na prblhma
upologismo.
Ta progrmmata gia na upologist apotelon tologismik tou (software), en h suskeu tou upologist
enai to ulik (hardware).
'Ena prgramma trofodotetai s' na upologist, autc toektele kai pargei to apotlesma thc eplushc tou
problmatoc.
H suggraf enc progrmmatoc gia thn eplush encproblmatoc propojtei thn epinhsh enc algorjmou,
dhlad mac safc kajorismnhc diadikasac msw enc
sunlou ektelsimwn bhmtwn, pou enai egguhmno ti
met ap na peperasmno pljoc bhmtwn pou ja
ektelesjon ja termatsei.
'Ena prgramma enai h diatpwsh enc algorjmou se masugkekrimnh glssa programmatismo.
-
7Istorik anadrom
'Abakac, suskeu prosjafairsewn me mpliec (1000 p.Q.) O Mhqanismc twn Antikujrwn (75 p.Q.) Muhammad ibn Musa al-Khwarizmi, prteine thn nnoiathc diadikasac gia autmatouc upologismoc (800 m.Q.)
Mhqaniko upologistc gia arijmhtikoc upologismoc(Blaise Pascal, Gottfried Leibniz, 17oc ainac)
Analutik mhqan tou Charles Babbage me prthprogrammatstria thn Ada Lovelace (19oc ainac)
Alan Turing, jemeliwtc twn ennoin twn algorjmwn kaitou upologismo, h mhqan Turing (1935)
MARK I, o prtoc hlektromhqanikc upologistc meglhcklmakac, IBM, Harvard University (1943)
John von Neumann, jemeliwtc thc trqousacarqitektonikc twn upologistn (1945)
ENIAC, o prtoc upologistc me luqnec keno,University of Pennsylvania (1946)
IBM 7090, o prtoc upologistc me tranzstor (1961) IBM 360, o prtoc upologistc me oloklhrwmnakuklmata tsip (1964)
O proswpikc upologistc, to PC (1981) Tim Berners-Lee, eisgage thn ida tou pagksmiou istosto diadktuo (1990)
-
8Kpoia upologistik problmata
Pc prokuyan ta apotelsmata twn panellhnwnexetsewn gia thn eisagwg se A.E.I. kai T.E.I.;
Pc apofaszetai an nac foithtc tou Tmmatc mac qeiekplhrsei tic upoqreseic tou gia lyh tou ptuqou tou;
Ti fro ja plhrsei h oikognei mac eftoc; Pc upologsthke to telik pos plhrwmc stoucteleutaouc logariasmoc O.T.E kai D.E.H. pou lbame;
Dedomnwn twn analutikn apotelesmtwn se kjeeklogik tmma stic ejnikc eklogc, psouc bouleutc
eklgei to kje kmma se kje nom;
Dedomnwn twn apotelesmtwn mac dhmoskphshc exdou(exit poll) se epilegmna eklogik tmmata, pc mporome
na problyoume to telik posost yfwn se lh th qra
gia kje kmma pou summetqei stic ejnikc eklogc;
Pc mporome na problyoume ton kair sthn Ajna giaario gia tic erqmenec hmrec, dedomnwn lwn twn
apaitomenwn metewrologikn stoiqewn;
Pc gnontai oi kratseic aeroporikn eisithrwn; Pc mporome na kataskeusoume to kaltero wrolgioprgramma gia ta majmata tou trqontoc examnou;
To kaltero prgramma exetsewn gia thn erqmenhexetastik perodo;
-
9Pc na mjoume na programmatzoume;
Dustuqc o programmatismc den didsketai. Den mporome na mjoume na programmatzoumediabzontac bibla gia programmatism.
Den mporome na mjoume na programmatzoume grfontacprogrmmata sto qart.
O mnoc trpoc na mjoume na programmatzoume enai nagrfoume progrmmata ston upologist, na ta ektelome,
na brskoume ta ljh pou sgoura qoume knei, na ta
diorjnoume, na ektelome pli ta progrmmata, na
xanabrskoume ljh, na ta diorjnoume pli, mqri na
katafroume na knoume ta progrmmat mac na epiloun
ta problmat mac pwc prpei.
Epikourik, h angnwsh kai katanhsh kalogrammnwn,tekmhriwmnwn kai orjn programmtwn enai pntote
qrsimh, all ap mnh thc den arke.
-
10
H dom tou upologist
Kentrik monda epexergasac, o epexergastc Mnmh, gia proswrin apojkeush dedomnwn kaiprogrammtwn
Deutereousa mnmh, gia mnimh apojkeush dedomnwnkai programmtwn (dskoi, disktec, tainec, CDs, DVDs,
klp.)
Mondec eisdou/exdou, gia epikoinwna me ton xw ksmo(plhktrolgio, ojnh, ektupwtc, klp.)
/
-
11
H plhrofora ston upologist
Duadik yhfa 0 kai 1 (bits - binary digits) Bytes, 1 byte = 8 bits Smbola, ASCII kwdiko ('A' = 65, 'B' = 66, : : :) Sustmata arjmhshc
{ duadik
{ dekadik
{ oktadik
{ dekaexadik
(01101101)2 = (109)10 = (155)8 = (6D)160 27+1 26+1 25+0 24+1 23+1 22+0 21+1 20 = 109
H mnmh enai organwmnh se suneq keli, pou to kajnaqarakthrzetai ap th diejuns tou, kai msa sta opoa o
epexergastc mpore na kataqwrsei, all kai na diabsei
ap' aut, plhroforec (duadikoc arijmoc).
Sth deutereousa mnmh, h orgnwsh sto qamhl eppedoenai perpou pwc kai sthn (kria) mnmh, all oi
kataqwrhmnec plhroforec prospelanontai ap ton
qrsth msw arqewn (les) kai katalgwn (directories), ,
kat ma orologa, faklwn (folders).
Mondec mtrhshc qwrhtikthtac mnmhc{ 1 Kilobyte (KB) = 210 (= 1024 ' 103) bytes{ 1 Megabyte (MB) = 220 (= 1048576 ' 106) bytes{ 1 Gigabyte (GB) = 230 (= 1073741824 ' 109) bytes
-
12
Logismik kai glssec programmatismo
Logismik sustmatoc{ Leitourgik ssthma (Microsoft Windows, Unix, : : :)
{ Metaglwttistc (gcc, g++, : : :)
{ Keimenogrfoi (pico, vim, : : :)
{ : : :
Logismik efarmogn Glssec programmatismo qamhlo epipdou
{ Glssa mhqanc
{ Assembly
Glssec programmatismo uyhlo epipdou{ Cobol, Fortran, Algol, Ada
{ Pascal, C
{ C++, Java, C#
{ Visual Basic
{ SQL
{ Prolog
{ Haskell, Common Lisp
{ PHP
{ Perl, Python
{ : : :
-
13
Ti qreiazmaste ap ma glssaprogrammatismo;
Mhqanismoc gia esodo (dedomnwn) kai xodo(apotelesmtwn)
Pardeigma:
Dibase Misj UpalllouUpolgise Kratseic
Upolgise Kajar Misj
Ektpwse Kajar Misj
Diatpwsh akoloujac bhmtwn proc ektleshPardeigma:
'Estw 'Ena Orjognio Trgwno ABG
me Orj Gwna sto A
Bma 1: Upolgise to Tetrgwno thc ABBma 2: Upolgise to Tetrgwno thc AGBma 3: Prsjese ta Do TetrgwnaBma 4: H Pleur BG Isotai me thn
Tetragwnik Rza tou Apotelsmatoc
Flaxh plhroforin sth mnmh kai ankths toucPardeigma:
Misjc = 1500
Axhsh = 0.04
Noc Misjc = Axhsh * Misjc + Misjc
-
14
Diaforopohsh roc tou elgqou smfwna me sunjkhPardeigma:
An Katanlwsh < 200Tte Kstoc = 20Allic Kstoc = 0.3 * Katanlwsh - 40
Dunatthta diatpwshc epanalhptikn diadikasinPardeigma:
Arijmc = 1
'Ajroisma = 0
Ensw Arijmc < 1001'Ajroisma = 'Ajroisma + Arijmc2
Arijmc = Arijmc + 1
Paketrisma suqn qrhsimopoiomenwn leitourginPardeigma:
Taxinmhse(Pnakac A)Taxinmhse(Pnakac B)Sugqneuse(Pnakac A, Pnakac B, Pnakac G)
Metafor thc roc tou elgqou allo (pol spnia)Pardeigma:
Bma 1: An Q = 30Tte Pgaine sto Bma 2Allic Pgaine sto Bma 4
Bma 2: Ektpwse \Trinta"Bma 3: Pgaine sto Bma 5Bma 4: Ektpwse \'Oqi trinta"Bma 5: : : :
-
15
Pc kataskeuzoume ektelsimo prgramma;
Sunjwc, grfoume ta progrmmat mac se kpoia glssaprogrammatismo uyhlo epipdou, gia pardeigma C.
Gia lgouc ekolhc suntrhshc enc progrmmatoc, enaipijann na to qoume diaspsei se poll phgaa arqea
(source les), pou perilambnoun kdika (code) grammno
sth glssa programmatismo pou qoume epilxei.
O metaglwttistc (compiler) enai na prgramma poumetatrpei ta phgaa arqea se antikeimenik arqea (object
les), ta opoa enai diatupwmna sth glssa mhqanc tou
epexergast tou upologist mac.
Ta antikeimenik arqea den enai mesa ektelsima ap tonepexergast, ektc tou ti to kajna ap' aut mpore na
mhn sunist na plrec prgramma.
O sundthc (linker) metatrpei na snolo apantikeimenik arqea, kajc kai tuqn bibliojkec
(libraries) pou ja tou dojon, s' na ektelsimo arqeo
(executable le), to opoo epshc enai diatupwmno se
glssa mhqanc, all enai mesa ektelsimo ap ton
epexergast.
-
16
H diadikasa thc metaglttishc kai sndeshc
#include...
{main()
printf(..}
#include...00000001
1100110100100110
10010101010010010011000111000010
11010000
11010010
11110011
11010001
1100000000000011
00000011
000000111101000000110001
func(int x){
-
17
Programmatistik peribllonta gia thn C
Metaglwttistc gcc thc C, ap to prgramma elejeroulogismiko GNU, se leitourgik ssthma Unix (gia
pardeigma, Solaris se stajmoc ergasac Sun Linux se
proswpikoc upologistc)
Peribllonta pou uposthrzoun ton metaglwttist gcc,ktw ap leitourgik ssthma Microsoft Windows
{ Dev-C++
{ Cygwin
{ MinGW
Peribllon Microsoft Visual Studio gia Windows, allden ja qrhsimopoihje sta plasia touparntoc majmatoc
-
18
Paradegmata qrshc tou gcc
gcc myprog.cMetaglttish tou phgaou progrmmatoc myprog.c se
antikeimenik arqeo kai klsh tou sundth gia thn
kataskeu tou ektelsimou progrmmatoc a.out
gcc -o myprog myprog.cMetaglttish tou phgaou progrmmatoc myprog.c se
antikeimenik arqeo kai klsh tou sundth gia thn
kataskeu tou ektelsimou progrmmatoc myprog
gcc -c myprog.cMno metaglttish tou phgaou progrmmatoc myprog.c
sto antikeimenik arqeo myprog.o
gcc -o prog myprog1.o myprog2.o -lmMno klsh tou sundth gia kataskeu tou ektelsimou
progrmmatoc prog ap ta antikeimenik arqea myprog1.o
kai myprog2.o kai th majhmatik bibliojkh (m)
'Allec endiafrousec epilogc tou gcc, ektc ap tic -o,-c kai -l:
{ Gia na klhje mno o proepexergastc, -E
{ Gia na paraqje to apotlesma se glssa assembly, -S
-
19
H glssa programmatismo C
Metablhtc, stajerc, tpoi kai dhlseic Entolc antikatstashc, telestc kai parastseic H ro tou elgqou Dom progrmmatoc, sunartseic kai exwterikc metablhtc Embleia kai qrnoc zwc metablhtn Anadrom Dieujnseic jsewn mnmhc, dektec kai pnakec Dunamik dsmeush mnmhc Sumboloseirc Pnakec deiktn, dektec se dektec kai poludistatoipnakec
Dektec se sunartseic Orsmata grammc entoln Aparijmseic, domc, auto-anaforikc domc (lstec,duadik dntra), enseic, peda bit kai dhmiourga nwn
onomtwn tpwn
Esodoc kai xodoc Qeirismc arqewn Proepexergastc thc C kai makroentolc
-
20
Kalhmra ksme thc C
/* File: helloworld.c */
#include
main()
{ printf("Hello world\n");
}
% gcc -o helloworld helloworld.c% ./helloworldHello world%
'O,ti perikleetai msa se /* kai */ jewretai sqlio kaiden lambnetai upyh ap ton metaglwttist.
H gramm #include enai odhga proc tonproepexergast thc C na sumperilbei s' ekeno to shmeo
ta perieqmena tou arqeou epikefaldac (header le)
stdio.h, to opoo periqei qrsimec dhlseic gia tic
sunartseic eisdou/exdou.
Kje prgramma C prpei na periqei akribc masunrthsh me noma main, pou enai aut ap thn opoa ja
arqsei na ekteletai to ektelsimo prgramma pou ja
prokyei ap th metaglttish.
H printf enai ma sunrthsh exdou, pou tan klhje,ektupnei ,ti thc qei doje msa stic parenjseic, sthn
prokemenh perptwsh to alfarijmhtik sumboloseir
(string) "Hello world" (qwrc ta "), akoloujomeno ap
ma allag grammc (\n).
-
21
Pso enai to ;
/* File: picomp.c */
#include /* Header file for standard I/O library */
#include /* Header file for math library */
main()
{ long i;
double sum, current, pi;
i = 1; /* Denominator of current term */
sum = 0.0; /* So far sum */
do {
current = 1/(((double) i)*((double) i)); /* Current term */
sum = sum+current; /* Add current term to sum */
i++; /* Next term now */
} while (current > 1.0e-15); /* Stop if current term is very small */
pi = sqrt(6*sum); /* Compute approximation of pi */
printf("Summed %8ld terms, pi is %10.8f\n", i-1, pi);
}
% gcc -o picomp picomp.c -lm% ./picompSummed 31622777 terms, pi is 3.14159262%
To prgramma upologzei to me bsh th seir:2
6=
1
12+
1
22+
1
32+
1
42+
1
52+
1
62+
1
72+
1
82+ : : :
To #include qreizetai epeid qrhsimopoietaisto prgramma h majhmatik sunrthsh sqrt, gia thn
eresh tetragwnikc rzac. Prosoq: Sthn entol
metaglttishc kai sndeshc (gcc) qreizetai kai to -lm,
gia na sumperilhfje sto ektelsimo prgramma kai h
majhmatik bibliojkh thc C.
-
22
To i sumbolzei ma akraia metablht sthn opoa jafulssetai, dhlad sthn perioq thc mnmhc pou thc
antistoiqe o metaglwttistc, h tim tou trqontoc
paronomast kat ton upologism tou ajrosmatoc.
Dhlnetai me mgejoc long, ste na mporon na
fulaqjon s' autn akraioi megjouc toulqiston 4 bytes,
toi toulqiston mqri to 231 1 = 2147483647. An eqedhlwje aplc san int, mpore na periorizmastan se 2
bytes gia th flaxh, dhlad wc to 215 1 = 32767. Ta sum, current kai pi enai metablhtc gia th flaxhpragmatikn arijmn, tou mqri stigmc upologismnou
ajrosmatoc, tou trqontoc rou thc seirc kai thc telikc
proseggistikc timc tou , antstoiqa. Dhljhkan san
double gia na qoume eswterik anaparstash twn
arijmn autn me megalterh akrbeia (dipl) se dekadik
yhfa, ap' autn pou ja eqame an eqan dhlwje san float.
Me tic entolc antikatstashc i = 1 kai sum = 0.0,dnoume arqikc timc ston trqonta paronomast kai sto
mqri stigmc jroisma.
H omda entoln msa sto mplok do f::::::::::g while jaekteletai suneqc, so o trqwn roc tou ajrosmatoc
enai megalteroc ap kpoia elqisth tim, thn 1015 (=1.0e-15).
-
23
Se kje epanlhyh tou mplok do f::::::::::g while,upologzoume arqik ton trqonta ro tou ajrosmatoc (to
prjema (double) sto i uprqei gia na metatrape h tim
tou akeraou i se pragmatik tim diplc akrbeiac, prin
summetsqei sthn arijmhtik prxh). Met prostjetai o
trqwn roc tou ajrosmatoc sto mqri stigmc jroisma,
me to sum = sum+current (sunjwc to grfoume kai san
sum += current), kai tloc auxnoume ton trqonta
paronomast kat 1, me to i++ (isodnamo me to i = i+1).
'Otan teleisei to mplok do f::::::::::g while, sthmetablht sum uprqei to jroisma lwn twn rwn thc
seirc pou enai megalteroi ap 1015. Aut enai perpouso me to
2
6 . Opte, met upologzoume proseggistik to
me thn entol pi = sqrt(6*sum) (dhladp6 sum).
Me thn klsh thc sunrthshc printf ektupnetai toapotlesma. Sugkekrimna, ektupnetai ,ti uprqei msa
sta ", all sth jsh tou %8ld ektupnetai h tim tou i-1,
san dekadikc (d) akraioc megjouc long (l) se 8
toulqiston jseic, stoiqismnoc dexi. Epshc, sth jsh
tou %10.8f ektupnetai h upologismnh tim tou , san
pragmatikc arijmc (f) se 10 toulqiston jseic, me dexi
stoqish, ap tic opoec oi 8 gia to klasmatik mroc.
-
24
Gryte progrmmata C pou na upologzoun me arket akrbeia
ta paraktw ajrosmata. Mporete na brete me poiouc
endiafrontec arijmoc isontai;
S1 =1
12 122
+1
32 142
+1
52 162
+1
72 182
+ : : :
S2 =1
1 12+1
3 14+1
5 16+1
7 18+1
9 : : :
S3 =1
1 13+1
5 17+1
9 111
+1
13 115
+1
17 : : :
S4 =1
1 3 +1
3 5 +1
5 7 +1
7 9 +1
9 11 + : : :
S5 =1
2 3 4 1
4 5 6 +1
6 7 8 1
8 9 10 + : : :
S6 =1
14+
1
24+
1
34+
1
44+
1
54+
1
64+
1
74+
1
84+ : : :
To dio kai gia to ginmeno:
P =2
1 23 43 45 65 67 87 89: : :
-
25
Pte enai to Orjdoxo Psqa;
/* File: easter.c */
#include
#define STARTYEAR 2000
#define ENDYEAR 2015
main()
{ int year, a, b, c, d, e;
for (year = STARTYEAR ; year 30) /* Easter in May */
printf(" May %d\n", d+e-26);
else /* Easter in April */
printf("April %d\n", d+e+4);
}
}
% gcc -o easter easter.c% ./easterEaster in the year 2000: April 30Easter in the year 2001: April 15Easter in the year 2002: May 5Easter in the year 2003: April 27Easter in the year 2004: April 11Easter in the year 2005: May 1Easter in the year 2006: April 23Easter in the year 2007: April 8Easter in the year 2008: April 27Easter in the year 2009: April 19Easter in the year 2010: April 4Easter in the year 2011: April 24Easter in the year 2012: April 15Easter in the year 2013: May 5Easter in the year 2014: April 20Easter in the year 2015: April 12%
-
26
To prgramma efarmzei th mjodo tou Gauss gia tonupologism thc hmeromhnac tou Psqa to toc year.
Smfwna me autn, to Psqa enai stic (d+ e+4) Aprilou
(an h hmeromhna aut enai megalterh ap 30, tte pftei
msa ston Mio), pou d = (19 a+ 15) mod 30,e = (2 b+ 4 c+ 6 d+ 6) mod 7, a = year mod 19,b = year mod 4 kai c = year mod 7.
Me tic dhlseic #define ......... zhtme ap tonproepexergast thc C na antikatastsei msa sto arqeo,
pou brei to smbolo pou akolouje to #define me to
smbolo pou enai amswc met. Sthn prokemenh
perptwsh, zhtme na antikatastaje to STARTYEAR me 2000
kai to ENDYEAR me 2015.
To mplok for ( E1 ; E2 ; E3 ) f::::::::::g perigrfei nanbrqo pou ja prpei na ektelesje epanalambanmena. Prin
arqsei h ektles tou, ja ektelesje h entol E1. Ef'
son h sunjkh E2 enai alhjin, ja gnei h trqousa
epanlhyh sto brqo. Me to tloc kje epanlhyhc,
ekteletai kai h entol E3.
Stic entolc antikatstashc, o telestc % paristnei touploipo diareshc (mod).
H dom if ( C ) E1 else E2 shmanei ti jloume naektelesje h entol ( mplok entoln) E1, an h sunjkh C
enai alhjc, h entol ( mplok entoln) E2, an h
sunjkh C enai yeudc.
-
27
Na kataskeuasje magik tetrgwno 5 5/* File: magic.c */
#include
#define SIZE 5
main()
{ int i, j, k;
int x[SIZE][SIZE]; /* The board to be filled */
for (i=0 ; i < SIZE ; i++)
for (j=0 ; j < SIZE ; j++)
x[i][j] = 0; /* Mark all squares as empty */
i = (SIZE-1)/2; /* Go to middle */
j = SIZE-1; /* right square */
for (k=1 ; k
-
28
To prgramma efarmzei th mjodo tou De la Loubere giana kataskeusei na magik tetrgwno 5 5 (h mjodocefarmzetai gia peritt mkoc pleurc), dhlad na plasio
me 25 jseic se ditaxh tetragnou msa stic opoec enai
topojethmnoi oi arijmo ap to 1 wc to 25, ma for o
kajnac, tsi ste se kje gramm, kje stlh kai kje
ma ap tic do diagwnouc na qoume to dio jroisma
(aljeia, pso;). Gia thn perigraf thc mejdou se ma
yeudoglssa, dete ton algrijmo 118, sth deterh selda
tou http://www.di.uoa.gr/~ip/magic-sq.pdf. O
algrijmoc 117, sthn prth selda tou keimnou auto,
mpore na efarmosje gia thn kataskeu magikn
tetragnwn rtiac pleurc.
Me th dlwsh int x[SIZE][SIZE] zhtme na desmeujeqroc gia na didistato pnaka akerawn x me SIZE (= 5)
grammc kai SIZE stlec. Prosoq: Oi grammc kai oi
stlec arijmontai ap to 0 wc to SIZE-1 (= 4). Me thn
kfrash x[3][1], mporome na anaferjome sto stoiqeo
pou brsketai sthn 4h gramm kai 2h stlh. Fusik, sthn
C mporome na orsoume kai monodistatouc pnakec, all
kai pnakec me distash megalterh ap 2.
Parathrste th qrsh twn entoln if. Den uprqei tmmaelse. An isqei h sunjkh, ekteletai h entol ( mplok
entoln) pou akolouje. Allic, o legqoc phganei sthn
epmenh entol. O telestc != sth sunjkh thc prthc
entolc if shmanei \diforo" (legqoc an to trqon
tetragwndio enai gemto).
-
29
Metatrop pezn grammtwn se kefalaa
/* File: capitalize.c */
#include
main()
{ int ch; /* Be careful! Declare ch as int because of getchar() and EOF */
ch = getchar(); /* Read first character */
while (ch != EOF) { /* Go on if we didn't reach end of file */
if (ch >= 'a' && ch
-
30
H omda entoln msa sto mplok while f::::::::::g jaekteletai suneqc, so uprqoun kai lloi qaraktrec gia
na diabsoume ap thn esodo.
H sunjkh msa sto if enai ma logik szeuxh (telestc&&). Ta 'a' kai 'A' enai stajerc qaraktra kai isontai
me thn arijmhtik tim twn kwdikn twn antstoiqwn
qaraktrwn ston ASCII pnaka, dhlad 'a'=97 kai
'A'=65.
To sugkekrimno prgramma baszetai sthn upjesh tiston ASCII pnaka oi kefalaoi latiniko qaraktrec enai
se suneqmenec jseic kai ti to dio isqei kai gia touc
pezoc. Aut ntwc isqei, gi' aut kai to prgramma
douleei swst. Gia thn metatrop enc pezo qaraktra
se kefalao, den qreizetai na gnwrzoume tic akribec timc
twn ASCII kwdikn, arke na metatopsoume ton pez
qaraktra kat 'a'-'A' jseic.
H sunrthsh putchar parqetai epshc ap thn prtuphbibliojkh eisdou/exdou thc C (enai h \adelf"
sunrthsh thc getchar) kai h leitourga thc enai na
ektupsei sthn xodo ton qaraktra tou opoou ton ASCII
kwdik dnoume msa stic parenjseic.
-
31
Metablhtc, stajerc, tpoi kai dhlseic sthn C
Metablhtc{ Sumbolik onmata gia jseic mnmhc
{ Apojkeush kai ankthsh dedomnwn
{ Ankoun se tpouc
Stajerc{ Sugkekrimnec timc
{ Ankoun se tpouc
Tpoi dedomnwn{ Gia akeraouc
short int short (sunjwc 2 bytes) int (sunjwc 4, spanitera 2 8, bytes, anloga meto mgejoc lxhc tou epexergast)
long int long (sunjwc 4, merikc forc 8, bytes) long long int long long (sunjwc 8 bytes)
{ Gia qaraktrec, all kai akeraouc
char (1 byte){ Gia pragmatikoc arijmoc (kinhtc upodiastolc)
float (aplc akrbeiac, sunjwc 4 bytes) double (diplc akrbeiac, sunjwc 8 bytes) long double (ektetamnhc akrbeiac, sunjwc 16bytes)
-
32
Paradegmata stajern{ Akraiec stajerc (jewrontai tpou int):
237, -12345, 22431L (to L sumbolzei ti epijumome na
jewrhje h stajer tpou long), 0224 (o oktadikc
arijmc 224), 0x1C (o dekaexadikc arijmc 1C)
{ Stajerc qaraktra:
'A' (o ASCII kwdikc tou qaraktra A, dhlad 65)
'\n' (o ASCII kwdikc gia thn allag grammc)
'\t' (o ASCII kwdikc gia ton sthlognmona, tab)
'0' (o ASCII kwdikc tou qaraktra 0, dhlad 48)
'\0' (o qaraktrac me ASCII kwdik 0)
'\145' (o qaraktrac me ASCII kwdik ton oktadik
arijm 145)
'\xA2' (o qaraktrac me ASCII kwdik ton
dekaexadik arijm A2)
{ Stajerc kinhtc upodiastolc (jewrontai tpou
double):
23.78, -1.24e-14 (dhlad 1:24 1014) Ma eidik kathgora stajern enai ta alfarijmhtik sumboloseirc (strings). Ma sumboloseir enai ma
akolouja ap qaraktrec msa se ", gia pardeigma
"Hello world\n". Prkeitai, ousiastik, gia nan pnaka
qaraktrwn, qwrc ta ", me teleutao stoiqeo tou pnaka
to '\0' (parlo pou den shmeinetai sth diatpwsh thc
sumboloseirc msa sta ").
-
33
Me ma dlwsh enhmernetai o metaglwttistc gia thnprjes mac na qrhsimopoisoume sto prgramm mac
kpoia kpoiec metablhtc sugkekrimnou tpou, tic
opoec mporome na arqikopoisoume kai me stajerc tou
tpou auto, an jloume, kai antistoiqe s' autc
katllhlec jseic mnmhc. Paradegmata:
int i, j, k;
char ch;
float x, y = 2.34;
long count, cost;
double pi = 3.14159;
Ta onmata twn metablhtn mporon na perilambnoun,mqri 31 sunolik, pezoc kai kefalaouc qaraktrec,
arijmoc kai ton qaraktra _.
Den epitrpetai h qrsh desmeumnwn lxewn thc C (p.q.if, float, for, klp.) gia onmata metablhtn.
Den enai kal na orzoume metablhtc sta progrmmatmac pou arqzoun ap _, giat ttoia onmata
qrhsimopoiontai gia tic metablhtc ap tic bibliojkec kai
endqetai na dhmiourghje prblhma.
Parti enai epitrept, den enai kal onmata metablhtnna apotelontai mno ap kefalaouc qaraktrec, giat
sunjwc dnoume ttoia onmata stic sumbolikc stajerc
pou orzoume me #define, gia na tic diaqeiriste o
proepexergastc.
-
34
Sth dlwsh mac akraiac metablhtc mac metablhtcqaraktra, mpore na prohghje o prosdioristc unsigned,
pou dhlnei ti oi arijmo pou fulssontai sth metablht
prpei na ermhneujon san jetiko ( mhdn).
An uprqei sth dlwsh o prosdioristc signed, denuprqei kannac, to perieqmeno thc metablhtc jewretai
akraioc me prshmo (jetik arnhtik).
Paradegmata:signed char ch;
unsigned char uch;
short i;
unsigned long int k;
{ Sth metablht ch fulssontai arijmo ap 128(= 27) wc 127 (= 27 1), en sthn uch ap 0 wc255 (= 28 1)
{ Sth metablht i fulssontai arijmo ap 32768(= 215) wc 32767 (= 215 1), en sthn k ap 0 wc4294967295 (= 232 1)
Se dlwsh metablhtc, me tautqronh arqikopohsh, mporena efarmosje o prosdioristc const, pou exasfalzei ti
h tim thc metablhtc den ja allxei. Pardeigma:
const double e = 2.71828;
Gia metablhtc, stajerc, tpouc kai dhlseic,analutiktera stic paragrfouc x2:1 wc x2:4 tou [KR]. aa
Gia th sunqeia, o sumbolismc [KR] ja anafretai sto biblo:
Brian W. Kernighan, Dennis M. Ritchie, \H Glssa Programmatismo C".
-
35
Entolc antikatstashc, telestc kaiparastseic
Oi entolc s' na prgramma C, pwc kai oi dhlseic,teleinoun me na ellhnik erwthmatik (;).
'Ena basik edoc entolc enai h entol antikatstashc (kat thn pio sunjh orologa, entol anjeshc). Enai thc
morfc: hmetablhti = hparstashi Ma entol antikatstashc qei san apotlesma tonupologism thc timc thc parstashc sto dex mloc tou =
kai thn anjesh thc timc autc sth metablht sto
arister mloc tou =.
Pol suqnc enai oi arijmhtikc parastseic pouperigrfoun prxeic metax akraiwn pragmatikn
metablhtn kai stajern, msw twn arijmhtikn telestn,
dhlad +, -, *, / kai % (uploipo diareshc).
Prosoq! Diaresh metax akerawn dnei san apotlesmato phlko thc diareshc.
-
36
Parastseic pou emplkoun metablhtc kai stajercdiaforetikn tpwn dnoun san apotlesma tim tou
\eurterou" tpou. Gia pardeigma, kpoia arijmhtik
prxh metax int kai double dnei apotlesma double.
Anjesh mac timc enc tpou se metablht llou tpouqei san apotlesma th metatrop thc timc ston tpo thc
metablhtc, ete qwrc apleia plhroforac, ete me
apleia plhroforac, anloga me to an o tpoc thc
metablhtc qei th dunatthta na anaparastsei plrwc
thn anatijmenh tim.
Rht metatrop tpou mpore na gnei msw prosarmogc(cast), gia pardeigma, an h metablht i enai akraiou
tpou, h kfrash (double) i anafretai sthn tim thc i
san pragmatik arijm diplc akrbeiac.
-
37
Do pol qrsimoi telestc enai oi telestc monadiaacaxhshc (++) kai mewshc (--). 'Otan efarmzontai epnw
se ma metablht, ete sta arister ete sta dexi thc,
qoun san apotlesma thn axhsh, mewsh antstoiqa, thc
timc thc metablhtc kat 1. Gia pardeigma, h akolouja
entoln
x = 2;
y = 9;
x++;
--y;
++x;
x--;
y--;
++y;
ja qei san telik apotlesma oi metablhtc x kai y na
qoun telik san timc tic 3 kai 8, antstoiqa. Sto
pardeigma aut, den eqe kpoia shmasa h topojthsh twn
telestn arister dexi thc metablhtc.
Ektc ap autnomh entol, h efarmog twn telestnmonadiaac axhshc se ma metablht, mpore na paxei kai
to rlo parstashc ( tmmatoc parstashc). Sthn
perptwsh aut, qei shmasa an o monadiaoc telestc enai
projematikc (arister thc metablhtc) metajematikc
(dexi thc metablhtc).
-
38
'Enac projematikc telestc monadiaac axhshc mewshcse ma parstash uponoe ti prta prpei na gnei h
tropopohsh thc timc thc metablhtc (axhsh mewsh,
anloga) kai met na qrhsimopoihje h tropopoihmnh tim
gia ton upologism thc timc thc parstashc.
'Enac metajematikc telestc monadiaac axhshc mewshc se ma parstash uponoe ti prta prpei na
qrhsimopoihje h trqousa tim thc metablhtc gia ton
upologism thc timc thc parstashc kai met na gnei h
tropopohsh thc timc thc metablhtc (axhsh mewsh,
anloga).
Pardeigma:x = 4;
y = 7;
z = ++y;
y = z - (x++);
z = x - (--y);
Ti tim ja qoun oi metablhtc x, y kai z met ap autc
tic entolc; a
a5, 3 kai 2, antstoiqa
-
39
Pol suqn, sthn C, jloume na elgxoume kpoiasunjkh kai anloga me to apotlesma tou elgqou
(alhjc yeudc) na probome se kpoia enrgeia.
Oi sunjkec sunjwc enai sugkrseic timn arijmhtiknparastsewn, msw twn susqetistikn telestn (
telestn sgkrishc), pou enai oi >, =,
-
40
Merikc forc, enai pol qrsimo na knoume prxeic seeppedo bit metax akerawn timn (metablhtn kai
stajern). Aut epitugqnetai msw twn telestn
prxewn me bit, pou enai oi:
{ &: KAI
{ |: 'H
{ ^: apokleistik 'H
{ : olsjhsh dexi
{ ~: sumplrwma wc proc na
Pardeigma:unsigned char x;
x = 178;
x = x & 074;
x = x | 0xD6;
x = x ^ 104;
x = x >> 3;
x = x
-
41
Kje dimelc telestc (+, -, *, /, %, &, |, ^, ) mporena qrhsimopoihje kai me na sntomo trpo se ma entol
antikatstashc, wc exc:
hmetablhti htelestci= hparstashiAut h entol enai isodnamh me thn:
hmetablhti = hmetablhti htelestci hparstashiGia pardeigma, h entol
sum += x;
enai isodnamh me thn
sum = sum + x;
Merikc forc, enai qrsimec kai oi parastseic upsunjkh, san thn
hsunjkhi ? hparstashi1 : hparstashi2H tim autc thc parstashc enai aut pou qei h
hparstashi1, an h hsunjkhi enai alhjc (dhlad, an qeitim diforh tou 0, jewrntac thn wc parstash kai aut),
aut pou qei h hparstashi2, an h hsunjkhi enaiyeudc (dhlad sh me 0). Pardeigma:
z = (a > b) ? a : b;
Me thn entol aut, h tim thc z ja gnei sh me th
megalterh tim ap tic a kai b.
-
42
H qrsh diafrwn telestn msa se ma parstash mporena prokalsei sgqush ston anagnsth enc progrmmatoc
gia to pc akribc ja prpei na upologisje h tim thc
parstashc, dhlad gia th seir me thn opoa ja prpei na
efarmosjon oi telestc, qi mwc kai ston metaglwttist.
Uprqoun sugkekrimnec proteraithtec metax twntelestn, llec perisstero kai llec ligtero
anamenmenec, opte h seir efarmogc twn telestn enai
safc.
Se perptwsh pou jloume na epibloume sugkekrimnotrpo efarmogc twn telestn, prpei na qrhsimopoiome
parenjseic, akma kai an emaste bbaioi ti se kpoiec
periptseic den enai aparathtec lgw twn proteraiottwn
twn telestn.
Fusik, prpei na apofegontai uperbolc. Sthn entolx = y + z*w;
den qreizontai parenjseic an jloume h parstash sto
dexi mloc na enai h y + (z*w) (lgw thc anamenmenhc
megalterhc proteraithtac tou * nanti tou +, pou ntwc
isqei). Bbaia, h parstash (y+z) * w enai diaforetik
ap thn prohgomenh.
-
43
Kje entol antikatstashc mpore na jewrhje kai sanparstash me tim autn thn timc thc parstashc pou
anajtoume sth metablht. 'Etsi, o kormc tou
progrmmatoc capitalize.c
ch = getchar();
while (ch != EOF) {
if (ch >= 'a' && ch = 'a' && ch
-
44
Gia entolc antikatstashc, telestc kai parastseic sthnC, uprqei ektetamnh anlush stic paragrfouc x2:5 wcx2:12 tou [KR], pou sunodeetai ap pra pollendiafronta paradegmata.
Epshc, to Keflaio 1 ap to [KR] (sel. 1958) enai mapol periektik proparaskeuastik eisagwg sthn C, pou
emplkei pollc nnoiec oi opoec analontai ektenstera
sth sunqeia tou biblou. Enai exairetik qrsimh h
eisagwg aut, an mh ti llo gia na prospajsei kanec na
katalbei ta progrmmata pou perilambnontai eke kai,
giat qi, na dokimsei na lsei kai tic askseic tou.
-
45
Eresh M.K.D. kai E.K.P. tuqawn arijmn
/* File: gcdlcm.c */
#include
#include /* Header file for srand and rand functions */
#include /* Header file for time function */
#define COMPUTATIONS 8 /* Pairs of numbers to compute GCD and LCM */
#define MAXNUMB 1000 /* Maximum number */
main()
{ int i, m, n, large, small, gcd, rem;
long curtime, lcm;
curtime = time(NULL); /* Current time (in seconds since 1/1/1970) */
printf("Current time is %ld\n\n", curtime);
srand((unsigned int) curtime); /* Seed for random number generator */
for (i=0 ; i < COMPUTATIONS ; i++) {
m = rand() % MAXNUMB + 1; /* Select 1st number in [1,MAXNUMB] */
n = rand() % MAXNUMB + 1; /* Select 2nd number in [1,MAXNUMB] */
if (m > n) { /* Which number is larger? */
large = m; /* Larger is m */
small = n;
}
else {
large = n; /* Larger is n */
small = m;
}
while (small) { /* While small is not 0 */
rem = large % small; /* Find remainder of large/small */
large = small; /* New large is previous small */
small = rem; /* New small is remainder found */
}
gcd = large; /* GCD of m and n equals to final value of large */
lcm = (m*n)/gcd; /* LCM(m,n) * GCD(m,n) = m * n */
printf("GCD(%3d,%3d) = %2d LCM(%3d,%3d) = %6ld\n",
m, n, gcd, m, n, lcm);
}
}
-
46
% gcc -o gcdlcm gcdlcm.c% ./gcdlcmCurrent time is 1130666309
GCD(855,405) = 45 LCM(855,405) = 7695GCD(125,139) = 1 LCM(125,139) = 17375GCD(996,467) = 1 LCM(996,467) = 465132GCD(191,890) = 1 LCM(191,890) = 169990GCD(548,612) = 4 LCM(548,612) = 83844GCD(378,531) = 9 LCM(378,531) = 22302GCD(837,127) = 1 LCM(837,127) = 106299GCD(938,656) = 2 LCM(938,656) = 307664%
Gia thn eresh tuqawn zeugarin jetikn akerawn,qrhsimopoietai h sunrthsh rand, h opoa kje for pou
kaletai epistrfei na (yeudo)tuqao arijm. H
arqikopohsh thc genntriac (yeudo)tuqawn arijmn
gnetai kalntac th sunrthsh srand, dnontc thc san
parmetro thn trqousa qronik stigm, pwc aut
epistrfetai ap th sunrthsh time (h parmetroc NULL
pou dnoume sthn time ja suzhthje sto mllon).
Gia thn eresh tou Mgistou Koino Diairth (M.K.D.)do arijmn, qrhsimopoiome ton algrijmo tou Eukledh.
Dhlad, brskoume to uploipo thc diareshc tou
megalterou me ton mikrtero ap touc arijmoc kai
antikajistome ton megaltero me ton mikrtero, ton
mikrtero me to uploipo thc diareshc kai
epanalambnoume th diadikasa mqri o mikrteroc na gnei
soc me 0. Tte o zhtomenoc M.K.D. enai o megalteroc.
Gia thn eresh tou E.K.P., qrhsimopoiome th sqshEKP(m;n) MKD(m;n) = m n.
-
47
H ro tou elgqou sthn C
'Opwc se kje glssa programmatismo, tsi kai sthn C,uprqoun entolc pou ephrezoun th ro tou elgqou sta
progrmmata (if, switch, while, for, klp.).
Stic entolc autc enai pol suqn h qrsh enc mplokentoln. 'Ena mplok entoln apoteletai ap entolc pou
enai kleismnec msa se gkistra (f kai g). An s' namplok entoln periqetai ma mno entol, aut den enai
aparathto na perikleetai msa se gkistra.
Enai exairetik qrsimo na melethje lo to Keflaio 3ap to [KR] (sel. 85100), sto opoo perigrfontai
analutik lec oi domc elgqou pou prosfrei h C.
Akolouje ma pio sunoptik perigraf twn domn autn.
-
48
Entol if
H sntaxh thc entolc if enai:if (hparstashi)
hmplok entolni1else
hmplok entolni2 An h hparstashi enai alhjc (qei tim diforh ap tomhdn), ja ektelesje to hmplok entolni1, allic tohmplok entolni2.
To tmma ap to else kai met enai proairetik. An denuprqei kai h hparstashi enai yeudc, o legqoc ja peisthn epmenh entol tou progrmmatoc, dhlad sthn prth
entol met to if.
H proairetikthta tou else mpore na prokalseiproblmata sthn anagnwsimthta programmtwn me
emfwliasmnec entolc if, an den uprqei safc
omadopohsh me gkistra. An den uprqoun gkistra pou
na epiblloun sugkekrimnh dom, kje else antistoiqe
sthn amswc prohgomenh if pou den qei else.
Ti akribc shmanei to paraktw;if (n > 0)
if (a > b)
z = a;
else
z = b;
Prosoq! O metaglwttistc den asqoletai me th stoqish.
-
49
Aut:if (n > 0) {
if (a > b)
z = a;
else
z = b;
}
An jlame to else na antistoiqe sto prto if, prepe nato gryoume tsi:
if (n > 0) {
if (a > b)
z = a;
}
else
z = b;
Ma sunhjismnh qrsh thc entolc if enai tan jloumena elgxoume ma seir ap epllhlec sunjkec, kai
anloga me to poia ja breje ti isqei prth, na
ektelsoume na mplok entoln. Aut gnetai wc exc:
if (hparstashi1)hmplok entolni1
else if (hparstashi2)hmplok entolni2
......................................
else if (hparstashin1)hmplok entolnin1
else hmplok entolnin
-
50
H prohgomenh entol if ja mporose na grafe se maekdoq me stoqish wc exc:
if (hparstashi1)hmplok entolni1
else
if (hparstashi2)hmplok entolni2
......................................
else
if (hparstashin1)hmplok entolnin1
else
hmplok entolninH sugkekrimnh stoqish, mwc, mllon knei pio
dusangnwsth thn entol, opte enai kal na mhn thn
akoloujsei kpoioc.
'Ena pardeigma:if (x > 0) {
sign = 1;
printf("Number is positive\n");
}
else if (x < 0) {
sign = -1;
printf("Number is negative\n");
}
else {
sign = 0;
printf("Number is zero\n");
}
-
51
Entol switch
H sntaxh thc entolc switch enai:switch (hparstashi) f
case hstajeri1:hentolci1
case hstajeri2:hentolci2
...........................
default:
hentolcigH switch enai ma diakladwmnh entol apfashc pou
leitourge pwc perigrfetai sth sunqeia.
H hparstashi prpei na enai akraia. Upologzetai h timthc.
Kje hstajerii prpei na enai akraia stajer kai denprpei na uprqoun do case me thn dia stajer.
An h tim pou qei h hparstashi isotai me kpoiahstajerii, tte o legqoc metafretai stic hentolcii. Anqi, o legqoc metafretai stic hentolci (met todefault).
Oi hentolcii (kai hentolci) den enai aparathto nasuniston mplok entoln, dhlad na enai kleismnec msa
se f kai g.
-
52
Met thn ektlesh twn entoln se ma case, o legqocmetafretai stic entolc thc epmenhc case, ektc an
teleutaa entol thc prohgomenhc case enai h break.
Den enai kal praktik oi entolc mac case na suneqzoun
me autc thc epmenhc, ektc an isqei to epmeno.
Enai dunatn gia perissterec timc thc mac gia thnhparstashi na jloume na ektelesje h dia omdaentoln. S' autn thn perptwsh, topojetome ta
antstoiqa case suneqmena kai bzoume thn omda
entoln sto teleutao ap' aut.
H perptwsh default enai proairetik. An den uprqei kaiden tairizei kama case, o legqoc metafretai met thn
entol switch.
Pardeigma:switch (x) {
case 1: printf("one\n");
break;
case 2:
case 3: printf("two or three\n");
break;
case 4: printf("four\n");
break;
default: printf("other\n");
break;
}
Ti ja gintan an leipan kpoiec break; Giat blame
break kai sthn default perptwsh;
-
53
Entolc brqou while
Ma pijan sntaxh thc entolc while enai:while (hparstashi)
hmplok entolni Arqik upologzetai h hparstashi. An qei tim diforhtou mhdenc (enai alhjc) ekteletai to hmplok entolni.Upologzetai pli h hparstashi kai ensw enai alhjc,ja gnetai o kkloc ektleshc tou hmplok entolni, mqrina gnei h hparstashi yeudc (dhlad sh me to mhdn).
Pardeigma:f = 1;
while (--n)
f = f*(n+1);
Ti upologzei aut to while;
Epshc, jumhjete kai thn entol while stohttp://www.di.uoa.gr/~ip/cprogs/capitalize.c.
-
54
'Allh pijan sntaxh thc entolc while enai:do
hmplok entolniwhile (hparstashi)
Arqik ekteletai to hmplok entolni. Met, upologzetaih hparstashi. An qei tim diforh tou mhdenc (enaialhjc) ekteletai pli to hmplok entolni kai suneqzetaio kkloc ektlesc tou, mqri na gnei h hparstashiyeudc (dhlad sh me to mhdn).
Gia lgouc kalterhc anagnwsimthtac tou progrmmatoc,akma kai an to hmplok entolni apoteletai ap ma mnoentol, sunjwc th bzoume msa se f kai g.
Pardeigma:f = 1;
do {
f = f*n;
} while (--n);
Ti upologzei aut to while;
Epshc, jumhjete kai thn entol do/while stohttp://www.di.uoa.gr/~ip/cprogs/picomp.c.
H basik diafor twn do ekdoqn thc entolc while enaiti sthn prth perptwsh to hmplok entolni mpore kai namhn ektelesje kama for, an h hparstashi enai arqikyeudc, en sthn ekdoq do/while, to hmplok entolni jaektelesje toulqiston ma for, afo h hparstashielgqetai sto tloc.
-
55
Entol brqou for
H sntaxh thc entolc for enai:for (hparstashi1 ; hparstashi2 ; hparstashi3)
hmplok entolni Diadikastik, isoduname me tic exc entolc:hparstashi1;while (hparstashi2) f
hmplok entolnihparstashi3;
g Dhlad, arqik upologzetai h hparstashi1. Sunjwc,prkeitai gia thn arqikopohsh enc dekth pou elgqei ma
epanalhptik diadikasa. Sth sunqeia, ekteletai
epanalambanmena to hmplok entolni, pou apotele tosma thc diadikasac, ensw h hparstashi2, pou sunjwcelgqei thn tim tou dekth elgqou, enai alhjc. Prin th
diexagwg nac epanlhyhc, ekteletai kai h hparstashi3,pou sunjwc metabllei ton dekth elgqou.
Pardeigma:f = 1;
for (i=1 ; i
-
56
Enai dunatn kpoia ap tic hparstashi1;2 3 na mhnuprqei, sunjwc h prth /kai h trth. An den uprqei h
deterh, tte den gnetai legqoc gia termatism tou
brqou, opte prpei aut na gnei biawc me kpoio trpo
msa ap to sma thc epanlhyhc. Se kje perptwsh,
poia hparstashii kai na lepei, ta ; uprqoun kanonik. H entolfor ( ; ; )
hmplok entolnienai h klasik ulopohsh enc atrmonoc brqou.
Epshc, sthn C uprqei kai o telestc , (kmma), me tonopoo mporome na kataskeusoume ma snjeth parstash
pou ja upologisje ap arister proc ta dexi. H tim thc
snjethc parstashc isotai me thn tim thc dexiterhc
ap tic aplc pou thn suniston.
Merikc forc, jloume na gryoume ma entol for pouja elgqetai ap perissterouc tou enc dektec. Aut
gnetai qrhsimopointac ton telest , sthn hparstashi1kai sthn hparstashi3. Pardeigma:
for (i=0, j=n ; i
-
57
Entolc break kai continue
Ma qrsh thc entolc break enai aut pou edame sthnentol switch, gia ton termatism thc akoloujac entoln
pou ja ektelesjon tan tairixei kpoia sugkekrimnh
case.
Epshc, me thn entol break, mporome na termatsoumebiawc tic epanalyeic enc brqou (while, do/while
for), prin isqsei h sunjkh termatismo ( tan o brqoc
enai atrmwn). Pardeigma:
while (!finished) {
......................
if (bad_data)
break;
......................
}
Me thn entol continue, o legqoc sto eswterik encbrqou metafretai sto tloc tou, gia na arqsei h epmenh
epanlhyh. Pardeigma:
for (i=0 ; i < n ; i++) {
if (a[i] < 0) /* Ignore negative elements */
continue;
............. /* Process positive elements */
}
-
58
Entol goto kai etiktec
Kje glssa programmatismo, tsi kai h C, qei maentol gia rht metafor tou elgqou se kpoio llo
shmeo (etikta) tou progrmmatoc. Sthn C, h entol aut
enai h goto.
H goto mpore na qrhsimopoihje se pol exeidikeumnecperiptseic, gia pardeigma tan jloume na gnei baih
xodoc ap emfwliasmnouc brqouc, tan o legqoc
brsketai se kpoio eswterik brqo. Aut den mpore na
gnei me thn entol break. Pardeigma:
for (i=0 ; i < n ; i++)
for (j=0 ; j < m ; j++)
if (a[i] == b[j])
goto found;
.............. /* Didn't find common element */
found:
.............. /* Found a[i] == b[j] */
H entol goto blptei sobar thn ida tou domhmnouprogrammatismo, giat mpore na odhgsei se progrmmata
dusangnwsta kai dskola sunthrsima, kai gi' aut prpei
na qrhsimopoietai spnia, an qi kajlou. a
a
Sta plasia tou sugkekrimnou majmatoc, apl APAGOREUETAI h
qrsh thc.
-
59
Dom enc progrmmatoc C Sunartseic
Ma sunrthsh C enai na autnomo, paketarismno tmmaprogrmmatoc pou frei se prac ma diadikasa h opoa
qei safec prodiagrafc eisdou kai exdou kai
sugkekrimno noma.
Sunjwc, kwdikopoiome se ma sunrthsh nan algrijmopou prkeitai na qrhsimopoisoume sto prgramm mac
arketc forc ektimome ti enai genikterhc
qrhsimthtac kai ja mporose na fane qrsimoc kai se
progrmmata pou ja gryoume sto mllon.
Se genikc grammc, enai kal praktik na grfoumeprogrmmata C pou apotelontai ap pollc kai mikrc
sunartseic, par ap lgec kai meglec.
Akribc ma ap tic sunartseic enc progrmmatoc Cprpei na qei to noma main. Enai h sunrthsh ap thn
opoa ja xekinsei h ektlesh tou progrmmatoc.
Orismc sunrthshc:htpoci hnomai (htupikc parmetroii)f
hdhlseic kai entolcig
Gia ton orism kje sunrthshc, dhlnoume to hnomaipou qei kai, msa se parenjseic, ta onmata kai touc
tpouc pou qoun oi, legmenec, htupikc parmetroii, ef'son uprqoun.
-
60
Oi tupikc parmetroi mac sunrthshc enai metablhtc,stic opoec dnontai sugkekrimnec timc kat thn klsh
thc sunrthshc kai oi opoec qrhsimopoiontai msa sto
sma thc sunrthshc (hdhlseic kai entolci) gia naepiteuqje o stqoc thc sunrthshc.
To sma mac sunrthshc perikleetai msa se f kai g. Ma sunrthsh mpore na epistryei kpoia tim sto nomthc, h opoa na qrhsimopoihje ap thn sunrthsh pou thn
klese. O htpoci thc timc pou epistrfei ma sunrthshdnetai mprost ap to nom thc, ston orism thc.
An den orzetai tpoc epistrofc gia ma sunrthsh,jewretai ti epistrfei int.
An den endiafermaste na epistryei ma sunrthsh kpoiatim, prpei na orzoume ti epistrfei void, ton \ken"
tpo. Akma kai an qoume orsei ma sunrthsh na
epistrfei kpoio tpo, qi void, den enai telik
upoqrewtik na to knei, kai an to knei, den enai
upoqrewtik gia thn kalosa sunrthsh na qrhsimopoisei
thn epistrefmenh tim.
H epistrof timc ap sunrthsh gnetai me thn entolreturn hparstashi. Upologzetai h tim pou qei hhparstashi, epistrfetai kai h sunrthsh termatzei. Mema apl entol return termatzei qwrc na epistrafe
kpoia tim.
-
61
H sunrthsh main mpore na orzetai1. ete qwrc tupikc paramtrouc
2. ete me do paramtrouc sugkekrimnwn tpwn, msw
twn opown mpore na gnwrzei h main an to prgramma
ektelsjhke me orsmata sth gramm entolc kai, an
nai, me poia. Perisstera, gi' aut to jma, argtera.
H main epistrfei tim tpou int, h opoa enai diajsimhsto peribllon tou leitourgiko sustmatoc ap to opooektelsjhke to prgramma. Telik, o apoltwc swstctrpoc gia na orsoume th sunrthsh main qwrc tupikcparamtrouc, ton opoo ja uiojetsoume ap ed kai pra,enai o exc (to void upodhlnei thn lleiyh tupiknparamtrwn):
int main(void)
Epshc, pnta ja prpei na epistrfoume ma timtermatismo ap th main, me thn entol return (tupik to
0, se perptwsh epituqoc termatismo tou progrmmatoc).
O metaglwttistc apaite prin thn klsh mac sunrthshcna gnwrzei touc tpouc twn tupikn paramtrwn thc kai
ton tpo thc epistrefmenhc timc. Sunepc, prpei na
prohgetai o orismc mac sunrthshc ap thn klsh thc, ,
an petai, na qei prohghje aplc ma proanaggela thc
sunrthshc (tpoc epistrefmenhc timc, noma kai tpoi
tupikn paramtrwn), to legmeno prwttupo thc
sunrthshc.
Perisstera gia sunartseic, stic paragrfouc x4:1 kaix4:2 tou [KR].
-
62
Sunrthsh ywshc se dnamh
/* File: powers.c */
#include
#define MAXM 4 /* Maximum base of powers to compute */
#define MAXN 6 /* Maximum exponent */
int power(int, int); /* Prototype of power */
int main(void)
{ int m, n, p;
for (m=2 ; m
-
63
Sunrthsh upologismo paragontiko
/* File: factorial.c */
#include
#define MAXN 12 /* Compute factorials up to MAXN */
int factorial(int n) /* No prototype needed */
{ int f;
for (f=1 ; n > 0 ; n--) /* Initialize factorial to 1 */
f *= n; /* Multiply into factorial n, n-1, ..., 1 */
return f; /* Return result */
}
int main(void)
{ int n; /* For all n from 1 to MAXN */
for (n=1 ; n
-
64
Embleia kai qrnoc zwc metablhtn
Oi metablhtc pou orzontai msa se ma sunrthshlgontai autmatec topikc. O lgoc enai ti oi
metablhtc autc qoun periorismnh embleia kai qrno
zwc. Isqoun mno msa sth sunrthsh pou qoun orisje
kai gia so qrno ekteletai h sunrthsh.
Ektc ap tic autmatec metablhtc, mporome na orsoumes' na prgramma C kai exwterikc kajolikc metablhtc.
Oi metablhtc autc orzontai pwc kai oi autmatec (me
ton tpo touc, to nom touc kai me pijan arqikopohs
touc), mno pou orzontai xw ap sunartseic, sto dio
eppedo me autc.
Oi exwterikc metablhtc qoun to protrhma ti enaioratc ap kje sunrthsh, mporon dhlad na
qrhsimopoihjon sta smata twn sunartsewn, kai
diathrontai kajlh th dirkeia thc ektleshc tou
progrmmatoc.
Msw twn exwterikn metablhtn, mpore na epiteuqjeepikoinwna metax sunartsewn qwrc na qreizetai
dedomna pou kpoia sunrthsh prpei na persei se
kpoia llh na to knei aut msw paramtrwn.
-
65
To pleonkthma pou prosfroun oi exwterikc metablhtcmpore na metatrape se meionkthma, an den
qrhsimopoiontai me feid. Progrmmata pou
qrhsimopoion eurwc exwterikc metablhtc mpore na
enai pol dusangnwsta kai dskola sunthrsima. Epshc,
sunartseic pou baszontai se exwterikc metablhtc den
enai genikc qrshc.
An na prgramma enai diaspasmno se poll arqea kaijloume na qoume ma exwterik metablht pou na enai
orat ap tic sunartseic se la ta arqea, tte prpei se
akribc na arqeo na dsoume ton orism thc metablhtc,
gia pardeigma
int sp;
en se kajna ap ta lla arqea prpei na knoume ma
dlwsh thc metablhtc, protssontac ton prosdiorist
extern, gia pardeigma
extern int sp;
Ousiastik, o metaglwttistc desmeei mnmh gia ma
exwterik metablht tan dei ton orism thc (gi' aut
prpei na uprqei autc akribc ma for) kai enhmernetai
gia ton tpo mac metablhtc tan dei ma dlws thc me
extern (jumhjete ti an na prgramma enai diaspasmno
se poll arqea, ta arqea aut metaglwttzontai
xeqwrist).
-
66
An jloume h embleia mac exwterikc metablhtc na enaimno to arqeo sto opoo orzetai kai na mhn sugqetai me
kpoia exwterik metablht me to dio noma, all se llo
arqeo, mporome na protxoume tou orismo thc ton
prosdiorist static, gia pardeigma
static double sum;
O prosdioristc static mpore na efarmosje kai semetablhtc pou orzontai msa se sunrthsh, mwc me llh
shmasa. H embleia mac topikc metablhtc pou qei
orisje san static msa se sunrthsh, enai h sunrthsh
aut, all h metablht den enai autmath. Diathretai,
pwc kai h tim thc, kai met ton termatism thc
sunrthshc. Se na klsh thc sunrthshc, h metablht
qei thn tim pou pre met thn prohgomenh klsh.
Mh arqikopoihmnec exwterikc metablhtc jewrontai tiqoun tim 0.
Mh arqikopoihmnec autmatec metablhtc qounaprosdiristec timc.
Oi tupikc parmetroi mac sunrthshc enai autmatecmetablhtc gia th sunrthsh.
-
67
Oi autmatec metablhtc se ma sunrthsh mporon naorzontai, ektc ap to eppedo tou smatoc thc
sunrthshc, kai se pio eswterik mplok entoln (gia
pardeigma sto sma mac entolc while). An uprqoun
pollaplo orismo gia to dio noma metablhtc se difora
mplok, msa se kajna ap' aut isqei o orismc pou gine
s' aut, , an den uprqei, autc pou gine sto amswc pio
exwterik tou, , an den uprqei, sto pio exwterik, k.o.k.
An uprqei sgkroush onmatoc metax mac exwterikcmetablhtc kai mac autmathc msa s' na mplok, isqei h
autmath.
Pardeigma:int count;
float y;
double myfun(int y)
{ int i;
..............
while (......) {
int i, j;
..........
for (.......) {
int count;
..........
}
}
}
Poiec metablhtc isqoun po;
-
68
'Otan metaglwttzetai na prgramma, desmeetai oapaitomenoc qroc gia na fulaqjon lec oi exwterikc
metablhtc tou progrmmatoc (all kai oi topikc
metablhtc pou qoun dhlwje san static msa se
sunartseic). O qroc autc enai twn statikn
(kajolikn) dedomnwn kai enai ek twn protrwn gnwstc
kai desmeumnoc msa sto ektelsimo prgramma kai
antistoiqe sto qro pou ja katalhfje sth mnmh tan
fortwje to prgramma gia na ektelesje.
Oi autmatec metablhtc mac sunrthshc, akribc epeidqoun periorismno qrno zwc, qoun na diaforetik
trpo flaxhc, msw thc, legmenhc, stobac.
H stoba gia na prgramma enai ma dom tpou LIFO(Last In First Out), dhlad mporome na eisgoume
diadoqik stoiqea s' autn, all an jloume na exaggoume
kpoio, ja exaqje aut pou eisqjh pio prsfata.
'Otan kaletai ma sunrthsh, o legqoc metafretai s'autn, all prin arqsei h ektles thc, desmeetai qroc
sth stoba gia tic autmatec metablhtc thc
(sumperilambanomnwn kai twn tupikn paramtrwn thc).
An h sunrthsh aut kalsei sto sma thc llh
sunrthsh, akoloujetai h dia diadikasa.
-
69
'Otan termatzei ma sunrthsh, epistrfei, an qreizetai,kpoia tim sth sunrthsh pou thn klese kai
eleujernetai o qroc sth stoba pou eqe krathje gia to
peribllon (autmatec metablhtc) thc sunrthshc.
O mhqanismc flaxhc twn autmatwn metablhtn twnsunartsewn sth stoba epitrpei th qrsh mac pol
isqurc programmatistikc dunatthtac, thc anadromc
(recursion).
Ma sunrthsh enai anadromik tan kale ton eaut thc.Lgw thc stobac, den uprqei kndunoc sgqushc me tic
metablhtc thc sunrthshc kai tic timc touc, afo se kje
klsh dhmiourgetai no peribllon sth stoba gia tic
metablhtc thc sugkekrimnhc energopohshc.
Fusik, prpei h anadromik klsh mac sunrthshc nagnetai up sunjkh, giat allic h ektlesh tou
progrmmatoc den ja mporose na gnei me peperasmno
trpo.
Gia exwterikc kai autmatec metablhtc, all kai gia thnanadrom, dete tic paragrfouc x4:3, x4:4 kai x4:6 wcx4:10 tou [KR].
-
70
Upologismc paragontiko me anadrom
/* File: recfact.c */
#include
#define MAXN 12 /* Compute factorials up to MAXN */
int recfact(int); /* Prototype of recfact */
int main(void)
{ int n; /* For all n from 0 to MAXN */
for (n=0 ; n
-
71
Metatropc metax dekadikn kai duadiknarijmn/* File: convdecbin.c */
#include
#define ERROR -1 /* Return value for illegal character */
int getinteger(int base)
{ char ch; /* No need to declare ch as int - no EOF handling */
int val = 0; /* Initialize return value */
while ((ch = getchar()) != '\n') /* Read up to new line */
if (ch >= '0' && ch
-
72
% gcc -o convdecbin convdecbin.c% ./convdecbinPlease, give a binary number: 1000100101111010001001001Decimal equivalent is: 18019401Please, give a decimal number: 18019401Binary equivalent is: 1000100101111010001001001% ./convdecbinPlease, give a binary number: 10011101Decimal equivalent is: 157Please, give a decimal number: 65535Binary equivalent is: 1111111111111111%
An jewrosame ti h sunrthsh getinteger enai genikcqrhsimthtac, ti akribc ja prepe na bloume s' na
phgao arqeo getinteger.c kai ti s' na arqeo
epikefaldac getinteger.h, ste na qrhsimopoiome th
sunrthsh aut kai se lla progrmmata;
Kai na prblhma:H akolouja Fibonacci orzetai wc exc:
a0 = 1
a1 = 1
an = an1 + an2; 8 n 2Gryte prgramma C pou na upologzei, gia dedomno k, ton
(k+ 1)-ost ro ak thc akoloujac Fibonacci. Ulopoiste
do diaforetikc ekdoqc tou progrmmatoc, ma qwrc
anadrom kai ma me anadrom. 'Eqete na sqolisete kti;
-
73
Dektec
'Enac dekthc sthn C enai ma metablht sthn opoamporome na kataqwrsoume kpoia diejunsh mnmhc. Sth
diejunsh aut mporome na fulxoume kpoia tim
sugkekrimnou tpou.
H apl ekdoq mac dlwshc metablhtc tpou dekth enaithc morfc:
htpoci *hmetablhtiMe th dlwsh aut orzoume th hmetablhti na enaidekthc se dedomna pou o tpoc touc enai htpoci.
Mporome mwc na orsoume ma hmetablhti na enaidekthc se dedomna tpou dekth pou deqnoun se dedomna
pou o tpoc touc enai htpoci. Aut mpore na gnei me madlwsh thc morfc:
htpoci **hmetablhti Den uprqei amfibola ti h taktik aut genikeetai kaise pio polplokec dhlseic (dekthc se dekth se dekth
klp.), all oi pragmatik qrsimoi dektec, sth meglh
pleioyhfa twn programmtwn pou grfoume, enai auto
pou orzoume me tic parapnw dhlseic.
Per deiktn, all kai pinkwn, pou ja suzhtsoume sthsunqeia, to Keflaio 5 ap to [KR] (sel. 135178) enai
ma anexntlhth phg plhroforin. a
a
Ektc, swc, ap ta jmata thc dunamikc dsmeushc mnmhc, pou upr-
qei ma sqetik dustoka.
-
74
Pardeigma:int *p;
double *pd;
char **ppc;
Oi metablhtc p kai pd orsthkan san dektec se akeraouc
kai pragmatikoc diplc akrbeiac, antstoiqa.
H metablht ppc enai dekthc se jsh mnmhc pou
mporome na fulxoume dekth se qaraktrec.
Dete kai to sqma:
12543
1029
503350295025501950115005
10131003
char **ppcdouble *pdint *p
10291021101310071003
int doubleint double
-3786 3.14159 0.387652e-26
10381034
1034
char
\0 \0dab \n
1038
doog \n\0
char* char* char*
5025
To smbolo * efarmosmno se metablhtc tpou dekthqrhsimopoietai kai stic entolc tou progrmmatoc, wc
telestc mmeshc anaforc. 'Otan qoume orsei ma
hmetablhti tpou dekth, h kfrash *hmetablhtiparistnei to perieqmeno thc jshc mnmhc sthn opoa
deqnei h hmetablhti.
-
75
O antstrofoc tou telest * enai o &. H kfrash&hmetablhti paristnei th diejunsh pou fulssetai htim gia th hmetablhti, ,ti tpou kai na enai aut.Dhlad, oi telestc * kai & diabzontai wc exc:
&p = h diejunsh mnmhc pou enai apojhkeumno to p
*p = to perieqmeno thc jshc mnmhc pou deqnei to p
Pardeigma:int x = 5, y, *px, *py, *pz;
char c = 'F', *pc, d;
px = &x;
py = &y;
pc = &c;
pz = py;
*pz = (*px)++;
d = --(*pc);
pc = &d;
(*pc)--;
Poiec oi timc twn x, y, c, d met ap autc tic entolc; a
Ja mporosame na eqame gryei --*pc ant gia --(*pc); b
Epshc, gryame (*px)++. Oi parenjseic qreizontai sthnkfrash aut, an jloume o telestc monadiaac axhshc
++ na efarmosje epnw sto perieqmeno thc jshc mnmhc
pou deqnei o dekthc px. An eqame gryei *px++, lgw thc
uyhlterhc proteraithtac tou telest ++ (all kai tou
--) nanti tou telest *, aut ja smaine to *(px++).
a6, 5, 'E' kai 'D', antstoiqab
Nai, giat qi;
-
76
Ti shmanei mwc to *(px++) ( to isodnam tou *px++); a
'Omwc, poio enai to nhma na auxsoume na meisoume nadekth kat 1, dhlad na knoume ton dekth na deqnei sthn
epmenh prohgomenh jsh mnmhc ap aut pou deiqne;
'Eqei nhma an anafermaste se suneqmenec jseic mnmhc
pou, me kpoio trpo, qoume desmesei kai qrhsimopoiome.
Ektc ap thn axhsh mewsh enc dekth kat 1 (mswtwn telestn monadiaac axhshc kai mewshc ++ kai --),
mporome na prosjsoume se na dekth na afairsoume
ap autn ma akraia stajer.
'Allec prxeic metax deiktn den epitrpontai, ektc apthn afaresh deiktn pou deqnoun se stoiqea enc mplok
ap dedomna tou diou tpou, pou qoun desmeuje, me
kpoio trpo, gia eniaa diaqerish. Epshc, epitrpontai
kai sugkrseic metax ttoiwn deiktn.
a
'Oqi, DEN shmanei ti prta ja auxhje o dekthc px kai met ja p-
roume to perieqmeno thc jshc mnmhc pou deqnei h na, auxhmnh, tim
tou dekth. Oi parenjseic den deqnoun th seir pou ja gnoun oi upologi-
smo, all to po efarmzontai oi telestc. Sto prokemeno pardeigma, o
telestc ++ enai metajematikc, ra prta ja proume to perieqmeno thc
jshc mnmhc pou deqnei o dekthc px kai met ja auxhje o dekthc. An
jlame prta na auxsoume ton dekth kai met na knoume thn anafor,
prepe na gryoume *(++px).
-
77
An oi pi, pc kai pd enai dektec (se int, char kai double,antstoiqa), oi paraktw entolc enai apoltwc nmimec:
pi = pi+3;
pc -= 4;
pd = pd-2;
H prsjesh se (afaresh ap) na dekth p mac stajerc
n, metabllei ton dekth ste na dexei n jseic mnmhc (qi
n bytes), megjouc so aut tou tpou dedomnwn pou
deqnei o dekthc, pio met (prin). An oi int, char kai
double enai twn 4, 1 kai 8 bytes, antstoiqa, pso ja
metablhjon oi dektec pi, pc kai pd; a
Ma pol sunhjismnh qrsh twn deiktn enai sthnperptwsh pou jloume kpoia sunrthsh na epistryei
kpoia tim ( kai perissterec), qi san epistrefmenh
tim sto nom thc, all epidrntac stic metablhtc thc
sunrthshc pou thn klese. Tte, h kalosa sunrthsh
prpei na persei sthn kaloumnh th diejunsh mac
metablhtc thc, sthn opoa h kaloumnh ja gryei thn tim
pou prpei na epistryei.
Jewrste to exc prblhma: Jloume na gryoume masunrthsh swap, h opoa na antallssei ta perieqmena
do akraiwn metablhtn.
a12, -4 kai -16, antstoiqa
-
78
'Estw ti gia na antallxoume tic timc twn akraiwnmetablhtn a kai b protijmeja na kalsoume th
sunrthsh swap(a,b), thn opoa qoume orsei wc exc:
void swap(int x, int y)
{ int temp;
temp = x;
x = y;
y = temp; }
Giat enai ljoc aut; a
Pc ja grfame th swst swap; 'Etsi:void swap(int *px, int *py)
{ int temp;
temp = *px;
*px = *py;
*py = temp; }
Kai pc ja thn kalosame gia na antallxoume tic timc
twn metablhtn a kai b; b
Kai giat qreiazmaste th metablht temp; ga
'Estw ti prin kalsoume thn swap(a,b), oi timc twn metablhtn a kai
b enai 5 kai 8, antstoiqa. Tte, ousiastik kalome swap(5,8), dhlad oi
tupikc parmetroi x kai y thc swap, pou enai topikc/autmatec metablhtc
gia th sunrthsh, parnoun tic timc 5 kai 8, antstoiqa, antallssontai
msa sthn swap oi timc twn x kai y, all oi metablhtc a kai b thc kalosac
sunrthshc den ephrezontai kajlou ap thn allag aut.
bswap(&a,&b)g
Gia ton dio lgo pou qreiazmaste na trto potri an jloume na
antallxoume ta perieqmena do llwn pothrin, ektc ki an emaste ta-
qudaktulourgo (:-).
-
79
Per angnwshc akerawn (kai qi mno)
Mqri stigmc, den gnwrzame kpoio eqrhsto trpo nadiabsoume nan akraio msa ap na prgramma C. Tra,
me th qrsh deiktn, aut enai efikt.
H prtuph bibliojkh eisdou/exdou thc C parqei kai thsunrthsh scanf, pou enai h \adelf" sunrthsh thc
printf, kai me thn opoa mporome na diabsoume ap thn
esodo enc progrmmatoc dedomna proc epexergasa.
H scanf suntssetai me antstoiqo trpo auto thcprintf, dhlad sthn prth parmetro dnoume ma
sumboloseir pou perigrfei ti tpwn dedomna
skopeoume na diabsoume kai me poion trpo. Oi epmenec
parmetroi anafrontai sto po ja fulaqjon oi timc pou
diabsthkan.
Mno PROSOQH! Epeid h sunrthsh scanf prkeitai naepistryei sth sunrthsh pou thn klese kpoiec timc,
stic antstoiqec paramtrouc DEN bzoume tic metablhtc
stic opoec jloume na fulaqjon oi timc autc, all
dektec stic metablhtc autc. Enai o dioc akribc lgoc
gia ton opoo th sunrthsh swap thn kalome san
swap(&a,&b), pou a kai b enai akraiec metablhtc.
-
80
Pardeigma:int id, rank, *prank;
float salary;
prank = &rank;
printf("Please give id and rank: ");
scanf("%d %d", &id, prank);
printf("Please give salary: ");
scanf("%f", &salary);
H angnwsh timn gia thn akraia metablht id kai thmetablht kinhtc upodiastolc salary gnetai pernntac
stic sunartseic scanf dektec stic metablhtc autc.
'Omwc sthn prth scanf persame thn dia th metablht
prank, afo aut qei dh orisje san dekthc se akraio.
Bbaia, sth sunqeia, gia na anaferjome sthn tim pou
diabsame, aut prpei na gnei msw tou telest mmeshc
anaforc, dhlad *prank, msw thc metablhtc rank.
Oi prodiagrafc %d kai %f stic scanf upodeiknoun ti oitimc pou ja diabaston enai akraiec kai kinhtc
upodiastolc, antstoiqa.
Uprqoun kai llec prodiagrafc pou mpore naqrhsimopoihjon gia angnwsh timn ap thn scanf, kajc
kai kpoiec endiafrousec dunatthtec pou parqontai ap
th sunrthsh. Gia perisstera, \man scanf" tan ja
anaferjome analutiktera stic sunartseic thc prtuphc
bibliojkhc eisdou/exdou thc C.
-
81
Pnakec
'Otan jloume sthn C na qeiristome na snolo apdedomna diou tpou me eniao kai genik trpo, orzoume
na pnaka sugkekrimnou megjouc gia th flaxh twn
dedomnwn autn.
Me th dlwshint myarray[20];
orzoume na monodistato pnaka akerawn me noma
myarray ston opoo mporon na fulaqjon to pol 20
akraiec timc. To 20 enai h distash tou pnaka.
'Enac pnakac apojhkeetai sth mnmh se suneqmenecpnta jseic.
Msa sto prgramm mac, mporome na anafermaste stastoiqea tou pnaka myarray, pou qei oriste me distash
20, san myarray[0], myarray[1], : : :, myarray[19].
Genik, me to myarray[i] anafermaste sto stoiqeo tou
pnaka myarray me dektha i, pou to i mpore na enai
kpoia parstash, qi mno stajer metablht, h opoa
prta ja apotimhje kai met ja gnei h prosplash tou
stoiqeou myarray[i].
a
Prosoq sthn orologa! Ton ro \dekthc" ed, ton qrhsimopoiome
san ellhnik apdosh tou Aggliko \index". Prkeitai gia dekth pnaka.
Oi dektec mwc pou edame sthn prohgomenh enthta enai dektec dieujn-
sewn kai antistoiqon ston Agglik ro \pointer". Gia th sunqeia, den ja
knoume idiaterh anafor, tan qrhsimopoiome ton ro \dekthc", se poia
ekdoq anafermaste. Ja prokptei aut ekola ap ta sumfrazmena.
-
82
An h distash enc pnaka enai N, oi dektec twn stoiqewntou kumanontai ap 0 wc N-1.
Prosoq sto klasik ljoc pou gnetai stonprogrammatism me th diaqerish pinkwn! Appeira
prsbashc ektc twn orwn enc pnaka den enai dunatn na
diagnwsje ap ton metaglwttist, me sunpeia na prokyei
sobar prblhma kat thn ektlesh tou progrmmatoc.
Enai eujnh tou programmatist na exasfalsei ti tansto prgramm tou knei prsbash sto stoiqeo x[i],
pou o pnakac x qei orisje me distash, stw, 100, tte
to i den ja qei tim mikrterh ap to 0 megalterh ap
to 99, tan gnetai h anafor sto x[i]. Allic : : :
Sto Unix, gia pardeigma, ja proume na megaloprepc
\Segmentation fault" kanna \Bus error" kat thn
ektlesh tou progrmmatoc. Genikc, aut ta mhnmata
mac upodeiknoun ti qoume knei sto prgramm mac
kpoio ljoc diaqerishc mnmhc.a Se peribllonta
Microsoft Windows, to pio pijan apotlesma tan uprqei
ljoc diaqerishc mnmhc enai o baioc termatismc tou
progrmmatoc.
a
Eutuqc, dhlad, giat tsi majanoume ti to prgramm mac qei sfl-
mata, opte mporome na mpome sth diadikasa na ta diorjsoume. 'Omwc,
aut den sumbanei pntote. Uprqoun periptseic pou na qoume knei
ljoc diaqerishc mnmhc, na mhn proume kpoia ndeixh gi' aut kai na no-
mzoume ti to prgramm mac douleei swst, en aut ja knei lla ant'
llwn.
-
83
Uprqei pol sten sqsh metax twn pinkwn kai twndeiktn dieujnsewn sthn C. Ousiastik, to noma enc
pnaka enai nac stajerc dekthc sto prto stoiqeo tou
pnaka.
Gia pardeigma, an qoume orsei nan pnaka a, tte hkfrash *(a+i) enai isodnamh me thn a[i]. Omowc, kai
oi ekfrseic a+i kai &a[i] enai isodnamec.
An s' na dekth pa, pou deqnei se stoiqea diou tpou meton tpo twn stoiqewn enc pnaka a, anajsoume san tim
th diejunsh tou prtou, kpoiou llou, stoiqeou tou
pnaka, oi ekfrseic pa+hNi, pou hNi enai akraiaparstash, enai nmimec wc dieujnseic gia prosplash
twn stoiqewn tou pnaka, arke na qoume exasfalsei ti
deqnoun msa sta ria tou pnaka.
Epshc, mporome ton dekth pa na ton auxnoume na tonmeinoume, kai, genik, na ton tropopoiome, kat bolhsh
(p.q. pa++, --pa, klp.), pnta up thn propjesh ti
msw tou tropopoihmnou dekth ja prospelanoume
stoiqea tou pnaka entc twn orwn tou.
-
84
Pardeigma:int i, a[8], *pa;
for (i=0 ; i
-
85
Merikc forc, jloume na orsoume ma sunrthsh, h opoana epexergzetai ta stoiqea enc pnaka. Fusik, ma lsh
enai na qei dhlwje o pnakac exwterikc, opte mpore na
gnei h epikoinwna me thn kalosa sunrthsh pol apl.
Enai pijan, mwc, gia diforouc lgouc, kurwc gia naenai h sunrths mac genikc qrshc, na jloume na
persoume ton pnaka sth sunrthsh san parmetro. Sthn
perptwsh aut, aplc pernme na dekth sto prto
stoiqeo tou pnaka kai, msw auto, h sunrthsh mpore na
prospelsei opoiodpote stoiqeo tou.
Pardeigma:#define N 50
int main(void)
{ int x[N], *myp;
..............
myfun(&x[0], N);
..............
}
void myfun(int *px, int n)
{ int y;
..............
y = *(px+2);
..............
}
-
86
Sto prohgomeno pardeigma, h klsh thc sunrthshcmyfun ap thn main ja mporose na eqe gnei kai san
myfun(x, N), dhlad na persoume to noma tou pnaka,
afo, pwc gnwrzoume, to noma aut enai ousiastik
nac dekthc sto prto stoiqeo tou pnaka.
An eqame anajsei ston dekth myp th diejunsh touprtou stoiqeou tou pnaka (myp = &x[0] , isodnama,
myp = x), ja mporosame na kalsoume th sunrthsh kai
san myfun(myp, N).
An jloume na persoume sth sunrthsh nan upopnakatou arqiko pnaka, ap na stoiqeo kai met, ja
mporosame na thn kalsoume me parmetro th diejunsh
tou stoiqeou auto. Gia pardeigma, an qoume knei prta
thn anjesh myp = &x[2] me thn klsh myfun(myp, N-2)
( ap' eujeac myfun(&x[2], N-2), h sunrthsh myfun ja
\dei" nan pnaka me prto stoiqeo to trto tou arqiko.
Epshc, ston orism thc sunrthshc, ja mporosame giatupik parmetro na bloume to int px[], ant gia to int
*px. Enai apoltwc isodnama.
-
87
Istgramma suqnottwn grammtwn sthn esodo
/* File: histogram.c */
#include
#define YAXISLEN 12 /* Y-axis length */
int main(void)
{ int i, j, ch, total;
int letfr[26]; /* Letter occurrences and frequencies array */
for (i=0 ; i < 26 ; i++)
letfr[i] = 0; /* Initialize array */
total = 0; /* Initialize counter of total letter occurrences */
while ((ch = getchar()) != EOF) {/* Well-known read-character loop */
if (ch >= 'A' && ch = 'a' && ch YAXISLEN) ? "^^" : " "); /* If i-th */
/* letter frequency exceeds Y-axis length, print "^^" */
}
printf("\n");
for (j=YAXISLEN ; j > 0 ; j--) {/* Print line at j-value of Y-axis */
printf("%2d|", j); /* Print frequency label and Y-axis segment */
for (i=0 ; i < 26 ; i++)
printf("%s", (letfr[i] >= j) ? "xx" : " "); /* If i-th letter */
/* frequency is greater than or equal to j, print "xx" */
printf("\n");
} /* Print X-axis and letter labels */
printf(" +-----------------------------------------------------\n");
printf(" AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz\n");
return 0;
}
-
88
% gcc -o histogram histogram.c% ./histogram < histogram.c
|12|11| xx xx10| xx xx xx9| xx xx xx xx8| xx xx xx xx xx7| xx xx xx xx xx6|xx xx xx xx xx xx xx5|xx xxxx xx xx xxxx xx xx4|xx xx xxxx xx xx xxxx xxxxxx3|xx xx xxxx xxxx xx xxxx xxxxxx2|xx xxxxxxxxxxxxxx xx xxxxxx xxxxxxxx xxxx1|xxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+-----------------------------------------------------AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
% ./histogram < /usr/dict/words|
12|11| xx10| xx9|xx xx8|xx xx xx7|xx xx xx xxxx xx xx6|xx xx xx xx xxxx xxxxxx5|xx xx xx xx xx xxxx xxxxxx4|xx xx xx xx xx xxxx xxxxxxxx3|xx xxxxxx xxxx xxxxxxxxxx xxxxxxxx2|xxxxxxxxxx xxxxxx xxxxxxxxxx xxxxxxxx xx1|xxxxxxxxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx xx+-----------------------------------------------------AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
% ./histogram < /usr/include/stdio.h| ^^
12| xx11| xx10| xx xx9| xx xx xx8| xxxx xx xx xx7| xxxx xx xx xx6| xxxxxx xx xx xxxx5| xxxxxx xx xxxx xxxxxx4| xxxxxx xx xx xxxxxx xxxxxx3|xx xxxxxxxx xx xx xxxxxx xxxxxxxx xx2|xx xxxxxxxxxx xx xx xxxxxx xxxxxxxx xx1|xxxxxxxxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxx xx+-----------------------------------------------------AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz
%
-
89
Dunamik dsmeush mnmhc
Oi pnakec enai na pol qrsimo ergaleo se kje glssaprogrammatismo, ra kai sthn C, gia th diaqerish me
eniao trpo enc sunlou ap omoeid dedomna. To
basik prblhma, mwc, me touc pnakec enai ti prpei na
qoume orsei th distash touc msa sto prgramma,
bzontac tsi, kat th fsh thc suggrafc tou
progrmmatoc, na rio sto pljoc twn dedomnwn pou
mporome na apojhkesoume ston pnaka.
An orsoume th distash enc pnaka sqetik mikr,knoume oikonoma sth mnmh kat thn ektlesh tou
progrmmatoc, all aut qei tte periorismnec
dunatthtec. An orsoume th distash pol meglh, mpore
to prgramm mac na qeiriste kai perisstera dedomna,
all gnetai spatlh sth mnmh tan den qreiazmaste na
epexergastome tso poll dedomna.
To idanik ja tan to prgramm mac na mhn desmeeimnmh ex arqc, all na to knei aut dunamik, kat th
fsh thc ektleshc, anloga me tic angkec tou. Aut,
eutuqc, enai efikt.
H dunamik dsmeush mnmhc gnetai s' na qro poudiaqeirzetai to prgramma, o opooc lgetai swrc, kai
enai diaforetikc ap to statik qro ston opoo
fulssontai oi exwterikc metablhtc kai th stoba sthn
opoa fulssontai oi autmatec metablhtc twn
sunartsewn.
-
90
Sthn C, h dunamik dsmeush mnmhc gnetai (kurwc) mswthc sunrthshc
void *malloc(unsigned int size)
Kalntac thn malloc me parmetro nan akraio size,aaut desmeei sto swr size suneqmena bytes kai
epistrfei sto nom thc na dekth sto prto ap' aut.
O dekthc pou epistrfei h malloc deqnei se tpo void,dhlad ston ken tpo, afo den thn afor ti tpou
dedomna ja fulxoume sth mnmh pou dsmeuse.
An, gia kpoio lgo, h malloc den mporsei na desmeseith mnmh pou thc zhtjhke, epistrfei sto nom thc ton
ken dekth NULL. Pnta, tan kalome thn malloc, prpei
na elgqoume an mac epstreye dekth diforo tou NULL
kai met na proqwrsoume.
Epeid to pljoc twn bytes pou qrhsimopoiontai gia thflaxh dedomnwn kpoiou tpou mpore na diafrei metax
diaforetikn metaglwttistn, leitourgikn susthmtwn
kai epexergastn, gia na enai ta progrmmat mac
metafrsima, to pljoc twn bytes pou zhtme ap thn
malloc na desmesei to dnoume msw tou telest sizeof.
a
Ston tupik orism thc malloc, o tpoc tou size enai size t, all
aut praktik enai unsigned int.
-
91
H kfrash sizeof(htpoci) qei san tim to pljoc twnbytes pou apaitontai sth sugkekrimnh ulopohsh thc C
gia na fulaqjon dedomna pou o tpoc touc enai htpoci.Gia pardeigma, me to paraktw tmma progrmmatoc
int n, *p;
................ /* Compute n */
p = malloc(n * sizeof(int));
if (p == NULL) {
printf("Sorry, cannot allocate memory\n");
return -1;
}
................ /* Handle data starting at p */
desmeoume dunamik qro sto swr gia na fulaqjon n
akraioi.
Sthn pro ANSI C epoq, o dekthc pou epstrefe hmalloc (tpou void *) prepe prta na prosarmosje
ston katllhlo tpo dekth kai met na anateje se
metablht. Dhlad thn klsh thc malloc sto parapnw
tmma progrmmatoc ja thn grfame san:
p = (int *) malloc(n * sizeof(int));
Plon, kti ttoio den enai aparathto kai, gia thn
akrbeia, den sunstatai.
-
92
O telestc sizeof mpore na qrhsimopoihje ete sansizeof hparstashi, ete san sizeof(hparstashi), opteaut h kfrash qei san tim to pljoc twn bytes pou
apaitontai gia na fulaqje h hparstashi, p.q. to sizeofbuf enai 20, an qoume orsei char buf[20].
PROSOQH! 'Otan desmeoume dunamik mnmh, enai eujnhdik mac na thn apodesmeoume tan den thn qreiazmaste.
H apodsmeush mnmhc pou qei desmeuje dunamik gnetaime th sunrthsh
void free(void *p)
H parmetroc pou pernme sth sunrthsh free enai nacdekthc pou mac eqe epistryei kpoia malloc.
Enai pol sobar ljoc s' na prgramma, na desmeoumedunamik mnmh kai na mhn thn apodesmeoume tan den thn
qreiazmaste.
Ektc ap thn malloc, uprqoun kai do llecsunartseic gia dunamik dsmeush mnmhc (h realloc kai
h calloc). Enai pio spnia qrhsimopoiomenec ap thn
malloc. Msw thc entolc man, mpore na mjei kanec
perissterec plhroforec gi' autc.
'Otan s' na prgramma qrhsimopoiome sunartseic giadunamik dsmeush kai apodsmeush mnmhc, prpei na
qoume sumperilbei sthn arq to arqeo epikefaldac
stdlib.h. Dhlad:
#include
-
93
Se sqsh me ta problmata pou dhmiourgontai tanorzoume me statik trpo pnakec gia na diaqeiristome
na snolo ap dedomna, ant na knoume dunamik
dsmeush mnmhc, ja prpei na anafroume ti sthn C
uprqei kai h dunatthta na orsoume pnakec me metablht
distash, gia pardeigma:
int array[n];
Fusik, prin ap th dlwsh aut, sthn akraia metablht
n prpei na qoume dsei tim.
O basikc periorismc pou uprqei sth dlwsh pinkwn medistash pou den enai gnwst kat th fsh suggrafc
tou progrmmatoc, enai ti mpore na gnei gia pnakec pou
enai autmatoi, dhlad topiko msa se sunartseic. Den
mpore na gnei gia pnakec pou jloume na touc orsoume
ston statik qro, exwterik twn sunartsewn.
Se kje perptwsh, enai kalterh programmatistiktaktik, tan jloume na desmesoume dunamik mnmh,
aut na gnetai msw malloc kai deiktn, par me pnakec
pou h distas touc enai parametrik.
Epshc, na epishmanje ti h dunatthta gia pnakec meparametrik distash prostjhke sto stntarnt thc C to
1999, opte paliteroi metaglwttistc den to dqontai.
-
94
Sumboloseirc
Ma sumboloseir alfarijmhtik enai nac pnakac apqaraktrec (dedomna tpou char). O qaraktrac '\0',
san stoiqeo tou pnaka, deqnei to tloc thc
sumboloseirc kai enai apoltwc aparathtoc gia na
mporon na leitourgsoun oi sunartseic bibliojkhc gia
to qeirism sumboloseirn.
Lgw thc meshc sqshc metax pinkwn kai deiktn, sema sumboloseir mporome na anaferjome kai me na
dekth (tpou char *) pou deqnei ston prto qaraktra
thc sumboloseirc.
Msa s' na prgramma, mporome m' na sntomo trpo naanaferjome se ma sumboloseir gia thn opoa gnwrzoume
touc qaraktrec pou periqei, perikleontac autoc touc
qaraktrec msa se " (qwrc to '\0'). Pardeigma:
char *mess = "Hello world!\n";
\0\n!dlroolleH w
mess:
Oi sumboloseirc pou periqontai msa s' na prgrammafulssontai ston dio qro me to prgramma kai, gi' autn
to lgo, den enai dunatn na metablhjon. Gia th
diaqeris touc, o metaglwttistc antistoiqe se kje
ttoia sumboloseir th diejunsh tou prtou qaraktra
thc.
-
95
Ektc ap thn arqikopohsh enc dekth se char me masumboloseir, pwc kname me thn entol
char *mess = "Hello world!\n";
mporome na arqikopoisoume kai na pnaka qaraktrwn
me ma sumboloseir, wc exc:
char arrmess[] = "How are you?";
Den uprqei lgoc na orsoume distash gia ton pnaka
arrmess, giat aut upologzetai autmata ap to pljoc
twn qaraktrwn thc sumboloseirc (sun nan, lgw tou
'\0').
Ma ousidhc diafor metax twn parapnw entoln, enaiti h metablht mess enai dekthc pou arqikopoijhke me
th sumboloseir pou jloume, sth sunqeia, mwc, mpore
na allxei tim, an qreizetai, en to noma tou pnaka
arrmess, pou epshc arqikopoijhke me ma sumboloseir,
leitourge, fusik, kai wc dekthc, mno pou den epitrpetai
na metablhje.
H deterh ousidhc diafor enai ti den mporome naallxoume to perieqmeno, dhlad touc qaraktrec, thc
sumboloseirc "Hello world!\n" pou deqnei arqik o
dekthc mess, parti mporome na allxoume thn tim tou
diou tou dekth, en mporome na allxoume touc
qaraktrec thc sumboloseirc "How are you?", parti
den mporome na allxoume to arrmess.
-
96
Oi sumboloseirc enai na pol qrsimo ergaleo gia tonprogrammatism sthn C, gi' aut h prtuph bibliojkh thc
glssac parqei ma seir ap sunartseic gia th
diaqeris touc.
'Otan qrhsimopoiome s' na prgramma sunartseic giadiaqerish sumboloseirn, prpei na qoume sumperilbei
sthn arq to arqeo epikefaldac string.h. Dhlad:
#include
Merikc ap tic sunartseic autc enai:unsigned int strlen(const char *s)
char *strcpy(char *s1, const char *s2)
int strcmp(const char *s1, const char *s2)
char *strcat(char *s1, const char *s2)
H strlen epistrfei to mkoc thc sumboloseirc s (qwrcto telik '\0'). a
H strcpy antigrfei th sumboloseir s2, mqri kai totelik '\0', sth sumboloseir s1, thn opoa epistrfei kai
sto nom thc.
H strcmp sugkrnei tic sumboloseirc s1 kai s2 byte procbyte kai epistrfei nan akraio jetik, mhdn arnhtik,
anloga an h sumboloseir s1 akolouje (alfabhtik),
tautzetai prohgetai thc sumboloseirc s2, antstoiqa.
H sgkrish gnetai me bsh touc ASCII kwdikoc twn
qaraktrwn twn sumboloseirn.
a
Epismwc o tpoc epistrofc thc sunrthshc enai size t, all autc,
praktik, enai unsigned int.
-
97
H strcat prosart na antgrafo thc sumboloseirc s2sto tloc thc s1, diagrfontac prta to '\0' thc s1, kai
epistrfei to apotlesma kai sto nom thc.
Kpoiec ap tic tupikc paramtrouc twn sunartsewn giadiaqerish sumboloseirn qoun dhlwje san const gia na
epishmanje ti oi antstoiqec sumboloseirc den ja
metablhjon ap tic sunartseic.
Oi sunartseic pou dhmiourgon nec sumboloseirc (p.q.strcpy, strcat) den analambnoun kai th dsmeush mnmhc
gia th flax touc. Enai eujnh thc kalosac sunrthshc
na to knei aut.
Uprqoun kai arketc llec endiafrousec kai qrsimecsunartseic diaqerishc sumboloseirn, pwc oi strncpy,
strchr, strstr, klp. H entol man enai na mso gia na
mjei kanec perissterec plhroforec gi' autc.
Kpoiec pijanc ulopoiseic: achar *strcpy(char *s1, const char *s2)
{ char *orig_s1 = s1;
while (*s1++ = *s2++);
return orig_s1; }
int strcmp(const char *s1, const char *s2)
{ for ( ; *s1 == *s2 ; s1++, s2++)
if (! *s1)
return 0;
return *s1 - *s2; }
a
Pc ja ulopoiosame tic strlen kai strcat;
-
98
Pnakec deiktn kai dektec se dektec
'Opwc mporome na qoume pnakec akerawn, pnakecpragmatikn arijmn (kinhtc upodiastolc, aplc
diplc akrbeiac), pnakec qaraktrwn (sumboloseirc),
tsi mporome na orsoume sthn C kai pnakec deiktn.
Me thn dia logik pou to noma enc pnaka stoiqewnkpoiou tpou mpore na jewrhje (sqedn) isodnamo me
na dekth se stoiqea ttoiou tpou, tsi kai to noma
enc pnaka deiktn antistoiqe s' na dekth se dekth se
stoiqea tou tpou pou deqnoun ta stoiqea tou pnaka.
Pardeigma:int i, j, *px[3], **ppx, s = 0;
for (i=0 ; i < 3 ; i++) {
px[i] = malloc((i+2) * sizeof(int));
if (px[i] == NULL)
return -1; }
for (i=0 ; i < 3 ; i++)
for (j=0 ; j < i+2 ; j++)
*(px[i]+j) = i*j;
ppx = px;
for (i=0 ; i < 3 ; i++) {
for (j=0 ; j < i+2 ; j++)
s += *(*ppx)++;
ppx++; }
Poia ja enai h tim thc metablhtc s met thn ektlesh
twn parapnw entoln; a
a15
-
99
Orsmata grammc entoln
'Otan ektelome na prgramma, jloume na qoume, katthn klsh tou progrmmatoc, th dunatthta na dnoume sth
gramm entoln kpoia orsmata, ta opoa na mporon na
persoun sto prgramma, gia na ta epexergaste
katllhla.
Sthn C, h dunatthta orismtwn sth gramm entolnparqetai msw twn tupikn paramtrwn thc sunrthshc
main.
Orzontac thn main me do tupikc paramtrouc, maakraia, sunjwc me noma argc, kai ma pnaka deiktn se
qaraktrec ( dekth se dekth se qaraktrec), sunjwc me
noma argv, msa sth sunrthsh, mporome na qoume
prsbash sta orsmata me ta opoa kljhke to prgramma
sth gramm entolc.
An na ektelsimo prgramma myprog klhje san% ./myprog first 241 third
kai h sunrthsh main tou progrmmatoc qei orisje san
int main(int argc, char *argv[])
tte, msa sthn main, h metablht argc qei thn tim 4
(sa ta orsmata sun to noma tou progrmmatoc) kai oi
dektec argv[0], argv[1], argv[2] kai argv[3] deqnoun
sthn arq twn sumboloseirn "./myprog", "first",
"241" kai "third", antstoiqa.
-
100
O dekthc argv[argc] (sto pr