Портирование кода с c++ на c#
Формулировка задачи:
Добрый день!
Помогите, пожалуйста, перевести на с# такой кодЗаранее спасибо!
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #include<locale.h> struct tree {char znak; int res; tree *l, *r; }; struct pol {char c; pol *next; }; char* polish(char*, pol**); int a_to_i(char*, int); char pop(pol**); pol* push(pol**, char); int prior(char); tree* add(tree*, char, int); void see(tree*); int calc(tree*); int fl=1; int _tmain(int argc, _TCHAR* argv[]) { setlocale(LC_ALL,"Rus"); tree *dr=NULL; pol *h=NULL; char *str; int i, number; if(!(str=(char*)malloc(50))) {puts("Ошибка при работе с памятью!"); return 0;} puts("Введите выражение\n"); fflush(stdin); gets(str); str=polish(str, &h); puts("Выражение, записанное в виде обратной польской записи:"); puts(str); i=strlen(str); i--; while(i>=0) {if(*(str+i)=='/' || *(str+i)=='*' || *(str+i)=='-' || *(str+i)=='+') {dr=add(dr, *(str+i), 0); i--; } if(*(str+i)==' ') i--; if(*(str+i)>='0' && *(str+i)<='9') {number=0; int mn=1; while(*(str+i)>='0' && *(str+i)<='9') {number+=(*(str+i)-'0')*mn; mn*=10; i--; } dr=add(dr,' ', number); } } puts("Дерево, лежащее на боку"); see(dr); puts("\nНажмите клавишу для получения результата"); if(getch()) calc(dr); printf("Результат вычисления: %d\n", calc(dr)); return 1; } char* polish(char *str, pol **h) {int i=0, point=0; char *out; if(!(out=(char*)malloc(50))) {puts("Ошибка при работе с памятью!"); return 0;} while(*(str+i)!='\0' && *(str+i)!='=') {while(*(str+i)==' ') i++; //propysk probelov if(*(str+i)==')') {while((*h)->c!='(') //esli zakruvaiyshchaya skobka, vutalkivaem iz steka vse elementu do otkruvaiyshchei skobki i samy skobky *(out+point++)=pop(h); pop(h); } if(*(str+i)>='1' && *(str+i)<='9') //esli tsifra - v stroky {while(*(str+i)>='1' && *(str+i)<='9') {*(out+point++)=*(str+i); i++; } *(out+point++)=' '; i--; } if(*(str+i)=='(') //esli '(' - zapisuvaem ee stek *h=push(h, '('); if(*(str+i)=='+' || *(str+i)=='-' || *(str+i)=='*' || *(str+i)=='/') //esli znak - vutalkivaem iz steka vse elementu s nizshim {while((*h!=NULL) && (prior((*h)->c)>=prior(*(str+i)))) //prioritetom i zapisuvaem znak v stek *(out+point++)=pop(h); *h=push(h, *(str+i)); } i++; } while(*h!=NULL) //zapisuvaem v stroky ostavshiesya elementy *(out+point++)=pop(h); *(out+point)='\0'; return out; } pol* push(pol **h, char c) {pol *s; s=(pol*)malloc(sizeof(pol)); s->c=c; s->next=*h; return s; } char pop(pol **h) {char c; pol *s; if(!*h) return '\0'; s=*h; c=s->c; if(s->c=='(' || s->c=='+' || s->c=='-' || s->c=='*' || s->c=='/') *h=s->next; else *h=NULL; free(s); return c; } int a_to_i(char *str, int i) { int ch=0, k=1; while(*(str+i)>='0' && *(str+i)<='9') {ch+=k*(*(str+i)-'0'); k*=10; i--; } return ch; } int prior(char c) { switch(c) {case '*': case '/': return 3; case '+': case '-': return 2; case ')': return 1; } return 0; } tree* add(tree *dr, char symbol, int number) { if(!dr) {if(!(dr=(tree*)malloc(sizeof(tree)))) {puts("Ошибка при работе с памятью!"); return 0;} dr->res=number; dr->znak=symbol; dr->l=dr->r=NULL; fl=1; return dr; } if(dr->znak==' ') //если записано число, возвращаемся return dr; if(!dr->r) //запись вправо {dr->r=add(dr->r, symbol, number); return dr; } if(dr->r) {if(dr->r->znak!=' ') //если записано не число, записываем число сюда dr->r=add(dr->r, symbol, number); else //число {fl=0; dr->l=add(dr->l, symbol, number); //иначе записываем влево } } if(dr->r && fl==0) dr->l=add(dr->l, symbol, number); return dr; } void see(tree *dr) {if (dr->l) see(dr->l); if(dr->res!=0) printf("%c%d",dr->znak,dr->res); else printf("%c",dr->znak); if (dr->r) see(dr->r); return; } int calc(tree *dr) {if(dr) { if(dr->l) dr->res=calc(dr->l); if(dr->r) switch(dr->znak) {case '+': dr->res+=calc(dr->r); break; case '-': dr->res-=calc(dr->r); break; case '*': dr->res*=calc(dr->r); break; case '/': dr->res/=calc(dr->r); break; } } return dr->res; }
Решение задачи: «Портирование кода с c++ на c#»
textual
Листинг программы
char* polish(char*, pol**); int a_to_i(char*, int); char pop(pol**); pol* push(pol**, char); int prior(char); tree* add(tree*, char, int); void see(tree*); int calc(tree*); int fl=1;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д