שפת 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:
נשים לב שצורת הערכה זו זהה לכל הפונקציות המתמטיות. אפשר, לכן, לכתוב קוד 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;
}
- | תרגילים | - |