View Full Version : مبنا
black_shadow
چهارشنبه 02 اردیبهشت 1394, 15:30 عصر
سلام
میشه راهنمای کنین که چزوری میتونم یه برنامه بنویسم که کسلا یه عد بگیرو و اونو به مبنا 2 ببره و عدد مبناشو بنویسه
مثا 97 که میشه 1100001
میشه الگوریتمشو بگین خودم کدشو میزنم
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 16:14 عصر
سلام.لطفا کمی جستجو کنید.
http://barnamenevis.org/showthread.php?150444-%D9%85%D8%AC%D9%85%D9%88%D8%B9%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%D9%86%D9%88%D8%B4%D8%AA%D9%87-%D8%B4%D8%AF%D9%87-%D8%A8%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-C-%D9%88-C&p=872389&viewfull=1#post872389
پست 66
#include <iostream>#include <conio>
void Base(int n,int x){
if(n<x)
cout<<n;
else{
Base(n/x,x);
cout<<n%x;
}
}
//=====================
int main(){
int x,n;
cout<<"Enter a number in decimal :\n";
cin>>n;
cout<<"Enter base :\n";
cin>>x;
cout<<"------------------------\n";
Base(n,x);
getch();
}
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 19:14 عصر
نمیدونم مشکل از چیه،هر تگی رو که امتحان کردم کدها رو اینجوری نشون داد.به هر حال واسه اینکه کد درست رو ببینی به همون آدرسی که گفتم برو.
موفق باشی
black_shadow
چهارشنبه 02 اردیبهشت 1394, 20:33 عصر
داداش من این کد رو نمیفهمم من چطوری میتونم تقسیم متوالی کنم و باقیمونده رو از آخر به اول چاپ کنم؟
black_shadow
چهارشنبه 02 اردیبهشت 1394, 21:10 عصر
من این کد رو نوشتم
میخوام که تا وقتی خارج قسمت 1یا 0 نشده تقسیم رو انجام بده و خارج 4قسمت رو چاپ کنه ولی میره تو لوپ
#include <iostream>
#include<conio.h>
using namespace std;
int main()
{
int a,b,c;
cin>>a;
while(a/2!=0 || a/2!=1){
b=a%2;
c=a/2;
std::cout<<c;
}
getch();
return 0;
}
black_shadow
چهارشنبه 02 اردیبهشت 1394, 21:20 عصر
میخوام که عدد صحیح رو بر 2 به صورت متوالی تقسیم کنم و اگر خارج قسمت 1یا 0 شد باقیمانده را از آخر به اول چاپ کنه
مثلا 20رو تقسیم بر 2 کنید باقیمانده از آخرین تقسیم میشه 010000
اگه میشه کمک کنید
black_shadow
چهارشنبه 02 اردیبهشت 1394, 21:45 عصر
اینم قطعه کدی که اعشار رو از هم جدا میکنه
بذارید اینطوری بگم میخوام عدد صحیص که جدا شده رو بر 2 تقسیم کنم و با قیمانده رو از آخر به اول چاپ کنه
#include<iostream>
#include<stdio.h>
#include<conio.h>
int main (){
double a,c;
int b;
std::cout<<"please enter float number:: \n";
std::cin>>a;
b=a;
c=a-b;
getch ();
return 0;
}
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 22:17 عصر
دوست عزیز همون پست 66 که بهتون معرفی کردم رو ببینید، دقیقا موضوع سوال شماست دیگه.
#include <iostream>using namespace std;
void Base(int Number, int BaseNumber){
if (Number<BaseNumber)
{
cout << Number;
}
else
{
Base(Number / BaseNumber, BaseNumber);
cout << Number%BaseNumber;
}
}
void main(){
int x = 97;
Base(x, 2);
}
خروجی : 1100001
black_shadow
چهارشنبه 02 اردیبهشت 1394, 22:20 عصر
عزیز نگه این عکسو این عملیاتو باید با برنامه نویسی اجام بدیم و هر مرحله رو چاپ کنیم
http://8pic.ir/images/ft98omhwnklzq5iee9dg.jpg
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 22:29 عصر
طبق چیزایی که تا الان مطرح کردید شما قصدتون برای تغییر مبنای عدد ورودی این بود که اعداد ورودی صحیح باشن، اما تو عکسی که گذاشتید ورودی اعشاریه.
به هر حال طبق همین کدی که گذاشتم که در واقع از تقسیمات متوالی استفاده میکنه میتونید به هدفتون برسه
black_shadow
چهارشنبه 02 اردیبهشت 1394, 22:46 عصر
#include<iostream>
#include<stdio.h>
#include<conio.h>
void Base(int Number, int BaseNumber){
if (Number<BaseNumber)
{
std::cout << Number;
}
else
{
Base(Number / BaseNumber, BaseNumber);
std:: cout << Number%BaseNumber;
}
}
int main (){
double a,c;
int b;
std::cout<<"please enter float number:: \n";
std::cin>>a;
b=a;
c=a-b;
std::cout <<"mabnaye 2 adade integer::\n"<<base(b,2)<<"mabnaye 2 adade float::\n"<<base(c,2);
getch ();
return 0;
}
به خط cout تابع baseگیر میده
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 23:14 عصر
چه اروری میده؟
به جای این که قبل از cin ها وcout h بنویسی std:: یه بار بنویس using namespace std.
متن ارور رو هم بگو
black_shadow
چهارشنبه 02 اردیبهشت 1394, 23:21 عصر
error: 'base; was not declared in this scope
ehsan_faal
چهارشنبه 02 اردیبهشت 1394, 23:27 عصر
شما که میگی به خط cout تابع base گیر میده!!!!
دوست عزیز این زبان Case Sensitive هستش.
base با Base فرق داره.
در ضمن شما یه لطفی کن فقط یه بار اون مثالی که گذاشتم رو اجرا کن.
طبق تعریف تابع این تابع هیچ مقدار بازگشتی ای نداره و شما نمیتونید مثل کد خودتون ازش استفاده کنید.
black_shadow
چهارشنبه 02 اردیبهشت 1394, 23:37 عصر
#include<iostream>
#include<stdio.h>
#include<conio.h>
void Base(int Number, int BaseNumber){
if (Number<BaseNumber)
{
std::cout << Number;
}
else
{
Base(Number / BaseNumber, BaseNumber);
std:: cout << Number%BaseNumber;
}
}
int main (){
double a,c;
int b;
std::cout<<"please enter float number:: \n";
std::cin>>a;
b=a;
c=a-b;
std::cout<<"mabnaye 2 adade integer::\n";
Base(b,2);
std::cout<<"\n";
std::cout<<"mabnaye 2 adade float::\n";
Base(c,2);
getch ();
return 0;
}
دادا کار نمیکنه خودت تست کن
همش 10
0
میده
ehsan_faal
پنج شنبه 03 اردیبهشت 1394, 09:42 صبح
دوست عزیز با این کد شما میتونید مبنای اعداد صحیح رو تغییر بدی.
در ثانی به عنوان خروجی آخر شما همیشه صفر رو میگیری، دلیلش هم واضحه ،شما یه مقدار به کد خودت توجه کنی متوجه میشی.مقدار C همیشه صفره و صفر هم چه تو مبنای 10 و چه تو مبنای 2 صفره.
اما در مورد خروجی اولتون باید عرض کنم وقتی شما توی خروجی 10 میگیری یقینا ورودیتون 2 بوده.این تابع به درستی کارش رو انجام میده،من هنوز نمیفهمم شما چرا نمیتونید ازش استفاده کنید:متفکر:
black_shadow
پنج شنبه 03 اردیبهشت 1394, 14:10 عصر
#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
int makos(int n);
int main (){
double a,c;
int b,result=0,d=1,temp,i=0;
std::cout<<"please enter float number:: \n";
std::cin>>a;
b=a;
c=a-b;
temp=b;
cout<<"INTEGER::\n"<<b<<"\n";
cout<<"float::\n"<<c<<"\n";
///////////////////////////////
while(temp%2==0){
d*=10;
temp/=10;
}
///cde baraye tabdil adade sahih be mabna2
while(b>=2)
{
result=result*10+b%2;
b/=2;
}
result=result*10+b;
cout<<"adade integer:"<<'\t'<<result*d;
/////////////////////////////////
while(i<=5){
if(c*2>1 ){
b=a-int(a);
cout<<b;
}
if(c*2==0){
b=a-int(a);
cout<<b;
}
cout<<b;
}
getch ();
return 0;
}
int makos(int n)
{
int sum=0;
while(n!=0)
{
sum=sum*10+n%10;
n/=10;
}
return sum;
}
سلام این کد خودم تو اون قسمته while نمیدونم چرا کار نمیده اونجا اصلش بایدعدده بعد ممیز رو ضرب 2 بکنه اگر حاصل این ضرب بزرگتر از 1 بود عدد 1 رو تو متغیر بریزه اگر کوچکتر از 1بود باید 0 رو چاپ کنه
ولی اینکارو نمیکنه
black_shadow
پنج شنبه 03 اردیبهشت 1394, 14:16 عصر
مثلان تو قطع کد شماره 30 به بعد مثلا .34 ضرب 2 بشه حاصلش میشه 0.68 که باید 0رو چاپ کنه و 0.68رو دوباره ضرب 2 کنه میشه 1.36 که 1رو چاپ کنه و این عملو 5بار ادامه بده و اعداد حاصله رو با هم چاپ کنه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.