PDA

View Full Version : سوال: ماشین حساب



me1364
جمعه 04 اردیبهشت 1388, 23:39 عصر
سلام من به تازگی کار با #C را شروع کردم یعنی دارم اولین برنامه ام را باهاش درست میکنم (ماشین حساب) حالا برای دکمه ممیز که میخوام برای ماشین حساب بگذارم مشکل دارم نمیدونم چه کدی براش بنویسم که اعدادم را ممیز دار کنه لطفا اگر میشه یک نمونه کد برام بگذارید
ممنون

13601360
شنبه 05 اردیبهشت 1388, 00:04 صبح
ببین این نمونه پروژه بدردت می خوره
این لینک (http://www.codeproject.com/KB/cs/graphcalc.aspx) هم ببینی بد نیست


http://www.codeproject.com/KB/cs/Scientific_Calculator/sds.JPG

me1364
شنبه 05 اردیبهشت 1388, 02:13 صبح
مشکل قبلی حل شد ممنون.
حالا یک سوال دیگه دارم میخوام کاری کنم که وقتی کلیدهای کیبورد را میزنم در برنامه ام اعداد وارد شود به اصطلاح قسمت NumPad کیبورد فعال بشه.
ممنون.

seven7777777
شنبه 05 اردیبهشت 1388, 10:00 صبح
برای اینکار می تونی از تکست باکس هایی که فقط عدد می گیرند استفاده کنی .

Developer Programmer
شنبه 05 اردیبهشت 1388, 10:24 صبح
وقتی کلیدهای کیبورد را میزنم در برنامه ام اعداد وارد شود به اصطلاح قسمت NumPad کیبورد فعال بشه.

public Form1()
{
InitializeComponent();
textBox1.ReadOnly = true;
KeyPreview = true;
}

private void Form1_KeyPress( object sender , KeyPressEventArgs e )
{
if ( e.KeyChar >= '0' && e.KeyChar <= '9' )
textBox1.Text += e.KeyChar;

}
}

seven7777777
شنبه 05 اردیبهشت 1388, 11:28 صبح
البته این روش رو که دوستمون گفتن باید یه کم تغییرش بدی چون الان ممیز رو قبول نمی کنه همین طور برخی عملیات مثل یک مرحله برگشت ، اعمال ریاضی و ... اما اگه فقط اعداد رو می خوای از روشی که دوستمون گفت می تونی استفاده کنی .

me1364
شنبه 05 اردیبهشت 1388, 13:33 عصر
سلام به همگی دوستان ممنون از اینکه راهنمایی کردید
من تا اینجا مشکلم حل شده و جلو رفتم حالا میخوام کاری کنم وقتی مثلا کلید 2 را میزنم بعد کلید + دوباره وقتی کلید 2 رازدم و کلید + را زدم عدد 4 را نمایش بده سپس منتظر عدد بعدی باشه؟
منظورم اینه که نمیخوام حتما با کلید مساوی نتیجه حساب بشه میخوام با کلیدهایی که چهار عمل اصلی را انجام میدهند هم نتیجه حساب بشه

Developer Programmer
شنبه 05 اردیبهشت 1388, 17:41 عصر
حالا میخوام کاری کنم
واسه چی از سورسی که در بالا ارائه شد و هزاران سورس ماشین حساب که در اینترنت هست استفاده نمیکنی؟

seven7777777
شنبه 05 اردیبهشت 1388, 23:04 عصر
خوب هر بار که یکی از کلید های عملیات ریاضی زده شد ، عمل قبلی رو انجام بده و به همین ترتیب . برای اطلاع از عمل قبلی هم میتونی اونو تو یه متغیر ذخیره کنی .

Developer Programmer
یک شنبه 06 اردیبهشت 1388, 11:22 صبح
برای اطلاع از عمل قبلی هم میتونی اونو تو یه متغیر ذخیره کنی یعنی اینطوری:

واسه اعداد صفر تا 9، همچین کدی رو در Event شون مینویسیم


private void button9_Click( object sender , EventArgs e )
{
if ( clear == true )
{
textBox1.Text = "";
clear = false;
}
textBox1.Text += "9";
}
واسه چهار عمل اصلی و مساوی، این کد:


private void buttonSubtrac_Click( object sender , EventArgs e )
{
CheckOp( '-' );
}
private void buttonEqual_Click( object sender , EventArgs e )
{
CheckOp( '=' );
}
یکسری متغیر عمومی هم داریم


char PrevOperator;
int result;
bool clear;

public Form1()
{
InitializeComponent();

textBox1.ReadOnly = true;
KeyPreview = true;
textBox1.Text = "0";

PrevOperator=' ';
result = 0;
clear = true;
}
CheckOp : روالی که چهار عمل اصلی رو کنترل میکنه و منتیجه نهایی رو نشون میده.
Clear: تعیین میکنه که محتوای TextBox پاک بشه، یا نه
PrevOp: آخرین عملگر، رو نگه میداره.
result: نتیجه نهایی محاسبه رو نگه میداره.

روال CheckOp هم اینطور عمل میکنه


public void CheckOp(Char op)
{
switch (PrevOperator )
{
case '+' :
result += Convert.ToInt32( textBox1.Text );
break;
case '-':
result -= Convert.ToInt32( textBox1.Text );
break;
case '*':
result *= Convert.ToInt32( textBox1.Text );
break;
case '/':
result *= Convert.ToInt32( textBox1.Text );
break;
default :
result = Convert.ToInt32( textBox1.Text );
break;
}
PrevOperator = op;
clear = true;
textBox1.Text = Convert.ToString( result );
}

هر بار که عملگری رو فشار میدی، بر اساس عملگر قبلی، نتیجه رو محاسبه و در result ذخیره میکنه و اونرو در textbox نشون میده و clear رو طوری ست میکنه که با فشار اعداد، محتوای قبلی textbox بر داشته بشه و اعداد جدید تایپ بشن ( عطف به جمله زیر)


سپس منتظر عدد بعدی باشه؟
منظورم اینه که نمیخوام حتما با کلید مساوی نتیجه حساب بشه میخوام با کلیدهایی که چهار عمل اصلی را انجام میدهند هم نتیجه حساب بشه

seven7777777
یک شنبه 06 اردیبهشت 1388, 14:21 عصر
فقط در کد بالا به این نکته که اعداد می تونه اعشاری هم باشه دقت نشده که با یک تغییر جزیی بهش می رسی .

me1364
یک شنبه 06 اردیبهشت 1388, 18:31 عصر
سلام
الان همه کارها را انجام دادم فقط میخوام کاری کنم که حافظه ماشین حسابم با باز و بسته شدن از بین نره من چنین برنامه ایی را با دلفی نوشتم اونجا وقتی کاربر حافظه را میزد یک متغیری در رجیستری میساختم و عدد را درون اون متغیر ذخیره میکردم و هروقت که میخواستم از اونجا میخوندم اینجوری عدد حافظه از بین نمیرفت اما با #C هرکاری کردم نتونستم:ناراحت: این کار را بکنم اگر یک نفر یا همین راه یا اینکه نحوه ذخیره و خواندن از فایل را بگه ممنون میشم :چشمک: اگر راه بهتری وجود داره معرفی کنید ممنون میشم
ممنون از راهنماییتون


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

آخه اگر بخواهم دقیقا کد و سورس آماده را کپی کنم دارم خودما گول میزنم اونجوری هیچی بعدا یاد نمیگیرم.

Developer Programmer
یک شنبه 06 اردیبهشت 1388, 23:05 عصر
اگر یک نفر یا همین راه یا اینکه نحوه ذخیره و خواندن از فایل را بگه ممنون میشمMSDN رو باز کن و File Class رو ببین


using System;
using System.IO;

class Test
{
public static void Main()
{
string path = @"c:\temp\MyTest.txt";
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}

// Open the file to read from.
using (StreamReader sr = File.OpenText(path))
{
string s = "";
while ((s = sr.ReadLine()) != null)
{
Console.WriteLine(s);
}
}

try
{
string path2 = path + "temp";
// Ensure that the target does not exist.
File.Delete(path2);

// Copy the file.
File.Copy(path, path2);
Console.WriteLine("{0} was copied to {1}.", path, path2);

// Delete the newly created file.
File.Delete(path2);
Console.WriteLine("{0} was successfully deleted.", path2);
}
catch (Exception e)
{
Console.WriteLine("The process failed: {0}", e.ToString());
}
}
}


اونجا وقتی کاربر حافظه را میزد یک متغیری در رجیستری میساختم و عدد را درون اون متغیر ذخیره میکردم
MSDN رو باز کن و Registry Class رو مطالعه کن


using System;
using Microsoft.Win32;

class Reg {
public static void Main() {

// Create a RegistryKey, which will access the HKEY_USERS
// key in the registry of this machine.
RegistryKey rk = Registry.Users;

// Print out the keys.
PrintKeys(rk);
}

static void PrintKeys(RegistryKey rkey) {

// Retrieve all the subkeys for the specified key.
String [] names = rkey.GetSubKeyNames();

int icount = 0;

Console.WriteLine("Subkeys of " + rkey.Name);
Console.WriteLine("-----------------------------------------------");

// Print the contents of the array to the console.
foreach (String s in names) {
Console.WriteLine(s);

// The following code puts a limit on the number
// of keys displayed. Comment it out to print the
// complete list.
icount++;
if (icount >= 10)
break;
}
}
}