PDA

View Full Version : سوال: خواندن یک عدد 100 رقمی از ورودی و قرار دادن ان در یک ارایه 100 رقمی !



pckho0r
یک شنبه 24 آبان 1388, 23:25 عصر
نیاز دارم تا یک عدد 100 رقمی رو از ورودی بخونم و بعد هر رقم اون رو به ترتیب ورودی در یک ارایه صحیح 100 عنصری بریزم و البته نمی خوام که این اعداد رو یکی یکی بخونم بلکه قصد دارم همه رقم ها رو یک جا وارد کنم بعد enter کنم !

مثلآ به چیزی مثل تابع cin.get که رشته ورودی رو کاراکتر به کاراکتر میخونه نیاز دارم با این تفاوت که اعداد صحیح بازه 0 تا 9 رو یکی یکی بتونه بخونه و اون رو در متغیر مربوطه قرار بده.

ایا چنین تابعی وجود داره ؟ یا راه حل دیگه ای برای اینکار وجود داره ؟

pckho0r
دوشنبه 25 آبان 1388, 09:12 صبح
سوال شما یه خرده مبهمه ولی اگه منظورتونو درست فهمیده باشم،

بابت پاسختون بسیار ممنونم. در مورد مشکلی که داشتم بهتره اینطور توضیح بدم که بنده قصد داشتم تا یک ارایه یک بعدی 100 عضوی رو از طریق ورودی مقدار دهی کنم و لازم بود که این مقدارها بین 0 تا 9 باشند و البته قصد نداشتم که مقدارها رو یکی یکی وارد کنم و هر بار مجبور باشم که enter کنم !

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

در ضمن لطفآ در باره خط پنجم یه توضیحی بدید که چرا از 3 نگهبان استفاده کردید ؟ و این که مقادیر 0 ، 13 ، 10 چه چیزی رو کنترل می کنند ؟ خط جدید یا فاصله یا ... ؟ ایا این اعداد کد اسکی هستند یا مقدارهای صحیح ؟

queen-mm
دوشنبه 25 آبان 1388, 10:05 صبح
اگه منظورتون اينه كه يك عدد صد رقمي رو توي يه آرايه ي صد عضوي بريزه ولي كل آرايه رو يك جا دريافت كنه:



int main()
{ int n;
int a[100];
cin>>n;
for(int i=0;i<100;i++)
{
a[i]=n%10;
n/=10;
}
for (int i=99;i>=0;i--)
cout<<a[i]<<endl;
getch();
}


در ضمن 0 كد اسكي پايان رشته 10 كد اسكي خط جديد و 13 باعث مي شه اشاره گر برگرده به ابتداي خط و بقيه اطلاعات رو از اونجا بنويسه.

pckho0r
دوشنبه 25 آبان 1388, 18:30 عصر
queen-mm ممنون از توضیحاتت ولی فکر نمی کنم که نوع int گنجایش اعداد 100 رقمی رو داشته باشه ! تست کنید !

queen-mm
دوشنبه 25 آبان 1388, 21:16 عصر
queen-mm ممنون از توضیحاتت ولی فکر نمی کنم که نوع int گنجایش اعداد 100 رقمی رو داشته باشه ! تست کنید !
البته كه نداره.دقت نكردم منظورت 100 رقميه.فكر كردم منظورت عدد تا 100 هستش.ببنين منظورت اينه؟


int main()
{
char a[100];
cin.getline(a,100);

for (int i=0;i<=99;i++)
cout<<a[i]<<endl;
getch();
}

shask00l
سه شنبه 26 آبان 1388, 00:26 صبح
نیاز دارم تا یک عدد 100 رقمی رو از ورودی بخونم و بعد .........

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

پیروز باشید

pckho0r
چهارشنبه 27 آبان 1388, 19:36 عصر
سلام
با توجه به توضیحاتی که دادید فکر کنم دارید برنامه ی جمع عددی و اعمال ریاضی روی رشته رو مینویسید . اگه اینجوریه ...... نیاز نیست که حتما اعداد رو تک تک بگیرید . یه تابع برای مثلا جمع بنویسید که دوتا رشته بگیره . بعد چک کنه که اون دوتا رشته محتوی چیز دیگه ای بغیر از عدد نباشن. بعد از انتها رقم به رقم با هم جمع بزنه . اگه یه خورده به هم ریخته توضیح دادم میبخشید .

پیروز باشید

نه بنده قصد دارم برنامه ای بنویسم که دو تا عدد 100 رقمی صحیح رو با هم جمع بزنه ، برای این کار میخوام الگوریتمی رو انتخاب کنم که اعداد رو از ورودی بگیره و اونها رو داخل ارایه بریزه بعد عناصر ارایه رو یک به یک از انتها با هم جمع کنه و در ارایه سوم بریزه و در صورت وجود رقم نقلی اون رو با خانه بعدی جمع بزنه !

حالا اگر کسی الگوریتم ساده تری میشناسه ممنونم میشم که توضیح بده ، البته این یک تمرین دانشجویی نیست بلکه یکی از مسئله های انتهای فصل کتابی هست که در حال خوندنشم !

queen-mm
چهارشنبه 27 آبان 1388, 23:21 عصر
دوست عزيز مگه كد من خيلي سخت بود؟فقط دو خط بود!!!كد من خيلي رلحت در يك بار كل آرايه رو مي گيره.مي توني دو بار تعريفش كني و راحت خونه ها رو بخوني و هر كاري مي خواي روش انجام بدي.فكر نكنم چندان كار سختي باشه!!!

shask00l
چهارشنبه 27 آبان 1388, 23:58 عصر
مراحل کار به این صورته
0. متغییر c=0 رو از نوع int تعریف کن
1. رشته ی اول و دوم رو از ورودی بگیر و در str1 و str2 قرار بده //(دقت کن که گفتم رشته ..)
2. طول رشته ی اول رو در l1 و طول رشته دوم رو در l2 قرار بده .
3. اگر l1>l2 یک رشته به اندازه l1 بساز و str2 رو بریز توش و max رو مساوی l1 قرار بده در غیر این صورت یه رشته به اندازه l2 بساز و str1 رو بریز توش و max رو مساوی l2 قرار بده.
31. رشته که قراره جواب توش ذخیره بشه رو به نام out و اندازه max ایجاد کن
// خط بالا برای اینه که دوتا رشته هم اندازه باشن . دقت کن که عدد کوچکتر باید به سمت راست رشته ساخته شده اضافه بشه
4. بلوک کد زیر رو به اندازه max تکرار کن . // با یک حلقه for که از i=max تا صفر با step منفی میره
{
5. اگر c=1 انگاه out(i)=out(i)+1 و c=0 //اینجا carry به جواب اضافه میشه
6. out(i)=out(i)+str1(i)+str2(i)
// توی خط بالا از همون نام متغییر های اولیه رشته برای محاسبات استفاده شده . توی خط 3 یک بار نامو اندازه یکی این متغییر ها تغییر کرده . من اینجا فرض کردم که فقط اندازه ی رشته ی قبلی رو افزایش دادیم و اسمش همونه
7. اگر out(i)>10 انگاه out(i)=out(i)-10 و c=1
}
8. اگر c=1 آنگاه سرریز وجود دارد .

همین . اصل نکته ی کد توی حلقه هست .
اگر جایی نیاز به توضیح داشت بگو توضیح بدم . ضمنا اینو همین جا نوشتم . اگه خطایی داشت پیشاپیش عذر خواهی میکنم:چشمک: