|
|
|
|
|
для: cheops
(26.12.2007 в 04:52)
| | Спасибо огромное. | |
|
|
|
|
|
|
|
для: Prophet
(25.12.2007 в 14:07)
| | Можно как-то так поступить
void check(char * str)
{
int i, x = 0, y = 0;
for(i=0;i<30;i++)
{
if(str[i]=='(') x++;
if(str[i]==')') y++;
}
if(x>y)
{
x=x-y;
printf("Propusheno %d zakrivayushaya(ih) skobka(ok)\n", x);
}
else if(y>x)
{
y=y-x;
printf("Propusheno %d otkrivayushaya(ih) skobka(ok)\n", y);
}
else if(x=y) printf("Sootvetstvuet\n");
} |
| |
|
|
|
|
|
|
|
для: Prophet
(13.12.2007 в 21:29)
| | Не могли бы вы мне помочь ещё с выносом вот этой части программы в отдельную функцию?
А то у меня самого этого не получается...
for(i=0;i<30;i++)
{
if(str[i]=='(') x++;
if(str[i]==')') y++;
}
if(x>y) {
x=x-y;
printf("Propusheno %d zakrivayushaya(ih) skobka(ok)\n", x);
}
else if(y>x) {
y=y-x;
printf("Propusheno %d otkrivayushaya(ih) skobka(ok)\n", y);
}
else if(x=y){
printf("Sootvetstvuet\n");
}
|
| |
|
|
|
|
|
|
|
для: alex19921992
(13.12.2007 в 23:27)
| | Выражение нужно проверить на правильность, а у вас как только скобка откроется - цикл начнёт печатать "neverno", а нужно проверить всё выражение на правильность или неправильность перед вычислением, а не во время. | |
|
|
|
|
|
|
|
для: cheops
(14.12.2007 в 03:42)
| | А вообще то я говорил проверять в конце basket на равенство нулю. если равно - то все верно!
Я даже могу сюда кинуть свою прогу считающую вырвжения типа 8^sin(7)+3*56+tg(sqrt(2.87)) | |
|
|
|
|
|
|
|
для: Prophet
(13.12.2007 в 21:29)
| | В синтаксисе ошибок нет. | |
|
|
|
|
|
|
|
для: alex19921992
(13.12.2007 в 23:27)
| | Этого не достаточно - алгоритм засыпится на проверке выражения ((((...))) - basket будет +1. | |
|
|
|
|
|
|
|
для: cheops
(13.12.2007 в 16:28)
| | cheops, конечно недостаточно. неужели я не сказал, что надо:
for(int i = 0; i < 30; i++)
{
if(input[i] == '(') basket++;
if(input[i] == ')') basket--;
if(basket<0){printf("neverno");} // вот что надо! ну или там что-то подобное в фигурных скобках?
}
|
И ВСЕ БУДЕТ РАБОТАТЬ!!! НИКАКОГО СТЕКА!!! ВСЕ ПРОСТО!!! И ДАЖЕ ЕСЛИ ПЕРВАЯ СКОБКА ")" то мой алгоритм сработает. | |
|
|
|
|
|
|
|
для: Prophet
(13.12.2007 в 10:30)
| | В общем попробовал с вашей помощью написать сам. Подскажите, пожалуйста, есть ли у меня ошибки?
#include <stdio.h>
#include <conio.h>
main()
{
clrscr();
start: int i;
int x=0;
int y=0;
char str[30];
for(i=0;i<31;i++){
str[i]=0;
}
printf("Vvediete mateticheskoe virazhenie (ne bolee 30 simvolov):\n");
gets(str);
if (str[30]!=0){
printf("vi vveli bol`she 30 simvolov, poprobuite eshe raz\n");
goto start;
}
for(i=0;i<30;i++)
{
if(str[i]=='(') x++;
if(str[i]==')') y++;
}
if(x>y) {
x=x-y;
printf("Propusheno %d zakrivayushaya(ih) skobka(ok)\n", x);
}
else if(y>x) {
y=y-x;
printf("Propusheno %d otkrivayushaya(ih) skobka(ok)\n", y);
}
else if(x=y){
printf("Sootvetstvuet\n");
}
return 0;
}
|
| |
|
|
|
|
|
|
|
для: Prophet
(13.12.2007 в 16:38)
| | Хм... это ведь классическая задача на стек... | |
|
|
|
|