שפת C/מצביעים, מערכים, ופונקציות/תרגילים
מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.
תוכן עניינים |
[עריכה] מצביעים ומערכים
[עריכה] פונקציה דומה לstrlen על ידי מצביעים
ממש פונקציה בשם strlen_without_h, בעלת ההצהרה
unsigned int strlen_without_h(const char *str);
הפונקציה מקבלת מחרוזת, ומדפיסה את מספר התווים בה שאינם האות 'h'.
פתרון
unsigned int strlen_without_h(const char *str) { unsigned int i; unsigned int len_without_h = 0; for(i = 0; str[i] != 0; ++i) if(str[i] != 'h') ++len_without_h; return len_without_h; }
[עריכה] פונקציה דומה לstrcpy על ידי מצביעים
ממש פונקציה בשם strcpy_without_h בעלת ההצהרה
void strcpy_without_h(char *dest, const char *src);
המעתיקה מחרוזת אחת לשניה, למעט כל מופע של האות 'h'.
פתרון
void strcpy_without_h(char *dest, const char *src) { unsigned int src_i, dest_i; for(src_i = 0, dest_i = 0; src[src_i] != 0; ++src_i) if(src[src_i] != 'h') dest[dest_i++] = src[src_i]; dest[dest_i++] = 0; }
[עריכה] מצביעים לפונקציות
[עריכה] אינטגרציה נומרית
להלן נוסחה לקירוב אינטגרל על ידי מלבנים בין a לb: ![\int_a^b f(x) dx \sim \Delta_x \left[f(a) + f(a + \Delta_x) + f(a + 2 \Delta_x) + \ldots + f(b)\right]](http://upload.wikimedia.org/math/e/9/1/e918235d20f41fcc4c1cb9ce5f6291e7.png)
נשים לב שצורת הערכה זו זהה לכל הפונקציות המתמטיות. אפשר, לכן, לכתוב קוד C שיעריך כך אינטגרלים. כתוב פונקציה בעלת ההצהרה:
float integrate(float (*f)(float), float a, float b, float delta_x);
המקבלת:
- פונקציה f המקבלת מספר ומחזירה מספר
- מספר a המתאר את תחילת תחום האינטגרציה
- מספר b המתאר את סוף תחום האינטגרציה
- מספר delta_x המתאר את גודל הקפיצות
והמשתמש בנוסחה הנ"ל כדי לשערך את האינטגרל.
פתרון
להלן הפונקציה:
float integrate(float (*f)(float), float a, float b, float delta_x) { float sum = 0; while(a < b) { sum += (*f)(a) * delta_x; a += delta_x; } return sum; }
להלן דוגמה המשתמשת בה כדי לוודא 
#include <stdio.h> float integrate(float (*f)(float), float a, float b, float delta_x) { float sum = 0; while(a < b) { sum += (*f)(a) * delta_x; a += delta_x; } return sum; } float square(float x) { return x * x; } int main() { const float a = 0; const float b = 3; const float integral = integrate(square, a, b, 0.001); printf("The integral of x^2 from %f to %f is ~ %f\n", a, b, integral); return 0; }
| - | תרגילים | - |