شما این محصولات را انتخاب کرده اید

سبد خرید

برنامه محاسبه عبارات جبری در C++
شناسه پست: 2578
بازدید: 1111
				
					#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
 
//************************** stack ****************************************
struct stack
{
    char info;
    stack *link;
}*ss;
//************************** stack ****************************************
struct stack2
{
    long info;
    stack2 *link;
}*ss2;
//************************** num ***************************************
struct number
{
    long value;
    char chr;
    number *link;
}*ns;
//************************** check num **********************************
long checknum(char chr)
{
    number *ptr;
    ptr = ns;
    while ( ptr != NULL)
    {
        if ( ptr->chr == chr) return ptr->value;
        ptr = ptr->link;
    }
    return 0;
}
//************************** insert num **********************************
void insertnum(long value, char chr)
{
    number *ptr;
    ptr = (number*) malloc(sizeof(number));
    ptr->link = ns;
    ptr->chr = chr;
    ptr->value = value;
    ns = ptr;
}
//************************** push ***************************************
void push(char item)
{
    stack *ptr;
    ptr = (stack*) malloc(sizeof(stack));
    ptr->info = item;
    ptr->link = ss;
    ss = ptr;
}
//************************** pop ****************************************
char pop()
{
    stack *ptr;
    ptr = ss;
    char temp;
    temp = ss->info;
    ss = ss->link;
    free(ptr);
    return temp;
}
//************************** push ***************************************
void push2(long item)
{
    stack2 *ptr;
    ptr = (stack2*) malloc(sizeof(stack2));
    ptr->info = item;
    ptr->link = ss2;
    ss2 = ptr;
}
//************************** pop ****************************************
long pop2()
{
    stack2 *ptr;
    ptr = ss2;
    long temp;
    temp = ss2->info;
    ss2 = ss2->link;
    free(ptr);
    return temp;
}
//************************** mid ****************************************
char mid ( char source[] , int position , int count , char destination[])
{
    int qcount = 0 , len ;
    len = strlen(source);
    for ( int i = position - 1 ; i < position + count - 1 && i < len ; i++ , qcount++)
        destination[qcount] = source[i];
    destination[qcount] = 0; 
    if ( qcount == 1) return destination[0];
    else return 0;
}
//************************** priority **************************************
int priority(char a , char b)
{
    if ( a == '^') return 1;
    if ( b == '^') return 0;
    if ( a == '*' || a == '/' || a == '%' ) return 1;
    if ( b == '*' || b == '/' || b == '%' ) return 0;
    return 1;
}
//************************** pulish ****************************************
void pulish(char source[] , char dest[] , int len)
{
    char temp , temp2[2];
    int count = 0;
    for ( int i = 0 ; i < len ; i++)
    {
        temp = mid(source , i + 1 , 1 , temp2);
        switch (temp)  
        {
        case '+':
        case '-':
        case '*':
        case '/':
        case '^':
        case '%':
            if (ss->info == '(' || priority(ss->info , temp) == 0 ) push (temp);
            else
            {
                while (ss ->info != '(' && priority(ss->info , temp))
                    dest[count++] = pop();
                push(temp);
            }
        break;     
        case '(':
            push(temp);
        break;
         
        case ')':
            while ( ss->info != '(')
                dest[count++] = pop();
            pop();
        break;
        default :
            if ( temp >= 48 && temp <= 122)
                dest[count++] = temp;
        }                
    }
    dest[count] = 0;
}
//************************** value ****************************************
long value(char source[] , int len)
{
    char temp , temp2[2] ;
    long a , b, result;
    for ( int i = 0 ; i < len ; i++)
    {
        temp = mid ( source , i + 1 , 1 , temp2);
        if ( temp >= 48 && temp <= 122)
        {
            a = checknum(temp);
            if ( a == 0 )
            {
                printf("Please Enter %c =" , temp);
                scanf("%u" ,&a);
                insertnum(a , temp);
                push2(a);
            }
            else push2(a);
        }
        else
        {
            b = pop2();
            a = pop2();
            switch (temp)
            {
            case '+':
                result = a + b;
                push2 (result);
            break;
            case '-':
                result = a - b;
                push2 (result);
            break;
            case '*':
                result = a * b;
                push2 (result);
            break;
            case '/':
                result = a / b;
                push2 (result);
            break;
            case '^':
                result = pow(a,b);
                push2 (result);
            break;
            case '%':
                result = a % b;
                push2 (result);
            break;
            }
        }
    }
    return pop2();
}
//************************** main ****************************************
int main()
{
    char p[102] , q[100];
    clrscr();
    int len;
  cin>> p;
    len = strlen(p);
    for ( int i = len ; i > 0 ; i--)
    p[i] = p[i-1];
    p[0] = '(';
    p[len + 1] = ')';
    len +=2;
    p[len] = 0;
    pulish ( p , q , len);
    len = strlen(q);
    cout<< value ( q , len);
    getch();
    return 0;
}
				
			

توضیحات:

صورت سوال:

برنامه محاسبه عبارات جبری در C++

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

شما میتوانید سوالات خود را از طریق ایمیل پشتیبانی – تماس با ما – یا در قسمت نظرات سوال خود را بپرسید.

موفق باشید

A.J

پست های مرتبط:

نحوه استفاده از پوینتر ها در C++
آموزش ها
آرزو نیکدل

نحوه استفاده از پوینتر ها در C++

در زبان برنامه‌نویسی C++، پوینترها یکی از ابزارهای مهم برای مدیریت حافظه و ارجاع به آدرسهای حافظه هستند. با استفاده از پوینترها، می‌توانید به طور مستقیم به حافظه دسترسی پیدا کنید و اطلاعات را در آن ذخیره و با آن کار کنید.

ادامه مطلب »
تفاوت بین عبارت const و constexpr در C++
آموزش ها
آرزو نیکدل

تفاوت بین عبارت const و constexpr در C++

بنابراین، تفاوت اصلی بین const و constexpr این است که const برای تعریف متغیرهای ثابت استفاده می‌شود که مقدار آنها در زمان اجرا مشخص می‌شود، در حالی که constexpr برای تعریف ثابت‌هایی استفاده می‌شود که مقدار آنها در زمان کامپایل قابل محاسبه است.

ادامه مطلب »
اشتراک در
اطلاع از
guest

0 نظرات
قدیمی‌ترین
تازه‌ترین بیشترین رأی
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها