تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: حل يك مشكل

  1. #1
    داره خودمونی میشه rell's Avatar
    تاريخ عضويت
    May 2008
    پست ها
    82

    پيش فرض حل يك مشكل

    با سلام. برنامه اي به شرح زير داريم:

    برنامه اي كه با استفاده از توابع و با روشdynamic memory allocationاعمال زير را انجام دهد:
    1.دو عدد صحيح حداكثر 50 رقمي را از ورودي بخواند.
    2.توسط يك تابع اين دو عدد را با هم جمع نموده و توسط تابع ديگري اين دو عدد و حاصل جمع آنها را در خروجي بنويسد.
    3.تابعي بنويسيد كه اين دو عدد رااز تابع main دريافت نموده و حاصل ضرب آنها را بدست آورده و در تابع main در خروجي بنويسد.
    4.تابعي بنويسيد كه اين دو عدد را از تابع main دريافت نموده و عدد بزرگتر را بدست آورده و در تابع main در خروجي بنويسد.
    5.تابعي بنويسيد كه اين دو عدد را از تابع main دريافت نموده و عدد كوچكتر را از عدد بزرگتر كم نموده و نتيجه را در تابع main در خروجي بنويسد.
    (چون اعداد بزرگ هستند از آرايه ها بايد براي نگهداري اعداد استفاده كرد.)

    اين برنامه به صورت زير نوشته شده ولي مورد شماره 4 رو اعمال نميكنه. ممنون ميشم اگه كسي بتونه اين مشكل برنامه رو حل كنه.

    #include <stdio.h>
    #include <string.h>
    #include<stdlib.h>
    #define MAX_DIGITS 50

    int* read(void);
    void write(int*);
    int* add(int*, int*);
    int* mult1dig(int, int*);
    int* multiply(int*, int*);
    void shiftLeft(int* a);
    int* createZero();
    int length(int*);
    int cmp(int*, int*);
    int* subtract(int*, int*);
    int main(){
    printf("\n\n");
    int* a=read();
    int* b=read();
    int* c=add(a,b);
    printf("\n\n");
    write(a);
    printf("+");
    write(b);
    printf("=");
    write(c);
    printf("\n");
    c=multiply(a,b);
    write(a);
    printf("*");
    write(b);
    printf("=");
    write(c);
    c=subtract(a,b);
    printf("\n");
    write(a);
    printf("-");
    write(b);
    printf("=");
    write(c);
    delete(a);
    delete(b);
    delete(c);
    return (0);
    }

    int* read (void)
    {
    char* x=(char*)malloc(MAX_DIGITS*sizeof(char));
    int* result=(int*)malloc(MAX_DIGITS*sizeof(int));
    scanf("%s",x);
    int i,k,j=0 ;
    int end=MAX_DIGITS;
    for(i=0 ; i < MAX_DIGITS ; i++)
    if(x[i]=='\0'){
    end=i;
    break;}

    for(i=end-1 ; i>=0 ; i--){
    if(x[i]>='0' && x[i]<='9'){
    result[j++]=(x[i]-48);}


    for(k=j ; k<MAX_DIGITS ; k++)
    result[k]=0; }
    delete(x);
    return result;
    }


    void write(int* number) {
    int i,started=0;
    for(i=MAX_DIGITS-1 ; i>=0 ; i--){
    if(number[i]!=0)
    started=1;
    if(started==1)
    printf("%d",number[i]);
    }
    if(started==0)
    printf("0");
    }

    int* add(int* a, int* b){
    int* result=(int*)malloc(MAX_DIGITS*sizeof(int));
    int carry=0;
    for(int i=0 ; i<MAX_DIGITS ; i++){
    result[i]=a[i]+b[i]+carry;
    carry=result[i]/10;
    result[i]%=10;
    }
    return result;
    }

    int* mult1dig(int d, int* a){
    int* x=(int*)malloc(MAX_DIGITS*sizeof(int));
    int carry=0;
    for(int i=0 ; i<MAX_DIGITS ; i++){
    x[i]=d*a[i]+carry;
    carry=x[i]/10;
    x[i]%=10;
    }
    return x;
    }

    int* multiply(int* a, int* b){
    int* result=createZero();
    int* temp;
    for(int i=0 ; i<MAX_DIGITS; i++){
    temp=mult1dig(b[i],a);
    for(int k=0 ; k<i ; k++)
    shiftLeft(temp);
    //int* x=result;
    result=add(result,temp);
    }
    return result;
    }

    void shiftLeft(int* a){
    for(int i=MAX_DIGITS-1 ; i>0 ; i--){
    a[i]=a[i-1];
    }
    a[0]=0;
    }

    int* createZero(){
    int* result=(int*)malloc(MAX_DIGITS*sizeof(int));
    for(int i=0 ; i<MAX_DIGITS ; i++)
    result[i]=0;
    return result;
    }

    int length(int* number){
    int i;
    for(i=MAX_DIGITS-1 ; i>=0 ; i--){
    if(number[i]!=0)
    return i+1;
    }
    return 0;
    }

    int cmp(int* a, int* b){
    int n=length(a),m=length(b);
    if(n>m)
    return 1;
    if(n<m)
    return -1;

    for(int i=n-1 ; i>=0 ; i--){
    if(a[i]>b[i])
    return 1;
    if(a[i]<b[i])
    return -1;
    }
    return 0;
    }

    int* subtract(int* a, int* b){

    int c=cmp(a,b);
    int i;
    if(c==0)
    return createZero();
    if(c<0){
    int* t=a;
    a=b;
    b=t;
    }

    int* d=(int*)malloc(MAX_DIGITS*sizeof(int));
    int* result=(int*)malloc(MAX_DIGITS*sizeof(int));
    for(i=0 ; i<MAX_DIGITS ; i++)
    d[i]=a[i];
    a=d;
    for(i=0 ; i<MAX_DIGITS ; i++){
    if(a[i]>=b[i]){
    result[i]=a[i]-b[i];
    }else{
    int j;
    a[i]+=10;
    j=i+1;
    while(a[j]==0){
    a[j]=9;
    j++;
    }
    a[j]--;
    result[i]=a[i]-b[i];
    }
    }
    return result;
    }

  2. این کاربر از rell بخاطر این مطلب مفید تشکر کرده است


  3. #2
    داره خودمونی میشه s_0o0's Avatar
    تاريخ عضويت
    Jul 2006
    محل سكونت
    تهران
    پست ها
    56

    1 سلام

    ببخشید شما تابع بزرگترین عدد را در برنامه اصلی فراخوانی کردید ؟

    چون من هر چی برنامه اصلی را نگاه کردم ندیدم از چنین تابعی استفاده کرده باشید .

  4. این کاربر از s_0o0 بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •