PDA

View Full Version : درباره ی atof



moh.mon
دوشنبه 19 فروردین 1387, 10:37 صبح
ما یه برنامه میخایم که کار تابع atof رو انجام بده یعنی یه رشته رو به اعداد تبدیل کنه .
ممنون

Nima_NF
دوشنبه 19 فروردین 1387, 17:08 عصر
اگر هر کارکتر رشته را از عدد 48 کم کنید (به شرط اینکه همه عدد باشند) به معادل عددی تبدیل خواهد شد که می توانید آن را در یک متغیر عددی ذخیره کنید.
مثلا کارکتر 0 معادل 48 می باشد و 9 معادل 57 اسکی می باشد

MRHagh
سه شنبه 20 فروردین 1387, 11:34 صبح
تابع زیر این کار را براتون انجام میده .


int StringToNumber(char *str)
{
int value=0;
for(int i=0; i<strlen(str); i++)
value=value*10+(str[i]-48);
return value;
}


باید دقت کنید که رشته ورودی باید در محدوده اعداد صحیح بوده و طبیعتا اعشاری هم نباشد !!! تابع تبدیل رشته های شامل اعشار را هم با همین ایده , براحتی خودتون میتونید پیاده سازی کنید . موفق باشید ...

moh.mon
چهارشنبه 21 فروردین 1387, 16:53 عصر
با تشکر از راهنمایتون ولی اگه میشه این تابع رو برای اعداد اعشاری و منفی هم تعمیم بدین.
ویکم در باره ی تابعی که نوشتین توضیح بدین مخصوصا خط سومش.

MRHagh
چهارشنبه 21 فروردین 1387, 21:17 عصر
این هم تعمیم یافتش به اعشاری و منفی .


double StringToNumber(char *str)
{
double Ivalue=0, Fvalue=0, F=0;
int i=(str[0]!='-')? 0:1;
for(; str[i]!='.' && str[i]; i++)
Ivalue=Ivalue*10+(str[i]-'0');
if(str[i])
for(;str[++i];)
Fvalue+=(str[i]-'0')*pow(10,--F);
return (str[0]!='-')?Ivalue+Fvalue:-(Ivalue+Fvalue);
}توضیحاتش رو هم اقای Nima_NF دادند . موفق باشید ...

mandbigS
پنج شنبه 22 فروردین 1387, 10:44 صبح
آقا سلام ... میشه یکمی راجع به این تابع آخری توضیح بدید ...

راجع به علامت های سوال یا علامت ; اول توی for ...

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

moh.mon
پنج شنبه 22 فروردین 1387, 18:22 عصر
آفا درباره ی برنامه ی که نوشتین یکم بیشتر توضیح بدین مخصوصا در باره ی علامت سوال ها و : خیلی ممنون میشم.

vahideh85
جمعه 23 فروردین 1387, 11:28 صبح
این تابع کار می کنه؟؟؟!!!
دو نقطه و علامت سوال چین این وسط؟؟ کارشون چیه؟ معادل ندارن؟

MRHagh
جمعه 23 فروردین 1387, 17:09 عصر
تابع رو که خیلی راحت تو کد یک برنامه paste کنید و یک رشته شامل کاراکتر های عددی بهش ارسال کنید و مقدار بازگشتی تابع رو مساوی یک متغیر از نوع double قرار دهید و چاپ کنید تا ببینید کار میکنه یا نه ( این کار رو قبلا نکرده بودید ... !) . برای مثال کد زیر که str در آن رشته ای شامل کاراکتر های عددی است و value متغیری از نوع double که قرار است معادل عددی رشته str در آن قرار گیرد و چاپ شود (کد تابع را هم زیرش paste کنید ) :

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

double StringToNumber(char *str);

void main()
{
double value;
char str[20];
printf("Enter your string");
gets(str);
value=StringToNumber(str);
printf("convert to number : %g",value);
getch();
}
"؟" یک عملگر برای ارزیابی درست یا غلط بودن یک عبارت و بر اساس آن مقدار دهی یک متغیر با یک عبارت دیگر است .

vahideh85
شنبه 24 فروردین 1387, 02:07 صبح
خوب برا برنامه شمام درست در نیاوردشون
مثلا می دم 2.3 و 3.2 می یاره 2.14282
این جواب درسته؟
شایدم اشتباه از منه
چون تازه کاره تازه کارم

MRHagh
شنبه 24 فروردین 1387, 07:36 صبح
برنامه که مشکلی ندارد . خیلی ساده تر از اون چیزی هم هست که بخواد موجب اشتباه بشه , به هر حال فایل exe برنامه به همراه سورسش ضمیمه شده ... موفق باشید !

vahideh85
شنبه 24 فروردین 1387, 09:04 صبح
حق با شماس درسته
الان متوجه شدم
من چند تا عدد وارد می کردم به خاطر همین جوابی که بر می گردوند اشتابه بود
خیلی ممنون

pars.engineer
شنبه 24 فروردین 1387, 20:20 عصر
سلام؛
عملگر ؟ در زبان C و زبانهای مشتق شده از C عبارتی را ارزیابی کرده ، بر اساس آن عبارت (درستی یا نادرستی)، نتیجه عبارت دیگر را بر می گرداند(معمولا در یک متغیر دیگر می ریزد).


<عبارت 3> : <عبارت2> ? <عبارت 1> = متغیر


اگر <عبارت 1> دارای ارزش درستی(True) باشد ، مقدار ارزیابی شده ی <عبارت 2> در متغیر قرار می گیرد وگرنه مقدار ارزیابی شده ی <عبارت 3> در متغیر قرار خواهد گرفت. دستورات زیر را در نظر بگیرید:


int x,y;
x=5;
y= x>5 ? x*2 : x*5;


در این دستورات، موارد زیر را داریم:

5 < x : <عبارت 1>
x*2: <عبارت 2>
x*5: <عبارت 3>


<عبارت 1> دارای ارزش نادرستی است، زیرا x از 5 بزرگتر نیست. بنابراین مقدار <عبارت 3> که برابر با 5*5=25 است در متغیر y قرار می گیرد.
ضمنا در ویژوال بیسیک گزاره شرطی IIF این کار را انجام می دهد.

mandbigS
دوشنبه 26 فروردین 1387, 19:11 عصر
واقعا ممنون به خاطر مطلبتون ...

اما ما تازه کارا به هر حال همه چی واسمون سواله ...

0:1 ---> این قسمت چی کار می کنه ... ؟

MRHagh
سه شنبه 27 فروردین 1387, 07:40 صبح
با توجه به توضیحاتی که در پست شماره 13 هست , اگر منظور شما قسمت زیر از برنامه باشد :

int i=(str[0]!='-')? 0:1;
به این شکل عمل میکند که اگر اولین کاراکتر رشته وارد شده ' - ' باشد متغیر i با مقدار یک , وگرنه با صفر مقدار دهی اولیه خواهد شد .
این کار بخاطر این است که در صورت وارد شدن عدد منفی از کاراکتر اول آن که همان علامت منفی است , در جریان تبدیل صرفنظر شود .