Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2021, 15:47   #1
Macc_cot
Пользователь
 
Регистрация: 26.03.2021
Сообщений: 18
Вопрос C, вычислить значение выражения с проверкой входных параметров

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

Задачка: Заданные значения целых переменных x, y. Вычислить значение функции 44455.PNG

Код:
#include <stdio.h>
#include <math.h>



int main() {
  //variables declaration
  float x, y, result;

  while (1) { //while true
    printf("Введіть значення x: ");
    scanf("%f", &x);
    printf("Введіть значення y: ");
    scanf("%f", &y);

    if (x/1-pow(y,2)+y/1+pow(x,2) == 0) {
      printf("\nДля заданих значень x та y виконується ділення на 0\n");
      printf("Спробуйте ще раз...\n\n");
      continue;
    }
    else if (x+y/pow(x,2)+x*y-pow(y,2) < 0) {
      printf("\nДля заданих значень x та y виконується добування кореня з від'ємого числа\n");
      printf("Спробуйте ще раз...\n\n");
      continue;
    }
    else {
      break;
    }
  }

  //Output
  result = x+y/pow(x,2)+x*y-pow(y,2)+x/1-pow(y,2)+y/1+pow(x,2);
  printf("\n***Результати***\n");
  printf("Відповідь: ");
  printf("%.2f\n", result);


  return 0;
}
Macc_cot вне форума Ответить с цитированием
Старый 22.04.2021, 17:14   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

Это точно имеет отношение к сетевому программированию ? Первый свой вопрос запулил-то в правильное место.
Не вникая, могу дать пару советов:
1. Анализируй на 0 только знаменатели.
2. Замени pow(y,2) на у*у - тогда не нужны будут логарифмы, и с отрицательными у будет работать нормально без всяких яких.
3. Цикл здесь нужен, как зайцу астролябия.

Последний раз редактировалось digitalis; 22.04.2021 в 17:16.
digitalis вне форума Ответить с цитированием
Старый 22.04.2021, 19:44   #3
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Тему перенес. Два замечания по коду: в условии сказано, что x и y - целые, а в коде объявлены как действительные; у сложения и вычитания приоритет ниже, чем у умножения и деления, поэтому выражение записано неверно (нужны скобки).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 23.04.2021, 09:39   #4
Macc_cot
Пользователь
 
Регистрация: 26.03.2021
Сообщений: 18
По умолчанию Переделаный код.

Я переделал код но у меня теперь в 10 строке там где || пишет требуется выражение.

Код:
#include <stdio.h> //Підключення бібліотек
#include <math.h>
int main (){
int x,y;
printf ("Введіть числа\n"); //Введеня чисел
printf ("Введіть число x: ");
scanf ("%f", &x);
printf ("Введіть число y: ");
scanf ("%f", &y);
if ((x * x + x * y - y * y) == 0) || (1 - y * y == 0)) { //Обчислення
printf("\nДля заданих значень x та y виконується ділення на 0\n");
}
{
else
float result = (x + y) / (x * x + x * y - y * y) + x / (1 - y * y) + y / (1 + x * x);
printf ("Відповідь: %.2f",result);
return 0;
}

Последний раз редактировалось Macc_cot; 23.04.2021 в 10:21.
Macc_cot вне форума Ответить с цитированием
Старый 23.04.2021, 12:58   #5
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,620
По умолчанию

А если так:
Код:
if ((x * x + x * y - y * y) == 0) || ((1 - y * y) == 0))
Совершенно правильно не стал проверять третий знаменатель - он всегда положительный.

Последний раз редактировалось digitalis; 23.04.2021 в 13:01.
digitalis вне форума Ответить с цитированием
Старый 23.04.2021, 17:01   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,341
По умолчанию

Код:
#include <stdio.h> //Підключення бібліотек
#include <math.h>

int main()
{
    int x, y;
    printf("Введіть числа\n"); //Введеня чисел
    printf("Введіть число x: ");
    scanf("%d", &x);
    printf("Введіть число y: ");
    scanf("%d", &y);
    if ((x * x + x * y - y * y == 0) || (1 - y * y == 0))
    {
        printf("\nДля заданих значень x та y виконується ділення на 0\n");
    }
    else
    {
        float result = (x + y) / (x * x + x * y - y * y) + x / (1 - y * y) + y / (1 + x * x);
        printf("Відповідь: %.2f", result);
    }
    return 0;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C#] Вычислить значение выражения Вадим5678 Фриланс 5 14.04.2019 19:07
Дана строка, арифметические выражения вида A x B. Вычислить значение выражения Un1q Паскаль, Turbo Pascal, PascalABC.NET 4 09.12.2013 14:47
Вычислить значение выражения Genius94 Паскаль, Turbo Pascal, PascalABC.NET 5 02.12.2011 00:05
Вычислить значение выражения WhiteKuz Помощь студентам 0 15.12.2009 22:27