راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
سلام
دوستان من باید تعدادی رشته ی بیتی تصادفی که دارای فرمت اعشاری هست رو تولید کنم.چیزی شبیه: 110.0101
رشته ای مثل 100110 رو براحتی با تابع رندوم و نوع داده ی اینتیجر تولید کردم ولی رشته با فرمت اعشاریو نمیدونم چطور باید ایجاد کنم
ممنون میشم راهنمایی بفرمایید
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
سلام
شما همون رشته ای که قبلا تولید کردید به طور تصادفی در قسمتی از رشته کاراکتر '.' را قرار بدید
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
char *GenerateRandomString(char *);
int main()
{
int Length=6;
char BinaryString[Length+1];
for(int i=0;i<Length;i++)
BinaryString[i]='n';
BinaryString[Length]=0;
cout<<GenerateRandomString(BinaryString)<<endl;
return 0;
}
char* GenerateRandomString(char *input)
{
int Length=strlen(input);
srand(time(0));
int PointPlace=1+rand()%(Length-2);
char *inputHolder=input;
while(*input!=0)
{
if(input==(inputHolder+PointPlace))
{
*input='.';
}else{
*input=((rand()%2)?'1':'0');
}
input++;
}
return inputHolder;
}
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
نقل قول:
نوشته شده توسط
ehsan_faal
#include<iostream> #include<stdlib.h> #include<time.h> #include<cstring> usingnamespacestd; char*GenerateRandomString(char*); intmain() { intLength=30; charBinaryString[Length+1]; for(inti=0;i<Length;i++) BinaryString[i]='n'; BinaryString[Length]=0; cout<<GenerateRandomString(BinaryString)<<endl; } char*GenerateRandomString(char*input) { intLength=strlen(input); srand(time(0)); intPointPlace=1+rand()%(Length-1); char*inputHolder=input; while(*input) { if(input==(inputHolder+PointPlace)) { *input='.'; input++; }else{ *input=((rand()%2)?'1':'0'); input++; } } returninputHolder; }
کد ناخوانا هست.
اگر امکانش هست تصحیح کنید.
(end-line ها نمایش داده نمیشه.)
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
نقل قول:
نوشته شده توسط
ehsan_faal
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <cstring>
using namespace std;
char *GenerateRandomString(char *);
int main()
{
int Length=6;
char BinaryString[Length+1];
for(int i=0;i<Length;i++)
BinaryString[i]='n';
BinaryString[Length]=0;
cout<<GenerateRandomString(BinaryString)<<endl;
return 0;
}
char* GenerateRandomString(char *input)
{
int Length=strlen(input);
srand(time(0));
int PointPlace=1+rand()%(Length-2);
char *inputHolder=input;
while(*input!=0)
{
if(input==(inputHolder+PointPlace))
{
*input='.';
}else{
*input=((rand()%2)?'1':'0');
}
input++;
}
return inputHolder;
}
دوست عزیز لطف میکنین یه توضیحی در مورد کد بدین؟
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
شما اول مشخص میکنید که رشته نهاییتون قراره چه طولی داشته باشه(طول اعداد + نقطه) بعدیک آرایه از کاراکترها رو به اندازه طولی که خودتون مشخص کردید ایجاد میکنید و بهش یه مقدار اولیه ای میدید تا یه وقت کاراکتر پوچ غیر از آخرین خونه جای دیگه ای ظاهر نشده باشه.
بعد آخرین خونه رو برابر کاراکتر پوچ قرار میدید و الان تابع رو صدا میزنید.
توی این تابع اول طول رشته رو لازم دارید که با strlen به دستش آوردیم(تعداد کاراکترهای قبل از کاراکتر پوچ رو میده و واسه همین روی مقدار دهی اولیه رشته تاکید کردیم)
بعد واسه اینکه اعداد رندومی که قصد تولیدش رو دارید از srand استفاده میکنید و زمان جاری سیستم رو به عنوان پارامتر ورودی بهش میدید.
محل قرار گیری نقطه رو با استفاده از rand توی رنج خونه با اندیس یک تا خونه یکی مونده به آخر تعیین میکنید.
آدرس شروع رشته رو توی inputHolder نگه میدارید(بعدا لازم میشه)
حالا یه دور توی رشته میچرخید و اگه اشاره گر ی که هی داره زیاد میشه تا کل رشته رو پیمایش کنه برابر با مقدار اولش + محل قرار گیری نقطه شده بود پس اونجا یه نقطه قرار میدید اگه نشده بود باز با استفاده از rand یا '0' یا '1' قرار میدید. در آخر هم اشاره گری که گفته بودم بعدا لازم میشه رو برمیگردونید.
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
دوست عزیز rahnema1 این کارو انجام دادم یه رشته ی 5 بیتی تعریف کردم و بیت سوم اونرو "." گذاشتم به این شکل "10.11" بعد اومدم قسمت اعشار و قسمت صحیحشو بصورت جداگانه به مبنای ده بردم حالا موندم این دو قسمت رو چجوری تو یه متغیر اعشاری بگنجونم.
در حال حاضر یه متغیر اینتیجر (قسمت صحیح) دارم با مقدار 2 و یه متغیر اینتیجر(قسمت اعشاری) با مقدار 0.75 نمیدونم چجوری به شکل 2.75 در قالب یه عدد اعشاری ذخیرش کنم.
ممنون میشم راهنمایی بفرمایید.
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
نقل قول:
نوشته شده توسط
adineh67
دوست عزیز
rahnema1 این کارو انجام دادم یه رشته ی 5 بیتی تعریف کردم و بیت سوم اونرو "." گذاشتم به این شکل "10.11" بعد اومدم قسمت اعشار و قسمت صحیحشو بصورت جداگانه به مبنای ده بردم حالا موندم این دو قسمت رو چجوری تو یه متغیر اعشاری بگنجونم.
در حال حاضر یه متغیر اینتیجر (قسمت صحیح) دارم با مقدار 2 و یه متغیر اینتیجر(قسمت اعشاری) با مقدار 0.75 نمیدونم چجوری به شکل 2.75 در قالب یه عدد اعشاری ذخیرش کنم.
ممنون میشم راهنمایی بفرمایید.
سلام
معمولا اعدادت با چند رقم اعشار هست ؟!
باsetprecision دقت اعدادت رو مشخص کن
بعدش میتونی با هم جمعشون کنی دیگه
مثلا عدد 2 با 0.75 که گفتی با دقت 2 رقم اعشار، به این صورت با هم جمع میشن
2.75 = 0.75 + 2.00
[چیز ساده ای بود !شاید هم من دقیق سوالت رو متوجه نشده باشم !! ]
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
خب الان می خواهید این دو تا را با هم جمع کنید؟ یا به صورت رشته چاپ کنید؟
#include <stdio.h>
int main()
{
float a = 2.75;
printf("%.2f", a);
}
یا
#include <stdio.h>
int main()
{
float a = 2.75;
char str[20] = {};
sprintf(str, "%.2f", a);
printf("%s", str);
}
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
ممنون از همگی
فقط یه سوال میپرسم به عنوان سوال آخر
رشته ای مثل 101.01 رو چطوری باید چاپ کنم؟
من به این شکل چاپش کردم اما به جای نمایش کراکتر"." کداسکی اونرو که 46 هست نمایش میده:
printf("\n popcurrent[%d]=%d%d%d%d%d%d", popcurrent[j].bit[5],popcurrent[j].bit[4],popcurrent[j].bit[3],popcurrent[j].bit[2],popcurrent[j].bit[1],popcurrent[j].bit[0])
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
popcurrent چیه و اعداد به چه صورت داخلش ذخیره شدند و متغیر bit هم بگید چیه
اگه bit از نوع int هست شاید بهتر بود به جای 0 و 1 کد اسکی اونها یعنی '0' و '1' ذخیره می شد و به جای d% از c% استفاده می کردید
char str[] = "101.01";
puts(str);
printf("%s\n", str);
printf(str);
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
typedef struct str
{
char bit[6];
float fit;
}str;
str popcurrent[4];
یه استراکچر تعریف کردم که یه رشته ی شش بیتی و معادل اعشاری اون رشته رو برام نگه داره،popcurrent یک نمونه از استراکچر هست که 4 رشته ی 6بیتی و معادل اعشاریشونو نگهداری میکنه
حالا با این دستور میخوام یه رشته رو چاپ کنم که مشکلی که گفتم خدمتتون پیش میاد.
printf("\n popcurrent[%d]=%d%d%d%d%d%d", popcurrent[j].bit[5],popcurrent[j].bit[4],popcurrent[j].bit[3],popcurrent[j].bit[2],popcurrent[j].bit[1],popcurrent[j].bit[0])
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
همون طور که اشاره کردم بهتره 0 و 1 را هم به صورت '0' و '1' داخل آرایه bit بذارید
popcurrent[0].bit[0] = '1';
popcurrent[0].bit[1] = '0';
popcurrent[0].bit[2] = '1';
popcurrent[0].bit[3] = '0';
popcurrent[0].bit[4] = '.';
popcurrent[0].bit[5] = '1';
printf("%.6s\n", popcurrent[j].bit);
یعنی معادل اسکی اونها را بذارید
مثلا یک و صفر را بخواهیم به معادل اسکی تبدیل کنیم به این صورت:
popcurrent[j].bit[0] = 0 + '0';
popcurrent[j].bit[0] = 1 + '0';
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
دوست عزیز این صفر و یکها با متغیر اینتیجر و بصورت تصادفی دارن ایجاد میشن چجوری به شکل '0' یا '1' داخل bitقرارشون بدم؟
نقل قول: راهنمایی در مورد نمایش اعداد اعشاری بصورت رشته ی بیتی
تو پست قبلی اشاره کردم مثلا رندم هم باشه به صورت زیر
popcurrent[j].bit[0] = rand() % 2 + '0';
popcurrent[j].bit[0] = rand() % 2 + '0';