void LibFiles::WriteData(FILE *stream, ObjFile *file, const ObjString &name) { ObjIeeeIndexManager im1; ObjFactory fact1(&im1); ObjIeee ieee(name.c_str()); ieee.Write(stream, file, &fact1); }
void LibFiles::Extract(FILE *stream, const ObjString &Name) { int count = 0; ObjIeeeIndexManager im1; ObjFactory fact1(&im1); for (FileIterator it = FileBegin(); it != FileEnd(); ++it) { if ((*it)->name == Name) { ObjFile *p = LoadModule(stream, count, &fact1); if (p) { FILE *ostr = fopen(Name.c_str(), "wb"); if (ostr != NULL) { WriteData(ostr, p, (*it)->name); fclose(ostr); } else { std::cout << "Warning: Module '" << Name << "' not extracted, could not open output file" << std::endl; } } else { std::cout << "Warning: Module '" << Name << "' not extracted, library corrupt" << std::endl; } return; } } std::cout << "Warning: Module '" << Name << "' not in library and could not be extracted" << std::endl; }
bool LibManager::SaveLibrary() { InitHeader(); ObjIeeeIndexManager im1; ObjFactory fact1(&im1); if (!files.ReadFiles(stream, &fact1)) return false; dictionary.CreateDictionary(files); // can't do more reading Close(); header.filesInModule = files.size(); FILE * ostr = fopen(name.c_str(), "wb"); fwrite(&header, sizeof(header), 1, ostr); Align(ostr,16); header.namesOffset = ftell(ostr); files.WriteNames(ostr); Align(ostr); header.filesOffset = ftell(ostr); files.WriteFiles(ostr, ALIGN); Align(ostr); header.offsetsOffset = ftell(ostr); files.WriteOffsets(ostr); Align(ostr); header.dictionaryOffset = ftell(ostr); header.dictionaryBlocks = 0; dictionary.Write(ostr); fseek(ostr, 0, SEEK_SET); fwrite(&header, sizeof(header), 1, ostr); return true; // return !ostr.fail(); }
int main ( void ) { int r; printf("computing fact1(5)\n"); r = fact1(5); printf("fact1(5) = %d\n", r); return 0; }
void main (void) { int n, kai; printf("階乗を求めたい値:"); scanf("%d", &n); while (n < 0) { printf("0以上の値を入力:"); scanf("%d", &n); } kai = fact1(n); printf("%dの階乗は%dです\n", n, kai); }
void factorial(long nb, long k) { if ( (nb % k)!=0) { printf("%ld", fact2(nb, k, l)); } if ( (nb % k)==0) { printf("%ld", fact1(nb, k, l)); } }
void main(void){ int n,kei; printf("階乗を求めたい値を入力してください:"); scanf("%d",&n); while(n<0){ printf("0以sh上の値を入力してください:"); printf("階乗を求めたい値を入力:"); scanf("%d",&n); } k=fact1(n); printf("%dの階乗で%dです\n",n,k); }
int main ( void ) { int r, n = 15; /* 14 succeeds on ppc64-linux, >= 15 fails */ Lard *p, *p_next; printf("computing fact1(%d)\n", n); fflush(stdout); r = fact1(n); printf("fact1(%d) = %d\n", n, r); fflush(stdout); printf("allocated %d Lards\n", ctr); fflush(stdout); for (p = lard; p; p = p_next) { p_next = p->next; free(p); } return 0; }
int main ( void ) { int r; Lard *p, *p_next; printf("computing fact1(7)\n"); r = fact1(7); printf("fact1(7) = %d\n", r); printf("allocated %d Lards\n", ctr); for (p = lard; p; p = p_next) { p_next = p->next; free(p); } return 0; }
int main() { ObjIeeeIndexManager im; ObjFactory f(&im); ObjFile *fi = MakeData(f); fi->ResolveSymbols(&f); std::fstream a("hi.txt", std::fstream::trunc | std::fstream::out); ObjIeee i("hi"); i.SetTranslatorName("Link32"); i.SetDebugInfoFlag(true); ObjSection *sect = codeSection; ObjExpression *left = f.MakeExpression(sect); ObjExpression *right = f.MakeExpression(10); ObjExpression *sa = f.MakeExpression(ObjExpression::eAdd, left, right); i.SetStartAddress(sa); i.Write(a, fi, &f); a.close(); // ObjFile *fi = i->Read(a, ObjIeee::eAll, f); ObjIeeeIndexManager im1; ObjFactory fact1(&im1); std::fstream b("hi.txt", std::fstream::in); ObjIeee i1("hi"); ObjFile *fi1 = i.Read(b, ObjIeee::eAll, &fact1); a.close(); std::fstream c("hi2.txt", std::fstream::trunc | std::fstream::out); ObjIeee i2("hi"); i.SetTranslatorName("Link32"); i.SetDebugInfoFlag(true); i.Write(c, fi1, &fact1); c.close(); }
int fact2 ( int n ) { if (n == 0) return 1; else return mul(n, fact1(n-1)); }
// original int fact1 (int x) { if (x == 1) return x; else return x * fact1(x-1); }
int fact1(int n) { if(n>1) { return n * fact1(n-1); } return 1; }
static void test_interval_relation() { smt_params params; ast_manager ast_m; register_engine re; context ctx(ast_m, re, params); arith_util autil(ast_m); relation_manager & m = ctx.get_rel_context()->get_rmanager(); m.register_plugin(alloc(interval_relation_plugin, m)); interval_relation_plugin& ip = dynamic_cast<interval_relation_plugin&>(*m.get_relation_plugin(symbol("interval_relation"))); SASSERT(&ip); relation_signature sig; sort* int_sort = autil.mk_int(); sig.push_back(int_sort); sig.push_back(int_sort); sig.push_back(int_sort); sig.push_back(int_sort); interval_relation& i1 = dynamic_cast<interval_relation&>(*ip.mk_empty(sig)); interval_relation& i2 = dynamic_cast<interval_relation&>(*ip.mk_full(0, sig)); i1.display(std::cout); i2.display(std::cout); SASSERT(i1.empty()); SASSERT(!i2.empty()); app_ref cond1(ast_m), cond2(ast_m), cond3(ast_m); app_ref cond4(ast_m), cond5(ast_m), cond6(ast_m); app_ref num1(ast_m); cond1 = autil.mk_le(ast_m.mk_var(0, int_sort), autil.mk_numeral(rational(0), true)); cond2 = autil.mk_le(ast_m.mk_var(1, int_sort), autil.mk_numeral(rational(1), true)); cond3 = autil.mk_le(ast_m.mk_var(2, int_sort), autil.mk_numeral(rational(2), true)); cond4 = autil.mk_ge(ast_m.mk_var(0, int_sort), autil.mk_numeral(rational(0), true)); cond5 = autil.mk_ge(ast_m.mk_var(1, int_sort), autil.mk_numeral(rational(0), true)); cond6 = autil.mk_ge(ast_m.mk_var(2, int_sort), autil.mk_numeral(rational(5), true)); num1 = autil.mk_numeral(rational(4), true); i2.filter_interpreted(cond1); i2.display(std::cout); // x0 <= 0 unsigned cols1[2] = { 1, 2}; unsigned cols2[2] = { 2, 3}; relation_join_fn* join1 = ip.mk_join_fn(i1, i2, 2, cols1, cols2); relation_transformer_fn* proj1 = ip.mk_project_fn(i1, 2, cols2); relation_transformer_fn* ren1 = ip.mk_rename_fn(i1, 2, cols2); relation_union_fn* union1 = ip.mk_union_fn(i1, i2, &i1); relation_mutator_fn* filterId1 = ip.mk_filter_identical_fn(i1, 2, cols1); relation_mutator_fn* filterEq1 = ip.mk_filter_equal_fn(i1, num1, 2); relation_mutator_fn* filterCond1 = ip.mk_filter_interpreted_fn(i1, cond2); relation_base* i3 = (*join1)(i2, i2); i3->display(std::cout); relation_transformer_fn* proj2 = ip.mk_project_fn(*i3, 2, cols2); (*filterEq1)(i2); i2.display(std::cout); // x0 <= 0 // x2 = 4 (*filterId1)(i2); i2.display(std::cout); // x0 <= 0 // x1 = x2 = 4 relation_fact fact1(ast_m); fact1.push_back(autil.mk_numeral(rational(0), true)); fact1.push_back(autil.mk_numeral(rational(4), true)); fact1.push_back(autil.mk_numeral(rational(4), true)); fact1.push_back(autil.mk_numeral(rational(5), true)); SASSERT(i2.contains_fact(fact1)); fact1[0] = autil.mk_numeral(rational(-1), true); SASSERT(i2.contains_fact(fact1)); fact1[0] = autil.mk_numeral(rational(1), true); SASSERT(!i2.contains_fact(fact1)); relation_base* i5 = (*ren1)(i2); i2.display(std::cout << "Orig\n"); i5->display(std::cout << "renamed 2 |-> 3 |-> 2\n"); (*filterCond1)(i2); i2.display(std::cout); // empty SASSERT(i2.empty()); relation_base* i4 = (*proj2)(*i3); i4->display(std::cout); i1.deallocate(); i2.deallocate(); i3->deallocate(); i4->deallocate(); i5->deallocate(); dealloc(join1); dealloc(proj1); dealloc(ren1); dealloc(union1); dealloc(filterId1); dealloc(filterEq1); dealloc(filterCond1); }
static void test_bound_relation() { std::cout << "bound relation\n"; smt_params params; ast_manager ast_m; register_engine re; context ctx(ast_m, re, params); arith_util autil(ast_m); relation_manager & m = ctx.get_rel_context()->get_rmanager(); m.register_plugin(alloc(bound_relation_plugin, m)); bound_relation_plugin& br = dynamic_cast<bound_relation_plugin&>(*m.get_relation_plugin(symbol("bound_relation"))); SASSERT(&br); relation_signature sig; sort* int_sort = autil.mk_int(); sig.push_back(int_sort); sig.push_back(int_sort); sig.push_back(int_sort); sig.push_back(int_sort); bound_relation& i1 = dynamic_cast<bound_relation&>(*br.mk_empty(sig)); bound_relation& i2 = dynamic_cast<bound_relation&>(*br.mk_full(0, sig)); i1.display(std::cout << "empty:\n"); i2.display(std::cout << "full:\n"); SASSERT(i1.empty()); SASSERT(!i2.empty()); app_ref cond1(ast_m), cond2(ast_m), cond3(ast_m); app_ref cond4(ast_m), cond5(ast_m), cond6(ast_m); app_ref num1(ast_m); cond1 = autil.mk_lt(ast_m.mk_var(0, int_sort), autil.mk_numeral(rational(0), true)); cond2 = autil.mk_lt(ast_m.mk_var(1, int_sort), autil.mk_numeral(rational(1), true)); cond3 = autil.mk_lt(ast_m.mk_var(2, int_sort), ast_m.mk_var(3, int_sort)); cond4 = autil.mk_ge(ast_m.mk_var(0, int_sort), autil.mk_numeral(rational(0), true)); cond5 = autil.mk_ge(ast_m.mk_var(1, int_sort), autil.mk_numeral(rational(0), true)); cond6 = autil.mk_ge(ast_m.mk_var(2, int_sort), autil.mk_numeral(rational(5), true)); app_ref lt_x0x1(ast_m), lt_x1x2(ast_m), lt_x0x3(ast_m), lt_x0x2(ast_m); lt_x0x1 = autil.mk_lt(ast_m.mk_var(0, int_sort), ast_m.mk_var(1, int_sort)); lt_x1x2 = autil.mk_lt(ast_m.mk_var(1, int_sort), ast_m.mk_var(2, int_sort)); lt_x0x2 = autil.mk_lt(ast_m.mk_var(0, int_sort), ast_m.mk_var(2, int_sort)); lt_x0x3 = autil.mk_lt(ast_m.mk_var(0, int_sort), ast_m.mk_var(3, int_sort)); num1 = autil.mk_numeral(rational(4), true); unsigned cols1[2] = { 1, 2}; unsigned cols2[2] = { 2, 3}; unsigned cols3[3] = { 0, 2, 3 }; relation_join_fn* join1 = br.mk_join_fn(i1, i2, 2, cols1, cols2); relation_transformer_fn* proj1 = br.mk_project_fn(i1, 2, cols2); relation_transformer_fn* ren1 = br.mk_rename_fn(i1, 3, cols3); relation_union_fn* union1 = br.mk_union_fn(i1, i2, &i1); relation_mutator_fn* filterId1 = br.mk_filter_identical_fn(i1, 2, cols1); relation_mutator_fn* filterEq1 = br.mk_filter_equal_fn(i1, num1, 2); relation_mutator_fn* filterCond1 = br.mk_filter_interpreted_fn(i1, cond3); relation_base* i3 = (*join1)(i2, i2); i3->display(std::cout); relation_transformer_fn* proj2 = br.mk_project_fn(*i3, 2, cols2); (*filterEq1)(i2); i2.display(std::cout << "no-op still full\n"); // no-op (*filterCond1)(i2); i2.display(std::cout << "x2 < x3\n"); // x2 < x3 (*filterId1)(i2); i2.display(std::cout << "id\n"); // x1 = x2 < x3 relation_fact fact1(ast_m); i2.display(std::cout << "Orig\n"); std::cout << "renamed "; for (unsigned i = 0; i < 3; ++i) { std::cout << cols3[i] << " "; } std::cout << "\n"; relation_base* i5 = (*ren1)(i2); i5->display(std::cout); //SASSERT(i2.empty()); relation_base* i4 = (*proj2)(*i3); i4->display(std::cout); // test that equivalence classes are expanded. // { x1 = x3, x0 < x1 x1 < x2} u { x2 = x3, x0 < x3 } = { x0 < x3 } { relation_base* b1 = br.mk_full(0, sig); relation_base* b2 = br.mk_full(0, sig); unsigned x1x3[2] = { 1, 3 }; unsigned x2x3[2] = { 2, 3 }; scoped_ptr<relation_mutator_fn> id1 = br.mk_filter_identical_fn(*b1, 2, x1x3); scoped_ptr<relation_mutator_fn> ltx0x1 = br.mk_filter_interpreted_fn(*b1, lt_x0x1); scoped_ptr<relation_mutator_fn> ltx1x2 = br.mk_filter_interpreted_fn(*b1, lt_x1x2); scoped_ptr<relation_mutator_fn> ltx0x3 = br.mk_filter_interpreted_fn(*b2, lt_x0x3); scoped_ptr<relation_mutator_fn> id2 = br.mk_filter_identical_fn(*b2, 2, x2x3); (*id1)(*b1); (*ltx0x1)(*b1); (*ltx1x2)(*b1); b2->display(std::cout << "b2:\n"); (*id2)(*b2); b2->display(std::cout << "b2:\n"); (*ltx0x3)(*b2); b2->display(std::cout << "b2:\n"); scoped_ptr<relation_union_fn> u = br.mk_union_fn(*b1, *b2, 0); b1->display(std::cout << "b1:\n"); b2->display(std::cout << "b2:\n"); (*u)(*b1, *b2, 0); b1->display(std::cout << "b1 u b2:\n"); // TBD check property; b1->deallocate(); b2->deallocate(); } // test that equivalence classes are expanded. // { x1 = x2 = x3, x0 < x1} u { x1 = x3, x0 < x3, x0 < x2 } = { x0 < x2, x0 < x3 } { relation_base* b1 = br.mk_full(0, sig); relation_base* b2 = br.mk_full(0, sig); unsigned x0x3[2] = { 0, 3 }; unsigned x1x3[2] = { 1, 3 }; unsigned x2x3[2] = { 2, 3 }; scoped_ptr<relation_mutator_fn> id1 = br.mk_filter_identical_fn(*b1, 2, x1x3); scoped_ptr<relation_mutator_fn> id2 = br.mk_filter_identical_fn(*b1, 2, x2x3); scoped_ptr<relation_mutator_fn> ltx0x1 = br.mk_filter_interpreted_fn(*b1, lt_x0x1); scoped_ptr<relation_mutator_fn> ltx0x2 = br.mk_filter_interpreted_fn(*b2, lt_x0x2); scoped_ptr<relation_mutator_fn> ltx0x3 = br.mk_filter_interpreted_fn(*b2, lt_x0x3); scoped_ptr<relation_mutator_fn> id3 = br.mk_filter_identical_fn(*b2, 2, x1x3); (*id1)(*b1); (*id2)(*b1); (*ltx0x1)(*b1); (*id3)(*b2); (*ltx0x2)(*b2); (*ltx0x3)(*b2); scoped_ptr<relation_union_fn> u = br.mk_union_fn(*b1, *b2, 0); b1->display(std::cout << "b1:\n"); b2->display(std::cout << "b2:\n"); (*u)(*b1, *b2, 0); b1->display(std::cout << "b1 u b2:\n"); // TBD check property; b1->deallocate(); b2->deallocate(); } i1.deallocate(); i2.deallocate(); i3->deallocate(); i4->deallocate(); i5->deallocate(); dealloc(join1); dealloc(proj1); dealloc(ren1); dealloc(union1); dealloc(filterId1); dealloc(filterEq1); dealloc(filterCond1); }
int fact2 ( int n ) { addMoreLard(); if (n == 0) return 1; else return mul(n, fact1(n-1)); }
void test_smt_relation_unit() { ast_manager m; reg_decl_plugins(m); arith_util a(m); sort* int_sort = a.mk_int(); sort* real_sort = a.mk_real(); front_end_params params; context ctx(m, params); relation_manager & rm = ctx.get_rmanager(); relation_signature sig1; sig1.push_back(int_sort); sig1.push_back(int_sort); sig1.push_back(real_sort); smt_relation_plugin plugin(rm); scoped_rel<relation_base> r1 = plugin.mk_empty(sig1); // add_fact relation_fact fact1(m); fact1.push_back(a.mk_numeral(rational(1), true)); fact1.push_back(a.mk_numeral(rational(2), true)); fact1.push_back(a.mk_numeral(rational(3), false)); relation_fact fact2(m); fact2.push_back(a.mk_numeral(rational(2), true)); fact2.push_back(a.mk_numeral(rational(2), true)); fact2.push_back(a.mk_numeral(rational(3), false)); r1->add_fact(fact1); r1->display(std::cout << "r1: "); // contains_fact SASSERT(r1->contains_fact(fact1)); SASSERT(!r1->contains_fact(fact2)); // empty scoped_rel<relation_base> r2 = plugin.mk_empty(sig1); SASSERT(!r1->empty()); SASSERT(r2->empty()); // clone scoped_rel<relation_base> r3 = r1->clone(); // complement? r2->add_fact(fact2); scoped_rel<relation_base> r4 = dynamic_cast<smt_relation&>(*r2).complement(0); r4->display(std::cout << "complement r4: " ); // join unsigned col_cnt = 2; unsigned cols1[2] = {1, 2}; unsigned cols2[2] = {0, 2}; scoped_ptr<relation_join_fn> joinfn = plugin.mk_join_fn(*r1, *r4, col_cnt, cols1, cols2); scoped_rel<relation_base> r5 = (*joinfn)(*r1, *r4); r5->display(std::cout<< "join r5: "); relation_fact fact3(m); fact3.push_back(a.mk_numeral(rational(1), true)); fact3.push_back(a.mk_numeral(rational(2), true)); fact3.push_back(a.mk_numeral(rational(3), false)); fact3.push_back(a.mk_numeral(rational(2), true)); fact3.push_back(a.mk_numeral(rational(2), true)); fact3.push_back(a.mk_numeral(rational(3), false)); SASSERT(!r5->contains_fact(fact3)); fact3[5] = a.mk_numeral(rational(4), false); SASSERT(!r5->contains_fact(fact3)); fact3[5] = a.mk_numeral(rational(3), false); fact3[4] = a.mk_numeral(rational(3), true); SASSERT(r5->contains_fact(fact3)); // project unsigned removed_cols[2] = { 1, 4 }; scoped_ptr<relation_transformer_fn> projfn = plugin.mk_project_fn(*r5, col_cnt, removed_cols); scoped_rel<relation_base> r6 = (*projfn)(*r5); r6->display(std::cout<< "project r6: "); // rename unsigned cycle[3] = { 0, 2, 4 }; unsigned cycle_len = 3; scoped_rel<relation_transformer_fn> renamefn = plugin.mk_rename_fn(*r5, cycle_len, cycle); scoped_rel<relation_base> r7 = (*renamefn)(*r5); r7->display(std::cout << "rename r7: "); // union // widen relation_base* delta = 0; scoped_ptr<relation_union_fn> widenfn = plugin.mk_widen_fn(*r1, *r2, delta); scoped_ptr<relation_union_fn> unionfn = plugin.mk_union_fn(*r1, *r2, delta); scoped_rel<relation_base> r8 = r1->clone(); (*unionfn)(*r8,*r2,0); r8->display(std::cout << "union r8: "); // filter_identical unsigned identical_cols[2] = { 1, 3 }; scoped_ptr<relation_mutator_fn> filti = plugin.mk_filter_identical_fn(*r5, col_cnt, identical_cols); scoped_rel<relation_base> r9 = r1->clone(); (*filti)(*r9); r9->display(std::cout << "filter identical r9: "); // filter_equal app_ref value(m); value = m.mk_const(symbol("x"), int_sort); scoped_rel<relation_mutator_fn> eqn = plugin.mk_filter_equal_fn(*r5, value.get(), 3); scoped_rel<relation_base> r10 = r1->clone(); (*eqn)(*r10); r10->display(std::cout << "filter equal r10: "); // filter_interpreted app_ref cond(m); cond = a.mk_lt(m.mk_var(3, int_sort), m.mk_var(4, int_sort)); scoped_rel<relation_mutator_fn> filtint = plugin.mk_filter_interpreted_fn(*r5, cond); scoped_rel<relation_base> r11 = r5->clone(); (*filtint)(*r11); r11->display(std::cout << "filter interpreted r11: "); }
int fact1(int n){ if (!n)return 1; else return fact1(n-1)*n; }
int main(int argc, char* args[]) { printf("%d \n",fact(5)); printf("%d \n",fact1(5)); }