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

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




صفحه 1 از 3 123 آخرآخر
نمايش نتايج 1 به 10 از 25

نام تاپيک: راهنمایی برای استفاده کردن از اعداد بزرگتر از longint

  1. #1
    حـــــرفـه ای zed2's Avatar
    تاريخ عضويت
    Jul 2006
    پست ها
    9,540

    پيش فرض راهنمایی برای استفاده کردن از اعداد بزرگتر از longint

    سلام
    من برنامه ای دارم که باید اعداد بزرگتر از مقدار longint رو بتونه محاسبه و جواب بده .ولی هر چی کتاب برنامه نویسی را نگاه کردم چیزی در این مورد پیدا نکردم
    چجوری می تونم اعداد بزرگتر را تو برنامه بزارم؟

  2. #2
    پروفشنال Mehrdad-bx's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    ?Open source
    پست ها
    882

    پيش فرض

    سلام دوست عزیز،
    مشکلت با آرایه حل نمیشه؟ میتونی تابع جمع، ضرب، تفریق و... برای آرایت تعریف کنی و باهاشون کار کنی.

  3. #3
    حـــــرفـه ای zed2's Avatar
    تاريخ عضويت
    Jul 2006
    پست ها
    9,540

    پيش فرض

    میشه بیشتر راهنمایی کنید( من مبتدی ام)
    مثلا اگر برنامه من 2104317849 رو تو یک عدد مثلا 14 ضرب کند عددش تو مقدار longint جا نمیشه؟
    چجوری چنین جوابی رو درست چاپ کنم

  4. #4
    پروفشنال Mehrdad-bx's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    ?Open source
    پست ها
    882

    پيش فرض

    از آرایه بلدی استفاده کنی؟
    بیخیال longint! از اول با آرایه شروع کن.
    مثلا:
    یه آرایه که تو هر خونه اش یه رقمه(مثلا 50 خونه ای، یه عدد 50 رقمی). فهمیدی؟ بعد میام تابع جمع براش مینویسیم:
    از رقم آخر(یکان) شروع میکنیم جمع یا یکان دیگری، اگر از 9 بزگرتر بود رقمی بعدی رو +1 میکنیم.

    تا اینجا فهمیدی؟

  5. #5
    داره خودمونی میشه
    تاريخ عضويت
    Feb 2008
    پست ها
    161

    پيش فرض

    من برنامه ای دارم که باید اعداد بزرگتر از مقدار longint رو بتونه محاسبه و جواب بده .ولی هر چی کتاب برنامه نویسی را نگاه کردم چیزی در این مورد پیدا نکردم
    از نوع داده Int64 استفاده کنید که محدوده -2 به توان 63 تا 2 به توان 63 - 1 را پشتیبانی میکنه. برای اطلاعات بیشتر، به Help دلفی مراجعه کنید.

  6. #6
    داره خودمونی میشه BoomDoongDang's Avatar
    تاريخ عضويت
    Oct 2006
    پست ها
    76

    پيش فرض

    اگر میخوای با اعداد بیشتر از 64 بیت کار کنی ، باید یکی از این کارها رو بکنی :
    1- اون تایپ رو خودت پیاده سازی کنی . یک روشش همون آرایه هست که دوستمون گفت .
    2- از تایپ های متن باز منتشر شده توی اینترنت استفاده کنی . مثل DFFLib ، WinNTL و ... .

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

  7. #7
    حـــــرفـه ای zed2's Avatar
    تاريخ عضويت
    Jul 2006
    پست ها
    9,540

    پيش فرض

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

  8. #8
    پروفشنال Mehrdad-bx's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    ?Open source
    پست ها
    882

    پيش فرض

    آره.
    چه خوب منم با پاسکال از این کارا زیاد کردم.
    ببین تو توی هر خونه از آرایه میتونی یه عدد داشته باشی، ما این آرایه رو 100 تایی تعریف میکنیم تا 100 تا خونه داشته باشیم.
    بعد تو هر خونه تنها یه رقم میریزیم، یعنی خونه 100 آرایه یکان ما میشه و خونه دوم دهگان و...
    (البته راه استاندارد و اصولی استفاده از رشته هاست که پدرت درمیاد!)

    حالا این عدد صد (سد درسته، فرهنگستان ادب و زبان فارسی ...) رقمی رو با 9 که عددیست یه رقمی جمع میکنیم، مسلما نمیشه ولی ما تابعی مینویسیم که این رو با یکان جمع کنه، اگه یکان از 9 بیشتر شد منهای 10 میکندش و یکی به دهگان اضافه میکنه، حالا میتونیم تابعمون رو پیشرفته کنیم و جمع 100 رقمی با 100 رقمی رو که آسون هم هست بنویسیم.
    فهمیدی؟ اگه نه بگو ساده تر بگم، درضمن کد هم میزارم از دفعه بعد الان کار دارم ببخشید.

  9. #9
    حـــــرفـه ای zed2's Avatar
    تاريخ عضويت
    Jul 2006
    پست ها
    9,540

    پيش فرض

    باید کد بزارید تا بفهمم .
    الان فهمیدم که از لحاظ برنامه تو جمع باید یکانم رو ارایه 100 بزنم( در ارایه 100 خونه ای ) و جواب اگر ارایه بزرگتر از 9 شد یکانش رو تو خود ارایه( به کمک تقسیم بر 10 )می زارم و یک واحد به ارایه 99 اضافه می کنم بعد دهگان رو و همینجور به ترتیب...
    ولی تو ضرب اگر بخواهیم مثلا عدد 46 را از ورودی گرفتیم و به ترتیب تو ارایه گذاشتیم چجوری در 36 ضرب کنیم رقم اول جوابش میشه216 و دومین رقم جوابش میشه 144 که چون دهگان است 1440 چجوری این جواب هارو در ارایه بزاریم؟

  10. #10
    پروفشنال Mehrdad-bx's Avatar
    تاريخ عضويت
    Feb 2008
    محل سكونت
    ?Open source
    پست ها
    882

    پيش فرض

    ضرب رو ولش کن!
    فعلا جمع رو بنویسیم. آره، ما اول یه آرایه تعریف میکینم(اینا کلیت کاره و کد برنامه رو بعدا که یاد گرفتیم بزار تا درستش کنیم، اگه همنجوری که میخوام بریم راحت تبدیلش میکنیم و در تبدیل کردن مشکل نداره):

    a :array[1..100] of integer;

    ما قرارداد میکنیم تو هرخونه با توجه به اینکه integer هست یه رقم بیشتر نریزیم تا کارمان راحت شه. حالا این آرایه رو که به نظرمون یه عدد سد رقمی توش جا میشه باید پر کنیم، برای این کار سد تا خونه رو از کاربر میگیریم(میدونی چه جوری که؟)

    حالا ما یه آرایه 100 تایی داریم که طبق کار خود کاربر رقم اولی که زده رقم اول است، و رقم آخری که زده رقم سدم.
    نکته: کاربر برای پر کردن برای هر خونه یه عدد یه رقمی میزنه. یعنی هرخونه یه رقم از عدد سد رقمیه مائه، مثلا یکان.
    *حالا ما جدولی فرضی میکشیم که خونه اول آن جدول 1*100 (یک اوله، یعنی عرضه) سمت چپ باشد و رقم راستِ راست میشه رقم سدم که یکان هست و از نظر ریاضی هم جلوئه
    نکته قسمت ستاره دار:این یه توزیح چرت بود! فارسیش میشه اینکه رقم سدم رو میگیریم یکان و رقم 99 رو دهگان و..، یعنی برعکس عدد اندیس.

    حالا ما یه عدد سد رقمی داریم که هر رقم آن در یکی از خانه های آرایه ذخیره شده.یعنی یه عدد داریم که ذخیره آن در توان int64 هم نیست چه برسنه به longint! خب، حالا باید با این عدد کار کنیم ...

    به همین رویه ما یه عدد سد رقمی دیگه درست میکنیم تا این دو عدد رو با هم جمع کنیم و در یک آرایه 101 رقمی ذخیره کنیم.
    حالا ما دو تا آرایه داریم با 100 خانه یا سد رقم از هر کدوم از عدد هامون.

    برای جمع اینا به یک تابع (function) احتیاج داریم:

    چون تعریف تابع اینجوری که ورودی و خروجی آن آرایه باشه سخته و استفاده از var در تابع کار خوبی نیست و... ما یه procedure درست میکنیم و آرایه هامون رو جهانی (global) تعریف میکنیم تا در این procedure آنها رو تغییر بدیم)

    توضیحات: aو b دو آرایه سد تایی ما هستند و k متغییر 101 رقمیست که جواب را در آن میریزیم.

    procedure sum;
    var
    i,j : integer;
    begin
    for i := 100 downto 1 do
    begin
    k[i+1]:= a[i] + b[i];
    if (k[i+1] > 9) and (i<>1) then
    begin
    k[i+1]:=k[i+1]-10;
    k[i]:= k[i]+1;
    end;
    end;
    if k[2]> 9 then
    k[1]:=1
    else
    for i:=1 to 100 do
    k[i]:=k[i+1];
    end;

    برنامه رو در نوت پد کپی بگیر درست میشه(اگه نشد بگو فایلشو آپلود کنم برات)

    یه دور برنامه رو بخون اگه نفهمیدی بگو توضیحش میدم برات.

    یه نکته برای اندیس k و فرقش با بقیه: چون k ، 101 رقمیه و اون دو تا 100 رقمی و یکان آنها در اندیس 100 موجود است ولی یکان k باید در اندیس 101 باشد، چون ممکنه 101 رقمی شه، اگه 101 رقمی نشه آخر تابع(البته تابع نمیشه ترجمه procedure) همه ارقام رو یه دونه شیفت میده(جابجا میکنه، طوری که رقم یکان بیاد خونه 100 و رقم دهگان بره خونه 99)

    نکته پایانی: اینارو بفهمی حله همه چی، تابع ضرب مثلا برای ضرب در 5 میشه 5 بار آرایه رو با خودش جمع کنیم. برای اینکار هم میشه تابع ضرب نوشت(اصولیش اینه) که البته نوشتن تابع ضرب دیگه مثل آب خودنه.

    باز هم درخدمتم

صفحه 1 از 3 123 آخرآخر

Thread Information

Users Browsing this Thread

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

User Tag List

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

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