Форум: Форум C++Разное
Новые темы: 00
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проверка расстановки скобок в математическом выражении.

Сообщения:  [1-10]   [11-16] 

 
 автор: Prophet   (27.12.2007 в 15:44)   письмо автору
 
   для: cheops   (26.12.2007 в 04:52)
 

Спасибо огромное.

  Ответить  
 
 автор: 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   (25.12.2007 в 14:07)   письмо автору
 
   для: 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");
}

  Ответить  
 
 автор: cheops   (14.12.2007 в 05:03)   письмо автору
 
   для: alex19921992   (13.12.2007 в 23:27)
 

Выражение нужно проверить на правильность, а у вас как только скобка откроется - цикл начнёт печатать "neverno", а нужно проверить всё выражение на правильность или неправильность перед вычислением, а не во время.

  Ответить  
 
 автор: alex19921992   (14.12.2007 в 04:23)   письмо автору
 
   для: cheops   (14.12.2007 в 03:42)
 

А вообще то я говорил проверять в конце basket на равенство нулю. если равно - то все верно!
Я даже могу сюда кинуть свою прогу считающую вырвжения типа 8^sin(7)+3*56+tg(sqrt(2.87))

  Ответить  
 
 автор: cheops   (14.12.2007 в 03:45)   письмо автору
 
   для: Prophet   (13.12.2007 в 21:29)
 

В синтаксисе ошибок нет.

  Ответить  
 
 автор: cheops   (14.12.2007 в 03:42)   письмо автору
 
   для: alex19921992   (13.12.2007 в 23:27)
 

Этого не достаточно - алгоритм засыпится на проверке выражения ((((...))) - basket будет +1.

  Ответить  
 
 автор: alex19921992   (13.12.2007 в 23:27)   письмо автору
 
   для: 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 в 21:29)   письмо автору
 
   для: 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;
}

  Ответить  
 
 автор: cheops   (13.12.2007 в 18:05)   письмо автору
 
   для: Prophet   (13.12.2007 в 16:38)
 

Хм... это ведь классическая задача на стек...

  Ответить  

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования