Форум программистов, компьютерный форум CyberForum.ru

Не работает пример умножения и деления дробей - C++

Восстановить пароль Регистрация
 
Samat B
0 / 0 / 0
Регистрация: 04.08.2013
Сообщений: 170
30.01.2014, 18:26     Не работает пример умножения и деления дробей #1
Я переводил программу из паскаля, на паскале переменные в формате Реал а в си++ в Интежер. Так сделано потому что не смог преобразовать RealToStr в си++. Использую GCC (Code Blocks) Win 7.
Пример с ошибками на си++
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include <iostream>
#include <cmath>
#define nullptr NULL
#include <sstream>
#include <stdlib.h>
 
 
using namespace std;
 
 
string *drobi_umnojenie(int a, int b, int c, int d, size_t arraySize = 3)
{
    int a_c;
    int bd;
 
    string *res = new string [arraySize];
 
    a_c = a*c;
    bd = b*d;
 
    char str[10];
    char str_1[10];
 
    itoa(a_c, str, 10);
    itoa(bd, str_1, 10);
 
    res[1] = str;
    res[2] = '/';
    res[3] = str_1;
 
    return res;
}
 
string *drobi_delenie(int a, int b, int c, int d, size_t arraySize = 3)
{
    int ad;
    int bc;
 
    string *res = new string [arraySize];
 
    ad = a*d;
    bc = b*c;
 
    char str[10];
    char str_1[10];
 
    itoa(ad, str, 10);
    itoa(bc, str_1, 10);
 
    res[1] = str;
    res[2] = '/';
    res[3] = str_1;
 
    return res;
}
 
int knopka_1()
{
    string stroka_1;
    string *res = drobi_umnojenie(2, 2, 2, 2);
    stroka_1 = res[1]+res[2]+res[3];
    cout << "кнопка1=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int knopka_2()
{
    string stroka_1;
    string *res = drobi_delenie(2, 2, 2, 2);
    stroka_1 = res[1]+res[2]+res[3];
    cout << "кнопка2=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int main()
{
    knopka_1();
    knopka_2();
    return 0;
}
Тот же пример на FPC(Lazarus) он работает
Delphi
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
unit Unit1;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
  massiv_type = array[0..2] of string;
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
function drobi_umnojenie(a,b,c,d:real):massiv_type;
var
  a_c:real;
  bd:real;
  res:massiv_type;
  begin
    a_c:=a*c;
    bd:=b*d;
 
    res[0]:=FloatToStr(a_c);
    res[1]:='/';
    res[2]:=FloatToStr(bd);
 
    Result:=res;
  end;
 
function drobi_delenie(a,b,c,d:real):massiv_type;
var
  ad:real;
  bc:real;
 
  res:massiv_type;
  begin
    ad:=a*d;
    bc:=b*c;
 
    res[0]:=FloatToStr(ad);
    res[1]:='/';
    res[2]:=FloatToStr(bc);
 
    Result:=res;
  end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  res:massiv_type;
  str:string;
begin
   res:=drobi_umnojenie(1,4,1,4);
   str:=res[0]+res[1]+res[2];
   ShowMessage(str);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  res:massiv_type;
  str:string;
begin
   res:=drobi_delenie(1,4,1,4);
   str:=res[0]+res[1]+res[2];
   ShowMessage(str);
end;
 
end.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2014, 18:26     Не работает пример умножения и деления дробей
Посмотрите здесь:

C++ Примеры перегрузки вычитания, умножения, деления
C++ Написать функции вычисления сложения, вычитания, умножения и деления дробей
C++ Программа должна выводить аналог целочисленной таблицы умножения для дробей
C++ Организовать производный класс, содержащий функции вычисления деления и умножения дробей
Целочисленная таблица умножения дробей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cooller
 Аватар для cooller
564 / 532 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
30.01.2014, 18:55     Не работает пример умножения и деления дробей #2
Цитата Сообщение от Samat B Посмотреть сообщение
Я переводил программу из паскаля, на паскале переменные в формате Реал а в си++ в Интежер
и почему ты real перевел в int, а не double или float
Samat B
0 / 0 / 0
Регистрация: 04.08.2013
Сообщений: 170
30.01.2014, 19:06  [ТС]     Не работает пример умножения и деления дробей #3
cooller_94, главное мне нада чтобы моя программа си++ заработала, что я сделал неправильно?
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
30.01.2014, 19:11     Не работает пример умножения и деления дробей #4
Samat B, раз уж со string-ами работаешь, то используй double или float вместо int:
C++
1
2
double x = 10.05;
string s = to_string(x);
Добавлено через 1 минуту
Т.е. везде, где RealToStr - пишешь to_string.
Samat B
0 / 0 / 0
Регистрация: 04.08.2013
Сообщений: 170
30.01.2014, 19:46  [ТС]     Не работает пример умножения и деления дробей #5
zelim, я все сделал как вы посоветовали gcc начал говорить что не знает to_string, после поисков я добавил код в мой исходник вроде пример компилируется но потом выходит не ошибка компилятора а ошибка Windows
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Сигнатура проблемы:
  Имя события проблемы: APPCRASH
  Имя приложения:   main.exe
  Версия приложения:    0.0.0.0
  Отметка времени приложения:   52ea6524
  Имя модуля с ошибкой: main.exe
  Версия модуля с ошибкой:  0.0.0.0
  Отметка времени модуля с ошибкой: 52ea6524
  Код исключения:   c0000005
  Смещение исключения:  00005452
  Версия ОС:    6.1.7600.2.0.0.256.4
  Код языка:    1049
  Дополнительные сведения 1:    0a9e
  Дополнительные сведения 2:    0a9e372d3b4ad19135b953a78882e789
  Дополнительные сведения 3:    0a9e
  Дополнительные сведения 4:    0a9e372d3b4ad19135b953a78882e789
 
Ознакомьтесь с заявлением о конфиденциальности в Интернете:
  [url]http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419[/url]
 
Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
  C:\Windows\system32\ru-RU\erofflps.txt
Добавлено через 1 минуту
вот новый код
Кликните здесь для просмотра всего текста
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <iostream>
#include <cmath>
#define nullptr NULL
#include <sstream>
#include <stdlib.h>
 
#include <algorithm>
 
using namespace std;
 
template <class T>// кусок кода для перевода RealToStr
string to_string(T param)
{
    string str = "";
    stringstream ss;
    ss<<param;
    getline(ss, str);
    return str;
}
 
 
string *drobi_umnojenie(float a, float b, float c, float d, size_t arraySize = 3)
{
    float  a_c;
    float  bd;
 
    string *res = new string [arraySize];
 
    a_c = a*c;
    bd = b*d;
 
 
    string s = to_string (a_c);
    res[1] = to_string (a_c);
    res[2] = "/";
    res[3] = to_string(bd);
 
    return res;
}
 
string *drobi_delenie(int a, int b, int c, int d, size_t arraySize = 3)
{
    float ad;
    float bc;
 
    string *res = new string [arraySize];
 
    ad = a*d;
    bc = b*c;
 
    res[1] = to_string (ad);
    res[2] = '/';
    res[3] = to_string(bc);
 
    return res;
}
 
int knopka_1()
{
    string stroka_1;
    string *res = drobi_umnojenie(2, 2, 2, 2);
    stroka_1 = res[1]+res[2]+res[3];
    cout << "кнопка1=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int knopka_2()
{
    string stroka_1;
    string *res = drobi_delenie(2, 2, 2, 2);
    stroka_1 = res[1]+res[2]+res[3];
    cout << "кнопка2=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int main()
{
    knopka_1();
    knopka_2();
    return 0;
}
zelim
77 / 77 / 4
Регистрация: 26.12.2011
Сообщений: 217
31.01.2014, 00:32     Не работает пример умножения и деления дробей #6
Цитата Сообщение от Samat B Посмотреть сообщение
gcc начал говорить что не знает to_string
Для использования to_string нужно было добавить:
C++
1
#include <string>
.. а не писать свою версию функции.

А так, может проще саму задачу здесь написать? Копаться в куче кода, не зная сути задачи = лишнее время на то, чтобы разобраться.
S9
Волшебник
 Аватар для S9
643 / 246 / 38
Регистрация: 18.12.2010
Сообщений: 541
31.01.2014, 01:38     Не работает пример умножения и деления дробей #7
Цитата Сообщение от zelim Посмотреть сообщение
Для использования to_string нужно было добавить:
C++
1
#include <string>
если юзаешь GCC версии не ниже 4.7.1, то да, иначе надо будет переводить другим способом, например так
C++
1
2
3
4
5
6
7
8
9
#include <string>
#include <sstream>
 
std::string to_string(double val)
{
  std::ostringstream ost;
  ost << val;
  return ost.str();
}
задачка твоя будет примерно так выглядеть
Кликните здесь для просмотра всего текста
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
48
49
50
51
52
53
54
#include <string>
#include <iostream>
#include <sstream>
 
typedef struct array_type
{
  std::string field[2];
};
 
array_type mul(double  a, double  b, double  c, double  d);
array_type div(double  a, double  b, double  c, double  d);
std::string to_string(double val);
void print(array_type val);
 
int main(int argc, char **argv)
{
  array_type res;  
  res = mul(1, 4, 1, 4);
  print(res);
  res = div(1, 4, 1, 4);
  print(res);
  return 0;
}
 
array_type mul(double  a, double  b, double  c, double  d)
{
  array_type res;
  std::ostringstream ost;
  res.field[0] = to_string(a * c);
  res.field[1] = "/";
  res.field[2] = to_string(b * d);
  return res;
}
 
array_type div(double  a, double  b, double  c, double  d)
{
  array_type res;
  res.field[0] = to_string(a * d);
  res.field[1] = "/";
  res.field[2] = to_string(b * c);
  return res;
}
 
std::string to_string(double val)
{
  std::ostringstream ost;
  ost << val;
  return ost.str();
}
 
void print(array_type val)
{
  std::cout << val.field[0] << val.field[1] << val.field[2] << std::endl;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.01.2014, 18:35     Не работает пример умножения и деления дробей
Еще ссылки по теме:

C++ Функции сложения, вычитания, умножения и деления двух чисел
Перегрузка операций умножения и деления C++
C++ Rand(), приоритет умножения и остатка от деления

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

Или воспользуйтесь поиском по форуму:
Samat B
0 / 0 / 0
Регистрация: 04.08.2013
Сообщений: 170
31.01.2014, 18:35  [ТС]     Не работает пример умножения и деления дробей #8
S9, спасибо всем кто мне ответил, использовал вашу функцию to_string и заработало, еше кое как подредактировал код и заработало, вот решение
Кликните здесь для просмотра всего текста

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <cmath>
#define nullptr NULL
#include <sstream>
#include <stdlib.h>
 
using namespace std;
 
std::string to_string(double val)// кусок кода для перевода RealToStr
{
  std::ostringstream ost;
  ost << val;
  return ost.str();
}
 
 
 
string *drobi_umnojenie(float a, float b, float c, float d, size_t arraySize = 3)
{
    float  a_c;
    float  bd;
 
    string *res = new string [arraySize];
 
    a_c = a*c;
    bd = b*d;
 
    res[0] = to_string (a_c);
    res[1] = '/';
    res[2] = to_string(bd);
 
    return res;
 
}
 
string *drobi_delenie(float a, float b, float c, float d, size_t arraySize = 3)
{
    float ad;
    float bc;
 
    string *res = new string [arraySize];
 
    ad = a*d;
    bc = b*c;
 
    res[0] = to_string (ad);
    cout << res[1] << endl;
    res[1] = "/";
    res[2] = to_string(bc);
 
    return res;
}
 
int knopka_1()
{
    string stroka_1;
    string *res = drobi_umnojenie(3, 4, 6, 6);
    stroka_1 = res[0]+res[1]+res[2];
    cout << "knopka1=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int knopka_2()
{
    string stroka_1;
    string *res = drobi_delenie(2, 2, 2, 2);
    stroka_1 = res[0]+res[1]+res[2];
    cout << "knopka2=" << endl;
    cout << stroka_1<< endl;
 
    delete [] res;
    res = nullptr;
 
    return 0;
}
 
int main()
{
    knopka_1();
    knopka_2();
    return 0;
}
Yandex
Объявления
31.01.2014, 18:35     Не работает пример умножения и деления дробей
Ответ Создать тему
Опции темы

Текущее время: 11:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru