Основной код программы
#include <stdio.h> #include <conio.h> #include <string.h> #include <math.h> int ChartoInt (int*,int,int); double Sumin (int*,int *,int ,int ); void Scobka (int*,int *,int ,int );
char OTLADKA[1]; Void main (void) /*======================[Начало]=======================*/ { char S[125]; int i, iKol,m, buf[125],a[100],b[100],k,*p,l,*a1,*b1,u1,u2,s,ABC; double c; mr: puts("Do Want to look the debugging information? (y/Any key)"); if (getch()!='y') {puts("Debugging information OFF"); OTLADKA[1]='N'; } else {puts("Debugging information ON");printf("\a"); OTLADKA[1]='Y'; } ABC=1; … m1: printf("\r Э <<<-------------[ Расчёт N:%i ]------------->>> Э \n",ABC); scanf("%s",&S); … if (OTLADKA[1]=='Y') printf("\n**** Отладочная информация *****\n"); m=strlen(S); p=buf;a1=a; b1=b; //указатели k=0;iKol=0;l=0;u1=0;u2=0; /*Получение числа спомощью функции и запись в массив а, где l-счетчик-длинны числа*/ for (i=0; i<(m+1); i++) { if (S[i]=='1'){ buf[i]=1;l++;} else if (S[i]=='2'){ buf[i]=2;l++;} else if (S[i]=='3'){ buf[i]=3;l++;} else if (S[i]=='4'){ buf[i]=4;l++;} else if (S[i]=='5'){ buf[i]=5;l++;} else if (S[i]=='6'){ buf[i]=6;l++;} else if (S[i]=='7'){ buf[i]=7;l++;} else if (S[i]=='8'){ buf[i]=8;l++;} else if (S[i]=='9'){ buf[i]=9;l++;} else if (S[i]=='0'){ buf[i]=0;l++;} else { if (l!=0) { a[iKol]=ChartoInt (p,i,l); iKol++; //счетчик кол-ва чисел l=0; //обнуление счетчика длинны числа } } /*Вылавливание знака и присваивания ему номера 1-6 */ switch (S[i]) { case '+' :b[k]=1; k++; break; case '-' :b[k]=2; k++; break; // к-счетчик кол-ва знаков case '*' :b[k]=3; k++; break; case '/' :b[k]=4; k++; break; case '\0' : break; //Завершение сканирования если конец case '(' :b[k]=5; u1++; k++; break; case ')' :b[k]=6; u2++; k++; break; default :break;} if(S[i]=='=') { break;} // Завершение сканирования } if(u1!=u2){goto m1;} // Проверка на кол-во скобок Scobka(a1,b1,iKol,k); // получение ответа c=Sumin(a1,b1,iKol,k);// присваивание ответа s=(int)c; // округление до целого числа if (OTLADKA[1]=='Y') printf("\n ***** OTLADKA INFO [END]*******\n"); puts(" Э ---------------------------- Э "); printf("\r OTBET=[ %i ]\n",s); // вывод ответа puts(" Э ---------------------------- Э "); printf("\ [ 3AHOBO? (Any key/n) ]\r"); if (getch()!=='n') {goto m1;} … } } /*==================[Конец программы]==================*/ int ChartoInt (int *p, int i, int l) { int a,j,b,b2,m; a=0; m=i+1-l;//Вычисление начала работы с массивом данных xx>[m]YYY>xxx for (j=m; j<= (i+1); j++) // ‘1 2 3’ => 100+20+3=123 { b=pow(10,(i-j)); //кол-во нулей b2=p[j-1]; // извлекаемая цифра a=a+(b2*b); //число1+ число2+… числоN= число } return (a); } double Sumin (int *pa1,int *pb1,int j,int k) { int i, buf1,l; double s; /* начало сканирования массива данных и чисел с опредилением приоретета */ for (i=0;i<=(k+1); i++) { if ( pb1[i]==3) //"*" { buf1=pa1[i]*pa1[i+1];//умножение x*y pa1[i]=buf1; //присвоение нового числа for(l=(i+1);l<=(j+1);l++) //сдвиг на кол-во xxx-cc*dd { pa1[l]=pa1[l+1]; // сдвиг цифр if (l==j) { pa1[l+1]=0; pa1[j-1]=0;//для всех l++; j--; //уменьшение для того, чтобы цикл не съел знаки и числа //X*Y-u X*Y=a => <a>-<u> "-"съелся } } for(l=i;l<=(k+1);l++) { pb1[l]=pb1[l+1]; //сдвиг знаков if (l==k) { pb1[l+1]=0; l++; k--;// уменьшение для того, чтобы цикл не съел знаки и числа i--; // уменьшение для того, чтобы цикл не съел знаки и числа } } } if ( pb1[i]==4) //"/" { buf1=pa1[i]/pa1[i+1]; pa1[i]=buf1; for(l=(i+1);l<=(j+1);l++) { pa1[l]=pa1[l+1]; if (l==j) { pa1[l+1]=0; l++; j--; } } for(l=i;l<=(k+1);l++) { pb1[l]=pb1[l+1]; if (l==k) { pb1[l+1]=0; l++; k--; i--; } } } } s=pa1[0]; l=0; for (i=0; i<=(k+1);i++)//Выполнение действий согласно знаку { if (pb1[l]==1) //"+" { s=s+pa1[i+1]; l++; } else if (pb1[l]==2) //"-" { s=s-pa1[i+1]; l++; } } int j1=0; return (s); } void Scobka (int *a1,int *b1,int l,int k1) { int i,n,n1,j,array[126],barray[126],*par,*pbr,iShift,p,j3,iPar,iSk; double c1; int as,as1;//для отладки par=array;// указатели на массивы для передачи в функцию pbr=barray; iPar=0; iSk=0; for (i=0;i<=k1;i++)//основной цикл { if (b1[i]==5)//поиск скобок открытых { if (iPar==0) n=i; // указывает на начало скобок iPar++; } if (b1[i]==6) //поиск скобок закрытых { if (iPar!=1) { iPar--; iSk++; continue; } n1=i;// указывает на конец скобок p=0;//индекс для новых массивов for(j=n;j<n1;j++) { array[p]=a1[j]; //создание временных массивов чисел p++; as=p; //для отладки } p=0; for(j=(n+1);j<n1;j++) { barray[p]=b1[j];//создание временных массивов знаков p++; as1=p; //для отладки } if(iSk!=0) { if (OTLADKA[1]=='Y') Scobka(par,pbr,as,as1); } iShift=n1-n; //"Сдвиг"следует обратить внимание – 1 c1=Sumin(par,pbr,iShift,(iShift-1)); //возвращаемая сумма в скобках if (OTLADKA[1]=='Y') printf("\n Разное количество скобок N=%f\n",c1); a1[n]=(int)c1; for(j3=0;j3<=iShift;j3++) //очистка массивов возможно ненужна { par[j3]=0; pbr[j3]=0; } /*====================[сдвиг]==========================*/ if(l>n1)//l-количество чисел в массиве a1 если за скобками ничего нет то для упращения не нужно { for(j=(n+1);j<l;j++) { a1[j]=a1[j+iShift-1]; //сдвиг чисел if (j==(l-iShift+1)) //учтено что массив начинается с нуля и точто сдвиг-1 { for (j3=(l-iShift+1);j3<l;j3++) //обнуление вышедших за предел данных { a1[j3]=0; } j=l; //Выход из сдвига цикла для массива чисел } } //закрытия цикла сдвига чисел l-=(iShift-1); //количество чисел уменьшилось for(j=n;j<k1;j++) { b1[j]=b1[j+iShift+1]; //сдвиг знаков if (j==(k1-iShift-2)) { for (j3=(k1-iShift-1);j3<k1;j3++) //обнуление вышедших за предел данных { b1[j3]=0; } j=k1;//Выход из сдвига массива } } k1-=(iShift+1); //количество знаков уменьшилось i=0; //пробежать цикл с начала }//закрывает скобки проверки на на необходимость сдвига else if(l==n1) { a1[n+1]=0; b1[n]=0; } } } } Приложение 2 Вывод результатов.
Популярное: Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (210)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |