PDA

View Full Version : کار با تابع itoa ر atof



صفا خانوم
سه شنبه 09 خرداد 1391, 16:19 عصر
به ساده ترین روش می خوام مبنای یه عدد رو بدست بیارم ولی برنامه ام کامپایل نمیشه کمک میخوام ؟
ممنون میشم کمک کنید؟
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void devision(int,int,char []);

int main()
{
int x,y;
char st[80];
printf("adadi vared konid:");
scanf("%d",&x);
printf("Mabnaye adad:");
scanf("%d",&y);
devision(x,y,st);
getch();
return 0;
}
void devision(int x,int y,char st[])
{
int i,a;
for(i=0;i<80;i++)
{
x/=y;
a=x%y;
st[i]=itoa(a);
if(x==y || x<y && x>0){
x/=y;
st[i]=itoa(a);
break;
}
printf("%s",st);
}

shahmohammadi
سه شنبه 09 خرداد 1391, 21:24 عصر
با سلام.
منظورتون از اينكه مي خواهيد مبناي يه عدد رو بدست بياريد چي هست. خوب عددي مثل 125 تو خيلي از مبناها هست. مثلا در مبناي 6 و 7 و 8 و 9 و .... معني داره. مي شه منظورتون رو واضح تر بيان كنيد.

صفا خانوم
چهارشنبه 10 خرداد 1391, 00:16 صبح
مخوام یه عدد از مبنای 10 بگیرم به مبنای دلخواه ببرم

shahmohammadi
چهارشنبه 10 خرداد 1391, 00:46 صبح
اين دو تابع به صورت زير تعريف شده‌اند:
char * itoa ( int value, char * str, int base );
double atof ( const char * str );

در تابع اول، پارامتر اول عددمون هست. پاراتر دوم رشته اي هست كه مي خواهيم در آن كپي شه.پارامتر سوم مبنا هست.
مي تونستيد به جاي كل برنامه همين تابع رو هم استفاده كنيد.

صفا خانوم
چهارشنبه 10 خرداد 1391, 11:03 صبح
چطور نفهمیدم ؟
میشه یکم بیشتر توضیح بدید؟
در ضمن از پاسخ هاتون هم ممنون

r.khodabakhshi
چهارشنبه 10 خرداد 1391, 13:57 عصر
سلام.همینطوری که دوستمون گفتند شما بجای نوشتن کدهای بالا میتونید از این تابع itoa استفاده کنی،یعنی همین کاری که میخوای بکنی و واست خیلی راحت انجام میده مثلا به کد زیر توجه کن خودت متوجه میشی:

int main ()
{ int i; char buffer [33];
printf ("Enter a number: ");
scanf ("%d",&i);
itoa (i,buffer,10);
printf ("decimal: %s\n",buffer);
itoa (i,buffer,16);
printf ("hexadecimal: %s\n",buffer);
itoa (i,buffer,2);
printf ("binary: %s\n",buffer);
return 0
; }




پارامتر اول عددی که میخوای به مبنای مورد نظر ببری،پارامتر دوم بافریه که نتیجه عملیات و ذخیره میکنه و پارامتر سوم مبنای که میخوای اعمال کنی

موفق باشی.

shahmohammadi
چهارشنبه 10 خرداد 1391, 20:11 عصر
اگه بخواهيد با تقسيمات پي در پي بنويسيد بايد اينو در نظر بگيريد كه ممكنه مبنا بزرگتر از 10 باشه كه نياز به استفاده از حروفي مثل A,b,c و.. داريد. و نيز ارقام به طور معكوس در رشته قرار مي گيرند، اين اصلاح شده‌ي كد شماست:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void devision(int, int, char []);

int main()
{
int x, y;
char st[80];
printf("adadi dar mabnaye 10 vared konid:");
scanf("%d", &x);
printf("Mabnaye adad(<10):");
scanf("%d", &y);
devision(x, y, st);

getch();
return 0;
}
void devision(int x, int y, char st[])
{
int i,a;
for(i=0;i<80;i++)
{
a=x%y;
x/=y;

itoa(a, st+i ,10);
if(x==0)
{
break;
}
}
for(;i>=0;i--)
printf("%c",st[i]);
}
براي تبديل يك رقم به كد اسكيش هم مي تونيد از تابع بالا استفاده كنيد و هم از كد زير:
char ch;
int a;
a=5;
ch=(char)a+(char)0x30
//or ch=(char)a+48
به اين ترتيب كد اسكي عدد 5 در ch قرار مي‌گيره.

صفا خانوم
جمعه 12 خرداد 1391, 14:55 عصر
حالا اگه بخوام این عدد باینری رو به مبنای 10 ببرم چطوری متونم انجامش بدم ؟بدون استفاده از توان...