PDA

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



On Moon
دوشنبه 19 مرداد 1394, 01:30 صبح
سلام دوستان وقتتون بخیر باشه

من خیلی مبتدی هستم و میخوام که شروع به کار کنم، ای شالا با کمک ها و نظرات شما استاد های با تجربه بتونم پیشرفت های زیادی داشته باشم، ممنونم از همه شما عزیزان

در این پستم میخوام باهم در مورد برنامه ماشین حساب ساده بحث کنیم
خب من کدی رو که نوشتم در سایت قرار میدم :
1-این ماشین حساب میتونه از خروجی یه نسخه فایل با فرمت txt تهیه کنه ، اما مشکل اینجا ست که وقتی خروجی رو باز میکنم داخلش چیزی نیست :


#include <iostream>
#include <fstream>
using namespace std;
int main()
{


int x, y;
char opr;
ofstream outputFile("o7.txt", ios::out);
cout << "Please Insert Your Numbers & Oprand" << endl;
cin >> x >> opr >> y;
if (!outputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
switch (opr)
{
case '+':cout << x + y << endl; break;
case '-':cout << x - y << endl; break;
case '*':cout << x*y << endl; break;
case '/':cout << x / y << endl; break;
case '%':cout << x%y << endl; break;
default: cout << "Oprand is not True" << endl;


}
system("pause");
return 0;
}

2-مشکل این قسمت از برنامه ام هم اینکه کلا خروجی رو نشون نمیده ، یعنی خروجی صفحه نمایش به محض ظاهر شدن ، خارج میشه

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int x, y;
char opr;
ifstream inputFile("o7.txt", ios::in);
cout << "This is OUTPUT" << endl;
if (!inputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
inputFile >> x;
inputFile >> y;
inputFile >> opr;

cout <<"x =" << x << "opr =" << opr <<"y =" << y << endl;
system("pause");



return 0;
}


3-سومین مشکل هم اینکه وقتی مقادیری رو از خروجی استخراج میکنم، اعداد اشتباهی رو بر میگردونه

++++++A
دوشنبه 19 مرداد 1394, 11:39 صبح
با سلام

در مورد سوال اولتون شما دو عدد و یک عملگر را میگیرید و جواب عبارت را چاپ میکنید و در اون فایلی که برای نوشتن بازش کردید هیچ چیزی ننوشتید

در مورد قسمت دوم چون فایلی که باز میکنید خالیه این اتفاق می افته


در مورد قسمت سوم هم باید اطلاعات رو به همون ترتیبی که در فایل نوشتید از فایل بخونید

برنامه نوشتن تو فایل اینجوری باید باشه

#include <iostream>#include <fstream>


using namespace std;


int main()
{
int x, y;
char opr;
ofstream outputFile("o7.txt", ios::out);
cout << "Please Insert Your Numbers & Oprand" << endl;
cin >> x >> opr >> y;
if (!outputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
outputFile << x << ' ' << opr << ' ' << y << ' ' << '=';
switch (opr)
{
case '+':
cout << x + y << endl;
outputFile << ' ' << x + y << ' ' << endl;
break;
case '-':
cout << x - y << endl;
outputFile << ' ' << x - y << ' ' << endl;
break;
case '*':
cout << x*y << endl;
outputFile << ' ' << x * y << ' ' << endl;
break;
case '/':
cout << x / y << endl;
outputFile << ' ' << x / y << ' ' << endl;
break;
case '%':
cout << x%y << endl;
outputFile << ' ' << x % y << ' ' << endl;
break;
default:
cout << "Oprand is not True" << endl;




}


outputFile.close();


system("pause");
return 0;
}


و برای خواندن از فایل هم


#include <iostream>#include <fstream>


using namespace std;


int main()
{
int x, y, z;
char opr1, opr2;
ifstream inputFile("o7.txt", ios::in);
cout << "This is OUTPUT" << endl;
if (!inputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
inputFile >> x;
inputFile >> opr1;
inputFile >> y;
inputFile >> opr2;
inputFile >> z;


cout << "x =" << x << "\nopr =" << opr1 << "\ny =" << y << "\n natije :" << z << endl;




inputFile.close();


system("pause");
return 0;
}


موفق باشید

On Moon
سه شنبه 20 مرداد 1394, 22:29 عصر
سلام و درود

بعد از کلی سختی کشیدن، تازه فهمیدم که برنامه دومم هیچ مشکلی نداره ، مشکل از اینجاست که فایلی رو که باید بعنوان بازیابی مورد استفاده قرار بده ، در محل اصلیش نیست!:قهقهه: و از اینجاست که برنامه exit (1) رو اجرا میکنه

میدونید اول برنامه رو و خروجی رو در محیلی از هارد دیسک کپی میکنه، بعدش از اونجا من ادرس میدم که برو تو پوشه جدید و این فایل رو بردار، بخاطر این بود که 2 تا مشکل آخر پیش اومدش، هم برنامه شما و هم برنامه من درست هست، بشرطی که فایل رو در محل درستش قرار بدیم

یکمی برنامه رو زیبا تر کردم :

#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int main()
{
int x, y;
char opr;
ifstream inputFile("o7.txt", ios::in);
cout << "This is OUTPUT" << endl;
if (!inputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
inputFile >> x;
inputFile >> opr;
inputFile >> y;
cout << "x =" << setw(10) <<x << endl << "opr =" << setw(6) <<opr << endl << "natije =" << setw(4) <<y << endl;
system("pause");
inputFile.close();
return 0;
}
حالا یه سوال دیگه واسم پیش اومده ، تابع مربع و مکعب و همینطور قدر مطلق و جزءصحیح رو باید خودم به برنامه اضافه کنم؟ یا دستوراتشون در C++‎‎‎‎‎ وجود داره؟

++++++A
چهارشنبه 21 مرداد 1394, 12:55 عصر
با سلام

برای توان می توانید از تابع a,b) pow) از کتابخانه math.h استفاده کنید این تابع a^b را برمیگرداند اما استفاده از این تابع زمانی توصیه میشه که یک عدد را به توان عدد غیر صحیح برسانید

ولی اگر فقط بخواهید اعداد را به توان عدد صحیح برسانید بهتر است از یک حلقه for استفاده کنید و عدد را به مقدار توان در خودش ضرب کنید چون در این مورد استفاده از تابع pow محاسبات بیشتری دارد همچنین

حافظه ی بیشتری از کامپیوتر میگیرد و سرعت اجرای برنامه هم کمتر می شود

در مورد قدرمطلق هم میتوانید از تابع a) abs) از کتابخانه math.h استفاده کنید که تابع قدر مطلق a را برمیگرداند


موفق باشید

On Moon
چهارشنبه 21 مرداد 1394, 16:13 عصر
خب تا اینجا با توجه به صحبت های شما استاد بزرگوارم و همینطور این تاپیک (http://barnamenevis.org/showthread.php?195704-%D8%AA%D8%A7%D8%A8%D8%B9-%D8%AC%D8%B2%D8%A1-%D8%B5%D8%AD%DB%8C%D8%AD-(%D8%A8%D8%B1%D8%A7%DA%A9%D8%AA)-%D9%88-%D9%82%D8%AF%D8%B1-%D9%85%D8%B7%D9%84%D9%82-%D8%AF%D8%B1-C) تقریبا برنامه ماشین حساب پیشرفته تر شده

حالا میخوام از همه عزیزان راهنمایی بگیرم تا یه کار جالب انجام بدم،ببینید دوستان الآن در این برنامه من فایلی برای ذخیره مقدار خروجی در نظر گرفتم،خب این فایل رو میتونیم با هر برنامه ای که بتونه متن رو بخونه ( از جمله notepade & word ) باز کرد ، من میخوام این مورد رو تبدیل به یه فرمت خاص کنم ؛ یعنی مثلا اگه فرمت .good رو قراربدم, حالا از این طرف هم باید کاری کنم که ذخیره سازی بصورت text نباشه مثلا به کد اسکی یا بقیه کدگذاری ها تبدیل بشه (این سوال دومم هست انواع کد گذاری ها چی هستن؟ ) که وقتی فایل ذخیره شد و اگه با برنامه های word و غیره باز شد به این راحتی نشه بازش کرد

دوستان اگه ممکنه منو راهنمایی کنید چه مبحثی رو مطالعه کنم تا بجوابم برسم
چجوری میتونم کدگذاری های مختلف رو در ++C پیدا کنم و ازشون در برنامه خودم استفاده کنم

سعی میکنم که تا شب برنامه رو توسعه بدم (لگاریتم ؛ فاکتوریل ؛ توان ، مکعب ؛ مربع ، قدر مطلق و جزءصحیح )

On Moon
شنبه 24 مرداد 1394, 23:06 عصر
سلام مجدد، دوستان ، این هم قطعه برنامه تابع لگاریتم در مبنای 10 :

#include <stdio.h>
#include <math.h>
#include <iostream>
using namespace std;
int main ()
{
double p, r;
cout <<"Maghadir vared shavad:"<<endl;
cin >> p;
r = log10 (p);
printf ("log(%f) = %f\n", p, r );
// cout << p << r << endl;
system ("pause");
return 0;
}



log با log10 فرق داره ، اگه اشتباه نکنم،log به تنهایی لگاریتم عدد در مبنای 10 باشه ، خودمم نمیدونستم، اعدادی رو که وارد میکردم با ماشین حساب چک میکردم ، اشتباه شده بودن که این دستور رو پیدا کردم


ای شالا بقیه توابع رو هم دونه دونه قرار میدم و در اخر هم به برنامه ماشین حساب حرفه ای تبدیلش میکنیم ... :لبخندساده:

On Moon
سه شنبه 27 مرداد 1394, 16:48 عصر
خب بلاخره برنامه رو اونطوری که میخواستم تموم کردم، اما سه تا اشکال داره برنامه ام :



[*=right]اگه بخوام دقت برنامه ام رو زیاد کنم، باید از نوع داده ای double استفاده بکنم و همینطور در این قسمت :

int main(){
long x, y;
char opr, l, s, J;اما نمیدونم چرا این مقدار رو نمیپذیره
[*=right]وقتی که توابع مربع،فاکتوریل و لگاریتم رو اجرا میکنم ، در آخر که نتیجه رو نمایش میده این پیغام خطا رو میده :

Oprand is not True
[*=right]وقتی که برنامه رو اجرا میکنم و نتایج رو ذخیره میکنه، فقط نتایج همون مرحله آخر رو دخیره میکنه، من میخوام هر چند باری که از برنامه استفاده میشه ،همه رو کامل ذخیره کنه


چیکار کنم که این دو مشکل هم برطرف بشه



#include <iostream>
#include <fstream>
#include <stdio.h>
#include <cmath>
using namespace std;
long Q(int);
long F(int);
long T(int);
int main()
{
long x, y;
char opr, l, s, J;
ofstream outputFile("o7.txt", ios::out);
cout << "Please Insert Your Numbers & Oprand" << endl;
cin >> x >> opr;
if (!outputFile)
{
cerr << "some thing wrong during opening file!" << endl;
exit(1);
}
switch (opr)
{
case '+':
cin >> y;
cout << x + y << endl;
outputFile << ' ' << x + y << ' ' << endl;
break;
case '-':
cin >> y;
cout << x - y << endl;
outputFile << ' ' << x - y << ' ' << endl;
break;
case '*':
cin >> y;
cout << x*y << endl;
outputFile << ' ' << x * y << ' ' << endl;
break;
case '/':
cin >> y;
cout << x / y << endl;
outputFile << ' ' << x / y << ' ' << endl;
break;
case '%':
cin >> y;
cout << x%y << endl;
outputFile << ' ' << x % y << ' ' << endl;
break;
case 's':
cout << sqrt(x) << endl;
outputFile << ' ' << x; 's' << y << ' ';
break;
case 'Q':
cout << Q(x) << endl;
outputFile << ' ' << x << " , cube (X) ="<< Q (x) << ' ' << endl;
break;
case 'l':
cout << log10(x) << endl;
outputFile << ' ' << x; 'l' << y << ' ';
break;
case 'F':
cout << F(x) << endl;
outputFile << ' ' << x << " , Fact (X) =" << F (x) << ' ' << endl;
case 'T':
cout << T(x) << endl;
outputFile << ' ' << x << " , Square (X) =" << T (x) << ' ' << endl;
default:
cout << "Oprand is not True" << endl;
}
outputFile.close();
system("pause");
return 0;
}
long Q(int x)
{ // return cube x:
return x*x*x;
}
long F(int x)
{// return X!
if (x < 0) return 0;
int f = 1;
while (x>1)
f *= x--;
return f;
}
long T(int x)
{ // return Square x:
return x*x;
}


دوست دارم که این نکات رو هم بگم:


اگه در برنامه و هنگام run کردن ، با error شماره 2064 رو برو شدید ، احتمالا اشکال از اینکه متغییر اضافی مشخص کردید و از اون استفاده نکردید
یا اینکه نوع داده ای رو مناسب انتخاب نکردید



در ادامه برنامه ، میخوام از حلقه هم استفاده کنم تا بعد از نمایش نتیجه برنامه سریعاَ خارج نشه و همینطور از روی فایل ذخیره شده، یک فایل کپی تهیه کنه و همچنین تمام نتایج رو دخیره کنه