ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

185
ΕΙΣΑΓΩΓΗΣ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

description

K04

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