Riki_Tiki_Tavi Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 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 Подскажите пожалуйста ошибку в коде, и подскажите может как то проще написать задачу? Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 (изменено) Странно, у меня нормально компилируется (только с выводом кириллицы косяк). З.Ы. Оператор getchar() бесполезен в конце. Если нужно, чтобы приложение не закрывалось, а ожидало нажатие какой-либо из клавиш, нужно ещё подключить хедер <conio.h> и в конце перед возвращающим значением (return 0) добавить оператор getch(). Изменено 16 сентября, 2012 пользователем Shadow TH Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 Ну, судя по ошибке, проблема с правами доступа. Либо компилятор не может библиотеку подгрузить, либо сохранить бинарник. Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 16 сентября, 2012 Автор Жалоба Поделиться Опубликовано 16 сентября, 2012 Всех благодарю, а задача то нормально написана? Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 (изменено) Всех благодарю, а задача то нормально написана? Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Ещё вопрос с типом переменных, на сколько я помню, int - это целые числа, как ты собираешь дробные выводить? Ну, и проверку на длинну введённого числа надо сделать. Изменено 16 сентября, 2012 пользователем kvazimoda Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 16 сентября, 2012 Автор Жалоба Поделиться Опубликовано 16 сентября, 2012 Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Случайно не припоминаете код на проверку? Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 Внешне логика, вроде, правильно, сам в СИ не шарю особо. Если синтаксис соблюдён, то правильно. Только, на сколько помню, может быть проблема с кирилицей и нет проверки на то, что пользователь может ввести не цифры. Ещё вопрос с типом переменных, на сколько я помню, int - это один байт. Причём со знаком, т.е. промежуток от -127 до 127. Мне кажется это маловато. Может использовать что-то типа long. И проверку на длинну. int - 4 байта. Насчёт кириллицы, используем CharToOem(char[] исх_строка, char[] получаемая_строка_с_русскими_символами), предварительно подключив заголовочный файл windows.h. Ссылка на комментарий Поделиться на другие сайты Поделиться
kvazimoda Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 (изменено) int - 4 байта. Да, потом посмотрел и исправил. Заодно возник вопрос про дроби :) Случайно не припоминаете код на проверку? Я писал только на bash'е и python'е. Общую идею могу выразить так: принимаем строку проверяем длинну, если слишком длинная - говорим об ошибке проверяем, что строка начинается либо с цифры, либо с минуса, если нет, говорим об ошибке проверяем, что остальные символы цифры (мы же говорим только о целых числах на входе?), если нет, то говорим об ошибке преобразуем строку в число UPD: сейчас посмотрел, действительные числа это ещё и дроби. Значит надо предусмотреть наличие знака отделяющего дробную часть от целой. Так же учесть, что кто-то может написать точку, а кто-то запятую. Проверить надо будет, чтобы не было двух таких знаков. Всё-таки надо уходить от int'а. У нас тут всё дробное. И при перемножении на предельных значениях получится крайне большое число. Так что это тоже надо учесть. UPD2: Ещё надо бы не забыть про то, что человек может одно число пропустить и ничего не ввести. Как реагировать на это? Изменено 16 сентября, 2012 пользователем kvazimoda Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 16 сентября, 2012 Жалоба Поделиться Опубликовано 16 сентября, 2012 (изменено) 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 Тут вопрос, как глубоко программа должна анализировать ошибки ввода пользователя. ИМХО, достаточно при неправильном синтаксически вводе сообщать об ошибке, это автоматически сделает функция ввода. Если бы программа была более-менее сложной, то был бы смысл потребовать повторного ввода, не выходя из программы. Но в таких простеньких программах достаточно того, что программа тут же завершится с выдачей сообщения об ошибке ввода, а запустить такую программу заново несложно. Исправлять самостоятельно, скажем, запятую на точку программа ИМХО не должна. Это уже само по себе будет сложнее остальной части программы ;) Кроме того, вообще плохо когда программа считает себя умнее пользователя и начинает самостоятельно исправлять то, что считает ошибками. А вдруг пользователь, например, решил и вводимые числа друг от друга отделять запятыми, тогда программа может, самостоятельно переправив ввод, просто выдать неправильный ответ, которому пользователь поверит - что гораздо хуже, чем сообщить пользователю об его ошибке Действительные числа раньше называли еще вещественными (были две математические школы - в Москве и Санкт-Петербурге, которые не сходились в том, как их называть ;) ), теперь их начали называть еще и дробными, что совсем нехорошо, так как дробные числа стали не тем же, что и дроби, что идет явно поперек здравого смысла А что человек может пропустить число - на здоровье. Программа просто будет ждать ввода недостающего числа. Почесав в затылке, пользователь или заметит, что числа нехватает, или запустит программу заново :) Изменено 16 сентября, 2012 пользователем Тролль 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 17 сентября, 2012 Автор Жалоба Поделиться Опубликовано 17 сентября, 2012 (изменено) #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();} Изменено 17 сентября, 2012 пользователем Riki_Tiki_Tavi Ссылка на комментарий Поделиться на другие сайты Поделиться
Shadow TH Опубликовано 17 сентября, 2012 Жалоба Поделиться Опубликовано 17 сентября, 2012 (изменено) Это флаги. Указывают, сколько цифр после запятой выводить (там в задаче две требовалось для среднего арифметического чисел). Изменено 17 сентября, 2012 пользователем Shadow TH 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Riki_Tiki_Tavi Опубликовано 17 сентября, 2012 Автор Жалоба Поделиться Опубликовано 17 сентября, 2012 Всем спасибо за помощь! Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти