Консультация № 188976
17.03.2016, 19:09
0.00 руб.
0 3 1
Здравствуйте! Прошу помощи в следующем вопросе:

Помогите исправить ошибку при компиляции проекта. скачать файл laba1_prog.zip [14.6 кб]Проект прилагаю.
Среда разработки VS Express2010
Заранее спасибо.

Обсуждение

давно
Посетитель
7438
7205
18.03.2016, 13:33
общий
Адресаты:
В архиве файлы исходных текстов (*.cpp и *.h) сплошь из нулей 0x00.
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399388
6
18.03.2016, 15:28
общий
19.03.2016, 00:07
Адресаты:
Файл laba1_main.cpp[code h=200]#include <fraction.h>
#include <iostream>
using namespace std;
fraction make_fraction(double F, int S)
{
fraction t;//создали временную переменную
t.Init(F,S);//инициализировали поля переменной t с помощью параметров функции
return t;//вернули значение переменной t
}
//5. Изменить текст функции main()
void main()
{
//определение переменных А и В
fraction A;
fraction B;
A.Init(3.0,2);//инициализация переменной А
B.Read();//ввод полей переменных В
A.Show();//вывод значений полей переменной А
B.Show();//вывод значений полей переменной В
//вывод значения степени, вычисленного с помощью функции Power()
cout<<"A.Power("<<A.first<<","<<A.second<<")="<<A.Power()<<endl;
cout<<"B.Power("<<B.first<<","<<B.second<<")="<<B.Power()<<endl;
//указатели
fraction *X=new fraction;//выделение памяти под динамическую переменную
X->Init(2.0,5);//инициализация
X->Show();//вывод значений полей
X->Power();//вычисление степени
cout<<"X.Power("<<X->first<<","<<X->second<<")="<<X->Power()<<endl;
//массивы
fraction mas[3];//определение массива
for (int i=0;i<3; i++)
mas[i].Read();//чтение значений полей
for (i=0;i<3; i++)
mas[i].Show(); //вывод значений полей
for (i=0;i<3; i++)
{
mas[i].Power(); //вычисление степени
cout<<"mas["<<i<<"].Power("<<mas[i].first<<","<<mas[i].second<<")=";
cout<<mas[i].Power()<<endl;
}
//динамические масивы
fraction* p_mas=new fraction[3];//выделение памяти
for (int i=0;i<3; i++)
p_mas[i].Read();//чтение значений полей
for (i=0;i<3; i++)
p_mas[i].Show();//вывод значений полей
for (i=0;i<3; i++)
{
p_mas[i].Power();//вычисление степени
cout<<"p_mas["<<i<<"].Power("<<p_mas[i].first<<","<<p_mas[i].second;
cout<<")="<<p_mas[i].Power()<<endl;
}
//вызов функции make_fraction()
double y; int z;
cout<<"first?";cin>>y;
cout<<"second?";cin>>z;
//переменная F формируется с помощью функции make_fraction()
fraction F=make_fraction(y,z);
F.Show();
return 0;
}[/code]

fraction.cpp
[code h=200]#include <fraction.h>
using namespace std;
//реализация метода для инициализации полей структуры
void fraction::Init(double F, int S)
{
first=F; second=S;
}
//реализация метода для чтения значений полей структуры
void fraction::Read()
{
cout<<"\nfirst?"; cin>>first;
cout<<"\nsecond?";cin>>second;
}
//реализация метода для вывода значений полей структуры
void fraction::Show()
{
cout<<"\nfirst="<<first;
cout<<"\nsecond="<<second;
cout<<"\n";
}
//метод для возведения в степень
double fraction::Power()
{
return pow (first, second);
}[/code]

и fraction.h
Код:
struct fraction
{
double first;
int second;
void Init(double, int);//метод для инициализации полей
void Read();//метод для чтения значений полей
void Show();//метод для вывода значений полей
double Power();//вычисление степени
};
давно
Посетитель
7438
7205
18.03.2016, 18:11
общий
это ответ
Здравствуйте, Пользователь из России!
1) В функции make_fraction необходимо создавать fraction динамически, возвращать указатель.
Локальная структура fraction создается в стеке и при выходе теряется.
2) Все динамические объекты необходимо уничтожать, когда они уже не нужны.
3) В модуле fraction.cpp не были указаны необходимые include-ы
Плюс закомментировал некоторые лишние вызовы. Это не ошибки, просто лишняя работа.
laba_main.cpp
[code h=200]
#include "fraction.h"
#include <iostream>

using namespace std;

fraction* make_fraction(double F, int S)
{
fraction *t=new fraction; //создали временную переменную
t->Init(F,S); //инициализировали поля переменной t с помощью параметров функции
return t; //вернули значение переменной t
}

//5. Изменить текст функции main()
void main()
{
int i;
//определение переменных А и В
fraction A;
fraction B;
A.Init(3.0,2); //инициализация переменной А
B.Read(); //ввод полей переменных В
A.Show(); //вывод значений полей переменной А
B.Show(); //вывод значений полей переменной В

//вывод значения степени, вычисленного с помощью функции Power()
cout<<"A.Power("<<A.first<<","<<A.second<<")="<<A.Power()<<endl;
cout<<"B.Power("<<B.first<<","<<B.second<<")="<<B.Power()<<endl;

//указатели
fraction *X=new fraction;//выделение памяти под динамическую переменную
X->Init(2.0,5);//инициализация
X->Show();//вывод значений полей
/*X->Power();*///вычисление степени
cout<<"X.Power("<<X->first<<","<<X->second<<")="<<X->Power()<<endl;
delete X;

//массивы
fraction mas[3];//определение массива
for (i=0;i<3; i++)
mas[i].Read();//чтение значений полей
for (i=0;i<3; i++)
mas[i].Show(); //вывод значений полей
for (i=0;i<3; i++)
{
/*mas[i].Power();*/ //вычисление степени
cout<<"mas["<<i<<"].Power("<<mas[i].first<<","<<mas[i].second<<")=";
cout<<mas[i].Power()<<endl;
}

//динамические масивы
fraction* p_mas=new fraction[3];//выделение памяти
for (i=0;i<3; i++)
p_mas[i].Read();//чтение значений полей
for (i=0;i<3; i++)
p_mas[i].Show();//вывод значений полей
for (i=0;i<3; i++)
{
p_mas[i].Power();//вычисление степени
cout<<"p_mas["<<i<<"].Power("<<p_mas[i].first<<","<<p_mas[i].second;
cout<<")="<<p_mas[i].Power()<<endl;
}
delete [] p_mas;

//вызов функции make_fraction()

double y; int z;
cout<<"first?";cin>>y;
cout<<"second?";cin>>z;

//переменная F формируется с помощью функции make_fraction()
fraction *F=make_fraction(y,z);
F->Show();
delete F;
}
[/code]
fraction.cpp
[code h=200]
#include "fraction.h"
#include <iostream>
#include <math.h>

using namespace std;

//реализация метода для инициализации полей структуры
void fraction::Init(double F, int S)
{
first=F; second=S;
}

//реализация метода для чтения значений полей структуры
void fraction::Read()
{
cout<<"\nfirst?"; cin>>first;
cout<<"\nsecond?";cin>>second;
}

//реализация метода для вывода значений полей структуры
void fraction::Show()
{
cout<<"\nfirst="<<first;
cout<<"\nsecond="<<second;
cout<<"\n";
}

//метод для возведения в степень
double fraction::Power()
{
return pow (first, second);
}
[/code]
fraction.h
[code h=200]
struct fraction
{
double first;
int second;
void Init(double, int); //метод для инициализации полей
void Read(); //метод для чтения значений полей
void Show(); //метод для вывода значений полей
double Power(); //вычисление степени
};
[/code]
5
Спасибо большое!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа