PDA

View Full Version : مشکل در حلقه



black_shadow
چهارشنبه 26 اسفند 1394, 07:28 صبح
سلام میخوام برنامه تبدیل مبنا هارو واسه یادگیری و تمرین بنویسم اما نمیدونم چرا کار نمیکنه وقتی برنامه رو اجرا میکنم انگار پی سی هنگ میکنه


بعدشم چطوری میتونم باقیمانده هارو از آخر به اول تو تکست باکس بذارم؟

اینم برنامه


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace mabna
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void btnDahdahiToBinery_Click(object sender, EventArgs e)
{
int a = int.Parse(txtInpute.Text);
txtMabna_Answer.Text = dahdahi_to_bin(a).ToString();
}
//func dahdahi to binery
int dahdahi_to_bin(int num)
{
int b=0;
while (num / 2 != 0)
{
b = num % 2;

}
num = b;
return num;
}
}
}

pooyan.a
چهارشنبه 26 اسفند 1394, 07:49 صبح
سلام یکی اینکه اگر num تو مرحله آخر یک باشه،بازم حلقه ادامه پیدا میکنه چون مخالف صفر هست در صورتی که نباید ادامه پیدا کنه،بخاطر همین از حلقه بیرون نمیاد
برای مرتب کردن هم میتونی b رو در بار تکرار حلقه در 10 ضرب کنی و با اون عدد باقیمانده جمع کنی و در آخر بیرون حلقه معکوس کنی حالا یا با نوشتن کد برای معکوس کردن عدد،یا استفاده از آرایه

black_shadow
چهارشنبه 26 اسفند 1394, 08:11 صبح
این فرمول تبدیل مبنا دهدهی به دودویی تا جایی که من ازش فهمیدم شرطش باید این باشه

یکی از روشهای تبدیل از مبنای ده‌دهی (https://fa.wikipedia.org/wiki/%D8%AF%D9%87%E2%80%8C%D8%AF%D9%87%DB%8C) به دودویی تقسیم متوالی بر عدد دو است. که طی آن باقی‌مانده‌ها مورد استفاده قرار می‌گیرند. تقسیمات را تا صفر شدن خارج‌قسمت (https://fa.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B1%D8%AC_%D9%82%D8%B3%D9%85%D8%AA) انجام می‌دهیم. در نهایت آخرین خارج قسمت (https://fa.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B1%D8%AC_%D9%82%D8%B3%D9%85%D8%AA) و بعد از آن باقی‌مانده‌ها (https://fa.wikipedia.org/wiki/%D8%A8%D8%A7%D9%82%DB%8C%E2%80%8C%D9%85%D8%A7%D9%8 6%D8%AF%D9%87) را از آخر به اول کنار همدیگر قرار می‌دهیم. عدد بدست آمده معادل دودویی خواهد بود.

ولی الان تو شرطش گیج شدم
میشه کد منو تصیح کنین

black_shadow
چهارشنبه 26 اسفند 1394, 08:29 صبح
نمیدونم شرطشو چی بذارم


اینم کد

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace mabna
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}


private void btnDahdahiToBinery_Click(object sender, EventArgs e)
{
int a = int.Parse(txtInpute.Text);
txtMabna_Answer.Text = dahdahi_to_bin(a).ToString();
}
//func dahdahi to binery
int dahdahi_to_bin(int num)
{
int b = 0,c=0,revers= 0;
while (num / 2 != 0 || num/2!=1)
{
b = num % 2;
c = b * 10;
b=c + b;
}
while (b != 0)
{
revers = revers * 10;
revers = revers + b % 10;
b = b / 10;
}


// num = revers;
return revers;
}
}
}

ژیار رحیمی
چهارشنبه 26 اسفند 1394, 08:48 صبح
خودتو درگیر مسائل حل شده در دانت فریم ورک نکن بجاش رو مسائل مهمتر وقت بزار.
کلاس Convert این قابلیت رو داره که عددی رو به مبنای 2 ، 8 و 16 تبدیل کنه

int value = 16;
string binary = Convert.ToString(value, 2);//مبنای 2
MessageBox.Show(binary);

pooyan.a
چهارشنبه 26 اسفند 1394, 11:26 صبح
این فرمول تبدیل مبنا دهدهی به دودویی تا جایی که من ازش فهمیدم شرطش باید این باشه

یکی از روشهای تبدیل از مبنای ده‌دهی (https://fa.wikipedia.org/wiki/%D8%AF%D9%87%E2%80%8C%D8%AF%D9%87%DB%8C) به دودویی تقسیم متوالی بر عدد دو است. که طی آن باقی‌مانده‌ها مورد استفاده قرار می‌گیرند. تقسیمات را تا صفر شدن خارج‌قسمت (https://fa.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B1%D8%AC_%D9%82%D8%B3%D9%85%D8%AA) انجام می‌دهیم. در نهایت آخرین خارج قسمت (https://fa.wikipedia.org/wiki/%D8%AE%D8%A7%D8%B1%D8%AC_%D9%82%D8%B3%D9%85%D8%AA) و بعد از آن باقی‌مانده‌ها (https://fa.wikipedia.org/wiki/%D8%A8%D8%A7%D9%82%DB%8C%E2%80%8C%D9%85%D8%A7%D9%8 6%D8%AF%D9%87) را از آخر به اول کنار همدیگر قرار می‌دهیم. عدد بدست آمده معادل دودویی خواهد بود.

ولی الان تو شرطش گیج شدم
میشه کد منو تصیح کنین

آره ببخشید،حواسم نبود ک باقیمانده تقسیم عدد صحیح میشه
ضمن این که استاد رحیمی هم به نکته خوبی اشاره کرد

black_shadow
جمعه 28 اسفند 1394, 19:55 عصر
خودتو درگیر مسائل حل شده در دانت فریم ورک نکن بجاش رو مسائل مهمتر وقت بزار.
کلاس Convert این قابلیت رو داره که عددی رو به مبنای 2 ، 8 و 16 تبدیل کنه

int value = 16;
string binary = Convert.ToString(value, 2);//مبنای 2
MessageBox.Show(binary);


سلام ممنون
میشه بپرسم من این مسائل حل شده رو چطوری میتونم بفهمم که هستن یا نه؟

black_shadow
جمعه 28 اسفند 1394, 20:00 عصر
خودتو درگیر مسائل حل شده در دانت فریم ورک نکن بجاش رو مسائل مهمتر وقت بزار.
کلاس Convert این قابلیت رو داره که عددی رو به مبنای 2 ، 8 و 16 تبدیل کنه

int value = 16;
string binary = Convert.ToString(value, 2);//مبنای 2
MessageBox.Show(binary);


استاد میشه بگین چطوری میتونم مثلا با حلقه یا .. جواب تقسیم بالا رو از آخر به اول بخونم؟

bisbis10
جمعه 28 اسفند 1394, 20:30 عصر
private void button1_Click(object sender, EventArgs e)
{
int decimalNumber = int.Parse(textBox1.Text);
string binaryRe="";
string binaryNumber="";
while(decimalNumber>0)
{
binaryRe = binaryRe + (decimalNumber % 2);
decimalNumber /= 2;

}
for(int i=binaryRe.Length-1;i>=0;i--)
{
binaryNumber += binaryRe[i];
}
MessageBox.Show(binaryNumber);
}

black_shadow
جمعه 28 اسفند 1394, 20:44 عصر
میشه روش کار رو توضبح بدی با جزیات ممنون میشم

bisbis10
جمعه 28 اسفند 1394, 21:11 عصر
میشه روش کار رو توضبح بدی با جزیات ممنون میشم

ببین دوست عزیز
اول یک عدد در مبنای ده رو از کاربر میگیرم ور میریزیم توی متغیر decimalNumber
دوتا رشته تعریف کردم واسه ریختن عدد باینری که میگم به چه صورته....
توی شرط while گفتم تا وقتی که عددمون بزرگتر از صفره ادامه پیدا کنه...وقتی شما میخای عددی رو ببری به مبنای دو به طور متوالی تقسیم بر دو میکنی وقتی خارج قسمتت صفر شد باقی مانده هارو از اخر به اول کنار هم میزاری
داخل رشته ی binaryRe هر دفعه عددو تقسیم بر دو میکنه و باقیماندشو به مقدار قبلی رشته میچسبونه که در ابتدا مقدار رشته خالیه
مثلا توی binaryRe رشته ی "110" داریم مقدار بعدی رو میچسبونه بهش میشه مثلا "1101"
به حروف یک رشته مثل ارایه میشه با اندیس دسترسی پیدا کرد
مثلا


binaryRe[2] ------> '0'


برای همین
یه حلقه ی for گزاشتم مقدار i رو طول binaryRe منهای یک دادم چون اندیس ها از 0 شروع میشه و اخرین اندیس یکی از طول رشته کمتره
و حروف binaryRe رو از آخر به رشته binaryNumber میچسبونه
بهتر از این نمیتونستم توضیح بدم
امیدوارم متوجه شده باشید:لبخند:

ژیار رحیمی
شنبه 29 اسفند 1394, 04:35 صبح
دوست گرامی روشهای پیاده سازی مختلفی از یک الگوریتم هست

public string IntToBinaryString(int number)
{
var binary = string.Empty;
while (number > 0)
{
binary = (number & 1) + binary;//گرفتن باقیمانده عدد و الحاق به رشته
number = number >> 1;//تقسیم عدد بر دو
}
return binary;
}

ژیار رحیمی
شنبه 29 اسفند 1394, 04:44 صبح
private string dahdahi_to_bin(int num)
{
var revers = string.Empty;
while (num >0)
{
revers = (num % 2) + revers;
num = num/2;
}
return revers;
}