PDA

View Full Version : الگوریتم برگرداندن تعداد اعشار



vbapr2005
دوشنبه 02 آبان 1384, 11:57 صبح
سلام.
الگوریتمی میخوام که یه عدد اعشاری بخونه و تعداد رقم های اعشارش رو برگردونه
البته مطمئنم که میشه نیم ساعته درسش کرد چون چیز پیچیده ای نباید باشه

به هر حال منم سعی خودمو می کنم :لبخندساده

someCoder
دوشنبه 02 آبان 1384, 20:56 عصر
عدد باید رشته ای باشه و اگر float یا همون real باشه، نمیشه

vbapr2005
سه شنبه 03 آبان 1384, 05:35 صبح
عدد باید رشته ای باشه و اگر float یا همون real باشه، نمیشه
میشه یه کمی بیشتر توضیح بدی؟

mzjahromi
سه شنبه 03 آبان 1384, 09:39 صبح
ابزار برنامه نویسی؟
با دلفی اینجوریه


C:=0;
while Trunc(F)<F Do
Begin
f:=F*10;
c:=C+1;
End;

vbapr2005
سه شنبه 03 آبان 1384, 13:31 عصر
ابزار برنامه نویسی؟
اینو من برای مقلوب یه عدد گفته بودم:

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

با توجه به این مطلب لطفا جواب بدین

mzjahromi
شنبه 07 آبان 1384, 14:19 عصر
پس فرمت عددت چطوریه؟

vbapr2005
دوشنبه 09 آبان 1384, 12:35 عصر
باورت نیمشه اما تا الان که فکر کنم 4، 5 جلسه ای از یاد گرفتن الگوریتم داره میگذره، تا حالا حتی یه بار هم کلمه ی "فرمت" تو کلاس گفته نشده.

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

Sepidar
سه شنبه 10 آبان 1384, 08:28 صبح
جواب اینجور سوالا گاهی یه کم فلسفی میشه. یه بار یه تاپیک زده شد برای نوشتن تابع قدر مطلق بدون استفاده از دستورات شرطی.... خیلی سرش بحث شد و نتیجه نهایی هم این بود که شدن یا نشدن این کار بسته به دیدگاه شما به دستورات سطح ماشین داره....
این مساله خاص هم، تا حدودی شبیه مثالیه که گفتم: وقتی دارید از توابع جزءصحیح، ترانک یا نظایر اینها استفاده می کنیم، باید توجه داشته باشیم که خود این توابع به طور داخلی دارن بر اساس فرمت ذخیره عدد در ماشین عمل می کنند. پس دقت کنیم که چه چیزهایی رو داریم مبنا قرار میدیم.

someCoder
سه شنبه 10 آبان 1384, 15:12 عصر
میشه یه کمی بیشتر توضیح بدی؟
اگر عدد بصورت اعشاری ذخیره شده باشه دیگه دقیق نیست و تقریبی ذخیره میشه. بنابراین شمردن ارقام اعشاریش کار درستی نیست. برای همین گفتم عدد باید بصورت رشته ای گرفته بشه. یعنی فرض کنی یه رشته داری میگیری و تعداد کارکتر های بعد از اعشار رو بشمری

vbapr2005
پنج شنبه 12 آبان 1384, 03:14 صبح
Sepidar درسته. من هم تا حالا بهش فکر کرده بودم.
بعضی وقتها هم به این فکر می کنم که چجوری به زبون های برنامه نویسی مفهوم «یا» یا «و» رو می فهمونن تازه اونم با صفر و یک!!!! واقعا آدم پدرش در میاد.

someCoder از جواب تو هم میشکرم اما:

اگر عدد بصورت اعشاری ذخیره شده باشه دیگه دقیق نیست و تقریبی ذخیره میشه. بنابراین شمردن ارقام اعشاریش کار درستی نیست.
1.2 که دیگه تقریبی نیستش. دقیقه

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

someCoder
دوشنبه 16 آبان 1384, 00:17 صبح
1.2 که دیگه تقریبی نیستش. دقیقه
بعضیها ممکنه دقیق باشند اما بعضیها هم نیستند. این بخاطر تغییر مبنا هست. مثلا فرض کن 1/3 رو اگر بخوای بصورت اعشاری در مبنای 10 نشون بدی میشه 0.3333333333333 ولی همین عدد در مبنای 3 میشه (0.1). حالا تو هم وقتی یه عدد رو از مبنای 10 میبری تو مبنای 2 ممکنه نشه نشونش داد و بنابراین تقریبی ذخیره میشه.


آخه اونجوری خیلی بدبختی داریم: باید بیایم سرچ کنیم و ممیز رو پیدا کنیم.
اگر اسم یه حلقه while رو میذاری بدبختی، ما برنامه نویسها آدمهای بدبختی هستیم! ;) اما در این مورد راه دیگه ای نیست

vbapr2005
سه شنبه 17 آبان 1384, 03:09 صبح
بعضیها ممکنه دقیق باشند اما بعضیها هم نیستند.
اون چیزی که کاربر باید بنویسه یه عدد اعشاری در مبنای 10 هه. یعنی نمیتونه بنویسه 1/3 (یعنی «یک سوم») و باید دقیقا یه عدد اعشاری بنویسه. اینجوری دیگه عددی که مینویسه دوره ی تناوب نداره حتی اگر هم بنویسسه 0.3333333333333 بالاخره این عدد تموم میشه و دقیقا برابر با یک سوم نیست. پس دیگه میتونیم تعداد اعشار رو بگیم.

اگر اسم یه حلقه while رو میذاری بدبختی، ما برنامه نویسها آدمهای بدبختی هستیم! ;) اما در این مورد راه دیگه ای نیست
متاسفانه حلقه ی while ای وجود نداره. تا اونجایی که من میدونم باید از یه حلقه ی الگوریتمی (منظورم حلقه هایی هشست که تو الگوریتم داریم) استفاده کنیم. حالا فرض کن این حلقه رو (که کار آسونی هم هست) ایجاد کنیم. خب، توی حلقه چی میخوای بگی؟ چجوری میخوای تمام کاراکتر ها رو بررسی کنی؟ تا بعد اونا رو با "." مقایسه کنی؟

vbapr2005
سه شنبه 24 آبان 1384, 13:21 عصر
الگوریتم برگردوندن تعداد اعشار یه عدد اینه:

1 - n را بخوان
2 - i -> 1 , 0 -> A
3 - اگر براکت n با n برابر است چاپ کن "صفر" و توقف کن
4 - n - [n] -> A
5 - اگر براکت A*(10^i) با خود A*(10^i) برابر است آنگاه چاپ کن i را و توقف کن
6 - i + 1 -> i و برو به 5

به همین سادگی!

HosseinOjvar
شنبه 28 آبان 1384, 09:50 صبح
این بچه بازی ها را بگذارید کنار. دنبال کار کردن با کتابخانه های بالاتر همانند Directx9c و ...... باشد.
Thanks.

vbapr2005
شنبه 28 آبان 1384, 21:58 عصر
این بچه بازی ها را بگذارید کنار. دنبال کار کردن با کتابخانه های بالاتر همانند Directx9c و ...... باشد.
Thanks.
عزیز دل برادر تو فقط نباید از چیزایی که بقیه ساختن استفاده کنی (یعنی حداقل من و اونایی که تو فروم الگوریتم تاپیک میدن نمیخوایم اینجوری باشیم)

jahednarimani
یک شنبه 29 آبان 1384, 02:35 صبح
salam
age mishe yek barname be zabane paskal mikhastam dar morede algoritmhaye fifo , sjf , srt , fcfs , rr , baraye 5 prases ke zamane khedmateshan be tartib 3, 6,4,5,2 astva zamane vorodeshan be tartib 0,2,4,6,8 ast. khaheshan javab bedin

vbapr2005
دوشنبه 30 آبان 1384, 12:22 عصر
salam
age mishe yek barname be zabane paskal mikhastam dar morede algoritmhaye fifo , sjf , srt , fcfs , rr , baraye 5 prases ke zamane khedmateshan be tartib 3, 6,4,5,2 astva zamane vorodeshan be tartib 0,2,4,6,8 ast. khaheshan javab bedin
سلام جاهد
1) من متاسفانه از الگوریتم های fifo , sjf , srt , fcfs , rr چیزی نمیدونم
2) لطفا بعدا دیگه فارسی بنویس
3) لطفا یه سوال جدید رو تو یه تاپیک جدید مطرح کن که عنوان اون تاپیک متناسب با سوالی که توش پرسیدی باشه

Salar Ashgi
چهارشنبه 30 مرداد 1387, 14:06 عصر
دوست عزیز ، اینم برنامه شما که تو سی پلاس پلاس نوشتم !!! نکته اش اینه که عدد رو

بصورت String (رشته ای) در نظر میگیره ، و تا هر چند رقم اعشار جواب میده !!!!

موفق و پیروز باشید !!!!


#include <iostream>
#include <conio>
typedef char string[100];
int Tedad_Ashar(string str){
int j,k=0;
for(int i=0;str[i]!=NULL;i++){
if(str[i]=='.')
{
j=i+1;
for(int p=j;str[p]!=NULL;p++)
k++;
}
}//end of for
return k;
}
int main(){
string num;
cout<<"Enter Your Number\n\n";
cin.getline(num,100);
cout<<"\n";
cout<<" Tedade Arghame Ashar = "<<Tedad_Ashar(num);
getch();
}

bsng110
پنج شنبه 07 شهریور 1387, 21:12 عصر
هوالحکیم. سلام. می شه بگویید خروجی برنامه شما به ازای aaa.bbbb چیست؟ پس به این سادگی هم نیست! یا علی حق نگهدارتون

Salar Ashgi
جمعه 08 شهریور 1387, 09:43 صبح
هوالحکیم. سلام. می شه بگویید خروجی برنامه شما به ازای aaa.bbbb چیست؟ پس به این سادگی هم نیست! یا علی حق نگهدارتون

====================================

دوست عزیز ، من فقط زود برنامه واسه دوستمون بصورت آزمایشی نوشتم ، و exception

های اونو دیگه بررسی نکردم !!! و نمیدونم منظورتون
پس به این سادگی هم

نیست! چیه ؟؟؟ این برنامه خیلی ساده تر از اون چیزیه که بشه روش وقت گذاشت

میتونستم با اشاره گرها اینو پیاده کنم ، که خیلی کاملتر میشد ، ولی گفتم وقت نداشتم ،

در ضمن همیشه برنامه های ما برنامه نویس ها یک اشکالات جزیی در مورد کنترل استثنا ها

دارند ، دوست عزیز ما مایکروسافت نیستیم که 70- 80 مهندس بیان رو یه پروژه کار کنند ، و یه

کاری عاری از اشتباه انجام بدهند !!! پس زیاد سخت گیر نباش دوست عزیز !!!!