Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14

Не получается реализовать ввод данных с консоли

18.04.2023, 20:10. Показов 964. Ответов 16

Студворк — интернет-сервис помощи студентам
1. Реализовать класс прямоугольника с использованием инкапсуляции.
2. Поля класса должны быть в разделе private.
3. Определить методы установки свойств (при вводе некорректных значений выдавать сообщение об ошибке) и возврата значений.
4. Определить метод печати результата.
5. Реализовать на языке С++ программу, демонстрирующую использование объектов созданного класса.
Задание
Класс: Прямоугольник
Поля: высота и ширина
Операции:
• вычислить площадь и периметр прямоугольника;
• установить значения полей и вывести на экран результат вычисления;
• предусмотреть в программе проверку на корректность задаваемых параметров.

Добавлено через 2 минуты
Вот программа, не понимаю как в рамках данной программы реализовать ввод данных длина, ширина. И как предусмотреть в программе проверку на корректность. Если я задал тип float и закрыл доступ к изменению float a, float b.
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
/*Класс Rectangle, реализованно вычисление площади и периметра.*/
class Rectangle //Класс прямоугольник.
{
private: //Модификатор закрытого доступа.
    float a; //Длинна.
    float b; //Ширина.
public: //Модификатор открытого доступа.
    Rectangle(float _a, float _b)
        : a(_a)
        , b(_b) //Перезагрузка.
    {
    }
    float Square(); //Площадь.
    float Perimeter(); //Периметр.
};
/*Формулы для вычисления площади и периметра прямоугольника.*/
float Rectangle::Square() //Класс прямоугольник, площадь.
{
    return a * b; //Формала расчёта площади.
}
float Rectangle::Perimeter() //Класс прямоугольник, периметр.
{
    return 2.f * a + 2.f * b; //Формула расчёта периметра.
}
/*Основная часть программы для вывода результатов в консоль.*/
#include <iostream> //Объявляет объекты, управляющие чтением из стандартных потоков и записью в них.
using namespace std; //Пространство имён, чтобы не печатать std.
 
int main() //Главная функция программы.
{
    setlocale(LC_ALL, "Russian"); //Русификация консоли.
    int width, height;
    Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
    cin >> width >> height;
    cout << rectangle.Square() << "\n";
    cout << rectangle.Perimeter() << "\n";
    // cout << rectangle.Square() << "-Результаты вычисления площади.\n"; //Вывод результатов
    // вычисления площади.
    // cout << rectangle.Perimeter() << "-Результаты вычисления периметра.\n"; //Вывод результатов
    // вычисления периметра.
    system("pause"); //Пауза консоли.
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
18.04.2023, 20:10
Ответы с готовыми решениями:

Как реализовать запрет на ввод в консоли?
Как сделать так чтобы пользователь мог вводить только целые положительные числа

Как реализовать ввод многомерного массива пользователем с консоли?
Где ошибка? Программа коопилируется, но не получается ввести значение массива. #include &lt;iostream&gt; #include &lt;cstdlib&gt; ...

Не получается реализовать ввод/вывод в файл в классе
Доброго дня. Есть класс &quot;Спортивные соревнования&quot;, в котором есть 3 функции (добавление, удаление, редактирование). Не получается сделать...

16
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
18.04.2023, 20:14
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
cin >> width >> height;
Почему сначала используете, а только потом инициализируете?
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
18.04.2023, 20:23  [ТС]
Постараюсь объяснить.
Я студент, учусь на заочке, информации в самом институте кот наплакал и преподы какие-то беспонтовые.
Увидел подобное решение, там, сям. Попробовал примерить, понять. И видимо накосячил.

Добавлено через 3 минуты
Сначала надо cin >> width >> height;
Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта. Потом вот это?

Добавлено через 1 минуту
Поздно похоже я учиться пошёл в институт на 32 году жизни)

Добавлено через 55 секунд
Извините за глупые вопросы), стараюсь понять, везде искать информацию, всё абсолютно пробовать.
0
Заблокирован
18.04.2023, 21:17
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Сначала надо cin >> width >> height;
Rectangle rectangle(width, height);
Да, это логично.

Представьте что вы инициализировали ваши переменные нулями, что вполне нормально.
C++
1
2
3
4
5
6
   // объявление и инициализация наших переменных
   int width = 0, height = 0;
   // создаем объект типа Rectangle с параметрами
   Rectangle rectangle(width, height); 
   // и лишь после этого запрашиваем у пользователя ввод размеров прямоугольника
   cin >> width >> height;
Так с какими сторонами создастся наш прямоугольник ?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
18.04.2023, 21:45
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
Поздно похоже я учиться пошёл в институт на 32 году жизни)
Это роли не играет, я хоть и поступил раньше, понимать программирование начал только на втором курсе, так что главное интерес
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
19.04.2023, 17:12  [ТС]
0,0.

Добавлено через 20 минут
У нас программирование началось только со 2 курса. Программирование мне интересно, но я по коду не особо пониаю пока, вот про порядок строк когда вы написали почему сначала инициализация, а потом ввод, я не сразу понял что к чему, да и понял я только касательно этого. Пока не особо понимаю что должно быть первым, а что следующим. В одной из тем на форуме были даже люди которые готовый код собрать не сразу смогли, не поняли что расскоментировать надо некоторые строки. У меня вроде проблем с пониманием этого не было, когда в колледже учился там объяснили, но там был Delphi, не очень современный и нужный что-ли язык. А вообще вот вопрос не по теме есть. На сколько сильно программисту нужна высшая математика?, компьютеры и всё что с ними связано я с детства люблю, мне отец в 3 года купил IBM 486.

Добавлено через 2 часа 26 минут
Спасибо тебе большое за помощь, теперь я понял. Можете подсказать пожалуйста как сделать в программе проверку на корректность ввода данных?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
19.04.2023, 20:39
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
На сколько сильно программисту нужна высшая математика?
Зависит от специализации программиста
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
как сделать в программе проверку на корректность ввода данных?
Если брать ограничения по размеру height и width , то сразу после ввода пишешь if() и в скобках перечисляешь условия после скобок ставишь фигурные скобки и там код, который должен выполниться после выполнения условия. Если условия должны выполняться одновременно то используешь между ними &&, если хотя бы одно, то ||
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
20.04.2023, 19:00  [ТС]
Мне нужно брать ограничение по типу, у меня там float и int, значит нельзя вводить всё остальное включая символы. Так же через if делать?
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
20.04.2023, 19:32
Aleksey63tlt, если сможете, то конечно
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
20.04.2023, 20:24  [ТС]
Попробую.

Добавлено через 10 минут
Попробую что-нибудь придумать.
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
21.04.2023, 12:34  [ТС]
Нашёл вот такое решение, оно работает. вот только после ввода неправильных типов данных ввожу правильный программа как то странно работает. Помогите разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 int a;
    while (!(cin >> a) || (cin.peek() != '\n'))
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка ввода длины." << endl;
    }
    cout << "Введите ширину "; //Вывод строки ввода ширины.
    cin >> width; //Ввод значения ширины.
    int b;
    while (!(cin >> b) || (cin.peek() != '\n'))
    {
        cin.clear();
        while (cin.get() != '\n');
        cout << "Ошибка ввода ширины." << endl;
    }
Миниатюры
Не получается реализовать ввод данных с консоли  
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
21.04.2023, 19:26
Aleksey63tlt, в Aleksey63tlt, предлагаю вводить нужные данные в string, а затем просто ин конвертировать в нужный тип
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
22.04.2023, 23:30  [ТС]
Вместо int в этом куске кода использовать String?

Добавлено через 2 часа 20 минут
Перепробовал что смог понять, ничего не выходит. Если первая проверка на правильность ввода цифр проходит хорошо, то вторая не проходит, появляется пустая строка вместо мною оформленной где написано введите и программа начинает считать. Ничего не понимаю.
0
Лежебока
 Аватар для Donkix
328 / 244 / 95
Регистрация: 12.05.2021
Сообщений: 1,429
Записей в блоге: 2
23.04.2023, 00:02
Цитата Сообщение от Aleksey63tlt Посмотреть сообщение
C++
1
2
3
int width, height;
    Rectangle rectangle(width, height); //Задаём длинну и ширину для расчёта.
    cin >> width >> height;
C++
1
2
3
4
5
6
7
8
9
10
11
int width, height;
std::string str1,str2;
std::cin >> str1 >> str2;
width = std::stoi(str1);
height = std::stoi(str2);
if(width && height)
{
    std::cout << rectangle.Square() << "\n";
    std::cout << rectangle.Perimeter() << "\n";
}
else std::cout << "error";
Что-то типо такого
0
0 / 0 / 0
Регистрация: 11.04.2023
Сообщений: 14
24.04.2023, 14:24  [ТС]
Спасибо большое за помощь, отправил без проверки на ввод данных, оценили на максимальный бал. Удачи вам во всех ваших делах и начинаниях!
0
29 / 19 / 10
Регистрация: 24.04.2023
Сообщений: 62
24.04.2023, 22:22
Для ввода данных с консоли вам нужно использовать объект cin. Для того, чтобы задать значения полей width и height объекта rectangle вам нужно сначала их ввести с консоли, а затем передать в качестве параметров конструктора Rectangle.

Вот пример, как это можно сделать:

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
#include <iostream>
using namespace std;
 
class Rectangle {
private:
    float a;
    float b;
public:
    Rectangle(float _a, float _b)
        : a(_a)
        , b(_b)
    {
    }
 
    float Square();
    float Perimeter();
};
 
float Rectangle::Square() {
    return a * b;
}
 
float Rectangle::Perimeter() {
    return 2.f * a + 2.f * b;
}
 
int main() {
    setlocale(LC_ALL, "Russian");
 
    float width, height;
    cout << "Введите ширину прямоугольника: ";
    cin >> width;
    cout << "Введите высоту прямоугольника: ";
    cin >> height;
 
    Rectangle rectangle(width, height);
 
    cout << "Площадь прямоугольника: " << rectangle.Square() << "\n";
    cout << "Периметр прямоугольника: " << rectangle.Perimeter() << "\n";
 
    system("pause");
}
Для проверки корректности введенных данных, можно добавить проверки на отрицательные значения или на значения, равные 0. Например, можно добавить следующие строки перед созданием объекта Rectangle:

C++
1
2
3
4
if (width <= 0 || height <= 0) {
    cout << "Некорректные значения ширины и/или высоты прямоугольника!\n";
    return 0;
}
Таким образом, если пользователь введет отрицательное или 0 значение для width или height, программа сообщит об ошибке и завершится.
0
Заблокирован
25.04.2023, 16:24
Цитата Сообщение от EugenyS Посмотреть сообщение
Для ввода данных с консоли вам нужно использовать объект cin
Необязательно.

Цитата Сообщение от EugenyS Посмотреть сообщение
Для того, чтобы задать значения полей width и height объекта rectangle вам нужно сначала их ввести с консоли
Необязательно, данные можно получить из любого источника.

Цитата Сообщение от EugenyS Посмотреть сообщение
а затем передать в качестве параметров конструктора Rectangle
Только если указано в задании.Иначе. необязательно предоставлять данные в конструкторе.

Добавлено через 31 секунду
Цитата Сообщение от EugenyS Посмотреть сообщение
Таким образом
Хорошая площадка для троллейй....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.04.2023, 16:24
Помогаю со студенческими работами здесь

Пропускает ввод данных в консоли. Не работает часть кода. Пропускает ввод фио
Добрый день! Помогите пожалуйста! В void add_dinamo() пропускает cout&lt;&lt;&quot;ФИО: \t&quot; ; cin.getline(b.fio, 49); а дальше...

Реализовать все функции в виде методов. реализовать ввод и вывод данных через операторы << и >>, == и !=
Добрый вечер. Очень нужна ваша помощь. Нужно реализовать все функции в виде методов. Дополнительно реализовать ввод и вывод данных через...

Реализовать ввод строки с консоли пользователем и найти количество заданного символа в введённой строке
Ввести предложение и подсчитать сколько букв 'н' в нем.

Ввод данных с консоли
Добрый день! Такой вопрос - какой лучше метод использовать для ввода данных с консоли, которые потом принимаются на вход методу для...

Ввод данных с консоли
Как сделать ввод данных в этом коде через консоль, а не через сам код? Можете объяснить за что отвечает каждый блок и как он работает? ...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru