Как записать систему уравнений в си

BestProg

Разработка приложения решения системы линейных алгебраических уравнений методом Гаусса

Условие задачи

Задана система линейных алгебраических уравнений:

Разработать приложение, которое осуществляет решение системы линейных алгебраических уравнений с помощью метода Гаусса. Работа приложения должна быть реализована в виде мастера, в котором информация для каждого следующего шага определяется из информации на предшествующем шаге.

Выполнение

При сохранении проекта имя модуля главной формы приложения оставляем по умолчанию « Unit1.cpp «.

Рис. 1. Форма приложения с созданными файлами

2. Разработка главной формы приложения

2.1. Название приложения

Задать название приложения. Для этого свойство Caption главной формы устанавливаем в значение «Метод Гаусса».

2.2. Установка свойств формы

Выделить форму. В Object Inspector установить значение следующих свойств:
– свойство Border Style = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font выбрать параметры шрифта: шрифт Tahoma , размер шрифта 12 (рис. 2).

Рис. 2. Установка параметров шрифта главной формы приложения

В результате, форма приложения примет вид как показано на рисунке 3.

Рис. 3. Главная форма приложения

2.3. Компонент типа TGroupBox

Размещаем на форме компонент (элемент управления) типа TGroupBox из палитры компонент « Tool Palette «.

Рис. 4. Компонент типа TGroupBox

В результате, система создаст объект-переменную с именем GroupBox1 .

Изменяем размеры компонента GroupBox1 на всю ширину окна главной формы.

Свойство Caption компонента GroupBox1 устанавливаем в значение « Условие задачи «. Форма приложения будет иметь вид, как показано на рисунке 5.

Рис. 5. Форма приложения после размещения компонента TGroupBox

2.4. Компонент типа TLabel .

Размещаем компонент типа TLabel в области компонента TGroupBox . Автоматически создается объект-переменная с именем Label1 (рис. 6).

Устанавливаем свойство WordWrap компонента Label1 в значение « true » (рис. 6).

С помощью мышки изменяем ширину вывода текста компонента Label1 (рис. 6).

Рис. 6. Компонент Label1 , свойство WordWrap

Свойство Caption компонента Label1 устанавливаем в значение:

Решить систему линейных алгебраических уравнений методом Гаусса

В результате, форма приложения примет вид, как показано на рисунке 7.

Рис. 7. Форма приложения после размещения компонента Label1

2.5. Компоненты типа TButton .

Размещаем на форме компоненты типа TButton . В результате образуются два объекта-переменные с именами Button1 и Button2 .

Для лучшей наглядности изменяем размеры компонент так как показано на рисунке 8.

Рис. 8. Форма приложения с размещенными компонентами Button1 и Button2

Устанавливаем такие свойства компонент Button1 и Button2:
– в компоненте Button1 свойство Caption = «Выход» ;
– в компоненте Button2 свойство Caption = «Расчет >>» .

В результате форма приложения примет вид, как показано на рисунке 9.

Рис. 9. Главная форма приложения после размещения всех компонент

3. Программирование события клика на кнопке «Выход».

Вызовем событие OnClick компонента Button1 (кнопка « Выход «) (рис. 10). Событие размещается на вкладыше Events в Object Inspector .

Процесс программирования события OnClick подробно описан здесь.

Рис. 10. Вызов события OnClick компонента Button1

В результате, откроется окно с программным кодом метода обработки события. Между скобками < >вводим вызов метода Close() .

Метод Close() закрывает окно главной формы приложения и осуществляет все необходимые операции по освобождению памяти, ресурсов и т.д.

Листинг метода обработки события следующий:

4. Разработка формы ввода числа уравнений n.

4.1. Размещение компонент на форме и их настройка.

Процесс создания новой формы подробно описан здесь.

Для создания новой формы вызовем команду

В результате, будет создана новая форма, как показано на рисунке 11. Сохраняем форму под именем « Unit2.cpp «.

Создаются файлы, которые соответствуют форме:
– файл « Unit2.h «, содержащий описания глобальных переменных и подключения других модулей;
– файл « Unit2.cpp «, содержащий реализацию методов формы;
– файл « Unit2.dfm «, содержащий описание изображения формы на экране (размеры окна, координаты формы относительно окна экрана, значение цветов и прочее).

Новосозданной форме отвечает объект с именем Form2 . С помощью этого имени можно приступаться к свойствам и методам формы Form2 .

Рис. 11. Новосозданная форма Form2

Осуществим настройку формы Form2 .

Сначала настроим свойства формы:
– свойство Caption = «Задайте число уравнений» ;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать следдующие параметры шрифта: шрифт Tahoma, размер шрифта 12.

Размещаем на форме такие компоненты:
– компонент типа TGroupBox которому будет отвечать объект GroupBox1;
– компонент типа TLabel, размещается внутри области компонента GroupBox1 . Компоненту типа TLabel отвечает объект-переменная Label1 ;
– компонент типа TEdit , размещается внутри области компонента GroupBox1 . Этому компоненту отвечает объект (переменная) Edit1 ;
– два компонента типа TButton , которым отвечают объекты с именами Button1 и Button2 .

Осуществим настройку свойств компонент:
– в компоненте GroupBox1 значение свойства Caption = «» (пустая строка);
– в компоненте Label1 значение свойства Caption = «n = « ;
– в компоненте Edit1 значение свойства Text = «» ;
– в компоненте Button1 значение свойства Caption = « ;
– в компоненте Button2 значение свойства Caption = «Далее >>» .

После размещения компонент и корректирования размеров формы, форма Form2 имеет вид как показано на рисунке 12.

Рис. 12. Форма Form2 после размещения и настройки всех компонент

4.2. Программирование обработчиков событий формы Form2 .

В форме Form2 программируем два обработчика событий:
– обработчик события OnClick клика на кнопке « «;
– обработчик события OnClick клика на кнопке « Далее >> «.

Листинг обработчика события клика на кнопке Button1 (« «):

Листинг обработчика события клика на кнопке Button2 (« Продолжить >> «):

Глобальная переменная ModalResult отвечает за состояние формы. Если глобальная переменная ModalResult=0 , то это означает что форма открытая как модальное окно. Как только значение ModalResult станет ненулевым, то форма Form2 закроется с кодом возврата, помещенным в ModalResult .

Таким образом, если пользователь сделает клик на кнопке Button1 , то форма Form2 закроется с кодом возврата mrNo. Если пользователь сделает клик на кнопке Button2, то форма Form2 закроется с кодом возврата mrOk .

5. Построение формы ввода коэффициентов в уравнениях.

5.1. Размещение компонент на форме и их настройка.

Создание формы происходит стандартным путем и описано в п. 4.

Сохраняем форму под именем предлагаемым по умолчанию « Unit3.cpp «.

После создания формы получим объект с именем Form3 . С помощью этого объекта можно будет использовать методы и свойства формы Form3 .

Данной форме отвечают файлы с именами « Unit3.h «, « Unit3.cpp » и « Unit3.dfm «.

Сначала осуществим настройку свойств формы Form3 так, как описано в п. 4:
– свойство Caption = «Ввод коэффициентов уравнений «;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать параметры шрифта: шрифт Tahoma , размер шрифта 12 .

Для построения формы ввода коэффициентов уравнений используем такие компоненты:
– два компонента типа TLabel . Автоматически будут созданы объекты с такими именами: label1 и label2 ;
– компонент типа TStringGrid (рис. 13) для ввода коэффициентов, которые размещаются в левой части системы уравнений.

Компонент TStringGrid размещается во вкладке Additional панели инструментов « Tool Palette «. Создается объект с именем StringGrid1 ;
– компонент типа TStringGrid (рис. 13) для введения коэффициентов, которые размещаются в правой части системы уравнений. Создается объект с именем StringGrid2 ;
– два компонента типа TButton (кнопки « » и « Продолжить >> «). Создаются два объекта с именами Button1 и Button2 .

Рис. 13. Компонент TStringGrid на палитре компонент

После размещения компонент и корректировки их размеров, форма Form3 будет иметь приблизительно следующий вид (рис. 14).

Рис. 14. Форма Form3

Формируем свойства компонент формы Form3:
– в компоненте Label1 свойство Caption = « Коэффициенты в левой части уравнения «;
– в компоненте Label2 свойство Caption = «Правая часть» ;
– в компоненте Button1 свойство Caption = « ;
– в компоненте Button2 свойство Caption = «Далее >>» .

Формируем свойства компонентов типа TStringGrid :
– в компоненте StringGrid1 свойство FixedCols = 0 (число фиксированных колонок);
– в компоненте StringGrid1 свойство FixedRows = 0 (число фиксированных строк);
– в компоненте StringGrid2 свойство FixedCols = 0 ;
– в компоненте StringGrid2 свойство FixedRows = 0 ;
– в компоненте StringGrid1 выбираем вкладку Options и устанавливаем опцию goEditing в значение « true «;
– в компоненте StringGrid2 во вкладке Options опция goEditing = « true «.

Рис. 15. Установление опции goEditing во вкладке Options компонента StringGrid1

После выполненных действий, форма Form3 будет иметь вид как показано на рисунке 16.

Рис. 16. Форма Form3 после окончательного формирования

5.2. Программирование обработчиков событий формы Form3 .

Программируем обработчики событий OnClick клика на кнопках Button1 и Button2 формы Form3 .

Листинг обработчиков событий приведен ниже.

6. Создание формы вывода результата.

Последней в приложении создается форма, которая будет выводить результат вычислений. Процесс создания и сохранения формы подробно описан здесь. При сохранении формы оставляем имя по умолчанию « Unit4.cpp «.

В результате получаем объект с именем Form4 .

Новосозданная форма Form4 описывается в файле « Unit4.dfm «. Также форме отвечают файлы « Unit4.h » и « Unit4.cpp «.

6.1. Построение формы Form4 .

Сначала настраиваем свойства формы Form4 :
– свойство Caption = «Результат» ;
– свойство BorderStyle = bsDialog ;
– свойство Position = poScreenCenter ;
– в свойстве Font нужно выбрать следующие параметры шрифта: шрифт Tahoma , размер шрифта 12 .

Также корректируем размеры формы.

Следующим шагом идет размещение на форме компонент.

Размещаем на форме следующие компоненты (рис. 17):
– один компонент типа TLabel ;
– два компонента типа TStringGrid ;
– один компонент типа TButton .

Корректируем размеры и позиции компонент для удобного отображения.

После размещения компонент будут созданы объекты с такими именами: Label1 , StringGrid1 , StringGrid2 , Button1 . В компоненте StringGrid1 выводятся номера переменных величин x в уравнении. В компоненте StringGrid2 выводятся значения решения системы уравнений.

Настраиваем компоненты формы следующим образом:
– в компоненте Label1 свойство Caption = «Решение системы» ;
– в компоненте Button1 свойство Caption = «OK» ;
– в компоненте StringGrid1 свойства FixedCols = 0 и FixedRows = 0 ;
– в компоненте StringGrid2 свойства FixedCols = 0 и FixedRows = 0 .

После размещения и настройки компонент, форма Form4 будет иметь вид, как показано на рисунке 17.

Рис. 17. Форма Form4 после окончательного формирования

6.2. Программирование события клика на кнопке « ОК » формы Form4 .

Листинг обработчика события клика на кнопке « ОК » следующий:

7. Написание программного кода расчета.

7.1. Подключение модулей «Unit2.h», «Unit3.h», «Unit4.h» к модулю «Unit1.h».

Для того, чтобы из главной формы приложения Form1 вызвать второстепенные формы, нужно осуществить их подключения в модуле « Unit1.h «.

Подключение модулей форм Form2 , Form3 , Form4 к форме Form1 осуществляется стандартным для языка C/C++ способом.

Сначала нужно перейти в модуль « Unit1.h «.

Затем после строк

Рубрики

  • C# (160)
    • Практика (42)
      • MS Visual Studio 2010 (34)
      • MS Visual Studio 2017 (7)
      • MS Visual Studio 2019 (10)
    • Теория (118)
  • C++ (139)
    • Практика (31)
      • Borland C++ Builder 2007 (16)
      • MS Visual Studio 2010 (18)
    • Теория (109)
      • Visual C++ (104)
  • Java (96)
    • Практика (6)
    • Теория (90)
  • JavaScript (6)
    • Практика (1)
    • Теория (5)
  • Kotlin (19)
    • Практика (1)
    • Теория (18)
  • Pascal/Delphi (35)
    • Практика (19)
      • Delphi-7 (3)
      • Embarcadero RAD Studio 2010 (17)
    • Теория (16)
  • Python (91)
    • Практика (4)
    • Теория (87)
  • Базы данных (42)
  • Компьютерная графика (3)
  • Курсовые работы (7)
  • Математическое ПО (9)
  • Паттерны (20)

Свежие записи

  • C++. Абстрактный класс. Чисто виртуальная функция 18 февраля, 2022
  • C++. Полиморфизм. Виртуальные функции. Общие понятия 17 февраля, 2022
  • C++. Линейный двухсвязный список. Пример шаблонного класса 16 февраля, 2022
  • C++. Линейный двухсвязный (двунаправленный) список 16 февраля, 2022
  • C++. Кольцевая очередь. Разработка шаблонного класса, реализующего кольцевую очередь 14 февраля, 2022
  • C++. Пример реализации линейного односвязного списка 13 февраля, 2022
  • C++. Линейный односвязный список. Общие сведения 11 февраля, 2022
  • Java. Автоупаковка и автораспаковка в выражениях и операторе switch 9 февраля, 2022
  • C++. Разработка класса реализующего «умный» указатель 7 февраля, 2022
  • Java. Автоупаковка и автораспаковка 5 февраля, 2022

При использовании материалов сайта, ссылка на сайт обязательна.

Программа для решения квадратных уравнений на C++

Довольно часто в пособиях по программированию встречаются задания по нахождению решений каких-нибудь математических уравнений. Задача нахождения корней квадратного уравнения — это довольно тривиальная задача, как и многие другие задачи. Решается она очень просто при помощи листа бумаги и ручки, но решение можно автоматизировать посредством написания прикладной программы и её использования. В этой статье мы напишем такую программу.

Алгоритм решения квадратного уравнения

Многие знают, что уравнение вида ax 2 + bx + c = 0 , где a не равно 0, называют квадратным уравнением.

Существуют различные способы решения квадратных уравнений, но мы рассмотрим решение через дискриминант.

Обозначается дискриминант буквой D . Из школьного курса знаем, что D = b 2 — 4ac .

Существует несколько условий:

  • Если D > 0, то решение имеет 2 различных вещественных корня.
  • Если D = 0, то оба вещественных корня равны.
  • Если D для ввода\вывода в консоли, #include для работы с математическими функциями и область using namespace std;

Просим пользователя ввести значения переменных и сохраняем каждое значение

Проверяем условие, если дискриминант больше или равен 0, то находим корни и выводим

в противном случае выводим сообщение

На этом всё, осталось скомпилировать, запустить и проверить. Запускаем и вводим данные, чтобы D был меньше 0

В этом случае D = 3*3 — 4*2*3 = -15, а это меньше 0, значит ответ программа дала верный.

Ответы тоже верны. Программа работает правильно.

Ниже представлен весь листинг программы для нахождения корней квадратного уравнения на C++

Для вас это может быть интересно:

Программа для решения квадратных уравнений на C++ : 24 комментария

Программировать так сложно…

  1. Nicknixer Автор записи 15.10.2016

Не так сложно, как Вам кажется! Немного литературы, немного практики и смотреть на код решения такой задачи Вы будете по-другому.

Доброго времени суток! Помогите пожалуйста написать программу, которая считает сколько символов в ряде двумерного массива. То есть , например массив 5 на 5, сколько символов в 1 ряде, сколько во 2 и т.д.

Ответил вам по электронной почте

Критику принимаете? 🙂
Программа дырявая как сито.

Если число очень маленькое, но положительное, например 10^(-20) — у вас будет переполнение или типо того. Оператор > проверяет знак числа (это отдельный бит), а оператор == для дробных чисел не имеет смысла, т.к. в младших разрядах числа обычно находится какой-нибудь мусор, который при таком сравнении дает false.

x = ( -1*b + sqrt(b*b — 4*a*c) ) / (2 * a);
x = ( -1*b — sqrt(b*b — 4*a*c) ) / (2 * a);

Тут есть три вопроса:
1) зачем два раза вычислять одно и тоже (я про корень)
2) что делать если мне корни надо как-то использовать, а не просто вывести (тут есть проблема, ведь у меня то один корень — то два). Чтобы лучше понять в чем проблема — попробуйте вынести вычисление корней в отдельную функцию. У вас то вообще, если корень один — то их выведется все равно два, одинаковых.
3) в переменной «a» может быть ноль (или близкое к нулю число) — при этом мы получим деление на ноль (а точнее, переполнение).

Но это ведь еще не все. Что будет если и «a» и «b» равны нулю? — тебе надо рассмотреть два варианта — если c = 0 (условно, близко к нулю), то корней бесконечно много. А если c != 0, то корней нет.

Вообще, эта задача — прекрасный пример для юнит-тестирования и демонстрации принципов разработки через тестирование. Именно его я рассматривал в своей статье по теме тестирования: Юнит-тестирование. Пример. Boost Unit Test. Дело в том, что тут куча вариантов сделать ошибку, при этом их понимание приходит не сразу, т.е. школьник решая задачу напишет по формуле которой учили (ну и вот как у вас). А потом надо разбираться и смотреть как программа может сломаться, при этом разрабатывать тесты.

  1. Николай Сергейчук Автор записи 09.02.2017

Принимаем 🙂
Согласен с вами во всём! Программу можно реализовать намного лучше, используя различные проверки и валидацию входных данных.
Однако, статья рассчитана на аудиторию, которая только начинает познавать программирование или делает лабораторную. 🙂 Чтобы людям легче было понять, реализация данной программы упрощена до невозможности. И, возможно, несправедливо было с моей стороны не предупредить их о возможных ошибках в работе программы, которые могут вскрыться позже, если подать на вход определенные значения.
Кстати, у вас интересная статья по тестированию!

Николай, доброго времени суток! Можете помочь с написанием програмки в с++? 1-1/2!+1/3!-1/4!+1/5! и так до 1/100! ? Чтобы при заднии в строке номера члена последовательности выдавал сумму до него по такой вот формуле? Буду очень благодарен!

Пожалуйста подскажите как ввести экран правильный ответ дискриминанта

Помогите решить в Dev C++
Sqrt x^2+1+sqrt|x|,x0

Здравствуйте, можете помочь с решением биквадратного и триквадратного уравнения?

#include
using namespace std;
int main()
<
/*Решение квадратных уравнений*/
setlocale(0, «»);
cout a;
cout <> b;
cout <> c;
D = pow(b, 2) — 4 * a * c;
cout

ну и? если даже тупо скопировать код и вставить его в cpp.sh , ничего не работает. поебота какая то этот с++

Уважаемая, Лена! Я, надеюсь, вы знаете, что код программы, написанной на языке программирования C++ нельзя тупо вставить в блокнот и сохранить под названием «cpp.sh»? Если не знали, то я, видимо, открыл для вас Америку!

помогите решить. заданы 3 перемены a.b.c записать вы радение на С
< 7a/b+2a, если a=b,
Х= < -34, если a>b,
< 3a/(2b-100), если a>b и а не равно != с

iconcerts где забыл
#include

Я ради интереса написал программу нахождения корней квадратного уравнения на С++, с выводом корней как в десятичном виде, так и в виде простой дроби (причём уже сокращённой), потому что выводя корни в десятичном виде программа их одновременно сокращает и округляет и 1/3 превращается в 0.333333 хотя на самом деле 0.333333 (3), то есть для проверки правильно ли нашёл корни ваш ребёнок, вы с получите что-то типа: X1= 0.285714; X2=0.214286, а на самом деле это будет X1=2/7; X2=3/14, кроме того, если корень из дискриминанта не получается целым числом, вы уже получите двойную неточность: сначала при извлечении корня программа отсечёт значение до 4-6 цифр после запятой с округлением, а затем сделает то же самое при делении числителя на знаменатель. Я и здесь сделал вывод корней в двух значениях: в десятичном и в виде выражения X1= (-b + sqrt(D))/(2*a); X2= (-b — sqrt(D))/(2*a), то есть выводится примерно вот так X1=-5+sqrt(21)/2; X2=-5-sqrt(21)/2 с одновременным разложением дискриминанта под корнем на множители, вынесением этих множителей из-под корня, если они выносятся нацело, их перемножением и дальнейшим сокращением. Вот, например, имеем a=3, b=15, c=3, при решении получаем D=189 программа выдаёт десятичные корни X1= -0.208712 и X2= -4.79129, а в виде выражения имеем: X1= -5+sqrt(21)/2, то есть первоначально получаем: X1= -15+sqrt(189)/6, -> 189=21*9 -> -15+3sqrt(21)/6 далее идёт сокращение на 3 и итог -5+sqrt(21)/2

День добрый.
Недавно начал изучать C++. Решил попробовать написать решение квадратного уравнения именно через оператор вида «условие ? выполняется : не выполняется». Т.е. если условие выполняется, то имеем два решения (даже если d = 0, то тоже должно быть два решения x1 = x2), если d a;
std::cout <> b;
std::cout <> c;
d = pow(b, 2) — 4 * a*c;
d >= 0 ? xfst = ((-b + sqrt(d)) / double(2 * a)) , xscd = ((-b — sqrt(d)) / double(2 * a)) : std::cout

  1. Николай Сергейчук Автор записи 12.02.2020

if (d >= 0) <
xfst = ((-b + sqrt(d)) / double(2 * a));
xscd = ((-b — sqrt(d)) / double(2 * a));
std::cout

Создать программу для решения квадратного уравнения.
У меня не получаеться, но и копифейсом я не хочу заниматься.
Прошу помогите. Заранее спасибо.

Здравствуйте! Как решить эту задачу? Приведенный пример сверху не подходит .

Давайте напишем действительно полезную программу! Вы наверняка уже устали считать дискриминант для квадратных уравнений? Давайте автоматизируем этот процесс.

На вход программы подаются три целых числа — коэффициенты уравнения ax^2 + bx + c = 0ax
2
+bx+c=0

Гарантируется, что a \neq 0a

=0.

Выведите через пробел корни уравнения в порядке убывания и округленные «вниз». Если уравнение имеет корень кратности 2 — выведите одно число. Если у уравнения нет действительных корней — выведите «NO»

Для извлечения корней используйте функцию sqrt. Она содержится в библиотеке сmath ( она уже импортирована в коде ). Для округления воспользуйтесь функцией floor ( из той же библиотеки ).

1 0 -4
Sample Output 1:

2 -2
Sample Input 2:

1 2 2
Sample Output 2:

Пожалуйста подскажите как ввести экран ответ дискриминанта

Пожалуйста подскажите как ввести на екран ответь дискриминанта

Подскажите как правильно решить?
Обчислити z = (x1 + y1) / (x2 + y2), де х1, х2 — коренi рiвняння 2х^2 + x — 4 =0.
y1, y2 — коренi рiвняння ay^2 + 2y — 1 = 0. Усi коренi дiйснi.

using namespace std;

int main() <
double a = 2, b, c = -4;
int x1, x2;
double a1, b1 = 2, c1 = -1;
int y1, y2;
float z;

if((b*b — 4*a*c) >= 0 ) <
x1 = ( -1*b + sqrt(b*b — 4*a*c)) / (2 * a);
cout a1;

if((b1*b1 — 4*a1*c1) >= 0) <
y1 = ( -1*b1 + sqrt(b1*b1 — 4*a1*c1)) / (2 * a1);
cout = 0, y1 >= 0, y2 >= 0) <
z = (x1 + y1)/(x2 +y2);
cout

Добавить комментарий Отменить ответ

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Арифметические и логические операции в языке Си. Системы счисления.

1.1. Арифметические операции.

1.3. Условный оператор и логические операции.

https://www.topcoder.com/tc: SRM 195 (Rounder ), SRM 325 ( SalaryCalculator) .

1. АРИФМЕТИЧЕСКИЕ И ЛОГИЧЕСКИЕ ОПЕРАЦИИ

1.1. АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ

Основными арифметическими операциями являются: сложение (‘+’), вычитание (‘-‘), умножение (‘*’) и деление (‘/’). Порядок выполнения операций в выражении соответствует их приоритету. Операции с одинаковым приоритетом в выражении выполняются слева направо.

Операция деления (‘/’) выполняется согласно типу ее операндов. Если оба операнда являются целыми числами, то деление будет целочисленным. Если один из операндов является вещественным, то и результат будет вещественным. Например, пусть переменная x имеет целочисленный тип, а y действительный тип. Следующая таблица демонстрирует результаты деления для различных операндов:

операция

результат

x = 7 / 3;

y = 7 / 3;

y = 2.000000

y = 7.0 / 3;

y = 2.333333

y = (double)7 / 3;

y = 2.333333

Рассмотрим второй пример. При выполнении операции присваивания значения выражения переменной, сначала вычисляется значение выражения, а потом оно присваивается переменной. Поскольку операнды во втором примере являются целыми, то результатом деления 7 / 3 будет 2. Потом целочисленное значение 2 преобразовывается в действительное значение 2.000000 и присваивается действительной переменной y.

В четвертом примере перед выполнением операции деления происходит преобразование типа делимого из целого в вещественный. Поэтому деление будет производиться без потери точности.

Пример 1.1.1. Найти среднее арифметическое двух целых чисел a и b.

Результатом вычисления выражения (a + b) / 2 может быть действительное число. Поэтому деление должно выполняться с сохранением точности. А для этого один из операндов необходимо преобразовать в действительный тип. Например, результат можно вычислить так: res = (a + b) / 2.0. Программа имеет вид:

Операция вычисления остатка в Си обозначается символом ‘%’. При этом остаток при делении отрицательного числа на положительное является отрицательным (хотя математически остаток при делении на число n должен лежать в промежутке от 0 до n – 1 включительно).

Операция

результат

x = 6 % 3

x = 8 % 3

x = -6 % 3

x = -8 % 3

В языке Си при выполнении операций возможны синтаксические сокращения. Например, вместо i = i + 1 можно писать i++. Если – некоторая бинарная операция, то вместо i = i a можно писать i = a. Примеры сокращений приведены ниже в таблице:

операция

сокращение

i = i + 1

i = i – 1

i = i + a

i = i % a

Упражнение 1.1.1. Имеются одинаковые коробки, каждая из которых вмещает m шаров. Сколько коробок требуется для упаковки n шаров?

Упражнение 1.1.2. Рассмотрим условие предыдущей задачи. Сколько коробок будут полностью заполнены, если всего имеется n шаров, а каждая коробка вмещает m шаров?

Упражнение 1.1.3. Пусть n – трехзначное число. Присвоить переменным a , b , c соответственно количество сотен, десятков и единиц числа n .

1.2. ЛОГИЧЕСКИЕ ОПЕРАЦИИ

Среди логических операций следует выделить операции ‘и’ (‘and’), ‘или’ (‘or‘), отрицание ‘не’ (‘not’) и сложение по модулю 2 (‘xor’). В языке Си логические операции обозначаются следующим образом:

операция

Обозначение в Си

x and y

x or y

not x

x xor y

Таблицы истинности логических операций приведены в следующих таблицах:


источники:

http://nicknixer.ru/programmirovanie/programma-dlya-resheniya-kvadratnyx-uravnenij-na-c/

http://inf5.ru/cpp_lections/lection_2.htm