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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
#1

Нужно подредактировать прогу - C++

29.11.2009, 13:42. Просмотров 549. Ответов 9
Метки нет (Все метки)

В файле myfile.txt содержится информация типа а= 1,0; b = 5; с = 25,2; d = -l2,5.
Написать функцию, которая получает строку типа «а + b = », «c*d = » или «b/d = », выбирает из файла необходимые значения, вычисляет и возвращает результат.
В главной программе обеспечить ввод с клавиатуры строки и вывод результата.
Выход из программы обеспечить при вводе строки « 0 + 0 ».

Есть прога:
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
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include "iostream"
#include "fstream"
 
using namespace std;
 
void parser(char buf[256], char *one, char *two, char *oper)
{
        int i(0);
        while(buf[i]==' ') ++i;
        *one = buf[i];
        ++i;
        while(buf[i]==' ') ++i;
        *oper = buf[i];
        ++i;
        while(buf[i]==' ') ++i;
        *two = buf[i];
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        
        ifstream infile("myfile.txt");
        float a, b, c, d, fOne, fTwo, fRes;
        char cOne, cTwo, cOper;
        char buf[256];
        bool fail(false);
        
        infile >> a >> b >> c >> d;
 
        cout << "Введите выражение:\n";
        cin.getline(buf, 256);
        parser(buf, &cOne, &cTwo, &cOper);
 
        while(!(cOne=='0' && cTwo=='0' && cOper=='+')) {
 
                switch(cOne) {
                        case 'a':
                                fOne = a;
                        break;
 
                        case 'b':
                                fOne = b;
                        break;
 
                        case 'c':
                                fOne = c;
                        break;
 
                        case 'd':
                                fOne = d;
                        break;
                }
 
                switch(cTwo) {
                        case 'a':
                                fTwo = a;
                        break;
 
                        case 'b':
                                fTwo = b;
                        break;
 
                        case 'c':
                                fTwo = c;
                        break;
 
                        case 'd':
                                fTwo = d;
                        break;
                }
 
                switch(cOper) {
                        case '+':
                                fRes = fOne + fTwo;
                        break;
 
                        case '-':
                                fRes = fOne - fTwo;
                        break;
 
                        case '/':
                                fRes = fOne / fTwo;
                        break;
 
                        case '*':
                                fRes = fOne * fTwo;
                        break;
                }
 
                cout << buf << " = " << fRes << endl;
 
                cout << "Введите выражение:\n";
                cin.getline(buf, 256);
                parser(buf, &cOne, &cTwo, &cOper);
        };
 
        cout << "\n\nCreated by R0mm\nCopyright (C) 2009 cyberforum.ru\n\n";
        system("pause");
        return 0;
}
Она запускается, но считает не правильно. В чём ошибка?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
29.11.2009, 13:44  [ТС]     Нужно подредактировать прогу #2
В файле myfile.txt содержится информация типа а= 1,0; b = 5; с = 25,2; d = -l2,5.
Написать функцию, которая получает строку типа «а + b = », «c*d = » или «b/d = », выбирает из файла необходимые значения, вычисляет и возвращает результат.
В главной программе обеспечить ввод с клавиатуры строки и вывод результата.
Выход из программы обеспечить при вводе строки « 0 + 0 ».

Есть прога:
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
92
93
94
95
96
97
98
99
100
101
102
#include "stdafx.h"
#include "iostream"
#include "fstream"
 
using namespace std;
 
void parser(char buf[256], char *one, char *two, char *oper)
{
int i(0);
while(buf[i]==' ') ++i;
*one = buf[i];
++i;
while(buf[i]==' ') ++i;
*oper = buf[i];
++i;
while(buf[i]==' ') ++i;
*two = buf[i];
}
 
int main()
{
setlocale(LC_ALL, "Russian");
 
ifstream infile("myfile.txt");
float a, b, c, d, fOne, fTwo, fRes;
char cOne, cTwo, cOper;
char buf[256];
bool fail(false);
 
infile >> a >> b >> c >> d;
 
cout << "Введите выражение:\n";
cin.getline(buf, 256);
parser(buf, &cOne, &cTwo, &cOper);
 
while(!(cOne=='0' && cTwo=='0' && cOper=='+')) {
 
switch(cOne) {
case 'a':
fOne = a;
break;
 
case 'b':
fOne = b;
break;
 
case 'c':
fOne = c;
break;
 
case 'd':
fOne = d;
break;
}
 
switch(cTwo) {
case 'a':
fTwo = a;
break;
 
case 'b':
fTwo = b;
break;
 
case 'c':
fTwo = c;
break;
 
case 'd':
fTwo = d;
break;
}
 
switch(cOper) {
case '+':
fRes = fOne + fTwo;
break;
 
case '-':
fRes = fOne - fTwo;
break;
 
case '/':
fRes = fOne / fTwo;
break;
 
case '*':
fRes = fOne * fTwo;
break;
}
 
cout << buf << " = " << fRes << endl;
 
cout << "Введите выражение:\n";
cin.getline(buf, 256);
parser(buf, &cOne, &cTwo, &cOper);
};
 
cout << "\n\nCreated by R0mm\nCopyright (C) 2009 cyberforum.ru\n\n";
system("pause");
return 0;
}
Она запускается, но считает не правильно. В чём ошибка?
manfeese
 Аватар для manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
29.11.2009, 13:59     Нужно подредактировать прогу #3
C++
1
2
3
4
5
6
7
8
9
10
11
double GetFromFile(FILE *f,char *s)
{
 double a,b,c,d;
 f >> a >> b >> c >> d;
 
 if (s=="a+b=") return a+b;
 if (s=="c*d=") return c*d;
 if (s=="b/d=")
    if (d!=0) return b/d;
    else return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
29.11.2009, 14:12     Нужно подредактировать прогу #4
У Вас программа работает правильно. Ошибка у Вас в записях информации в файле myfile.txt.
По всей видимости там такая запись
а= 1,0; b = 5; с = 25,2; d = -l2,5.
. Вот если исправите на такую:
1.0 5 25.2 -12.5
, то все будет работать нормально.
Если хотите, что бы Ваша программа работала с информацией, записанной в другом формате, то нужно писать раздел кода считывания данных из файла, подругому.
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
29.11.2009, 14:26  [ТС]     Нужно подредактировать прогу #5
А это в теле функции main записывается? Если можно напишите исправленный код
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
29.11.2009, 14:56  [ТС]     Нужно подредактировать прогу #6
Ура, ура! Работает! Спасибо! Из-за такой мелочи не получалось))))). А можно вас ещё попросить помочь переделать программу через array. Она запускается и считает правильно, но преподаватель требует, чтобы была через array, а сделана через int. Заранее большое спасибо!
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
//#include "stdafx.h"
#include <iostream>
#include <conio.h>
 
using namespace std;
int* Sum(int* first, int* second, int n)
{
int* rez = new int[n];
for(int i = 0; i < n; ++i)
rez[i] = first[i] + second[i];
return rez;
}
int main()
{
int A[4][2] = { 5, 3, 7, 1, 3, -5, 4, 7};
int B[4][2], C[4][2], i, j;
for(i = 0; i < 2; ++i)
for(j = 0; j < 4; ++j)
cin>>B[i][j];
for(i = 0; i < 2; ++i)
for(j = 0; j < 4; ++j)
C[i][j] = A[i][j] + B[i][j];
 
cout<<"\nA:"<< endl;
for(i = 0; i < 2; ++i, cout<< endl)
for(j = 0; j < 4; ++j)
cout<<A[i][j]<<' ';
 
cout<<"\nB:"<< endl;
for(i = 0; i < 2; ++i, cout<< endl)
for(j = 0; j < 4; ++j)
cout<<B[i][j]<<' ';
 
cout<<"\nC:"<< endl;
for(i = 0; i < 2; ++i, cout<< endl)
for(j = 0; j < 4; ++j)
cout<<C[i][j]<<' ';
 
return 0;
}
manfeese
 Аватар для manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
29.11.2009, 15:47     Нужно подредактировать прогу #7
Что значит через Array? Так что ли?
C++
1
2
3
4
5
6
7
8
9
typedef int* array;
 
array Sum(array first, array second, int n)
{
array rez = new int[n];
for(int i = 0; i < n; ++i)
rez[i] = first[i] + second[i];
return rez;
}
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
29.11.2009, 16:59  [ТС]     Нужно подредактировать прогу #8
Как в этом примере:
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
#include "stdafx.h"
#include <iostream.h>
void array(float[3][3]);
int main()
{
    float a[3][3];
    int i,j;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
        cout<<"a["<<i<<"]["<<j<<"]=";
        cin>>a[i][j];
        }
    }
    array(a);
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            cout<<"aaa["<<i<<"]["<<j<<"]="<<a[i][j]<<"\n";
        }
    }
    return 0;
}
void array(float b[3][3])
{
for(int m=0;m<3;m++)
    {
for(int n=0;n<3;n++)
        {
        b[m][0]=b[0][n]+b[2][n];
}}}
manfeese
 Аватар для manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
29.11.2009, 17:05     Нужно подредактировать прогу #9
что функция array(a) должна выполнять? а то ничего не понятно...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2009, 05:24     Нужно подредактировать прогу
Еще ссылки по теме:

Нужно написать прогу которая создаст в двух текстовых файлах А и В порядок числ до 17 C++
C++ Выручайте! Нужно переделать прогу под двусвязный список.ничего не понимаю)
C++ Подредактировать програмный код
даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей C++
C++ подредактировать код

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

Или воспользуйтесь поиском по форуму:
БлондинкаЯ
0 / 0 / 0
Регистрация: 02.11.2009
Сообщений: 35
30.11.2009, 05:24  [ТС]     Нужно подредактировать прогу #10
Нужно задавать массивы через array, а не через int
Yandex
Объявления
30.11.2009, 05:24     Нужно подредактировать прогу
Ответ Создать тему
Опции темы

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