مثال على الترجمة |
خوارزمية Z |
{بحث ثنائي في جدول}
ليكن
ج : جدول ( 10 ) ؛
ب1 ، ب2 ، ش : صحاح ؛
موجود : منطيقي ؛
ك : صحيح ؛
بداية
ملء_جدول ( ج ، [ 34 ، 56 ، 67 ، 77 ، 88 ، 99 ، 123 ، 222 ، 760 ، 1000 ] ) ؛
ك := 123 ؛
ب1 := 1 ؛
ب2 := 10 ؛
موجود := خطأ ؛
مادام ( ب1 <= ب2 ) و لا موجود
ش := ( ب1 + ب2 ) / 2 ؛
إذا عنصر ( ج [ ش ] ) = ك
موجود := صواب
وإلا
إذا ك < عنصر ( ج [ ش ] )
ب2 := ش - 1
وإلا
ب1 := ش + 1
نهاية_إذا
نهاية_إذا
نهاية_مادام ؛
اكتب ( موجود )
نهاية
برنامج C مقابل |
/**---------------------------------------------------------**/
/** T r a n s l a t i o n Z to C (Standard) **/
/** By Pr. D.E ZEGOUR **/
/** E S I - Algier **/
/** Copywrite 2014 **/
/**---------------------------------------------------------**/
#include <stdio.h>
#include <stdlib.h>
typedef int bool ;
#define True 1
#define False 0
/** -Implementation- **\: ARRAY OF INTEGERS**/
/** Arrays **/
typedef int Typeelem_V10i ;
typedef Typeelem_V10i * Typevect_V10i ;
Typeelem_V10i Element_V10i ( Typevect_V10i V , int I1 )
{
return *(V + (I1-1) ) ;
}
void Ass_element_V10i ( Typevect_V10i V , int I1 , Typeelem_V10i Val )
{
*(V + (I1-1) ) = Val ;
}
/** For temporary variables **/
typedef Typeelem_V10i Typetab_V10i[10];
/** Variables of main program **/
Typevect_V10i E;
int B1;
int B2;
int M;
bool Xzezh;
int V;
Typetab_V10i T_E;
/** High level operations **/
/** Initializing an array **/
void Init_vect_V10i ( Typevect_V10i T , Typetab_V10i Tab , int N)
{
int K=-1;
int I1 ;
for (I1=0; I1< 10; ++I1)
{
K++;
*(T + I1 ) = Tab [K] ;
}
}
int main(int argc, char *argv[])
{
E = malloc(10 * sizeof(int));
T_E [ 0 ] = 34 ;
T_E [ 1 ] = 56 ;
T_E [ 2 ] = 67 ;
T_E [ 3 ] = 77 ;
T_E [ 4 ] = 88 ;
T_E [ 5 ] = 99 ;
T_E [ 6 ] = 123 ;
T_E [ 7 ] = 222 ;
T_E [ 8 ] = 760 ;
T_E [ 9 ] = 1000 ;
Init_vect_V10i ( E , T_E , 10 ) ;
V = 123 ;
B1 = 1 ;
B2 = 10 ;
Xzezh = False ;
while( ( B1 <= B2 ) && ! Xzezh) {
M = ( B1 + B2 ) / 2 ;
if( Element_V10i ( E , M ) == V) {
Xzezh = True; }
else
{
if( V < Element_V10i ( E , M )) {
B2 = M - 1; }
else
{
B1 = M + 1;
}
}
} ;
printf ( " %d", Xzezh );
system("PAUSE");
return 0;
}