PDA

View Full Version : سوال: چاپ عدد ورودی از راست به چپ



Faraz Mehraien
جمعه 10 آبان 1392, 20:23 عصر
با سلام.می خواستم بدونم برای چاپ عدد از راست به چپ چی کار می شه کرد به غیر از تقسیم های متوالی ؟برای تبدیل مبنا از 10 به 2 می خوام که آخرش باید عدد از راست به چپ چاپ شه؟از کاپایلر dev استفاده می کنم و با زبان c می نویسم

aminsaeedi
جمعه 10 آبان 1392, 20:56 عصر
یعنی شما الان تبدیل مبنا انجام دادید حالا میخواید فقط چاپ کنید؟؟؟

Faraz Mehraien
جمعه 10 آبان 1392, 21:13 عصر
یعنی شما الان تبدیل مبنا انجام دادید حالا میخواید فقط چاپ کنید؟؟؟
بله ولی عدد از چپ به راست چاپ می شه مثلا به جای اینکه بزنه 1101 می زنه 1011؟

aminsaeedi
جمعه 10 آبان 1392, 21:56 عصر
لطف کنید برنامتون رو بزارید که دوستان بتونند راهنمایی کنند اگر مشکل داشته باشه

Faraz Mehraien
شنبه 11 آبان 1392, 15:31 عصر
لطف کنید برنامتون رو بزارید که دوستان بتونند راهنمایی کنند اگر مشکل داشته باشه
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main(int argc, char *argv[])
{
int number,r,b;
printf("adday vared konid\n");
scanf("%d",&number);
printf("adad dar mabnaye 2=");
while(number!=0)
{
r=number%2;
b=number/2;
number=number/2;
printf("%d",r);
}

printf("\n");
system("PAUSE");
return 0;
}

اینم کد و از کامپایلر dev استفاده می کنم.مثلا عدد 11 در مبنای 2 می شه 1011 ولی چاپ می کنه 1101

rahnema1
شنبه 11 آبان 1392, 16:12 عصر
ببینید حالا که اینطوره شما باید این اعداد رو یه جایی ذخیره کنید تا بتونید اونها رو از آخر به اول بخونید
اگه می تونید از آرایه ها استفاده کنید باید اینها رو توی خانه های آرایه قرار بدید وگرنه باید به جای while از تابع بازگشتی استفاده کنید که علاوه بر انجام عمل تکراری نوعی ترفند برای ذخیره متغیرهاست سعی خودتون رو بکنید اگه نشد بگید تا کد رو بذاریم

Faraz Mehraien
شنبه 11 آبان 1392, 16:27 عصر
ببینید حالا که اینطوره شما باید این اعداد رو یه جایی ذخیره کنید تا بتونید اونها رو از آخر به اول بخونید
اگه می تونید از آرایه ها استفاده کنید باید اینها رو توی خانه های آرایه قرار بدید وگرنه باید به جای while از تابع بازگشتی استفاده کنید که علاوه بر انجام عمل تکراری نوعی ترفند برای ذخیره متغیرهاست سعی خودتون رو بکنید اگه نشد بگید تا کد رو بذاریم
ببخشید من تازه کارم و اصلا نمیدونم آرایه چی هست؟منظورتون از تابع بازگشتی for هست؟یا چیز دیگه؟

rahnema1
شنبه 11 آبان 1392, 17:21 عصر
نه تابع بازگشتی for نیست فقط همین مطلب رو بگم تابع بازگشتی تابعی است که موقع تعریف آن خودش را در داخل خودش صدا می زنیم بدین ترتیب یک سلسله تابع بصورت تودرتو خودش را فراخوانی می کند
پیشنهاد می کنم برای اینکه این مبانی رو یاد بگیرید و بتونید برنامه مورد نظر رو بنویسید یک کتاب آموزش برنامه نویسی مقدماتی را مطالعه کنید در هر صورت کد بازگشتی رو اینجا می ذارم:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int number;
void recursive();
int main(int argc, char *argv[])
{
printf("adday vared konid\n");
scanf("%d",&number);
printf("adad dar mabnaye 2=");
recursive();
printf("\n");
system("PAUSE");
return 0;
}
void recursive(){
int r;
r=number%2;
number=number/2;
if (number) recursive();
printf("%d",r);
}

Faraz Mehraien
شنبه 11 آبان 1392, 17:29 عصر
نه تابع بازگشتی for نیست فقط همین مطلب رو بگم تابع بازگشتی تابعی است که موقع تعریف آن خودش را در داخل خودش صدا می زنیم بدین ترتیب یک سلسله تابع بصورت تودرتو خودش را فراخوانی می کند
پیشنهاد می کنم برای اینکه این مبانی رو یاد بگیرید و بتونید برنامه مورد نظر رو بنویسید یک کتاب آموزش برنامه نویسی مقدماتی را مطالعه کنید در هر صورت کد بازگشتی رو اینجا می ذارم:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int number;
void recursive();
int main(int argc, char *argv[])
{
printf("adday vared konid\n");
scanf("%d",&number);
printf("adad dar mabnaye 2=");
recursive();
printf("\n");
system("PAUSE");
return 0;
}
void recursive(){
int r;
r=number%2;
number=number/2;
if (number) recursive();
printf("%d",r);
}


با تشکر همون برم یه کتاب بخونم بهتره.ولی بازم ممنون که وقت گذاشتین

aminsaeedi
شنبه 11 آبان 1392, 21:20 عصر
دوست عزیز شما برعکس عدد مورد نظرتون چاپ میشه دیگه ؟؟؟ به گفته خودتون

این طور که من متوجه شدم برنامه شما کلا مشکل الگوریتم داره متغیر b چکاری انجام میده کلا؟؟؟

Faraz Mehraien
یک شنبه 12 آبان 1392, 18:34 عصر
دوست عزیز شما برعکس عدد مورد نظرتون چاپ میشه دیگه ؟؟؟ به گفته خودتون

این طور که من متوجه شدم برنامه شما کلا مشکل الگوریتم داره متغیر b چکاری انجام میده کلا؟؟؟
نقش همون مقسوم علیه داره البته یکی دیگه نوشتم اینم کدش که کار می کنه ولی هنوز دنبال یه راه ساده برای حل مشکل بالام.
#include <stdio.h>
#include <stdlib.h>
#include<math.h>

int main(int argc, char *argv[])
{
int number,r,b=0,counter=1;
printf("adday vared konid\n");
scanf("%d",&number);
printf("adad dar mabnaye 2=");
while(number!=0)
{
r=number%2;
b=b+(r*counter);
number=(number-r)/2;
counter=counter*10;

}
printf("%d",b);
printf("\n");
system("PAUSE");
return 0;
}

aminsaeedi
یک شنبه 12 آبان 1392, 19:48 عصر
هنوز هم به نظرم کارتون مشکل داره
شما باید شرط خاتمه حلقتون ۰ یا یک شدن مقسوم باشه که در تقسیم های متوالی همان خارج قسمت این نقش را بازی می کند

do
number=number/2;
r=number%2;
b=b+r*2^counter;
counter++;
while (number==1 or number==0)

مقدار اولیه b باید صفر بشه
هر کدوم از باقیمانده ها را در یک ۲ به توان کانتر ضرب می کنیم که در آخر با مقدار b جمع میشه وقتی از حلقه آمد بیرون با مقدار number * ۲ به توان counter جمع می کنیم امیدوارم منظورم رو رسونده باشم

aminsaeedi
یک شنبه 12 آبان 1392, 20:23 عصر
البته تو جواب الان مشکل داره چون عدد اصلی رو نشون میده ولی می تونید باقیمانده ها را جدا جدا ذخیره کرده و به ترتیب چاپ کنید

aminsaeedi
یک شنبه 12 آبان 1392, 20:46 عصر
میتونید این مقدار مثلا ۱۰۱۱ بر حسب باینری را بر حسب دسیمال فقط چاپ کنید اگر احتیاج به محاسبه در آخر را نداشته باشید

Faraz Mehraien
دوشنبه 13 آبان 1392, 15:39 عصر
البته این برنامه دومی که گذاشتم b=0 است و درست کار می کند.برای چی باید 2 به توان counter برسه ؟

aminsaeedi
دوشنبه 13 آبان 1392, 20:16 عصر
ببخشید یه سوال دیگه

شما عدد بدست آمده را برای چاپ کردن احتیاج دارید یا برای محاسبات؟؟؟