PDA

View Full Version : سوال: مشکل در پروژه ماشین حساب سی شارپ



sitetheme
چهارشنبه 21 مهر 1395, 17:11 عصر
درود بر دوستان برنامه نویس!
تازه وارد برنامه نویسی ویژوال سی شارپ شدم (زمینه درباره cpp دارم)
امودم با یک پروژه ماشین حساب ساده آغاز کنم که یک مشکلی دارم!

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

namespace WindowsFormsApplication12
{
public partial class Form1 : Form
{

int sum = 0,neg=0;
int op;
bool i=true;
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{
tb1.Clear();
}

private void plus_Click(object sender, EventArgs e)
{
sum += int.Parse(tb1.Text);
tb1.Clear();
op = 1;
}

private void eq_Click(object sender, EventArgs e)
{
int total=0;
if (op == 1)
{

total = sum + int.Parse(tb1.Text);
op=0;

}
if(op == 2){
total = neg - int.Parse(tb1.Text);

}
tb1.Text = Convert.ToString(total);
total = 0;
sum = 0;
neg = 0;
}

private void button2_Click(object sender, EventArgs e)
{
while(i==true){
neg += int.Parse(tb1.Text);
i = false;
tb1.Clear();
return;


}

neg -= int.Parse(tb1.Text);
tb1.Clear();
op = 2;
}









}
}



بخش جمع چند تا عدد رو درست کردم و به خوبی کار میکنه ولی با شیوه ای مشابه بخش تفریق رو به مشکل خوردم!
شیوه کاری همانگونه که از کد مشخص هست اینه کاربر با وارد کردن نخستین عدد کلید منفی رو میزنه بعد نخستین عدد ورودی در متغیری بنام neg اضافه میشه ولی اعداد بعدی که با فشردن دکمه تفریق گرفته میشن از اون عدد اولیه کم میشن.
اشکال کار رو نمیدونم کجاس بخش های مختلفشو دیباگ کردم ولی حاصل تفریقی که نشون میده درست نیست!
بامهر

ScienceLover
چهارشنبه 21 مهر 1395, 17:37 عصر
درود
اگر برنامه شما درست کار می کرد اشکال داشت. شما متغییری را وارد کرده و بدون اینکه ذخیره کنید اعمال می کنید!:متفکر:

sitetheme
چهارشنبه 21 مهر 1395, 17:50 عصر
درود
اگر برنامه شما درست کار می کرد اشکال داشت. شما متغییری را وارد کرده و بدون اینکه ذخیره کنید اعمال می کنید!:متفکر:

سپاس از پاسخ شما!
میشه خطی که چنین کاری انجام شده رو بگید که متوجه منظور شما بشم؟
شما متوجه مشکل من شدید؟
بامهر

ScienceLover
چهارشنبه 21 مهر 1395, 17:55 عصر
درود
شما در جای نامناسب و بدون دلیل محتوای tb1 رو Clear می کنید. در سه جای برنامه!:لبخند:

sitetheme
چهارشنبه 21 مهر 1395, 18:15 عصر
چرا بدون دلیل:لبخند:

private void button1_Click(object sender, EventArgs e)
{
tb1.Clear();
}



اینجا که به دلیل فشرده شدن دکمه Reset محتوا رو clear کردم.

private void plus_Click(object sender, EventArgs e)
{
sum += int.Parse(tb1.Text);
tb1.Clear();
op = 1;
}



اینجا هم که پس افزودن مقدار به متغیر sum تکست باکس رو clear کردم.

private void button2_Click(object sender, EventArgs e)
{
while(i==true){
neg += int.Parse(tb1.Text);
i = false;
tb1.Clear();
return;


}



اینجا هم تنها برای نخستین بار پس از اینکه مقدار تکست باکس رو به متغیر neg افزودم clear انجام شده


}

neg -= int.Parse(tb1.Text);
tb1.Clear();
op = 2;
}



اینجا هم که برای دفعات بعدی که عدد وارد شده و بعد دکمه تفریق خورده پس از کم کردن عدد باکس رو clear کردم!
چرا پس بی دلیل؟:افسرده:

ScienceLover
چهارشنبه 21 مهر 1395, 18:40 عصر
درود اگر شما در tb1 مقداری باقی نگذارید چیزی وجود ندارد که جمع یا تفریق شود بنابراین یا برنامه متوقف می شود یا مقدار صفر باقی می کذارد. قسمت اول اشکالی ندارد. شما باید به tb1 مقدار دهید و مقدار داشته باشد در غیر اینصورت برنامه یا متوقف می شود یا حاصل تبدیل 0 است و در کل غلط. اگر شما یک مرحله را درست انجام ندهید به مشکل بر می خورید. شما مقدار می دهید و در آخر هم..... برنامه شما در هر بار فشار دادن کلید ها (هر سه) درtb1 باید مقداری وجود داشته باشد. اگر منطق برنامه شما درست باشد و این را هم انجام بدهید آن وقت برنامه شما درست کار خواهد کرد. علاوه بر این مشکل دیگر در متغییر op است. op در انتهای برنامه 2 می شود و فرصتی برای اعمال عمل تفریق باقی نمی ماند(eq)

ronix3
چهارشنبه 21 مهر 1395, 19:32 عصر
رویداد تفریق رو به صورت زیر تغییر بدید
if (neg == 0)
neg = int.Parse(tb1.Text);
else
neg -= int.Parse(tb1.Text);
tb1.Clear();
op = 2;

sitetheme
چهارشنبه 21 مهر 1395, 19:52 عصر
رویداد تفریق رو به صورت زیر تغییر بدید
if (neg == 0)
neg = int.Parse(tb1.Text);
else
neg -= int.Parse(tb1.Text);
tb1.Clear();
op = 2;
سپاس فراوان درست شد!
میشه بگین کارم کجاش اشکال داشت؟
بامهر

hadi vafaii
چهارشنبه 21 مهر 1395, 21:44 عصر
سلام یه ماشین حساب ساختم امیدوارم به دردت بخوره سورسش رو میتونی از اینجا دانلود کنی

دانلود (http://iran-software.blogsky.com/1395/07/21/post-16/%D9%85%D8%A7%D8%B4%DB%8C%D9%86-%D8%AD%D8%B3%D8%A7%D8%A8)

daniyaltjm
چهارشنبه 21 مهر 1395, 22:16 عصر
سلام این ماشین حساب رو نوشتم فکر کنم بدردتون بخوره

http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE&p=2343778&viewfull=1#post2343778

sitetheme
پنج شنبه 22 مهر 1395, 19:57 عصر
ماشین حساب ندید، ماشین حساب نوشتن رو یاد بدید:لبخند:
بامهر

daniyaltjm
پنج شنبه 22 مهر 1395, 20:50 عصر
ماشین حساب ندید، ماشین حساب نوشتن رو یاد بدید:لبخند:
بامهر

دوست عزیز من ماشین حساب ندادم! من سورس ماشین حساب بهتون دادم که یکم اگه علاقه داشته باشین کدشو نگاه کنید و حتما متوجه می شید، راستی اینم بهتون بگم که توی کد بالا که نوشتین خیلی بد کد نویسی کردین اصلا معلوم نیست کی به کیه!! خیلی ساده ترم میتونی کار کنی مثلا برای عملگر ها از متغیر رشته یا کاراکتر استفاده کن مثل : "+" یا "/" اینطوری بهتره بعد اصلا به حلقه احتیاج نیست.