Riki_Tiki_Tavi Posted September 16, 2012 Report Share Posted September 16, 2012 Добрый вечер! Вот задача:Написать программу, использование которой позволяет пользователю ввести с клавиатуры четыре действительные числа и вывести на экран произведение этих чисел, а также их среднее арифметическое с двумя цифрами после запятой. 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 Подскажите пожалуйста ошибку в коде, и подскажите может как то проще написать задачу? Link to comment Share on other sites More sharing options...
Shadow TH Posted September 16, 2012 Report Share Posted September 16, 2012 (edited) Странно, у меня нормально компилируется (только с выводом кириллицы косяк). З.Ы. Оператор getchar() бесполезен в конце. Если нужно, чтобы приложение не закрывалось, а ожидало нажатие какой-либо из клавиш, нужно ещё подключить хедер <conio.h> и в конце перед возвращающим значением (return 0) добавить оператор getch(). Edited September 16, 2012 by Shadow TH Link to comment Share on other sites More sharing options...
kvazimoda Posted September 16, 2012 Report Share Posted September 16, 2012 Ну, судя по ошибке, проблема с правами доступа. Либо компилятор не может библиотеку подгрузить, либо сохранить бинарник. Link to comment Share on other sites More sharing options...
Riki_Tiki_Tavi Posted September 16, 2012 Author Report Share Posted September 16, 2012 Всех благодарю, а задача то нормально написана? Link to comment Share on other sites More sharing options...
kvazimoda Posted September 16, 2012 Report Share Posted September 16, 2012 (edited) Всех благодарю, а задача то нормально написана? Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Ещё вопрос с типом переменных, на сколько я помню, int - это целые числа, как ты собираешь дробные выводить? Ну, и проверку на длинну введённого числа надо сделать. Edited September 16, 2012 by kvazimoda Link to comment Share on other sites More sharing options...
Riki_Tiki_Tavi Posted September 16, 2012 Author Report Share Posted September 16, 2012 Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Случайно не припоминаете код на проверку? Link to comment Share on other sites More sharing options...
Shadow TH Posted September 16, 2012 Report Share Posted September 16, 2012 Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Ещё вопрос с типом переменных, на сколько я помню, int - это один байт. Причём со знаком, т.е. промежуток от -127 до 127. Мне кажется это маловато. Может использовать что-то типа long. И проверку на длинну. int - 4 байта. Насчёт кириллицы, используем CharToOem(char[] исх_строка, char[] получаемая_строка_с_русскими_символами), предварительно подключив заголовочный файл windows.h. Link to comment Share on other sites More sharing options...
kvazimoda Posted September 16, 2012 Report Share Posted September 16, 2012 (edited) int - 4 байта. Да, потом посмотрел и исправил. Заодно возник вопрос про дроби :) Случайно не припоминаете код на проверку? Я писал только на bash'е и python'е. Общую идею могу выразить так: принимаем строку проверяем длинну, если слишком длинная - говорим об ошибке проверяем, что строка начинается либо с цифры, либо с минуса, если нет, говорим об ошибке проверяем, что остальные символы цифры (мы же говорим только о целых числах на входе?), если нет, то говорим об ошибке преобразуем строку в число UPD: сейчас посмотрел, действительные числа это ещё и дроби. Значит надо предусмотреть наличие знака отделяющего дробную часть от целой. Так же учесть, что кто-то может написать точку, а кто-то запятую. Проверить надо будет, чтобы не было двух таких знаков. Всё-таки надо уходить от int'а. У нас тут всё дробное. И при перемножении на предельных значениях получится крайне большое число. Так что это тоже надо учесть. UPD2: Ещё надо бы не забыть про то, что человек может одно число пропустить и ничего не ввести. Как реагировать на это? Edited September 16, 2012 by kvazimoda Link to comment Share on other sites More sharing options...
Тролль Posted September 16, 2012 Report Share Posted September 16, 2012 (edited) 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 Тут вопрос, как глубоко программа должна анализировать ошибки ввода пользователя. ИМХО, достаточно при неправильном синтаксически вводе сообщать об ошибке, это автоматически сделает функция ввода. Если бы программа была более-менее сложной, то был бы смысл потребовать повторного ввода, не выходя из программы. Но в таких простеньких программах достаточно того, что программа тут же завершится с выдачей сообщения об ошибке ввода, а запустить такую программу заново несложно. Исправлять самостоятельно, скажем, запятую на точку программа ИМХО не должна. Это уже само по себе будет сложнее остальной части программы ;) Кроме того, вообще плохо когда программа считает себя умнее пользователя и начинает самостоятельно исправлять то, что считает ошибками. А вдруг пользователь, например, решил и вводимые числа друг от друга отделять запятыми, тогда программа может, самостоятельно переправив ввод, просто выдать неправильный ответ, которому пользователь поверит - что гораздо хуже, чем сообщить пользователю об его ошибке Действительные числа раньше называли еще вещественными (были две математические школы - в Москве и Санкт-Петербурге, которые не сходились в том, как их называть ;) ), теперь их начали называть еще и дробными, что совсем нехорошо, так как дробные числа стали не тем же, что и дроби, что идет явно поперек здравого смысла А что человек может пропустить число - на здоровье. Программа просто будет ждать ввода недостающего числа. Почесав в затылке, пользователь или заметит, что числа нехватает, или запустит программу заново :) Edited September 16, 2012 by Тролль 2 Link to comment Share on other sites More sharing options...
Riki_Tiki_Tavi Posted September 17, 2012 Author Report Share Posted September 17, 2012 (edited) #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();} Edited September 17, 2012 by Riki_Tiki_Tavi Link to comment Share on other sites More sharing options...
Shadow TH Posted September 17, 2012 Report Share Posted September 17, 2012 (edited) Это флаги. Указывают, сколько цифр после запятой выводить (там в задаче две требовалось для среднего арифметического чисел). Edited September 17, 2012 by Shadow TH 1 Link to comment Share on other sites More sharing options...
Riki_Tiki_Tavi Posted September 17, 2012 Author Report Share Posted September 17, 2012 Всем спасибо за помощь! Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now