Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для Oxidous
4 / 4 / 1
Регистрация: 03.09.2014
Сообщений: 156

Задача по наследованию в C++, нужно реализовать некоторые моменты

08.11.2015, 20:26. Показов 1553. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать программу с объектами и реализовать наследование. Ситуация: Klimat
(базовый объект), Derevo (выводной объект).
a. Klimat: температура воздуха, скорость ветра, влажность и т.д.
b. Derevo: высота, толщина ствола, скорость роста.
c. Описать состояние дерева при различных климатических условиях, на сколько оно вырастит за год, когда оно сломается (при определённой скорости ветра).
d. Всё результаты должны выводиться на экран и записываться в текстовый файл.

Проблема в том, что программа всё время выводит одинаковый результат,что через год,что через 10 лет...
Как можно было бы реализовать,чтоб при скорости ветра,допустим, 20, дерево сломается.
Как реализовать запись результата в текстовый фал,который находится в одной папке с проектом?

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
#include <iostream>
#include <conio.h>
using namespace std;
 
class Klimat
{ 
protected: 
int temper; 
int veter; 
int vlaznost;
public:
Klimat()
{   }
Klimat(int x, int y, int z) 
{ 
temper=x; 
veter=y;
vlaznost=z;
}
void sobrat() 
{
cout<<"Введите температуру: ";
cin>>temper; 
cout<<"Введите скорость ветра: "; 
cin>>veter;
cout<<"Введите влажность: "; 
cin>>vlaznost;
}
};
 
class Derevo: public Klimat
{ 
int visota; 
int ktolshina; 
int vskorost; 
public: Derevo() : Klimat() {}
Derevo(int x, int y, int z, int k, int l) : Klimat (x,y,z)
{
visota=z; 
ktolshina=k; 
vskorost =l;
}
void sobrat()
{
    cout<<"Введите начальную высоту дерева: "; 
cin>> visota;   
cout<<"Введите толщину дерева: ";
cin>> ktolshina;   
cout<<"Введите скорость роста дерева: ";
cin>> vskorost;
 
Klimat::sobrat();
}
void vyvod (int n)
{   
int i=0;
cout<<"Результаты роста дерева: ";
for(i=0; i<n; i++)
cout<<" Через "<<i+1<<" год высота дерева будет "<<visota*2<<"."<<endl;
}
};
 
int main()
{
setlocale (LC_ALL, "Russian");
Derevo yolka;
yolka.sobrat();
yolka.vyvod(10);
system("pause");
return 0;
}
Добавлено через 14 минут
С ломанием дерева вроде разобрался,но правильно ли?

C++
1
2
3
4
5
6
7
8
9
10
11
void vyvod (int n)
{   
cout<<"Результаты роста дерева: "<<endl;
int i=0;
for(i=0; i<n; i++)
cout<<" Через "<<i+1<<" год высота дерева будет "<<visota*2<<"."<<endl;
if (veter>=20 && visota<=3 && ktolshina<= 3)
{
 cout<<"Дерево сломается при скорости ветра "<<veter<<" м/с."<<endl;
}
}
Добавлено через 17 минут
Думаю,что сделал неправильно. Нужно сделать так,чтоб если юзер вводит скорость ветра 20 и больше,то выдавало сообщение "Дерево сломается при скорости ветра..." и дальше уже код не шёл.

Добавлено через 1 час 31 минуту
По первому своему вопросу сделал так:

C++
1
2
3
4
5
6
int obsee = visota * vskorost;
int i=0;
for(i=0; i<n; i++)
cout<<" Через "<<i+1<<" год высота дерева будет "<<obsee++<<"."<<endl;
}
};
Но всё равно мне кажется,что выводит не так,как нужно,не так,как по логике должно быть Если я введу скорость роста дерева,допустим, 4, то в цикле и увеличение должно быть соответствующим,а пока у меня только перемножает один раз,а уже результат каждый цикл увеличивается на 1. Что-то никаких идей, как это правильно сделать.

Что до ломания дерева,то сделал так:

C++
1
2
3
4
5
while (veter>=20 && visota<=3 && ktolshina<= 3)
{
cout<<"Дерево сломается при скорости ветра "<<veter<<" м/с."<<" и высоте "<<visota<<" м."<<endl;
break;
}
Но тоже плохо, ибо нужно,чтоб если введены параметры,то выдавалось сообщение и программа прекращала свою работу,но break; не помогает,ибо хоть сообщение и выводится,однако программа работает дальше и выводит рост дерева за год,2,3 и т.д.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2015, 20:26
Ответы с готовыми решениями:

Задача по наследованию. Не понимаю некоторые моменты в формулировке задания
Здравствуйте! Вот есть задание: Описать базовый класс СТРОКА Обязательные поля класса: # Указатель на char - хранит адрес...

Ребят, выручайте, не могу реализовать некоторые моменты
Необходимо разработать приложение для библиотеки Роли: студент и библиотекарь. Система должна иметь окно входа, по которому...

Нужно понять по хостингу некоторые моменты
Приветы всем, помогите пожалуйста понять следующее: Есть у меня форум, когда базу заливал на хостинг то заливал я её в два места. На...

13
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
08.11.2015, 21:17
Oxidous,

Не по теме:

задачу сопроматовскую составь, когда дерево сломается... куча инфы в тырнете по выводу и вводу в файл

1
 Аватар для Oxidous
4 / 4 / 1
Регистрация: 03.09.2014
Сообщений: 156
08.11.2015, 21:42  [ТС]
Крюгер, Я везде нахожу только как записывать строку в файл, а мне нужно,чтоб результат работы функции записывался в файл
Типа этого:
C++
1
2
3
4
ofstream fou;
fou.open("result.txt");
fou << yolka.vyvod(10);
fou.close();
Но так не работает
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
08.11.2015, 22:22
Oxidous,
C++
1
2
3
4
5
6
friend std::ostream& operator <<
            ( std::ostream& o, const Vector3& v )
        {
            o << "Vector3(" << v.x << ", " << v.y << ", " << v.z << ")";
            return o;
        }
переделайте это под файловый поток, и добавьте этот метод в класс что выводить надо.
и не забывайте о правах доступа к полям класса

Добавлено через 2 минуты
а еще вы не правильно заполняете поля класса. нельзя вот так напрямую их вводить.

Добавлено через 55 секунд
вернее физически можно но это противоречит инкапсуляции

Добавлено через 53 секунды
такой же член класса можно определить и для ввода данных. (как я привел вам)

Добавлено через 4 минуты
вы не правильно делаете инициализацию объектов класса
. я бы всё по нормальному переписал, на вашем месте.

Добавлено через 25 минут
Oxidous, в общем типа того:
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
#include <iostream>
#include <conio.h>
using namespace std;
 
class Klimat
{ 
protected: 
 
int _temper; 
int _veter; 
int _vlaznost;
 
public:
 
Klimat():_temper(0),_veter(0),_vlaznost(0){}
Klimat(int temper, int veter, int vlaznost):_temper(temper),_veter(veter),_vlaznost(vlaznost) {}
 
//------------------вывод----------------------------------
friend std::ostream& operator <<
            ( std::ostream& o, const Klimat& k )
        {
            o << "Температура" << k._temper << "\n " << "Скорость ветра" << k._veter<<"\n " << "Влажность" << k._vlaznost<< "\n";
            return o;
        }
//------------------ввод-----------------------------------
friend std::istream& operator >>
            ( std::ostream& i, const Klimat& k )
        {
            cout<<"Введите температуру: ";
            i>>_temper;
            cout<<"Введите скорость ветра: ";
            i>>_veter;
            cout<<"Введите влажность: "; 
            i>>_vlaznost;
            return i;
        }
};
 
class Derevo: public Klimat
{
private:
    
int _visota; 
int _ktolshina; 
int _vskorost; 
 
public: 
 
Derevo() : Klimat() {}
Derevo(int temper, int veter, int vlaznost, int visota, int ktolshina, int vskorost) : Klimat (temper,veter,vlaznost),_visota(visota), _ktolshina(ktolshina), _vskorost(vskorost){}
 
//--- здесь ввод/вывод аналогично как и в 1 классе.
//---вычислительных методов , да и вообще чего либо кроме каркасов класса я не увидел честно говоря.
//---далее реализуете рассчетные методы.
};
 
int main()
{
//----здесь уже будете использовать класс по-человечески.
return 0;
}

Не по теме:

от себя хочу добавить, у вас ужасный код-стайл. читать невыносимо. во-первых: транслит это плохо,
во -вторых табуляции нету!
в-третьих вы не понимаете как работать с классами наверное, ибо коряво. списки инициализации можно использовать для всех полей класса

1
 Аватар для Oxidous
4 / 4 / 1
Регистрация: 03.09.2014
Сообщений: 156
08.11.2015, 22:23  [ТС]
Крюгер, Благодарю за ответ Получилось у меня записывать в файл так,как хотел
А как можно реализовать такую вещь:
Если я ввожу скорость ветра больше или равную 20,то на экран выводится только строка: "Дерево сломается при скорости 20 м/с." и после этого ничего больше не выводится
Чуть выше я уже писал код,который действительно выводит строку с сообщением,но вот только после неё всё равно выполняется цикл и выводятся 10 строк.
Мне тяжело даётся C++,если честно, а потому не могли бы Вы мне пояснить,в чём моя проблема,что в этой части сделал не так и как лучше написать?
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
08.11.2015, 22:33
Oxidous, можно, добавьте в членом класса еще одну сравнивающую функцию, которая сравнит текущее значение поля с указанной вами константой 20 м/с, и собсно по результату условия выводите то что вас интересует.

Добавлено через 37 секунд
надо добавить
C++
1
break
Добавлено через 2 минуты
объясню внятнее: сравниваем условие, и если скорость == 20 м/с , то вывод сообщения и туда же бряк.

C++
1
if(veter == 20 ){ cout<<"alarm!!!ololo!! " ; break;}
примерно так

Добавлено через 2 минуты
еще существуют безусловные переходы по метке... (если интересует.)

C++
1
2
3
4
5
6
label: { code code code }
 
code code
code...
 
goto label;
1
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
08.11.2015, 22:49
Уже столько сообщений в теме, но самого интересного я так и не дождался.
Неужели никого не смущает, что Дерево наследует(!!!) Климату? С такой иерархией классов, уверен, задачу не сдать.
Наверное, имелся в виду базовый класс Климат и его каки-нибудь потомки: Заполярье, Средиземноморье, Сахара и т.п.
1
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,532
Записей в блоге: 1
08.11.2015, 22:56
Fyret, да вообще мрак. Полно нубов даже среди преподов часто дают задачи по наследованию квадрата от линии. Да, это ошибочно, но тут хоть какой-то ход (пусть и ошибочной) логики, приведшей к такой ошибке прослеживается! А вот как можно наследовать вообще не связанные между собой понятия: деревья и валенки - для меня загадка!
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
08.11.2015, 23:01
Fyret, мне лень смотреть на его иерархию, честно =) . ну мб он творчески подходит к задаче? мб человеку так хочется? я лишь ответил на волнующие его вопросы =)

Добавлено через 1 минуту

Не по теме:

я так классы не наследую

0
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
08.11.2015, 23:06
Ну ясно, у каждого своя лень Мне вот было лень отвечать на замусоленные уже вопросы по файловому вводу-выводу, а про чудное наследование - не выдержал.
0
 Аватар для Oxidous
4 / 4 / 1
Регистрация: 03.09.2014
Сообщений: 156
10.11.2015, 22:11  [ТС]
Благодарю за ответы
Всё получилось так,как нужно

Добавлено через 7 часов 41 минуту
Разобрался с этим делом,вынес функцию за пределы класса.
Ф-ция в классе:
C++
1
void vyvod(int n);
Вынесена за пределы класса:
C++
1
inline void Derevo::vyvod (int n)
Но теперь не могу перекинуть функцию в отлельный файл.
Пишет:
Error 7 error LNK2019: unresolved external symbol "public: void __thiscall Derevo::vyvod(int)" (?vyvod@Derevo@@QAEXH@Z) referenced in function _main D:\CPP\An_d\An_d\Derevo.obj Antras_d
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
10.11.2015, 22:57
Oxidous, я вам скинул пример кода где ваш геморрой вовсе не требуется , и почему у вас эта функция встраиваемая? зачем??

Добавлено через 4 минуты
Oxidous,


C++
1
2
3
4
5
6
7
8
9
10
11
inline void vyvod(int n);  //тут этот инлайн чертов, в объявлении класса
 
а тут
 
void Derevo::vyvod (int n)
{
 
 
}
 
вот так. но это велосипед.
1
 Аватар для Oxidous
4 / 4 / 1
Регистрация: 03.09.2014
Сообщений: 156
12.11.2015, 09:42  [ТС]
Крюгер, Огромное Вам спасибо Вы очень и очень мне помогаете. Тяжко даётся C++, если честно,а нормально начать изучать просто нет времени,хоть и очень инетересно, и есть желание,ибо заочная учёба - это гонка,чтоб всё сдать вовремя...

Интересует такой вопрос:

Я создал класс с пременной:

C++
1
2
3
4
5
6
7
8
9
10
11
12
class Vasia
{
    int vremia;
public:
    Vasia()
    {
        vremia =0;
    }
    Vasia(int t)
    {
        vremia = t;
    }
В этом классе есть две процедуры. Допустим,в первой процедуре на экран выводится столько строк,сколько юзер введёт с клавиатуры:

C++
1
2
3
4
5
6
7
8
9
void sobrat (int t)
{
cout<<"Vvedite kolicestvo let: "
cin>>t;
...
int i=0;
for(i=0; i<t; i++)
cout<<" Через "<<i+1<<" Vsem pridet zopa "<<endl;
}
Вторая процедура идентичная и нужна только для того,чтоб сохранить в файл инфу.

C++
1
2
3
4
5
6
7
8
void zapis(int t)
{
ofstream fail;
fail.open("rezultat.txt");
...
int i=0;
for(i=0; i<t; i++)
fail<<" Через "<<i+1<<" Vsem pridet zopa "<<endl;
Можно ли как-то сделать так,чтоб если юзер с клавиатуры вводит в переменную "t" значение равное,допустим, 15, то и в файл записывалось 15 строк из воторой процедуры. Иными словами,я хочу задавать значение переменной в первой процедуре,а использовать это введённое значение - в двух процедурах.
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
14.11.2015, 00:40
Oxidous,

Не по теме:

в с++ нету процедур. есть только функции, которые возвращают или не возвращают результат. аналогично процедурам в делфи но всё же функции



я вам уже приводил пример, вам не надо никаких т.н. "процедур", вот здесь: https://www.cyberforum.ru/cpp-beginners/thread1575075.html#post8312402
просто перегружаете операторы ввода и вывода, и получите то что вам нужно. нафига вы делаете такие костыли?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.11.2015, 00:40
Помогаю со студенческими работами здесь

Настраиваю локальную сеть, нужно уточнить некоторые моменты
Поручили настроить Локальную сеть, монтажник оставил такие данные на листе : 42.24.1.10, 255.255.255.252. Есть 5 ПК, сетевой принтер,...

Проясните некоторые моменты
Читал книгу, но не все уяснил... 1. В каких конкретно случаях нужно писать writeln и readln вместо write и read? 2. В каких...

Объясните некоторые моменты из c++
Добрый день. Я хочу начать познавать сие творение, т.к. 1 семестр на первом курсе 3 года назад познанием и обучением назвать сложно. А в...

Объясните некоторые моменты в задаче
Здравствуйте, вот мне накинули задачу Пользователь вводит число А не более 4-х разрядов. Вывести всевозможные комбинации из цифр этого...

Не могу понять некоторые моменты
Пожалуйста, объясните на пальцах вот эти вещи: В чем разница интерфейсов Comparator и Comparable? Почему в джаве нельзя использовать...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru