Antaŭan 
paĝon! Indekson! Instrukcion!

Ekzemplaj C-programoj

  1. Duoniga serĉo en C
  2. Paralelaj tekstoj en C kaj Paskalo
Duoniga serĉo en C
Vd ankaŭ Paskalan formon (Duoniga serĉo en Paskalo) de la sama algoritmo.
#include <stdio.h› 
#define fiasko (-1) 
 
typedef struct{int sxlosilo; char *valoro;} ano; 
 
int duonigaSercxo(ano V[], int n, int sx)            /*funkciĉapo*/ 
  { int sube = 0, supre = n - 1, meze, sx_m;    /*lokaj variabloj*/ 
    while(sube <= supre){        /*ĉapo de komenckondiĉa iteracio*/ 
      meze = (sube + supre) / 2; 
      if((sx_m = V[meze].sxlosilo) == sx) return meze;  /*elirejo*/ 
      if(sx < sx_m) supre = meze - 1; 
      else sube = meze + 1; 
    }                         /*finiĝis la komenckondiĉa iteracio*/ 
    return fiasko; 
  }                              /*finiĝis la korpo de la funkcio*/ 


Paralelaj tekstoj en C kaj Paskalo
Komparo pri signoĉenoj, okazelekta ordono, nombrila iteracio en C kaj Paskalo.
int cxen_al_ent(char *cx)  /* faras el signoĉeno cx entjeron */ 
  { int i, n, minuso = 0;  /* lokaj variabloj */ 
 
    for(i = 0; ' ' == cx[i] || '\n' == cx[i] || '\t' == cx[i]; i++); 
    // i := 0; 
    // DUM (cx[i]=' ') AŬ (cx[i]=nl) AŬ (cx[i]=tab) FARU STARTO 
    //    STARTO {la vakua iteracikorpo} FINO; 
    //    i := i + 1 {la nombrilkremento el la iteraciĉapo} 
    // FINO; 
 
    switch(cx[i]) { case '-': minuso = 1; case '+': i++; } 
    //     alfo := cx[i]; 
    //     SE alfo = '-' TIAM AL 1; 
    //     SE alfo = '+' TIAM AL 2 ALIE AL 3; 
    //  1: minuso := 1; 
    //  2: i := i + 1; 
    //  3: {daŭrigo...}; 
 
    for(n=0; cx[i]›='0'&&cx[i]<='9';) n = 10*n+cx[i++]-'0'; 
    // n := 0; 
    // DUM (cx[i] ≥ '0') KAJ (cx[i] <= '9') FARU STARTO 
    //    n := 10*n + nro(cx[i]) - nro('0'); 
    //    i := i + 1;                      {postalkremento} 
    // FINO; 
 
    return (minuso ? -n : n);  /* kondiĉa esprimo en revenordono */ 
  }


Antaŭtraktilaj difnoj por esperantigo de C

Por esperantigi la leksikon de C sufiĉas kolekti difinojn por la tradukoj de la vortosimboloj en ĉapdosieron, ekz-e en tian eoc.h (la difinoj estas ordigitaj laŭ la anglaj vortosimboloj):
#define AVXTO        auto 
#define ELIRU        break 
#define OKAZO        case 
#define SIGNA        char 
#define SIGNAJ       char 
#define KOMPLEKSA    complex 
#define KOMPLEKSAJ   complex 
#define KONST        const 
#define PLU          continue 
#define CETERE       default 
#define FARU         do 
#define DUOBLA       double 
#define DUOBLAJ      double 
#define ALIE         else 
#define ENUM         enum 
#define EKSTERA      extern 
#define EKSTERAJ     extern 
#define REELA        float 
#define REELAJ       float 
#define POR          for 
#define AL           goto 
#define SE           if 
#define IMAGINARA    imaginary 
#define MALFERMITA   inline 
#define ENTJERA      int 
#define ENTJERAJ     int 
#define LONGA        long 
#define LONGAJ       long 
#define REGXISTRO    register 
#define REGXISTROJ   register 
#define EKSKLUZIVA   restrict 
#define EKSKLUZIVAJ  restrict 
#define REEN         return 
#define KURTA        short 
#define KURTAJ       short 
#define SIGNUMA      signed 
#define SIGNUMAJ     signed 
#define DABAJTOJ     sizeof 
#define STATIKA      static 
#define STATIKAJ     static 
#define RIKORDO      struct 
#define STRUKTURO    struct 
#define ELEKTU       switch 
#define TIPDIFINO    typedef 
#define UNIO         union 
#define NATURA       unsigned 
#define NATURAJ      unsigned 
#define VAKA         void 
#define VARIEMA      volatile 
#define VARIEMAJ     volatile 
#define DUM          while 

La programoj uzantaj tiun dosieron devas ĝin importi, ekz-e kiel en la sekva adaptaĵo de la funkcio atoi (Paralelaj tekstoj en C kaj Paskalo):

#include <stdio.h› 
#include "eoc.h" 
 
ENTJERA cxen_al_ent(SIGNA *cx) 
{ 
    ENTJERAJ i, n, minuso = 0;    /* lokaj variabloj */ 
 
    POR(i = 0; cx[i] == ' ' || cx[i] == '\n' || cx[i] == '\t'; i++) ; 
 
    ELEKTU(cx[i]) { 
        OKAZO '-': minuso = 1; 
        OKAZO '+': i++; 
    } 
 
    POR(n = 0; cx[i] ≥ '0' && cx[i] ≤ '9';) 
        n = 10 * n + cx[i++] - '0'; 
 
    REEN minuso ? -n : n ; 
}


Sekvan 
paĝon Indekson Instrukcion