تبلیغات
برنامه نویسی C++ - آموزش و سورس برنامه ی سی پلاس پلاس - مطالب ابر function
برترین پیشنهاد

برنامه نویسی C++ - آموزش و سورس برنامه ی سی پلاس پلاس

بزرگترین پایگاه آموزش سی پلاس پلاس و سورس تمام برنامه های آن

برنامه ای که کاربرد تابع strlen را نشان میدهد. با اجرای این برنامه عدد 15 به عنوان طول رشته str چاپ میشود:

#include <iostream>
#include <string>
using namespace std ;
int main()
{
    char str [16] = "how long am I ?";
    int len ;
    len = strlen(str) ;
    cout<<str<<" is "<<len<<" characters long\n";
  return 0;
}

//end


پیاده سازی تابع strrchr

int strlen(const char *s)
{
    for(int i=0;s[i];++i);
    return i;
}
char *strrchr(const char *s,int c)
{
    long i;
    for(i=strlen(s)-1;i>=0 && s[i]!=(char)c;i--);
    if(i<0)
        return NULL;
    else
        return (char *)&s[i];
}

//end


پیاده سازی strncpy به دو صورت

صورت اول:

char *strncpy(char *s,const char *t,unsigned n)
{
    for(unsigned i=0;i<n && t[i]!='\0';i++)
        s[i]=t[i];
    for(;i<n;i++)
        s[i]='\0';
    return s;
}

//end

صورت دوم:
char *strncpy(char *s,const char *t,unsigned n)
{
    char *ts=s;
    for(unsigned i=0;i<n && *t!='\0';i++,s++,t++)
        *s=*t;
    for(;i<n;i++,s++)
        *s='\0';
    return ts;
}

//end


پیاده سازی تابع strncat

char *strncat(char *s,const char *t,unsigned n)
{
    const char *p=t;
    unsigned i,j;
    i=j=0;
    while(s[i]!='\0')
        i++;
    while(j<n && (s[i++]=p[j++])!='\0');
    if(p[j-1]!='\0')
        s[i]='\0';
    return s;
}

//end


پیاده سازی توابع strlen و strchr

int strlen(const char *s)
{
    for(int i=0;s[i];++i);
    return i;
}
char *strchr(const char *s,int c)
{
    unsigned i;
    for(i=0;i<strlen(s) && s[i]!=(char)c;++i);
    if(i==strlen(s))
        return NULL;
    else
        return (char *)&s[i];
}

//end


پیاده سازی تابع strcat

char *strcat(char *s,const char *t)
{
    unsigned i,j;
    i=j=0;
    while(s[i]!='\0')
        i++;
    while((s[i++]=t[j++])!='\0');
    return s;
}

//end


تابع ضرب عناصر دو آرایه یک بعدی که از نظر تعداد عناصر با هم برابرند. در این تابع len طول آرایه ها و out آرایه ای است که ضرب آرایه ها در آن ریخته میشود:

void arraymultiply(int x[], int y[], int len, int out[])
{
      for(int i=0;i<len;i++)
             out[i]=(x[i]*y[i]);
}

//end


آرایه های دو بعدی به عنوان آرگومان تابع:

برای ارسال آرایه های دو بعدی به عنوان آرگومان یک تابع باید نام تابع به عنوان آرگومان ذکر شود و برای تعریف پارامتر معادل آن باید مانند آرایه یک بعدی عمل کرد.
در حالتی که در آرایه یک بعدی پارامتر به صورت آرایه بدون طول ذکر می شد، در آرایه دو بعدی طول سطر ذکر نمی شود ولی طول ستون حتما باید ذکر شود و در این حالت طول سطر به عنوان آرگومان دیگری به تابع ارسال میشود.

شکل کلی ارسال آرایه دو بعدی به یک تابع:

void f1(int a[5][10]);
void f2(int a[][10], int);
int main()
{
    int a[5][10];
    ...
    f1(a);
    f2(a,5);
    ...
    return 0;
}

void f1(int a[5][10])
{
    ...
}
void f2(int x[][10], int row)
{
    ...
}

//end


دوستانی که با کامپایلر Dev C++ کار کرده اند، حتما میدانند که این کامپایلر دو تابع مهم gotoxy و clrscr رو در خودش به صورت تعریف شده نداره. ولی میشه این دو رو تعریف کرد و حتی بعد از تعریف با فرمت .h ذخیره و به عنوان هدر فایل استفاده کرد.
روش تعریف این دو در Dev C++ به شکل زیر است:

#include <iostream>
#include <windows.h>

using namespace std;

void gotoxy(int x, int y)
{
     HANDLE hConsoleOutput;
     COORD dwCursorPosition;
     cout.flush();
     dwCursorPosition.X=x;
     dwCursorPosition.Y=y;
     hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleCursorPosition(hConsoleOutput, dwCursorPosition);
}

void clrscr()
{
     system("cls");
}


//end


در این روش جستجو حتما باید آرایه مرتب شده باشد (پیش فرض صعودی) و سپس عنصر جستجو شونده با عنصر وسط آرایه مقایسه میشود. اگر برابر بود که جستجو پایان می پذیرد والا اگر بزرگتر بود، به نیمه ی بالایی آرایه رفته و مجددا با عنصر وسط آن مقایسه میشود و اگر کوچکتر باشد به نیمه ی پایین آرایه رفته و با عنصر وسط آن محدوده مقایسه صورت میگیرد. این عمل تا تایید شدن عنصر مورد نظر یا رسیدن به جایی که دیگر امکان نصف کردن آرایه وجود نداشته باشد، ادامه می یابد.

int binarySearch(int arr[], int len, int pat)
{
    int mid, low=0, high=len-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(pat<arr[mid])
            high=mid-1;
        else if(pat>arr[mid])
            low=mid+1;
        else
            return mid;
    }
    return -1;
}

//end


  • کل صفحات:3  
  • 1
  • 2
  • 3
  •