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

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




صفحه 2 از 3 اولاول 123 آخرآخر
نمايش نتايج 11 به 20 از 25

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

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

    پيش فرض

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

    تا حدودی فهمیدم
    ویرایش : تونستم کپی کنم .

    یک مقدار i و j تعریف کردیم
    بعد گفتیم از 100 شروع تا 1 انجام بده
    بعد گفتیم مقدارر k i از جمع a i و b i است که اگر k مقدار i+1 بزرگتر از 9 بشه و خود i مساوی 1 نشه
    شروع کنه مقدار k که i+1 است رو منهای 10 کنه بجاش بزاره و یک واحد به k ای i اضافه کنه.
    اینجا گفتیم اگر k 2 بزرگتر از 9 بود پس k 1 مساوی 1 (چرا؟)
    و همچنین برای 1 تا 100
    k[i]:=k[i+1]
    تمام
    این تو خود تابع اصلی استفاده میشه یا خودش یک تابع است؟

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

    13

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

    تا حدودی فهمیدم
    ویرایش : تونستم کپی کنم .

    یک مقدار i و j تعریف کردیم
    بعد گفتیم از 100 شروع تا 1 انجام بده
    بعد گفتیم مقدارر k i از جمع a i و b i است که اگر k مقدار i+1 بزرگتر از 9 بشه و خود i مساوی 1 نشه
    شروع کنه مقدار k که i+1 است رو منهای 10 کنه بجاش بزاره و یک واحد به k ای i اضافه کنه.
    اینجا گفتیم اگر k 2 بزرگتر از 9 بود پس k 1 مساوی 1 (چرا؟)
    و همچنین برای 1 تا 100
    k[i]:=k[i+1]
    تمام
    این تو خود تابع اصلی استفاده میشه یا خودش یک تابع است؟
    نه، یه اشتباه داشتی:
    مقدار k[i] جکع a i و b i نیست، جمع اون دو تا میشه k i+1. چون k 101 خونه داره.
    نکته: اون i اندیس آرایه است و منظور ما اینه که خونه ی i ام رو مساوی جمع a i و b i (مقدار موجود در خونه i اینا) قرار بده.
    چون k یه دونه جلوئه درواقع i برای a و b یکانه (خونه 100) و برای k دهگان(خونه 100)، پس برای k ما i+1 میزاریم تا یکان k یکان a و b با هم مقایسه شن(مقدارشون جمع شه).
    حالا گفتیم اگه جمع a i و b i بزگرتر شد از 9(دورقمی شد) چون هر خونه یه رقمه و دورقمی معنی نداره یه بسته ده تایی(ده تا ازش کم میکنیم) انتقال میدیم به دهگان(یه دونه به دهگان اضافه میشه).

    حالا چون for ما تا خونه 1 a و b میره ولی از طرفی تا خونه 2 k پس ممکنه که این خونه 2 رقمی بمونه، به همین دلیل بعد از for اصلی یه شرط گذاشتیم اگه دورقمی بود یه بسته ازش انتقال بده به خونه بعدی(با ارزش بالاتر).
    و بعد از شرط گفتیم اگه خونه 2 آرایه k دورقمی نبود رقم سدم رو به خونه 1 انتقال بده چون عدد با ارزش بالاتری نیست که درخونه 1 قرار بگیره و مثلا موقع چاپ رقم اول رو از خونه 1 مینویسه(که درواقع رقم اول اگه این کارو نکنیم خونه 2 میباشد)

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

    پيش فرض

    راستی یه سوال:
    کارت با int64 را نمیفته؟ اگه میفته و adsl داری لینک کامپایلر پاسکالو بهت بدم int64 رو داره. ولی خوب یاد گرفتن اینا هم بدردت میخوره زیاد

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

    پيش فرض

    نه، یه اشتباه داشتی:
    مقدار k[i] جکع a i و b i نیست، جمع اون دو تا میشه k i+1. چون k 101 خونه داره.
    نکته: اون i اندیس آرایه است و منظور ما اینه که خونه ی i ام رو مساوی جمع a i و b i (مقدار موجود در خونه i اینا) قرار بده.
    چون k یه دونه جلوئه درواقع i برای a و b یکانه (خونه 100) و برای k دهگان(خونه 100)، پس برای k ما i+1 میزاریم تا یکان k یکان a و b با هم مقایسه شن(مقدارشون جمع شه).
    حالا گفتیم اگه جمع a i و b i بزگرتر شد از 9(دورقمی شد) چون هر خونه یه رقمه و دورقمی معنی نداره یه بسته ده تایی(ده تا ازش کم میکنیم) انتقال میدیم به دهگان(یه دونه به دهگان اضافه میشه).

    حالا چون for ما تا خونه 1 a و b میره ولی از طرفی تا خونه 2 k پس ممکنه که این خونه 2 رقمی بمونه، به همین دلیل بعد از for اصلی یه شرط گذاشتیم اگه دورقمی بود یه بسته ازش انتقال بده به خونه بعدی(با ارزش بالاتر).
    و بعد از شرط گفتیم اگه خونه 2 آرایه k دورقمی نبود رقم سدم رو به خونه 1 انتقال بده چون عدد با ارزش بالاتری نیست که درخونه 1 قرار بگیره و مثلا موقع چاپ رقم اول رو از خونه 1 مینویسه(که درواقع رقم اول اگه این کارو نکنیم خونه 2 میباشد)
    این سبز رو میشه بهتر بگید نفهمیدم
    ایم زرده که زدم منظورتان این است که اگر k 2 دو رقمی نشد تمامی مقدار k i ها یک واحد برن عقب یعنی k2 بیا جای k1 و همینطور به ترتیب
    راستی یه سوال:
    کارت با int64 را نمیفته؟ اگه میفته و adsl داری لینک کامپایلر پاسکالو بهت بدم int64 رو داره. ولی خوب یاد گرفتن اینا هم بدردت میخوره زیاد
    نمیشه باید تو حالت استاندارد کار کنم

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

    پيش فرض

    زرد رو درست فهمیدی.

    درباره سبز:
    ببین، ما یه قرار دادی داشتیم که یکان خونه آخر باشه و دهگان خونه یکی مونده به آخر و... و بالاترین ارزش مکانی در خونه اول.

    خوب اینو داشته باش تا بعد ...(تا آخر پست میفهمی)

    از طرفی a و b هردو 100 رقمی اند، همونطور که ممکنه بدونی(میدونی) جمع دو عدد n رقمی میتونه n رقمی شه میتونه n+1 رقمی شه.(در اینکه یکان ها از 9 بزرگتر شن 10 تا ازشون کم شه و یه دونه به بعدی اضافه شه نه بیشتر از این قانون استفاده کردیم)

    پس با توجه با این نکته k یا 100 رقمیه یا 101 رقمی. برای احتیاط(درسّش همینه، اگه 100 رقمی بگیریم 101 رقمی شه چی؟) k رو میگیرم 101 خونه. و جمع رو شروع میکنیم ... . یکان میافته تو خونه 101(برای احتیاط دیگه و... ، پرانتز بالا!) و همینطور دهگان و ...(به خاطر همین اندیس k همیشه i+1 و اندیس دو آرایه دیگه i که یه دونه کمتره است)
    حالا آخرش چک میکنیم اگه خونه 2 دورقمی بود یعنی یه دونه رقم باید به خونه 1 اضافه شه(انتقال میدیم و از این 10 تا کم میکنیم). که در if اینو گفتیم.
    حالا آخر if داشتیم else، یعنی اگه خونه 2 دورقمی نبود، که در این صورت عدد ما 100 رقمیه(چون چیزی به خونه 1 اضافه نمیشه) یعنی ما عدد 100 رقمی داریم که بالاترین ارزش آن در خونه 2 است! پس خونه یک چی؟ مگه نباید تو اون باشه؟ به همین خاطر همه رو یه دونه میندازیم اینور(خونه های آرایه بقلی بگیر بازی میکنن! همه ارقام رو یه دونه میدن اونور) یا در اصطلاح شیفت میدیم. حالا با این کار ما خونه 1 بالاترین ارزش رو داره و خونه 101 بی مصرفه و حالا مقدار توش فرقی نداره، برای احتیاط در این حات میتونیم مقدار 101 رو منفی بزاریم تا وقتی چکش میکنیم اگه منفی بود یعنی الکیه و عدد ما 100 رقمیه.

    حالا فهمیدی؟(دوستان اگه شما هم نمیفهمید بگید، شاید من بد توضیح میدم، درحالیکه شاید به اشتباه فکر کنم سطح مطالب بالائه)

    راستی، کامپایلری که گفتم freepascal رو گفتم! استاندارده دیگه! تو لینوکس هم فقط اونه، از موقعی که دیگه دوره پاسکال تموم شد(برای کار حرفه ای، نه آموزش اولیه برنامه نویسی) تنها کامپایلری درست حسابی ایه که داره آپدیت میشه(اگه تو این دو سه سال متوقف نشده باشه) اینجا جاش نیست ولی اینم میگم به همین دلیله که خیلی کارای خفن و دلفی ای رو میشه توش انجام داد(مثلا بازی سه بعدی خیلی خفن با openGL نوشت، جدی میگم خودم نوشتم)

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

    پيش فرض

    زرد رو درست فهمیدی.

    درباره سبز:
    ببین، ما یه قرار دادی داشتیم که یکان خونه آخر باشه و دهگان خونه یکی مونده به آخر و... و بالاترین ارزش مکانی در خونه اول.

    خوب اینو داشته باش تا بعد ...(تا آخر پست میفهمی)

    از طرفی a و b هردو 100 رقمی اند، همونطور که ممکنه بدونی(میدونی) جمع دو عدد n رقمی میتونه n رقمی شه میتونه n+1 رقمی شه.(در اینکه یکان ها از 9 بزرگتر شن 10 تا ازشون کم شه و یه دونه به بعدی اضافه شه نه بیشتر از این قانون استفاده کردیم)

    پس با توجه با این نکته k یا 100 رقمیه یا 101 رقمی. برای احتیاط(درسّش همینه، اگه 100 رقمی بگیریم 101 رقمی شه چی؟) k رو میگیرم 101 خونه. و جمع رو شروع میکنیم ... . یکان میافته تو خونه 101(برای احتیاط دیگه و... ، پرانتز بالا!) و همینطور دهگان و ...(به خاطر همین اندیس k همیشه i+1 و اندیس دو آرایه دیگه i که یه دونه کمتره است)
    حالا آخرش چک میکنیم اگه خونه 2 دورقمی بود یعنی یه دونه رقم باید به خونه 1 اضافه شه(انتقال میدیم و از این 10 تا کم میکنیم). که در if اینو گفتیم.
    حالا آخر if داشتیم else، یعنی اگه خونه 2 دورقمی نبود، که در این صورت عدد ما 100 رقمیه(چون چیزی به خونه 1 اضافه نمیشه) یعنی ما عدد 100 رقمی داریم که بالاترین ارزش آن در خونه 2 است! پس خونه یک چی؟ مگه نباید تو اون باشه؟ به همین خاطر همه رو یه دونه میندازیم اینور(خونه های آرایه بقلی بگیر بازی میکنن! همه ارقام رو یه دونه میدن اونور) یا در اصطلاح شیفت میدیم. حالا با این کار ما خونه 1 بالاترین ارزش رو داره و خونه 101 بی مصرفه و حالا مقدار توش فرقی نداره، برای احتیاط در این حات میتونیم مقدار 101 رو منفی بزاریم تا وقتی چکش میکنیم اگه منفی بود یعنی الکیه و عدد ما 100 رقمیه.

    حالا فهمیدی؟(دوستان اگه شما هم نمیفهمید بگید، شاید من بد توضیح میدم، درحالیکه شاید به اشتباه فکر کنم سطح مطالب بالائه)

    راستی، کامپایلری که گفتم freepascal رو گفتم! استاندارده دیگه! تو لینوکس هم فقط اونه، از موقعی که دیگه دوره پاسکال تموم شد(برای کار حرفه ای، نه آموزش اولیه برنامه نویسی) تنها کامپایلری درست حسابی ایه که داره آپدیت میشه(اگه تو این دو سه سال متوقف نشده باشه) اینجا جاش نیست ولی اینم میگم به همین دلیله که خیلی کارای خفن و دلفی ای رو میشه توش انجام داد(مثلا بازی سه بعدی خیلی خفن با openGL نوشت، جدی میگم خودم نوشتم)
    همه را فهمیدم
    حالا تو ضرب چجوری ارایه را می نویسیم

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

    پيش فرض

    دیگه آسونه، به تعداد ضرب ها باید با خودش جمع شه.یعنی آرایه a به اضافه خودش میشه ضرب در 2. به اضافه خودش دوباره میشه ضرب در 3 و...
    از for استفاده میشه ولی میتونی(بهتره، اگه زیاد ضرب میکنی) یه تابع بنویسی که به مقدار q بار این عدد رو به اضافه خودش کنه(for). خوب مسلما q ورودی است. واینکه این کار برای اینه که هر بار میخوای ضرب کنی 1 خط کد بنویسی.

    این رو هم فهمیدی zed2 جان؟
    خوشحالم موفق شدی(جمع رو چون حداقل فهمیدی، اصلش اون بود)

    روشش همین بود، مثلا برای نوشتن 100! مسئله معروفی برای تازه کار هاست از این روش استفاده میشه و کلا رقم ها که از یه حدی بره بالاتر از این کار استفاده میکنن.

    راستی یه چیزی: چون ما در هر خونه فقط یه عدد 1 رقمی مینویسیم به صرفه نیست integer رو تعریف کنیم برای هر خونه، چون زیاد جا میگیره! البته اینی که گفتم مال زمانیه که پاسکال تازه اومده بود و دیگه آخرش بود و یکی اگه میگفت رم کامپیوترم 8 ه میلت میگفتن ی صدا : چی میگی؟!. فکر میکردن قاطی داره! برای صرفه جویی از این کارا میکردن که رم استفاده نشه.
    ولی تو هم سعی کن با این که 1 گیگ رم حداقل داری اینارو رعایت کنی. چون در بیشتر مسئله ها محدودیت استفاده از رم وجود داره و از این چیزایی کوچولو خودتو عادت بده ولخرجی نکنی!

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

    پيش فرض

    یه نکته دیگه: اگه میخوای از کاربر عدد رو بگیری چون یکم تابلوئه دونه دونه اینتر بزنه و درآخر مثلا یه عدد منفی بزنه!! میتونی(بهتره) از string استفاده کنی. اگه میخوای تو تاپیک جداگانه بزن منم تا جایی که بلدم کمکت میکنم

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

    پيش فرض

    دیگه آسونه، به تعداد ضرب ها باید با خودش جمع شه.یعنی آرایه a به اضافه خودش میشه ضرب در 2. به اضافه خودش دوباره میشه ضرب در 3 و...
    از for استفاده میشه ولی میتونی(بهتره، اگه زیاد ضرب میکنی) یه تابع بنویسی که به مقدار q بار این عدد رو به اضافه خودش کنه(for). خوب مسلما q ورودی است. واینکه این کار برای اینه که هر بار میخوای ضرب کنی 1 خط کد بنویسی.

    این رو هم فهمیدی zed2 جان؟
    خوشحالم موفق شدی(جمع رو چون حداقل فهمیدی، اصلش اون بود)

    روشش همین بود، مثلا برای نوشتن 100! مسئله معروفی برای تازه کار هاست از این روش استفاده میشه و کلا رقم ها که از یه حدی بره بالاتر از این کار استفاده میکنن.

    راستی یه چیزی: چون ما در هر خونه فقط یه عدد 1 رقمی مینویسیم به صرفه نیست integer رو تعریف کنیم برای هر خونه، چون زیاد جا میگیره! البته اینی که گفتم مال زمانیه که پاسکال تازه اومده بود و دیگه آخرش بود و یکی اگه میگفت رم کامپیوترم 8 ه میلت میگفتن ی صدا : چی میگی؟!. فکر میکردن قاطی داره! برای صرفه جویی از این کارا میکردن که رم استفاده نشه.
    ولی تو هم سعی کن با این که 1 گیگ رم حداقل داری اینارو رعایت کنی. چون در بیشتر مسئله ها محدودیت استفاده از رم وجود داره و از این چیزایی کوچولو خودتو عادت بده ولخرجی نکنی!
    یعنی اگر می خوایم 20! بگیریم می گیم که یک ارایه مثلا 100 تایی تعریف می کنیم و مقدار 1 رو تو خونه اول می زاریم و می گیم 1 ضرب شه یعنی یک بار ارایه با خودش ضرب میشه اگر بزرگتر از 9 بود تو خونه بعد یک واحد اضافه میشه و غیر این صورت خودش میره تو خونه .بعد می گیم اگر خونه 100 دورقمی بود یک واحد میده قبل خودش تقسیم بر 10 باقیمانده اش را می نویسیم اگر نبود می گم که کلا یک خونه بیاد عقب تا برسه خونه یک
    مثلا 5 فاکتوریل تا 24 حساب کردیم 4 تو خونه 100 و 2 تو خونه 99 بعد میگیم به تعداد د بار با خودش جمع می کنیم و هر با اتفاق بالا تا ضرب 5 تمام بشه.
    بعد قانون بالا رو استفاده می کنیم( برای جابه جایی تک تک)

    این درسته
    یه نکته دیگه: اگه میخوای از کاربر عدد رو بگیری چون یکم تابلوئه دونه دونه اینتر بزنه و درآخر مثلا یه عدد منفی بزنه!! میتونی(بهتره) از string استفاده کنی. اگه میخوای تو تاپیک جداگانه بزن منم تا جایی که بلدم کمکت میکنم

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

    شب هم هستید برنامه را برای چک بفرستم.

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

    پيش فرض

    یک سوال
    k[i+1]:= a[i] + b[i];

    مقدار a i و b i رو قبل از شروع کار procedure باید وارد کنیم که مقدار ش a i مقدار اولیه ان خانه است و مقدار b i مقداری است که از حاصل جمع قبلی بدست امده . تو ! این دو مقدار رو چجوری بنویسیم میشه راهنمایی کنید؟

Thread Information

Users Browsing this Thread

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

User Tag List

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

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