loading...
دانشجویان نرم افزار دانشگاه خیام ورودی 92
چت باکس (ورژن جدید)
کدستان
آخرین ارسال های انجمن
ads1349 بازدید : 165 پنجشنبه 08 خرداد 1393 نظرات (4)

یکی از تمریناتی که استاد اکبری در کلاس حل تمرین گفتن این بود که:برنامه ای بنویسید که یک رشته عددی را دریافت کرده و آنرا به عدد تبدیل کرده و ضرب در 2 کند.

قانون کپی رایت:من روش حل این برنامه رو از آقای وفادار نیا پرسیدم و نوشتمش و امیدوارم دوستان استفاده کنند.توضیح برنامه رو در ادامه مطلب بخونید.

اول دو آرایه تعریف میکنیم.یکی از نوع char و یکی از نوع int.در آرایه نوع کاراکتری رشته ورودی کاربر رو ذخیره میکنیم و در آرایه نوع عدد صحیح هم کد های اسکی مربوط به کاراکتر های ورودی قرار میگیره(چطورش رو توضیح میدم).

char string1[30];

int str_ascii[30];

int string1_length;

int power=1;

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

gets(string1);

for(string1_length=0;string1[string1_length]!='';string1_length++);

دقت کنید که متغیر string1_length باید بصورت سراسری از قبل تعریف بشه.

حالا کد اسکی مربوط به هر یک از کاراکتر های رشته ورودی رو در آرایه str_ascii ذخیره میکنیم.

    for(int string1_index=0;string1[string1_index]!='';string1_index++)

    {

        str_ascii[string1_index]=(int)string1[string1_index];

 

    }

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

(int)string1[string1_index];

حالا ما یه آرایه داریم(str_ascii) که طولش با طول رشته برابر اما مقادیر خونه هاش بجای کاراکتر ها کد اسکی اونا هست.

در مرحله آخر یک حلقه for مینویسیم و شمارنده اون رو برابر یکی کمتر از طول رشته که قبلا بدست آوردیم میذاریم.این کل دستور for هست که خط به خط توضیح میدم.

    int index=string1_length;

    for(index--;str_ascii[index]>=48&&str_ascii[index]<=57;index--)

    {

        temp=str_ascii[index]-48;

        temp*=power;

        sum+=temp;

        power*=10;

    }

خط اول:اول یه توضیح بگم که بازه کد اسکی اعداد بین 48 تا 57 هست.یعنی کد اسکی عدد صفر برابر 48 و کد اسکی عدد نه برابر 57 هست.

حالا اگه کران پایین این بازه یعنی 48 رو ازکداسکی عددی کم کنیم خود اون عدد بدست میاد.مثلا کد اسکی عدد 5 برابر 53 هست و 48-53=5.عدد بدس اومده رو در یه متغیر کمکی(temp) نگه میداریم.

خط دوم:حالا این متغیر کمکی رو در متغیر power ضرب میکنیم.متغیر power نشاندهنده ارزش مکانی عدد هست.مقدار اولیه این متغیر 1 (یکان) بوده و هر دفعه که حلقه اجرا میشه مقدار اون در 10 ضرب میشه.برای مشخص شدن ارزش های مکانی طول رشته رو محاسبه کردیم و در این حلقه هم رشته رو از آخر به اول پیمایش میکنیم.(علت اینکه رشته رو برعکس پیمایش میکنیم)

خط سوم:بعد از اینکه ارزش مکانی عدد مشخص شد اونو با یه متغیری که مقدار اولیش صفر هست جمع میکنیم و در نهایت عدد مورد نظر تو همین متغیر تشکیل میشه.

خط چهارم:در این خط متغیری که نمانگر ارزش مکانی ارقام بود (power) ده برابر میشه.

و در آخر هم متغیر sum رو ضرب در 2 کرده و به عنوان جواب چاپ میکنیم.

امیدوارم کامل توضیح داده باشم.

موفق باشید 

 

 

 

 

 

 

مطالب مرتبط
ارسال نظر برای این مطلب
این نظر توسط ʍǿɦąʍʍąȡ در تاریخ 1393/03/09 و 21:45 دقیقه ارسال شده است

تو پرانتز, تو نظر قبل, هرچی \\ (بک اسلش) میبینین بردارینشکلک

سیستم امنیتی رزبلاگ, وقتی توش \' میزاریم, یدونه بک اسلش میزاره کنارش!

شما تو اون نظر قبل , هرچی \\بود رو حذف کنینشکلک بجز شرط حلقه که دیگه میدونین نباید مساوی با 0\\ باشه

این نظر توسط CodeCaster در تاریخ 1393/03/09 و 18:24 دقیقه ارسال شده است

بله راه ساده تری(فهمش سخت تر هست البته) هم مطمئناً هست اما این راه قابل فهم تر هست!

راه ساده تر اینکه بیایم عدد رو gets کنیم(مثلا 123)

مثلاً بریزیمش تو آرایه رشته ای به نام mychar

بعد یک حلقه بگیریم از 0 تا زمانیکه به null نرسیدیم(برای پیمایش آرایه رشته ای دیگه)
int finalanswer=0,power=1;
for (int i=0;mychar[i]!=\'\\0\';i )
int result = mychar[i] - \'0\';
finalanswer=finalanswer*power result*2;

دیگه حالا جزئیاتش شاید غلط باشه.... ولی درکل برای تبدیل 1 کارکتر به عدد(و اگر عدد نبود به کد اسکیش) و ذخیره اون در یک متغیر عددی, از این دستور استفاده میکنیم:
int result = MyCharacter - \'0\';
در result حالت عددیه عددی که توی MyCharacter نشسته رو خواهیم داشت....

ولی خوب بنظر من این راه سخت تر هست.... حفظش نه! فهمششکلک

این نظر توسط A.D.S در تاریخ 1393/03/09 و 11:16 دقیقه ارسال شده است

programmer:یکی از اهداف این وبلاگ تعمل علمی بین دانشجویان هست.اگه شما راه ساده تری دارید لطفا یه پست بذارید که دوستان استفاده کنند.ممنون

این نظر توسط programmer در تاریخ 1393/03/08 و 22:31 دقیقه ارسال شده است

راه خوبی بود. اماراه ساده تری هم وجود داره


کد امنیتی رفرش
اطلاعات کاربری
  • فراموشی رمز عبور؟
  • نویسندگان
    آمار سایت
  • کل مطالب : 42
  • کل نظرات : 172
  • افراد آنلاین : 3
  • تعداد اعضا : 39
  • آی پی امروز : 3
  • آی پی دیروز : 19
  • بازدید امروز : 5
  • باردید دیروز : 22
  • گوگل امروز : 0
  • گوگل دیروز : 0
  • بازدید هفته : 28
  • بازدید ماه : 27
  • بازدید سال : 108
  • بازدید کلی : 93,452