מבוא לתכנות ולמדעי המחשב בשפת C/שיעורי חזרה: הבדלים בין גרסאות בדף

תוכן שנמחק תוכן שנוסף
יצירת דף עם התוכן "<syntaxhighlight> #include <stdio.h> #include <stdlib.h> #include <string.h> int add(int a, int b) { if(b==0) return a; return add(a+1,b-1); } int p..."
(אין הבדלים)

גרסה מ־12:56, 16 בינואר 2012

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int add(int a, int b) {
    if(b==0)
	return a; 
    return add(a+1,b-1); 
}

int pow1(int a, int n) {
    if(n==0)
	return 1; 
    return a*pow1(a,n-1); 
}

int pow2(int a, int n) {
    if(n==1)
	return a;
    int t = pow2(a,n/2); 
    if(n%2 == 0) 
	return t*t; 
    return t*t*a; 
}

int find(char c, char *str, int from, int to) {
    int i; 
    for(i=from; i<=to; ++i)
	if(str[i] == c)
	    return i; 
    return -1; 
}

int evaluateRec(char *str, int from, int to) {
    int i = find('+',str,from,to); 
    if(i != -1) 
	return evaluateRec(str,from,i-1)+evaluateRec(str,i+1,to); 
    i = find('X',str,from,to); 
    if(i != -1) 
	return evaluateRec(str,from,i-1) * evaluateRec(str,i+1,to); 
    return atoi(str+from); 
}

int evaluate(char* str) {
    return evaluateRec(str,0,strlen(str)-1); 
}

int main() {
    printf("%d\n",add(3,4)); 
    printf("%d\n",pow1(2,5)); 
    printf("%d\n",pow2(2,5)); 
    printf("%d\n",evaluate("445X23+23X21")); 
    return 0; 
}