نمایش نتایج 1 تا 15 از 15

نام تاپیک: پاسکال: جمع دو عدد 20 رقمی

  1. #1

    Exclamation پاسکال: جمع دو عدد 20 رقمی

    سلام دوستان
    یه برنامه نوشتم که توش مشکل دارم
    برنامه ای که دو عدد 20 رقمی رو در پاسکال با هم جمع کنه
    همونطور که می دونید در پاسکال بزرگترین بازه رو اعداد longint تشکیل می دن که اونام 10 رقمن.
    یه برنامه با کمک آرایه ها نوشتم اما مشکل اینجاست که بیت تک تک رقم ها باید space زد .
    اگه بتونیم طوری تعریف کنیم که تمامی ارایه های ورودی تک رقمی هستن مشکل حله.

    اینم سورس برنامه:

    {Written By SAJJAD RAD}

    program gold_digit;
    uses crt;
    var
    a,b,c:array[1..100]of integer;
    i,n,temp:integer;
    begin
    clrscr;
    writeln('This Program Is Written By SAJJAD RAD');
    writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
    writeln;
    textcolor(red);
    writeln('Guide:');
    writeln('For enter numbers seprate the digit by space key!');
    textcolor(white);
    writeln;
    writeln('Enter 20 digit number #1:');
    for i:=1 to 20 do
    read (a[i]);
    readln;
    writeln('Enter 20 digit number #2:');
    for i:=1 to 20 do
    read (b[i]);
    readln;
    for i:=20 downto 1 do
    begin
    temp:=0;
    temp:=a[i]+b[i];
    if i=1 then
    begin
    c[i]:=temp;
    break;
    end;
    if temp>9 then
    begin
    n:=temp mod 10;
    c[i]:=n;
    a[i-1]:=1+a[i-1];
    end;
    if temp<=9 then
    c[i]:=temp;
    end;
    writeln;
    write('Sum of two 20 digit numbers is= ');
    for i:=1 to 20 do
    write(c[i]);
    writeln('Press Any Key To Exit...');
    writeln;
    readln;
    end.


    لطفا هر چه زودتر برام جواب پست کنید ممنون

  2. #2

    Lightbulb نقل قول: درخواست کمک در برنامه نویسی پاسکال

    یه برنامه با کمک آرایه ها نوشتم اما مشکل اینجاست که بیت تک تک رقم ها باید space زد .
    براي اينكه از Space استفاده نكني به جاي اين كد :


    writeln('Enter 20 digit number #1:');
    for i:=1 to 20 do
    read (a[i]);


    از كد زير استفاده كن :


    writeln('Enter 20 digit number #1:');
    for i:=1 to 20 do
    a[i]:= ReadKey;

  3. #3

    Wink نقل قول:جواب دوست عزیز دلفی

    از كد زير استفاده كن :

    کد:
    writeln('Enter 20 digit number #1:');
    for i:=1 to 20 do
    a[i]:= ReadKey;
    دوست عزیز ممنون که به سوالم اهمیت دادی
    اما وقتی این دستور رو در برنامه می نویسم خطا تایپ میده:


    ممنون....کمکم کن اطفا

  4. #4

    نقل قول: درخواست کمک در برنامه نویسی پاسکال

    راستی مکان نما هم موقع خطا روی دستور readkey هستش.
    بازم ممنون
    منتظرم

  5. #5

    Lightbulb نقل قول: جواب دوست عزیز دلفی

    نقل قول نوشته شده توسط sajjadrad مشاهده تاپیک
    دوست عزیز ممنون که به سوالم اهمیت دادی
    اما وقتی این دستور رو در برنامه می نویسم خطا تایپ میده:

    ممنون....کمکم کن اطفا

    خروجي تابع Readkey از نوع Char ميباشد پس شما بايد آرايه a رو از نوع Char تعريف كنيد .
    آخرین ویرایش به وسیله دلفــي : دوشنبه 30 آذر 1388 در 15:45 عصر

  6. #6

    Talking نقل قول: درخواست کمک در برنامه نویسی پاسکال

    خروجي تابع Readkey از نوع Char ميباشد پس شما بايد آرايه a رو از نوع Char تعريف كنيد .
    درسته اما مشکل اینجاست که char قابل جمع کردن نیست.
    کد زیر رو ببینید:
     for i:=20 downto 1 do
    begin
    temp:=0;
    temp:=a[i]+b[i];
    if i=1 then
    begin
    c[i]:=temp;
    break;
    end;
    if temp>9 then
    begin
    n:=temp mod 10;
    c[i]:=n;
    a[i-1]:=1+a[i-1];
    end;
    if temp<=9 then
    c[i]:=temp;
    end;

    بعد از خوندن آرایه ها باید اونا رو جمع کرد..
    بازم ممنون..
    منتظر جوابتون هستم

  7. #7
    کاربر دائمی
    تاریخ عضویت
    آبان 1388
    محل زندگی
    اصفهان
    پست
    204

    نقل قول: پاسکال: جمع دو عدد 20 رقمی

    سلام؛

    فكر نكنم تبديل كاراكتر به عدد كار سختي باشه. كافيه از ORD(CH) - 48 استفاده كني.


    يا علي... موفق باشي...

  8. #8

    نقل قول: پاسکال: جمع دو عدد 20 رقمی

    فكر نكنم تبديل كاراكتر به عدد كار سختي باشه. كافيه از ORD(CH) - 48 استفاده كني.
    درسته دوست عزیز میشه کداسکی رو بدست آورد و 48 واحد کم کرد..اما این برای موقعیه که بخوایم char ما فقط عدد باشه...اما برنامه نمیفهمه که ما char رو به عدد تبدیل کردیم...بازم سر جمع خطا کامپایلری میده چون متغیر های char با هم جمع شدن که این غیر عادیه...اما اگه بتونیم کاری کنیم که ورودی ارایه های integer تک رقمی فرض بشن مشکل حله.من تو یجا دیده بودم که واسه Read طول میدان تعریف کرده بود امابازم جواب نمدیده...از نظراتتون ممنون..
    کمکم کنییییید
    لطفااااااااااااا

  9. #9

    Lightbulb نقل قول: پاسکال: جمع دو عدد 20 رقمی

    نقل قول نوشته شده توسط sajjadrad مشاهده تاپیک
    درسته دوست عزیز میشه کداسکی رو بدست آورد و 48 واحد کم کرد..اما این برای موقعیه که بخوایم char ما فقط عدد باشه...اما برنامه نمیفهمه که ما char رو به عدد تبدیل کردیم...بازم سر جمع خطا کامپایلری میده چون متغیر های char با هم جمع شدن که این غیر عادیه...اما اگه بتونیم کاری کنیم که ورودی ارایه های integer تک رقمی فرض بشن مشکل حله.من تو یجا دیده بودم که واسه Read طول میدان تعریف کرده بود امابازم جواب نمدیده...از نظراتتون ممنون..
    کمکم کنییییید
    لطفااااااااااااا
    دوست عزيز شما چرا مساله رو پيچيده ترش ميكنيد ، براي اينكه برنامتون كار بكنه كافيه در كد برنامه هر جا از
     a[i] 
    و امثال اون استفاده كرديد بجاش
     Ord(a[i])-48 
    و هر جا هم از
     temp 
    و امثال اون استفاده شده به جاش از
     Chr(temp) 
    استفاده كنيد !
    آخرین ویرایش به وسیله دلفــي : سه شنبه 01 دی 1388 در 11:48 صبح

  10. #10

    نقل قول: پاسکال: جمع دو عدد 20 رقمی

    دوستان ممنون که بهم اهمیت میدین

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


    راستی کدی که گفتید رو اجرا کردم...بازم متاسفانه کار نمیکنه



    وست عزيز شما چرا مساله رو پيچيده ترش ميكنيد ، براي اينكه برنامتون كار بكنه كافيه در كد برنامه هر جا از کد:
    a[i]
    و امثال اون استفاده كرديد بجاش کد:
    Ord(a[i])-48
    و هر جا هم از کد:
    temp
    و امثال اون استفاده شده به جاش از کد:
    Chr(temp)
    استفاده كنيد !

    واقعا شرمنده شمام

  11. #11

    Lightbulb نقل قول: پاسکال: جمع دو عدد 20 رقمی

    نقل قول نوشته شده توسط sajjadrad مشاهده تاپیک
    دوستان ممنون که بهم اهمیت میدین

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


    راستی کدی که گفتید رو اجرا کردم...بازم متاسفانه کار نمیکنه

    واقعا شرمنده شمام
    دوست عزيز به اين صورت بنويس :
    البته من اين كد رو تو NotePad تايپ كردم اگه غلط دستوري داشت خودت اصلاحش كن .

    program gold_digit;
    uses crt;
    var
    a,b,c:array[1..100]of Char;
    i,n,temp:integer;
    begin
    clrscr;
    writeln;
    textcolor(red);
    writeln('Guide:');
    textcolor(white);
    writeln;
    writeln('Enter 20 digit number #1:');
    for i:=1 to 20 do
    a[i]:= ReadKey;
    readln;
    writeln('Enter 20 digit number #2:');
    for i:=1 to 20 do
    b[i]:= ReadKey;
    readln;
    for i:=20 downto 1 do
    begin
    temp:=0;
    temp:=(Ord(a[i])-48)+(Ord(b[i])-48);
    if i=1 then
    begin
    c[i]:=Chr(temp);
    break;
    end;
    if temp>9 then
    begin
    n:=temp mod 10;
    c[i]:=Chr(n);
    a[i-1]:=1+(Ord(a[i-1])-48);
    end;
    if temp<=9 then
    c[i]:=Chr(temp);
    end;
    writeln;
    write('Sum of two 20 digit numbers is= ');
    for i:=1 to 20 do
    write(c[i]);
    writeln('Press Any Key To Exit...');
    writeln;
    readln;
    end.

  12. #12
    کاربر دائمی آواتار Hamid.Kad
    تاریخ عضویت
    آبان 1385
    محل زندگی
    پُشت هیچستانم...
    پست
    349

    نقل قول: پاسکال: جمع دو عدد 20 رقمی

    چرا اینجوری ننوشتید؟

    C:Char;
    c:=ReadKey;
    a[i]:= Ord(C)-48;

    دیگه لازم نیست تعریف آرایه رو بصورت Char بنویسید

  13. #13

    Talking نقل قول: پاسکال: جمع دو عدد 20 رقمی

    سلام دوستان
    واقعا ممنونم که کمکم کردید مخصوصا دوست عزیزم دلفی
    دوست عزيز به اين صورت بنويس :
    البته من اين كد رو تو NotePad تايپ كردم اگه غلط دستوري داشت خودت اصلاحش كن .
    واقعا ممنون چون رویه کارت باعث شد بتونم مساله رو حل کنم
    برنامه شما در این قسمت:
    c[i]:=Chr(temp);
    اضافی بود یعنی برای ریختن مقدار توی c[i] نیازی به تبدیل اون به کاراکتر نیست.و این کار برنامه رو فغلط میکنه.
    در ضمن در قسمت:
    a[i-1]:=1+(Ord(a[i-1])-48);
    بعد از اینکه یک واحد اضافه شد دوباره باید chr اون رو توی a[i-1] بریزیم.
    در هر صورت کد کامل برنامه رو که دوستان عزیزم بهم کمک کردن بنویسم رو میزارم:

    {Written By SAJJAD RAD}

    program gold_digit_com2;
    uses crt;
    var
    a,b:array[1..256]of char;
    c:array[1..256]of integer;
    i,n,temp,p:integer;
    flog:boolean;
    begin
    clrscr;
    textcolor(13);
    writeln('This Program Is Written By SAJJAD RAD sajjad.273@gmail.com');
    writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
    writeln('Sum Of Two X Digit(s) Numbers:Complete version');
    textcolor(white);
    writeln;
    writeln;
    textcolor(white);
    writeln;
    writeln('How Many Digits To Sum? Range 1~255');
    readln(p);
    writeln('Enter ',p,' digit(s) number #1:');
    flog:=true;
    for i:=1 to p do
    begin
    if flog=false then
    break
    else
    a[i]:= ReadKey;
    if ord(a[i])>57 then
    flog:=false;
    write(a[i]);
    end;
    writeln;
    if flog=true then
    writeln('Enter ',p,' digit(s) number #2:');
    for i:=1 to p do
    begin
    if flog=false then
    break
    else
    b[i]:= ReadKey;
    write(b[i]);
    end;
    writeln;
    for i:=p downto 1 do
    begin
    if flog=false then
    break
    else
    temp:=0;
    temp:=(ord(a[i])-48)+(ord(b[i])-48);
    if i=1 then
    begin
    c[i]:=temp;
    break;
    end
    else if temp>9 then
    begin
    n:=temp mod 10;
    c[i]:=n;
    a[i-1]:=chr(ord(a[i-1])-47);
    end
    else if temp<=9 then
    c[i]:=temp;
    end;
    writeln;
    if flog=false then
    begin
    textcolor(red);
    writeln('Error! You didn''t enter digit of number');
    textcolor(white);
    end
    else
    begin
    write('Sum of two ',p,' digit(s) numbers is= ');
    for i:=1 to p do
    write(c[i]);
    end;
    writeln;
    writeln;
    writeln('Press Any Key To Exit...');
    writeln;
    readln;
    end.


    این برنامه بجای 20 رقم قادر به جمع دو عدد n رقمی هست اما برای کمتر استفاده شدن حافظه نهایتا 255 رقم در نظر گرفتم.که به راحتی قابل تغییره
    بازم از دلفی عزیز ممنونم
    واقعا اگر راهنمایی های ایشون نبود این مساله حل نمیشد.

  14. #14

    Lightbulb نقل قول: پاسکال: جمع دو عدد 20 رقمی

    اين هم تابع جمع دو عدد n رقمي در دلفي :

    https://barnamenevis.org/showth...417#post877417

  15. #15

    Smile نقل قول: پاسکال: جمع دو عدد 20 رقمی

    نقل قول نوشته شده توسط sajjadrad مشاهده تاپیک
    سلام دوستان
    واقعا ممنونم که کمکم کردید مخصوصا دوست عزیزم دلفی

    واقعا ممنون چون رویه کارت باعث شد بتونم مساله رو حل کنم
    برنامه شما در این قسمت:

    اضافی بود یعنی برای ریختن مقدار توی c[i] نیازی به تبدیل اون به کاراکتر نیست.و این کار برنامه رو فغلط میکنه.
    در ضمن در قسمت:

    بعد از اینکه یک واحد اضافه شد دوباره باید chr اون رو توی a[i-1] بریزیم.
    در هر صورت کد کامل برنامه رو که دوستان عزیزم بهم کمک کردن بنویسم رو میزارم:

    {Written By SAJJAD RAD}

    program gold_digit_com2;
    uses crt;
    var
    a,b:array[1..256]of char;
    c:array[1..256]of integer;
    i,n,temp,p:integer;
    flog:boolean;
    begin
    clrscr;
    textcolor(13);
    writeln('This Program Is Written By SAJJAD RAD sajjad.273@gmail.com');
    writeln('(c) 2009 Radtech Corporation.All Right Reserved.');
    writeln('Sum Of Two X Digit(s) Numbers:Complete version');
    textcolor(white);
    writeln;
    writeln;
    textcolor(white);
    writeln;
    writeln('How Many Digits To Sum? Range 1~255');
    readln(p);
    writeln('Enter ',p,' digit(s) number #1:');
    flog:=true;
    for i:=1 to p do
    begin
    if flog=false then
    break
    else
    a[i]:= ReadKey;
    if ord(a[i])>57 then
    flog:=false;
    write(a[i]);
    end;
    writeln;
    if flog=true then
    writeln('Enter ',p,' digit(s) number #2:');
    for i:=1 to p do
    begin
    if flog=false then
    break
    else
    b[i]:= ReadKey;
    write(b[i]);
    end;
    writeln;
    for i:=p downto 1 do
    begin
    if flog=false then
    break
    else
    temp:=0;
    temp:=(ord(a[i])-48)+(ord(b[i])-48);
    if i=1 then
    begin
    c[i]:=temp;
    break;
    end
    else if temp>9 then
    begin
    n:=temp mod 10;
    c[i]:=n;
    a[i-1]:=chr(ord(a[i-1])-47);
    end
    else if temp<=9 then
    c[i]:=temp;
    end;
    writeln;
    if flog=false then
    begin
    textcolor(red);
    writeln('Error! You didn''t enter digit of number');
    textcolor(white);
    end
    else
    begin
    write('Sum of two ',p,' digit(s) numbers is= ');
    for i:=1 to p do
    write(c[i]);
    end;
    writeln;
    writeln;
    writeln('Press Any Key To Exit...');
    writeln;
    readln;
    end.
    این برنامه بجای 20 رقم قادر به جمع دو عدد n رقمی هست اما برای کمتر استفاده شدن حافظه نهایتا 255 رقم در نظر گرفتم.که به راحتی قابل تغییره
    بازم از دلفی عزیز ممنونم
    واقعا اگر راهنمایی های ایشون نبود این مساله حل نمیشد.

    دوست عزيز موقع كامپايل در ست كامپايل ميشه ولي موقع اجر ا خطاي زير رو مگيره
    (خطاي تقسيم بر صفر)
    ERROR 200 : Division by Zero


    مشكل كجاست لطفا بررسي نماييد

    با تشكر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •