Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Задача на С++


Рекомендуемые сообщения

Добрый вечер!

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

C++

Вот я написал код :

#include <iostream>

using namespace std;

int main(void)

{

int a;int b;int c;int d;int e;int f;

cout <<"Введите a"<< endl;

cin >> a;

cout<<"Введите b"<< endl;

cin >> b;

cout<<"Введите c"<< endl;

cin >> c;

cout<<"Введите d"<< endl;

cin >> d;

e = a*b*c*d;

f = (a+b+c+d)/4;

cout <<"Умножение:" << e << endl;

cout <<"Среднее.Арифметическое:" << f << endl;

return 0;

getchar();

}

Но выдает ошибку компилятор Dev-C++

Permission denied

ld returned 1 exit status

Подскажите пожалуйста ошибку в коде, и подскажите может как то проще написать задачу?

Ссылка на комментарий
Поделиться на другие сайты

Странно, у меня нормально компилируется (только с выводом кириллицы косяк).

З.Ы. Оператор getchar() бесполезен в конце. Если нужно, чтобы приложение не закрывалось, а ожидало нажатие какой-либо из клавиш, нужно ещё подключить хедер <conio.h> и в конце перед возвращающим значением (return 0) добавить оператор getch().

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

Ну, судя по ошибке, проблема с правами доступа. Либо компилятор не может библиотеку подгрузить, либо сохранить бинарник.

Ссылка на комментарий
Поделиться на другие сайты

Всех благодарю, а задача то нормально написана?

Ссылка на комментарий
Поделиться на другие сайты

Всех благодарю, а задача то нормально написана?

Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры.

Ещё вопрос с типом переменных, на сколько я помню, int - это целые числа, как ты собираешь дробные выводить? Ну, и проверку на длинну введённого числа надо сделать.

Изменено пользователем kvazimoda
Ссылка на комментарий
Поделиться на другие сайты

Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры.

Случайно не припоминаете код на проверку?

Ссылка на комментарий
Поделиться на другие сайты

Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры.

Ещё вопрос с типом переменных, на сколько я помню, int - это один байт. Причём со знаком, т.е. промежуток от -127 до 127. Мне кажется это маловато. Может использовать что-то типа long. И проверку на длинну.

int - 4 байта. Насчёт кириллицы, используем CharToOem(char[] исх_строка, char[] получаемая_строка_с_русскими_символами), предварительно подключив заголовочный файл windows.h.

Ссылка на комментарий
Поделиться на другие сайты

int - 4 байта.

Да, потом посмотрел и исправил. Заодно возник вопрос про дроби :)

Случайно не припоминаете код на проверку?

Я писал только на bash'е и python'е. Общую идею могу выразить так:

  1. принимаем строку

  2. проверяем длинну, если слишком длинная - говорим об ошибке

  3. проверяем, что строка начинается либо с цифры, либо с минуса, если нет, говорим об ошибке

  4. проверяем, что остальные символы цифры (мы же говорим только о целых числах на входе?), если нет, то говорим об ошибке

  5. преобразуем строку в число

UPD: сейчас посмотрел, действительные числа это ещё и дроби. Значит надо предусмотреть наличие знака отделяющего дробную часть от целой. Так же учесть, что кто-то может написать точку, а кто-то запятую. Проверить надо будет, чтобы не было двух таких знаков.

Всё-таки надо уходить от int'а. У нас тут всё дробное. И при перемножении на предельных значениях получится крайне большое число. Так что это тоже надо учесть.

UPD2: Ещё надо бы не забыть про то, что человек может одно число пропустить и ничего не ввести. Как реагировать на это?

Изменено пользователем kvazimoda
Ссылка на комментарий
Поделиться на другие сайты

Riki_Tiki_Tavi

Так, во-первых, просят действительные числа, ты же объявил все целыми.

Во-вторых, функции getchar(); в iostream нет, она была в iostream.h, но эта библиотека является устаревшей и из новых версий C++ исключена.

#include<iostream>#include<iomanip>using namespace std;int main(){float a,b,c,d;cout<<"Enter four numbers: "; cin>>a>>b>>c>>d;cout<<"Product: "<<a*b*c*d<<endl;cout<<"Averige: "<<setprecision(2)<<fixed<<(a+b+c+d)/4<<endl;cin.get(); cin.get();}

P.S.

kvazimoda

Тут вопрос, как глубоко программа должна анализировать ошибки ввода пользователя. ИМХО, достаточно при неправильном синтаксически вводе сообщать об ошибке, это автоматически сделает функция ввода. Если бы программа была более-менее сложной, то был бы смысл потребовать повторного ввода, не выходя из программы. Но в таких простеньких программах достаточно того, что программа тут же завершится с выдачей сообщения об ошибке ввода, а запустить такую программу заново несложно. Исправлять самостоятельно, скажем, запятую на точку программа ИМХО не должна. Это уже само по себе будет сложнее остальной части программы ;) Кроме того, вообще плохо когда программа считает себя умнее пользователя и начинает самостоятельно исправлять то, что считает ошибками. А вдруг пользователь, например, решил и вводимые числа друг от друга отделять запятыми, тогда программа может, самостоятельно переправив ввод, просто выдать неправильный ответ, которому пользователь поверит - что гораздо хуже, чем сообщить пользователю об его ошибке :(

Действительные числа раньше называли еще вещественными (были две математические школы - в Москве и Санкт-Петербурге, которые не сходились в том, как их называть ;) ), теперь их начали называть еще и дробными, что совсем нехорошо, так как дробные числа стали не тем же, что и дроби, что идет явно поперек здравого смысла :(

А что человек может пропустить число - на здоровье. Программа просто будет ждать ввода недостающего числа. Почесав в затылке, пользователь или заметит, что числа нехватает, или запустит программу заново :)

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

#include<iostream>

#include<iomanip>

using namespace std;

int main(){

float a,b,c,d;

cout<<"Enter four numbers: "; cin>>a>>b>>c>>d;

cout<<"Product: "<<a*b*c*d<<endl;

cout<<"Averige: "<<setprecision(2)===что это?<<fixed===что это?<<(a+b+c+d)/4<<endl;

cin.get(); cin.get();}

Изменено пользователем Riki_Tiki_Tavi
Ссылка на комментарий
Поделиться на другие сайты

Это флаги. Указывают, сколько цифр после запятой выводить (там в задаче две требовалось для среднего арифметического чисел).

Изменено пользователем Shadow TH
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...