Как составить программу для вычисления арифметического выражения

Войти на сайте МЭШ

Войдите с учетной записью ученика или учителя МЭШ,
чтобы получить доступ к личному кабинету.

Оператор присваивания

Оператор присваивания

Мы уже знаем, что задать значение какой-либо переменной можно используя оператор ввода. Используется оператор ввода в тех случаях, когда значение переменной задает пользователь в ходе выполнения программы.

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

Общая форма оператора присваивания имеет такой вид:

<имя переменной> = <выражение>;

Работает оператор присваивания следующим образом:
1. сначала вычисляется выражение, стоящее справа от знака присваивания;
2. полученное значение выражения сохраняется (говорят «присваивается«) в переменной стоящей слева от знака присваивания. При этом старое значение переменной стирается.

Например, если нам необходимо задать переменной c значение в два раза превышающее значение переменной b, то надо будет записать так:

c = 2 * b;

Не забывайте, что в программировании нельзя опускать знаки умножения в выражении. Иначе компьютер не поймет, что вы хотите именно умножить.
Например, нельзя написать просто c = 2b, это будет неверно!

Арифметические выражения

Арифметические выражения

Выражение, стоящее в правой части оператора присваивания, позволяет вычислять значения по различным формулам.
Что может содержать выражение:
• целые и вещественные числа (в вещественных числах целая и дробная часть разделяются точкой, а не запятой, как это принято в математике);
• знаки арифметических действий:  

+ сложение,
- вычитание,
* умножение,
/ деление,
% остаток от деления;

• вызовы стандартных функций (необходимо подключить библиотеку math.h #include<math.h>);

 abs(i) модуль целого числа i  (не используется в Silvertests, следует использовать следующую функцию):

 fabs(x) модуль вещественного числа x;

 sqrt(x) квадратный корень из вещественного числа x;

 pow(x,y) вычисляет x в степени y;

• круглые скобки для изменения порядка действий.

Встроенные функции

Встроенные функции

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

Например, наиболее часто используемые стандартные математические функции и их запись на языке Си и Си++:

 abs(i) модуль целого числа i;

 fabs(x) модуль вещественного числа x;

 sqrt(x) квадратный корень из вещественного числа x;

 pow(x,y) вычисляет x в степени y.

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

#include<math.h>

Запись арифметических операций

Запись арифметических операций

Допустим нам необходимо вычислить выражение, записанное в математическом виде таким  образом:

({ 2 cdot 17,56^2 over {7 cdot 2,47 cdot 0,43}})

Правила записи арифметических выражений

1. Выражение может содержать числа, имена других переменных, знаки операций, круглые скобки, имена функций, арифметические операции и их знаки (+, -, *, /, %).
2. Разделителем целой и дробной части является точка.
3. Выражение записывается в одну в строку (линейная запись выражений), символы последовательно выстраиваются друг за другом, проставляются ВСЕ знаки операций, используются круглые скобки.

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

 

(2*17.56*17.56)/(7*2.47*0.43)

Напишем программу для вычисления значения данного выражения. Для этого определимся с входными и выходными данными.

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

Выходные данные
Программа должна вывести результат заданного арифметического выражения (результат можно сохранить в какую-либо переменную, либо же сразу вывести на экран).

В программе результат сразу будем выводить на экран. Так как у нас имеется дробь, то результатом будет являться вещественное число. 

#include<iostream>

using namespace std;

main()
{ 
  cout << (2*17.56*17.56) / (7*2.47*0.43);
}

Запустите программу на компьютере и убедитесь что она выдает результат равный

82.949843

.

Особенности деления в Си и Си++

Особенности деления в Си и Си++

В языке программирования Си существует две операции деления:
/ деление  и % вычисление остатка от деления.

Надо запомнить!

1) операция вычисления остатка от деления (%) выполняется ТОЛЬКО над целыми числами;
2) результат операции деления (/) зависит от типа операндов.   

Правило

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

Разберем примеры выполнения операций деления:

int i, n;
float x;
i = 7;
x = i / 4;        // x=1, делится целое на целое
x = i / 4.;       // x=1.75, делится целое на дробное    
                  // (4 - без точки воспринимается как целое число, 
                  // 4. (с точкой) - это уже вещественное число!)
x =(float) i / 4; // x=1.75, делится дробное на целое  - 
                  // здесь переменная i преобразовывается в вещественное число 
                  // - это ЯВНОЕ преобразование типа
n = 7. / 4.;      // n=1, результат записывается в целую переменную

Она посимвольно вытаскивает из потока число, пропуская при этом пробелы и учитывая знак числа.
Сначала происходит пропуск пробелов. Потом считывается символ и проверяется, не является ли он знаками «+» или «-«. Если это знак «-«, то в переменной sign сохраняется значение -1, иначе (если это «+») остаётся значение 1. Если это ни «+», ни «-«, то считанный символ (чтобы не потеряться) возвращается обратно в поток ввода. Затем в цикле происходит считывание очередной цифры, и эта цифра «приписывается» к результат (т.е. предыдущее значение результата умножается на 10, а затем к полученному числу прибавляется только что считанная цифра). Затем, если мы считали не цифру — выходим из этого цикла, предварительно затолкав то, что мы только что считали, обратно в поток, чтобы это значение не потерялось. Затем мы снова считываем этот же символ и смотрим, не десятичная ли это точка. Если это так, то мы продолжаем считывание числа. Только теперь мы делим очередную считанную цифру на 10, на 100, на 1000 и т.д. и прибавляем полученное число к нашему результату. Ну а если мы считали не цифру — выходим из этого цикла, предварительно затолкнув считанный ранее символ обратно в поток (опять же, чтобы не потерялся). На этом считывание числа заканчивается. Разберём на примере.

Пусть в потоке ввода у нас -123.456
Считывание будет происходить так:
Сначала считается «-«. В sign сохранится значение -1. result у нас равен 0. Считалась цифра 1. В result записывается 0 * 10 + 1, т.е. 1. Затем считалась 2. В result записывается 1 * 10 + 2 = 12. Затем считалась 3. result = 12 * 10 + 3 = 123. Считалась «.». Поскольку это не цифра, мы эту точку заталкиваем обратно в поток, чтобы считать её в другом месте. Выходим из цикла. Считываем точку. Поскольку это именно точка, заходим во второй цикл. k у нас изначально равна 10. Считываем 4. Получаем, что result равен 123 + 4 / 10 = 123 + 0.4 = 123.4, а k умножается на 10 и становится равна 100. Затем считываем 5. Получаем 123.4 + 5 / 100 = 123.45. k становится равна 1000. Считываем 6. Получаем result = 123.45 + 6 / 1000 = 123.45 + 0.006 = 123.456. Затем у нас в потоке будет неизвестно что (для функции number), поэтому мы выходим из цикла. Поскольку sign у нас равен -1, то функция вернёт значение -1 * 123.456, т.е. -123.456 — именно то, что мы и хотели получить.

Нажмите, чтобы узнать подробности

Организация вычислений.

Вычисление значений арифметического выражения. Использование языка программирования для решения задач.

Цель: Использовать язык программирования Pascal для решения вычислительных задач.

Теоретическая часть

Этапы решения задачи:

  1. Определение исходных данных
  2. Определение результатов.
  3. Составление алгоритма решения задачи
  4. Определение типов данных для переменных, используемых при реализации алгоритма.
  5. Написание программы.
  6. Тестирование программы
  7. Анализ результатов

Тестирование программы — проверка правильности работы программы при разных наборах исходных данных.

В программе можно использовать комментарии — текст, который не анализируется при запуске программы на выполнение. Комментарии разделяют на строчные и блочные. Строчный комментарий обычно комментирует одну строку и начинается с двух бэкслэшей (//). Блочный комментарий способен за комментировать несколько строк одновременно (обозначение { }), обычно используется для записи условия задачи. Текст после символов // и { } считается комментарием и выделяется в зеленый цвет

Пример. Даны переменные a,b,c. Напишите программу для вычисления значения выражения: d=a2+2,5b-3c

Решение:

1.Исходные данные: a,b,c

2. Результат: d

3. Алгоритм решения задачи:

1) Ввод исходных данных.

2) Вычисление значения выражения.

3) Вывод результатов.

4. Описание переменных: все числа вещественные, значит тип real

5. Написание программы:

{ Даны переменные a,b,c. Напишите программу для вычисления значения выражения: d=a2+2,5b-3c }

program z1;

var a,b,c,d: real;

begin

write(‘введите a =’);

read(a);

write(‘введите b =’);

read(b);

write(‘введите c =’);

read(c);

d:=sqr(a)+2.5*b-3*c; //вычисление значения выражения

write(‘d = ‘,d);

end.

Видео Организация вычислений

Практическая работа

Задание 1. Выполнить задание «Раставьте команды в правильном порядке»

Задание 2. Даны x, y, z. Напишите программу для вычисления значения арифметического выражения: a= 3,25x2 + 2,3у + 2z2.

Задание 3. Напишите программу, которая вычисляет периметр треугольника со сторонами a,b,c и выводит результат на экран.

Задание 4. Известно, что а кг яблок стоит b руб. Составьте программу, вычисляющую К кг яблок. Значения переменных а, b, К ввести с клавиатуры.

Математическая Функция функция библиотеки math.lib

Округление к

большему ceil(x)

Округление к

floor(x)

меньшему

Остаток от деле-

fmod(x,y)

ния x на y

Например:

Описание

Функция возвращает действительное значение, соответствующее наименьшему целому числу, которое больше или равно x Функция возвращает действительное значение, соответствующее наибольшему целому числу, которое меньше или равно x Функция возвращает действительное значение, соответствующее остатку от целочисленного деления x на y

double x, y,

// z = e +ex2 +e2 x3

double z = exp(1)+exp(x*x)+exp(2*pow(x,3));

double z1 = pow (x, pow (y, 4+pow (x, 1/4.)));

// z1 = x y

4+4 x

double z2 = fmod( 5, 2);

// или z2 = 5%2;

=> z2 = {5/2} = 1

double z3

= ceil (5.6);

// или z3

= ceil (5.1);

=> res3 = 6

double z4

= ceil (-5.1);

// или z4

= ceil (-5.8);

=> res4 = -5

double z5

= floor (5.6);

// или z5

= floor (5.1);

=> res5 = 5

double z6

= floor (-5.6);

// или z6

= floor (-5.1); => res6 = -6

Написать программу вычисления линейного арифметического выражения

h =

x2 y +ey1

+10 3 x ln(z) .

1

+ x

y

tgz

При x = 2,45; y = – 0,423·10-2;

z = 1,232·103

ответ: h = 6,9465.

Код программы

#include <iostream.h>

#include <math.h>

int main ()

// Начало главной функции

{

double x, y, z, a, b, c, h;

// Объявление переменных

cout << «Vvedite x: «;

// Ввод значений x, y и z

cin >> x;

cout << «Vvedite y: «; cin >> y;

cout << «Vvedite z: «; cin >> z;

a = pow(x, 2*y) + exp(y-1);

// Вычисление выражения

b = 1+x * fabs(y — tan(z));

c = 10 * pow(x, 1/3.) — log(z);

h = a / b + c;

cout << «Result h= » << h << endl;

// Вывод результата

return 0;

// Завершение выполнения программы

}

// Конец главной функции

Замечания:

1.Для ввода значений переменных x, y и z необходимо набрать с клавиатуры:

2.45(x = 2,45)

-0.423e-2 (y = –0,423·10-2) 1.232e3 (z = 1,232·103)

2. В языке С++ при вычислении арифметических выражений происходит автоматическое приведение типов, следовательно, при делении целого значения на целое, результат будет целым числом. Например, при вычислениии “1/3” результат будет равен нулю, так как целая часть вычисленного выражения равна нулю. Для получения результата, имеющего дробную часть, необходимо, чтобы один из операндов имел действительный тип. Для этого можно использовать функцию явного приведения типа, а для констант достаточно поставить точку после числа, например: “1/3.”, или “1./3.”, или “1./3”.

Например:

int s, n;

// явное приведение типа

double sr = static_cast<double> (s) / n;

double y = pow (x, 3/4.);

3

// y= 4 x3 = x4

3. Язык C чувствителен к регистру букв, т.е. прописные и строчные буквы воспринимаются как разные символы.

Например: count, Count, COUNT – разные идентификаторы.

4. При выводе информации для перехода на новую строку применяется манипулятор (функция управления выводом) endl или n’, для выравнивания выводимой информации – t(вставляет символ табуляции).

5. Главная функция int main () автоматически вызывается при запуске программы и возвращает операционной системе по окончании значение 0 (return 0;).

Для компиляции, компоновки и запуска программы на выполнение используются следующие пункты подменю Build:

Compile (Ctrl+F7) компиляция выбранного файла. Результаты компиляции выводятся в окно Output.

Build (F7) компоновка проекта. Компилируются все файлы, в которых произошли изменения с момента последней компоновки.

9

Оператор присваивания

Оператор присваивания является одним из основных операторов любого языка программирования.

Оператор присваивания предназначен для присваивания переменной значения выражения.

Формат оператора присваивания:

 <переменная>:=<выражение> 

В операторе присваивания слева от знака присваивания «:=» записывается переменная, а справа – выражение, численное значение которого присваивается этой переменной.

Выполнение оператора присваивания приведет к вычислению выражения и присваиванию значения выражения переменной.

Обязательным является требование, чтобы выражение и переменная были совместимы по присваиванию.

Например, оператор присваивания

  y:=x+h/2;  

означает, что переменной y присваивается число, полученное в результате вычисления выражения x+h/2 при известных числовых значениях переменных x и h .

Следует обратить внимание, что всем переменным в правой части оператора присваивания ранее уже были присвоены значения предыдущими операторами, например,

  x:=0; h:=1;  

Рассмотрим пример

  t:=t+1;  

Здесь переменной t присваивается значение, которое до этого момента имела переменная t, плюс 1. Если переменная t имела до выполнения этого оператора значение равное 7, то после исполнения оператора t:=t+1 значение переменной будет равно 8.

Арифметические выражения

Арифметические выражения строятся из арифметических констант, переменных, функций и операций над ними.

Правила записи и смысл арифметических выражений в Паскале почти не отличаются от обычной математической записи.

В арифметических выражениях используются следующие операции и соответствующие знаки:

Операция Знак операции
Сложение +
Вычитание
Умножение *
Деление /
Деление целых чисел div
Остаток от деления целых чисел mod

Операции +, -, *, / имеют очевидный смысл. Результатом операции div будет целое значение, равное целой части результата деления первого числа на второе. Результатом операции mod будет целое значение, равное остатку от деления (но не дробной части).

Примеры арифметических операций:

 Var

    a,b,c:integer;

 Begin

    a:=10; b:=3;

    c:=a mod b; {с равно 1 – равно остатку, но не дробной части}

    c:= a div b; {с равно 3 – равно целой части }

    b:=a+b; {b равно числу 13}

 End. 

 Арифметические операции выполняются в порядке старшинства: сначала вычисление функции, затем умножение, деление, сложение, вычитание.

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

Рассмотрим арифметическое выражение

 -a*x*x+b/x*c+y-c*n/(a-b) 

В таблице приведен порядок выполнения операций:  

Операция Операция
1 a*x 7 -a*x*x+b/x*c+y
2 a*x*x 8 c*n
3 -a*x*x 9 (a-b)
4 b/x 10 c*n/(a-b)
5 b/x*c 11 -a*x*x+b/x*c+y-c*n/(a-b)
6 -a*x*x+b/x*c

 ЗАМЕЧАНИЕ. Все данные, входящие в арифметическое выражение, должны быть одного типа.

Исключение составляют только константы и переменные целого типа (integer), которые разрешается использовать в выражениях вещественного типа (real). Если в выражении используются данные целого и вещественного типа, результат операции будет вещественного типа. В других случаях необходимо выполнять преобразование данных.

Пример. Пусть переменные x и y описаны следующим образом:

 var

 x:integer;

 y:real;

Рассмотрим оператор y:= x+2, в котором используются переменные целого, вещественного типов и константа. Результат операции будет вещественного типа, поэтому оператор  y:=x+2;  является допустимым, хотя справа от присваивания стоит целая переменная и константа;

Следующие операторы являются ошибочными:

 x:=y+2 {несовместимость типов: переменной целого типа x присваивается значение переменной вещественного типа y} 

 x:=y/x {несовместимость типов: операция деления всегда возвращает значение вещественного типа} 

Для обеспечения совместимости типов необходимо выполнять преобразования данных. Для преобразования Real в Integer имеются две функции:

 Round() – округляет Real до ближайшего целого;

 Trunc() – усекает Real путем отбрасывания дробной части.

Правильная запись рассматриваемых операторов: x:=y+2; и x:=y/x; имеет вид:


 x:=round(y)+2;

 x:=round(y/x);

 x:=trunc(y)+2;

 x:=trunc(y/x);

Программируя арифметические выражения, нужно иметь в виду следующие основные правила:

  • Два знака арифметических операций нельзя писать рядом. Например, следующие записи будут неправильными:
     +–a –b — следует писать +(–a) –b 
     a*–b — следует писать a*(–b) 
  • Знак умножения опускать нельзя, например, при записи произведения: a*b и 2*n, запись ab и 2n будет неправильной, так как ab воспринимается как идентификатор, а запись 2n не является идентификатором, потому что начинается с цифры.
  • В арифметических выражениях допускается использовать только круглые скобки. Количество открывающих круглых скобок должно соответствовать количеству закрывающих круглых скобок. Применение фигурных и квадратных скобок запрещается, так как они имеют особое значение.
  • Все данные, входящие в выражения должны быть одного типа. Если в выражении используются данные целого и вещественного типа, результат операции будет вещественного типа.

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

Функция Назначение
Abs(x) Абсолютное значение аргумента x
Sqr(x) Вычисляет квадрат аргумента x
Sqrt(x) Вычисляет квадратный корень аргумента x
Exp(x) Возвращает экспоненту аргумента ex (степень числа e=2,72)
Ln(x) Вычисляет натуральный логарифм аргумента x
Pi Значение числа p=3.1415926
Frac(x) Дробная часть числа x
Int(x) Целая часть числа x
Sin(x) Синус аргумента x (угол в радианах)
Cos(x) Косинус аргумента x (угол в радианах)
Arctan(x) Арктангенс аргумента x (угол в радианах)
Randomize Инициализация генератора случайных чисел
Random(x) Если x отсутствует, то значением функции является случайное число типа real из диапазона 0<=…<Если задается значение x, то значением функции будет случайное число из диапазона 0<   <x.

В языке Турбо Паскаль нет операции возведения в степень. При необходимости ее использования можно воспользоваться следующей зависимостью:

 x n = exp(n*ln(x)); 

Примеры записи простых арифметических выражений и операторов присваивания приведены в таблице: 

Обычная математическая запись Запись на Турбо Паскале
 formula1   x/(y*z) или x/y/z 
 formula2   y*x/z 
 formula3   (x+a)/(y+b) 
 formula4   1/(m*sqrt(a+b)) 
 formula5   x1:=(-b+sqrt(b*b-4*a*c))/(2*a) 
 formula6   y:=sin(x) 
 formula7   sqr((x+y-z)/2/a) 

Типичные ошибки в записи выражений:

  4x+1 Пропущен знак умножения между 4 и x 

  a+sinx Аргумент x функции sinx не заключен в скобки

  ((a+b)/sqr(c*7) не хватает закрывающей скобки

ЗАДАЧА2. Вычислить корни квадратного уравнения

 a∙x 2 +b∙x + c =0 

по известным формулам 

Формула вычисления корней квадратного уравнения  

Предположим, что дискриминант этого уравнения больше нуля и уравнение имеет только действительные корни. Программа нахождения корней уравнения приведена ниже.

 
 Program a2;

 Var {раздел объявления переменных}

    X1:real; {1-й корень уравнения}

    X2:real; {2-й корень уравнения}

    D:integer; {дискриминант уравнения}

    A:integer; {коэффициент a}

    B:integer; {коэффициент b}

    C:integer; {коэффициент c}

 Begin

    Write(‘Введите коэффициенты a,b,c:’);

    Readln(a,b,c); {чтение с клавиатуры коэффициентов}

    D:=sqrt(b*b-4*a*c); {вычисление дискриминанта}

    X1:=(-b+d)/(2*a); {вычисление 1-го корня уравнения}

   X2:=(-b-d)/(2*a); {вычисление 2-го корня уравнения}

   Write(‘Корни уравнения равны: ’, x1:8:2, x2:8:2);

 End.

 Результаты работы программы:

 Введите коэффициенты a,b,c:2 –6 4 

 Корни уравнения равны: 2.00 1.00 

Понравилась статья? Поделить с друзьями:
  • Как исправить ламинат не разбирая поднялся
  • Как найти скрипты на компьютере
  • Как быстро найти мужа молитвы
  • Как составить рекламу образец 7 класс
  • Как детям исправить свое поведение