Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2009, 17:03   #1
ksyst
Новичок
Джуниор
 
Регистрация: 20.12.2009
Сообщений: 2
По умолчанию Проблема с вводом в c++ Builder

Как в Билдере реализовать ввод(через Edit или RichEdit):
Код:
printf("\n VVedite VYrajenie: ");
  scanf("%s",&a);
  i=0;
  while (a[i]!='\0')
    {
      if (a[i]=='(')
        {
          d=d+1;
          if (d>max) max=d;
        }
      if (a[i]==')') d=d-1;
      i=i+1;
    }
и вывод:
Код:
printf("\n VYrajenie V POLskoy ZApisi: ");
  i=0;
  while (ans[(l-1)*50+i]!='\0')
    {
      printf("%c",ans[(l-1)*50+i]);
      i=i+1;
    }
ksyst вне форума Ответить с цитированием
Старый 20.12.2009, 17:06   #2
ksyst
Новичок
Джуниор
 
Регистрация: 20.12.2009
Сообщений: 2
По умолчанию

Полный текст преобразования в обратную польскую запись:
Код:
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <alloc.h>
#include <stdlib.h>
#include <conio.h>
struct act
{
  char op1[7];
  char zn[3];
  char op2[7];
};
void main()
{
  char a[100],*ans;
  int b[100],i=0,max=0,d=0;
  act p[50];
  while (i<=99)
    {
      b[i]=0;
      i=i+1;
    }
  printf("\n VVedite VYrajenie: ");
  scanf("%s",&a);
  i=0;
  while (a[i]!='\0')
    {
      if (a[i]=='(')
        {
          d=d+1;
          if (d>max) max=d;
        }
      if (a[i]==')') d=d-1;
      i=i+1;
    }
  int e=max,l=1;
  while (e>=0)
    {
      i=0;
      d=0;
      while (a[i]!='\0')
        {
          if (a[i]=='(') d=d+1;
          if (a[i]==')') d=d-1;
          if ((d==e)&&((a[i]=='*')||(a[i]=='/')))
            {
              b[i]=l;
              l=l+1;
            }
          i=i+1;   }
      i=0;
      d=0;
      while (a[i]!='\0')
        {
          if (a[i]=='(') d=d+1;
          if (a[i]==')') d=d-1;
          if ((d==e)&&((a[i]=='+')||(a[i]=='-')))
            {
              b[i]=l;
              l=l+1; }
          i=i+1;
        }
      i=0;
      d=0;
      while (a[i]!='\0')
        {
          if (a[i]=='(') d=d+1;
          if (a[i]==')') d=d-1;
          if ((d==e)&&((a[i]=='>')||(a[i]=='<')||((a[i]=='=')&&(a[i+1]=='='))||((a[i]=='>')&&(a[i+1]=='='))||((a[i]=='<')&&(a[i+1]=='='))))
            {
              b[i]=l;
              l=l+1;    }
          i=i+1;
        }
      i=0;
      d=0;
      while (a[i]!='\0')
        {
          if (a[i]=='(') d=d+1;
          if (a[i]==')') d=d-1;
          if ((d==e)&&(((a[i]=='&')&&(a[i+1]=='&'))||((a[i]=='|')&&(a[i+1]=='|'))))
            {
              b[i]=l;
              l=l+1;     }
         i=i+1;
        }
      e=e-1;
    }
  l=l-1;
//  p=((act*)malloc(l));
  int t=0,z;
  d=1;
  while (d<=l)
    {
     i=0;
     z=0;
     while (b[i]!=d) i=i+1;
     max=i-1;
     while ((a[max]=='\1')||(a[max]==')')||(a[max]=='(')) 
 {
          max=max-1;
          z=1;
        }
      if ((max>0)&&(z==0))
        {
          while (((a[max-1]>=65)&&(a[max-1]<=122))||((a[max-1]>=48)&&(a[max-1]<=57)))
           {
              max=max-1;
              if (max==0) break;
           }
       }
      if (z==0)
       {
       e=max;
       while (((a[max]>=65)&&(a[max]<=122))||((a[max]>=48)&&(a[max]<=57)))
         {
          p[t].op1[max-e]=a[max];
          a[max]='\1'
          max=max+1;
          }
        p[t].op1[max-e]='\0';
      }
    else
     {
     p[t].op1[0]=a[max];
     a[max]='\1';
     p[t].op1[1]='\0';
        }
      z=0;
      max=i+1;
      if ((a[max]=='=')||(a[max]=='&')||(a[max]=='|')) max=max+1;
      while ((a[max]=='\1')||(a[max]=='(')||(a[max]==')'))
        {
          max=max+1;
          z=1;
        }
      if (z==0)
        {
          e=max;
          while (((a[max]>=65)&&(a[max]<=122))||((a[max]>=48)&&(a[max]<=57)))
            {
              p[t].op2[max-e]=a[max];
              a[max]='\1';
              max=max+1;
            }
          p[t].op2[max-e]='\0';
        }
      else
        {
          p[t].op2[0]=a[max];
          a[max]='\1';
          p[t].op2[1]='\0';
        }
      p[t].zn[0]=a[i];
      a[i]=t+2;
      if ((a[i+1]=='=')||(a[i+1]=='&')||(a[i+1]=='|'))
        {
          p[t].zn[1]=a[i+1];
          a[i+1]='\1';
          p[t].zn[2]='\0';
        }
      else
        {
          p[t].zn[1]='\0';
        }
      t=t+1;
      d=d+1;
    }
  ans=((char*)malloc(l*50));
  if (ans==0) {printf("\n OSHibka!!!");getch();exit(0);}
  d=0;
  while (d<=l-1)
    {
      i=0;
      if (p[d].op1[0]<48)
        {
          while (ans[(p[d].op1[0]-2)*50+i]!='\0')
            {
              ans[d*50+i]=ans[(p[d].op1[0]-2)*50+i];
              i=i+1;
            }
        }
      else
        {
          while (p[d].op1[i]!='\0')
            {
              ans[d*50+i]=p[d].op1[i];
              i=i+1;
            }  }
      ans[d*50+i]=' ';
      i=i+1;
      e=0;
      if (p[d].op2[0]<48)
        {
          while (ans[(p[d].op2[0]-2)*50+e]!='\0')
            {
              ans[d*50+i]=ans[(p[d].op2[0]-2)*50+e];
              i=i+1;
              e=e+1;
            } }
      else
        {
          while (p[d].op2[e]!='\0')
            {
              ans[d*50+i]=p[d].op2[e];
              e=e+1;
              i=i+1; }
        }
      ans[d*50+i]=' ';
      i=i+1;
      e=0;
      while (p[d].zn[e]!='\0')
        {
          ans[d*50+i]=p[d].zn[e];
          e=e+1;
          i=i+1;
        }
      ans[d*50+i]='\0';
      d=d+1; }
  printf("\n VYrajenie V POLskoy ZApisi: ");
  i=0;
  while (ans[(l-1)*50+i]!='\0')
    {
      printf("%c",ans[(l-1)*50+i]);
      i=i+1;}char zz[3];
}
ksyst вне форума Ответить с цитированием
Старый 20.12.2009, 18:25   #3
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
a := Edit1->Text; // ВВод
//----------------------------


  i=0;
  while (ans[(l-1)*50+i]!='\0')
    {
      Edit1->Text = ans[(l-1)*50+i]; // Вывод
      i=i+1;
    }
psycho-coder вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с вводом в массив prod87 Общие вопросы Delphi 1 24.11.2009 22:33
Проблема с вводом данных в файл. Bilargo Помощь студентам 9 12.10.2009 20:59
проблема с вводом/выводом revan-8 Общие вопросы C/C++ 10 09.07.2009 20:54
проблема с вводом графа Petruha-nsk Общие вопросы C/C++ 4 10.04.2009 15:51