Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Дописать программу  (Прочитано 4040 раз)
0 Пользователей и 1 Гость смотрят эту тему.
spooky
Новенький

ru
Offline Offline
Пол: Женский

« : 05-12-2013 13:24 » 

Всем вечер добрый.
Нуждаюсь в небольшой помощи, народ, выручайте!

В общем, есть задание:
Клиентская программа оправляет на сервер пару целых чисел a и b, а также символ арифметической операции «+», «-», «*», «/» (числа и знак операции задаются через пользовательский интерфейс клиента), а сервер возвращает результат выполненной арифметической операции. Если происходит деление на 0, то сервер возвращает сообщение об ошибке «Divide overflow».

Есть листинг клиентской программы:
Код: (C++)
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ClientSocket1->Address=Edit1->Text;// тут вводим IP сервера
ClientSocket1->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ClientSocket1->Socket->SendText(Edit2->Text); // в этот эдит вводим через ";" пару чисел и символ арифметической операции
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ClientSocket1Read(TObject *Sender,
      TCustomWinSocket *Socket)
{
Edit3->Text=Socket->ReceiveText();
}

И есть наброски сервера:
Код: (C++)
#include <vcl.h>
#include <math.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
ServerSocket1->Active=true;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
Edit1->Text=Socket->ReceiveText();
TStringList * MyList = new TStringList();
MyList->Delimiter = L';';
MyList->DelimitedText=Edit1->Text;
//
//
//
//
//
//
//
}
delete MyList;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ServerSocket1->Active=false;
}


Никак что-то не сориентируюсь, как разбить введенную в клиенте строку на отдельные символы.
И, после разбиения, что делать с числами - понятно. А вот как дать понять серверу, что, например, третий введенный символ в строке - это символ арифметической операции, и как использовать его в решении примера?
То есть, вводим, например, "2;3;+". Пусть разбиваем a=2, b=3, c=+. Как потом при присвоении, скажем, d=2+3, использовать переменную c?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 05-12-2013 17:36 » 

spooky,Зачем такие сложности? Тем более у тебя идет уже польская нотация. Организуеш FILO стек. Хотя бы из того же vector. Загоняеш в стек сначало первое число, потом второе. Если встретился знак, значит вытаскиваеш последнее число из стека и предпоследнее и производиш над ними действие. Результат кладеш  в стек.Как только разбор строки закончился. Последнее число в стеке должен быть твой результат и длина стека должна равна одному.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines