ورود

View Full Version : سوال: الگوریتم های تبدیل مبناها



Kboy-9043
پنج شنبه 25 خرداد 1391, 07:48 صبح
سلام دوستان.

الگوريتم و فلوچارت براي برنامه هاي زير رو مي خواهم:

1. تبديل عدد مبناي 16 به 2 و 10

2. تبديل عدد مبناي 2 به 16 و 10

3. تبديل عدد مبناي 10 به 16 و 2

ممنون مي شوم کمک کنيد. مي خواهم برنامشون رو به زبان سي++ بنويسم ولي الگوريتم هاشون رو ندارم.

mehdi.mousavi
پنج شنبه 25 خرداد 1391, 17:39 عصر
سلام دوستان. الگوريتم و فلوچارت براي برنامه هاي زير رو مي خواهم:

1. تبديل عدد مبناي 16 به 2 و 10
2. تبديل عدد مبناي 2 به 16 و 10
3. تبديل عدد مبناي 10 به 16 و 2

ممنون مي شوم کمک کنيد. مي خواهم برنامشون رو به زبان سي++ بنويسم ولي الگوريتم هاشون رو ندارم.

سلام.
این ویدئو (http://www.youtube.com/watch?v=Fpm-E5v6ddc&feature=relmfu) نحوه تبدیل مبناها به یکدیگر رو بهتون آموزش میده...

موفق باشید.

پاورقی: شما در چه مقطع تحصیلی هستید؟؟؟ از یک طرف برنامه C++ می نویسید، از طرفی روش تبدیل مبناها به یکدیگر رو نمی دونید؟!

Kboy-9043
پنج شنبه 25 خرداد 1391, 19:14 عصر
ممنونم ازتون.
تبدیل دستی مبناها رو بلدم.

من کمی توی برنامه نوشتن مبناها گیج شدم.

سوالم رو واضح تر می پرسم:

1. همانطور که می دونیم برای تبدیل مبناها به 2 با تقسیم متوالی این کار رو انجام می دهیم.

خب حالا من می خواهم برنامه رو طوری بنویسم که از صفحه کلید فقط کلیدهای مجاز مانند اعداد و حروف از 0 تا 15 ( a - f)
از کاربر دریافت کنه توی تعریف شرطهاش کمی موندم.
و به همین علت می خواستم فلوچارتش رو ببینم.

مثلا کسی کلید q رو از صفحه کلید زد این کلید دریافت نشه چون مجاز نیست و تبدیل مبنایی صورت نخواهد گرفت.

2. در تبدیل مبنای 16 به 10 نیز که ضرب متوالی از توان رو داریم رو چطوری در برنامه تعریف کنم؟

ممنونم.

jannatmakan
دوشنبه 29 خرداد 1391, 03:06 صبح
سلام . اینی که توی برنامه نویسیش گیج شدین به نظرم برمیگرده به بحث تحلیل مساله در برنامه نویسی (که مشکل خیلی هاست). جسارتاً توصیه می کنم بحث فلوچارت و پیاده سازی الگوریتم رو مجدّداً مرور و تمرین کنید .

برای مشکل کنترل ورودی های کاربر که مثلاً فقط عدد وارد کنه هم راه های زیادی هست . هم می تونید به روش ابتدایی عمل کنید، بدین صورت که کاراکتر ها رو یک به یک از کاربر با تابعی مثل getch() بگیرید و کد اسکیش رو کنترل کنید که مثلاً برای اعداد 0 تا 9 ، کدشون بین 48 تا 57 هستش . با قطعه کد زیر می شه کد کاراکترها رو کنترل کرد.

#include<conio.h>
#include<iostream.h>

void main()
{
int a;
char chr;

for(int i=0;i<10;i++)
{
chr=getch();
a=chr;
cout<<"charcter code "<<chr<<" = "<<a<<"\n";
}
}


یا این که می تونید، از بلاک های try و catch استفاده کنید که فکر کنم اوّلی براتون بهتر باشه.

در مورد سوال شماره ی 2 شما هم این قطعه کد می تونه خوب مثالی باشه. (نکته: فایل math.h شامل توابع ریاضیه که تابع pow ، پارامتر اوّلیش رو به توان پارامتر دوّمیش می رسونه. )

برنامه ی تبدیل مبنای 16 به 10 :


#include<conio.h>
#include<iostream.h>
#include<math.h>

void main()
{
char n[100];
int len=0,chr,result=0,i=0;

cout<<"Please enter a hexadecimal number:";
cin>>n;

while(n[len]!='\x0')
len++;

while(len>0)
{
chr=n[len-1];

if(chr>=97 && chr<=102)//Code a ta f
chr=chr-87;
else if(chr>=48 && chr<=57)//Code 0 ta 9
chr=chr-48;
else
{
cout<<"Error:Please enter a valid hexadecimal number!";
break;
}

result=result+(chr*pow(16,i));
len--;
i++;
}

cout<<"\nConvered number from 16 to 10 ="<<result;

getch();
}