PDA

View Full Version : سوال: ماشین حساب c++ با استفاده از رشته ها



Milad._.R
یک شنبه 22 اردیبهشت 1392, 12:47 عصر
سلام

یه ماشین حساب نوشتم که هر بار فقط یک عملیات رو انجام میده.استاد گفت که با استفاده از رشته ها کاری کن که عملیات چندتایی رو انجام بده
مثل 2+3*5-8

میشه راهنمایی کنید ؟

توابع رشته هایی که به ما یاد دادن:
strlen
strcpy
strcat
strcmp


در ضمن با برنامه turbo c++ 4.5 باشه

ممنون

مسعود اقدسی فام
یک شنبه 22 اردیبهشت 1392, 18:27 عصر
شما باید با مباحث Parsing و ساخت درخت محاسبات و پیمایش درخت آشنایی داشته باشید.

mahak006
یک شنبه 22 اردیبهشت 1392, 18:33 عصر
شما باید با مباحث Parsing و ساخت درخت محاسبات و پیمایش درخت آشنایی داشته باشید.

می تونه infix به postfix تبدیل بشه و بعدش محاسبه بشه . احتمالا باید ساختمان داده رو خونده باشید . من قبلا ( ۱ سال پیش ) این برنامه رو نوشتم . می تونم تو زمینه هایی که یادم میاد ، کمکتون کنم .

Milad._.R
یک شنبه 22 اردیبهشت 1392, 18:58 عصر
من ترم دو فناروی اطلاعات هستم
اصلا نمیدونم در مورد چی صحبت میکنید !
خیلی مبتدی هستم و استاد هم خودش زیاد حرفه ای درس نمیده ولی برنامه پیشرفته میخواد !

اگه میشه بیشتر راهنمایی کنید

مثلا میخوام فقط برای عملیات جمع و تفریق اینکار رو انجام بدم چطوری میشه ؟ (5+2-8)

بدون رشته هم باشه اشکالی نداره
استاد فقط گفت با رشته ها هم میتونی اینکار رو انجام بدی
هر چی ساده تر باشه بهتره تا راحت تر متوجه بشم

mahak006
دوشنبه 23 اردیبهشت 1392, 13:46 عصر
این چیزی که ما می گیم بره درس ساختمان داده هست که بعد ساختمان گسسته و برنامه نویسی پیشرفته می تونی برداری . همون مطالب برنامه نویسی پیشرفته رو ( مثل ساختن کلاس و متد و ... ) استفاده می کنه تا ساختمان های داده رو بسازه . ساختمان هایی مثل پشته و ...
این مثال رو می شه با پشته حل کرد . یعنی با استفاده از پشته بیای اول ساختار عملیات جبری رو ( به همراه پرانتز یا بدون پرانتز ) از infix ( همین مدلی که نوشتی . مثلا 8-2+5 ) به postfix یا prefix ( ترجیحا postfix ) تبدیل می کنی که بره postfix میشه :

5 2 + 8 -

آخر سر هم باز با استفاده از پشته ، این postfix شده رو حل می کنی . البته کار زیاد راحتی نیست . اا تو اینترنت بگردی ، مطالب خوبی می تونی گیر بیاری . کلمات کلیدیت هم postfix و infix و stack ( پشته ) باشه .

omidshaman
سه شنبه 24 اردیبهشت 1392, 10:15 صبح
بدون استفاده از چیزایی که دوستان گفتن هم شدنیه ولی یکم کار می بره یک مثال برات می زنم که ضرب ها رو حذف می کنه

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main()
{
string a="a+3*5-4*5";
int num=-1;
do
{
num=a.find("*",num+1);
if(num>0)
{
int mpl=((int) a[num-1]-'0' )* ((int) a[num+1]-'0' ); //tabdil char be int va zarb 2 adad (5 , 3 ) in ja
//! tabldi int be string
string multiply;
ostringstream convert;
convert << mpl;
multiply = convert.str();
//!
a.insert(num+2,multiply);//gozashtan string bad az 5 dar inja
a.erase(num-1,3);//hazf 3*5
}

}while(num!=-1);
cout<<a;

}


خروجی a+15-20
چند تا نکته
تو این برنامه عدد قبل و بعد ضرب باید یک رقمی باشه
بعد این که من واقعا تو کار استادای دانشگاه های ایران موندم! به حساب خودشون دارن C++‎ درس میدن ولی از کتابخونه های c استفاده می کنن:)(strcat,..)

Milad._.R
سه شنبه 24 اردیبهشت 1392, 20:10 عصر
دستتون درد نکنه
فقط اگه میشه یکاری کنید در turbo c++ 4.5 اجرا بشه

omidshaman
سه شنبه 24 اردیبهشت 1392, 21:28 عصر
به جای توربو از یک IDE بروزتر مثل code block یا visual studio استفاده کن.