Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/21: Рейтинг темы: голосов - 21, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11

Клиент-серверный калькулятор (дописать программу)

04.12.2013, 21:53. Показов 4259. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Нуждаюсь в небольшой помощи, народ, выручайте!

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

Есть листинг клиентской программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#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++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
//---------------------------------------------------------------------------
 
#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;
}


Не могу разбить строку на отдельные символы, и что-то в голову не приходит ничего по поводу того, как распознать один из этих символов как знак арифметической операции и использовать его для получения результата.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.12.2013, 21:53
Ответы с готовыми решениями:

Клиент-серверный чат
Когда клиент пытается принять сообщение о сервера он слушает порт 1) порт свой или сервера? 2) если свой, то на какой порт сервер...

8.3 клиент серверный вариант
Подскажите пожалуйста, что мне необходимо иметь (купить), что бы настроить работу 1с в клиент-серверном режиме. База будет работать под 8.3.

Клиент-серверный алгоритм
Привет. Вот такая задачка имеется : ​​есть кучка скриптов , которые представляют собой одно целое , и сервер. Эти скрипты должны отправлять...

13
 Аватар для инкремент
12 / 12 / 0
Регистрация: 13.10.2013
Сообщений: 37
05.12.2013, 20:39
Отправляй команду на сервер в подобном виде: "10;10;+;", первые два числа - числа над которыми нужно проводить операции, третий символ - то что нужно с ними сделать. На сервере же просто разбиваешь строку, и делаешь с числами то, что указано в третьем аргументе.

Добавлено через 28 минут
Кстати, если нужна функция, которая разбивает строку на части, можешь использовать эту:
C++
1
2
3
4
5
6
7
8
UnicodeString SplitString(UnicodeString str, UnicodeString sep, int need)
{
    for (int i = 0; i < need; i++)
    {
        str = str.SubString(str.Pos(sep)+1, str.Length());
    }
    return str.SubString(0, str.Pos(sep)-1);
}
Первым параметром передаёшь строку, вторым разделитель строки (в этом случае ";"), третьим номер нужной части.

Например, есть строка "10;10;+;",

C++
1
SplitString("10;10;+;", ";", 2);
возвратит "+".
1
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
07.12.2013, 13:43  [ТС]
А если продолжать работать c delimited и mylist?

Вот, например, если в строке все три символа - числа, то как-то так:
C++
1
2
3
float a=StrToFloat(MyList->operator [](0));
float b=StrToFloat(MyList->operator [](1));
float c=StrToFloat(MyList->operator [](2));
А если переменная с - знак арифметической операции, то что поставить вместо float?
0
 Аватар для инкремент
12 / 12 / 0
Регистрация: 13.10.2013
Сообщений: 37
07.12.2013, 17:29
thewalkingdead, '+' это символ, думаю нужно использовать char.
0
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
08.12.2013, 07:15  [ТС]
А как потом этот "с" использовать в арифметической операции, не подскажите?
0
 Аватар для инкремент
12 / 12 / 0
Регистрация: 13.10.2013
Сообщений: 37
08.12.2013, 13:14
Можно проверять при помощи switch, что это за знак. Например:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
 // ...
int result=0;
switch (c) {
       case '+':
           result = a+b;
           break;
       case '-':
           result = a-b;
           break;
        // и т.д., главное про break не забыть.
       default:
           ShowMessage("Неизвестная операция");
}
1
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
10.12.2013, 23:08  [ТС]
Возвращаюсь вот к этому месту:
C++
1
2
3
float a=StrToFloat(MyList->operator [](0));
float b=StrToFloat(MyList->operator [](1));
float c=StrToFloat(MyList->operator [](2));
Не получается с(знак арифметической операции) перевести из string в char. Есть ли какие-нибудь простенькие функции наподобие StrToFloat? Мне попадались лишь громоздкие коды, которые я так и смогла "прилепить" к своему.
0
 Аватар для инкремент
12 / 12 / 0
Регистрация: 13.10.2013
Сообщений: 37
10.12.2013, 23:58
Есть такая штука, c_str(), возвращает строку в вид массива символов. Например:

C++
1
2
3
UnicodeString str = "blah blah blah";
char c = str.c_str()[0]; // Т.к. c_str возвращает массив, берём только первый его элемент.
// В 'c' теперь хранится буква 'b', т.к. это первая буква в строке 'str'.
Вот что то такое должно получится:

C++
1
2
3
float a=StrToFloat(MyList->operator [](0));
float b=StrToFloat(MyList->operator [](1));
char c=MyList->operator [](2)[0];
В "c" теперь хранится знак операции (если всё работает как надо).
1
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
12.12.2013, 02:17  [ТС]
Вроде бы всё собрала, откомпилил, ошибок нет, НО не выдаёт результат и вылетает ошибка (см. вложение).
(project1 - это сервер)
Что может быть не так?
Миниатюры
Клиент-серверный калькулятор (дописать программу)  
0
 Аватар для инкремент
12 / 12 / 0
Регистрация: 13.10.2013
Сообщений: 37
12.12.2013, 19:27
thewalkingdead, трудно всё таки понять, что за ошибка по такому сообщению. Попробуйте узнать на какой строке кода программы вылетает ошибка.
0
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
14.12.2013, 23:33  [ТС]
инкремент, в том-то и дело, что компиляция проходит успешно, ни одной ошибки. А когда с клиента передаешь данные на сервер - вылетает это окошко.
Не исключаю, что просто я чего-то не вижу/ не понимаю.
Может, у Вас как-нибудь найдётся свободная минутка посмотреть мою программку (во вложении)?
Буду весьма признательна.
Вложения
Тип файла: rar lr_riris.rar (1.27 Мб, 28 просмотров)
0
0 / 0 / 0
Регистрация: 27.10.2013
Сообщений: 11
17.12.2013, 18:22  [ТС]
Со всем разобралась, тему можно считать закрытой.
0
braizer11
25.12.2013, 20:15
ПРивет , не можешь скинуть рабочую программу , заинтересовала она!!!!
1 / 1 / 0
Регистрация: 08.01.2014
Сообщений: 17
08.01.2014, 21:38
Всем Привет, народ, мне попалось такое же задание, с клиентской частью все понятно и все просто, а вот с серверной , не очень, честно говоря я уже совершенно забыл почти си++ , да особо и не знал, можете подсказать, как относительно клиентской части представленной выше, должен выглядеть сервер?
Заранее спасибо
П.с если не сложно то пожалуйста можно весь текст , серверной части, я то по примерам приведенной в данной теме я не смог с ориентироваться, что где использовать, в итоге компилятор выдал кучу ошибок

Добавлено через 10 минут
Цитата Сообщение от Evgeny43 Посмотреть сообщение
Всем Привет, народ, мне попалось такое же задание, с клиентской частью все понятно и все просто, а вот с серверной , не очень, честно говоря я уже совершенно забыл почти си++ , да особо и не знал, можете подсказать, как относительно клиентской части представленной выше, должен выглядеть сервер?
Заранее спасибо
П.с если не сложно то пожалуйста можно весь текст , серверной части, я то по примерам приведенной в данной теме я не смог с ориентироваться, что где использовать, в итоге компилятор выдал кучу ошибок
Кое как разобрался, однако вылетает , такая же ошибка .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.01.2014, 21:38
Помогаю со студенческими работами здесь

Клиент-серверный чат
Добрый день! Java нечто новое для меня. Нашла интересную статью, где реализовано клиент-серверное приложение в виде: клиент отправляет...

Сокеты, Клиент-серверный чат
Здравствуйте. Мне нужно создать чат. Чтобы был в одном Jframe. Есть проблемы. Прога не видит класс потока. И я не знаю как к данному...

Клиент-серверный тест на java
Здравствуйте, форумчане, может у кого-нибудь есть простейший пример клиент-серверного теста на java (клиент отвечает на вопрос, на...

Резервное копирование Клиент-серверный вариант
Доброго времени суток! Для резервного копирования в файловом режиме не нужно пользователей выкидывать. А при работе клиент-серверного...

Клиент-серверный чат через сокеты
Здравствуйте. Такой вопрос. Есть допустим у меня два приложения(клиент и сервер). Всё сделано через сокеты(TCP). Как сделать например что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru