שפת 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;
}



- תרגילים -