3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 41
1

Вывести на экран таблицу значений функции

16.10.2012, 17:47. Показов 5781. Ответов 5
Метки нет (Все метки)

Вывести на экран таблицу 1/sin (x), 1/cos (x), 1 / (sin (x) · cos (x)) (по горизонтали), при изменении аргумента от 0 ° до 180 ° с шагом 10 ° (вывода по вертикали). В программе предусмотреть невозможность деления на 0.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.10.2012, 17:47
Ответы с готовыми решениями:

Вывести на экран таблицу значений функции
Вывести на экран таблицу значений функции f = (tg(x) + z) от двух переменных: z и x. z принимает...

Вывести на экран таблицу значений функции y=(11+9x-3x^2-x^3)/8
заранее благодарен Написать программу, которая выводит таблицу значений функции y=(11+9x-3x2-x3)/8...

Вывести на экран таблицу значений функции
Вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x) для x, изменяющихся от xn...

Вывести на экран таблицу значений функции
Вывести на экран таблицу значений функции y=sqrt(a*sqr(x)+b*x) a,b-вводятся с клавиатуры x=...

5
181 / 179 / 23
Регистрация: 29.08.2012
Сообщений: 489
16.10.2012, 17:54 2
Ну и используй оператор for отсчитывающий аргумент от 0 до 180 с шагом 10. В чём проблема-то?
0
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 41
16.10.2012, 18:42  [ТС] 3
в том что я новичек в этом...мне сложно немного....прошу код програмы что бы так сказать наглядно разобратся...
0
181 / 179 / 23
Регистрация: 29.08.2012
Сообщений: 489
16.10.2012, 18:58 4
Наглядно разобраться можно по чужим программам которые уже что-то делают, по рукводствам, учебникам и так далее. Я бы начал с ознакомления с оператором for.
Твоя программа условно состоит из нескольких частей которые надо усвоить чтобы её написать - сам оператор for, операторы вычисления тригонометрических функций, преобразование угла в радианы (по-моему стандартно в Паскале именно с радианами работают триг. функции) и оператор вывода результатов. Чтобы что-то сделать надо начать - это закон! Начни что-то набрасывать на бумаге или в компе и дело пойдёт само собой. Уже дал наводку, что надо использовать оператор for который наращивает угол от 0 до 180 с шагом 30. Внутри for должно находится: преобразование угла в радианы, вычисление названных в задании функций и строка вывода результатов в элементарном виде - просто writeln с перечислением вычисленных функций.
Если за тебя будут решать, то ты никогда ничему не научишься.
0
3 / 3 / 0
Регистрация: 25.09.2012
Сообщений: 41
16.10.2012, 19:40  [ТС] 5
ты прав не буду спорить...да у меня есть умения новичка...просто надо срочно вот и все..наброски питаюсь делать...ну ладно..может и получится...
0
181 / 179 / 23
Регистрация: 29.08.2012
Сообщений: 489
18.10.2012, 02:03 6
Цитата Сообщение от MrVector Посмотреть сообщение
..может и получится...
Обязательно получится.
Если задание непременно надо выполнить через оператор for, то тогда примерно так (фрагмент программы, хотя уже дописал до полноценной программы):

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program trig_func_tabl;
 
var
  zn1, zn2, f1, f2, f3, x, k_rad, x_grad: real;
  ind, n, ang, pred_ang : integer;
const zero = 1e-10;            // Величина меньше которой будем считать число нулём
const line = '+------+------------+------------+-------------------+';
begin
  ang := 15;                   // Величина угла в гардусах - шаг изменения аргумента (целое число)
  pred_ang := 360;             // Предельная величина угла в градусах (целое число)
  n := trunc (pred_ang / ang); // Определяем количество секторов умещается в pred_ang градусов
  k_rad := ang * pi / 180;     // Вычисляем часть угла в радианах, соответсвующую ang градусам
  writeln(line);               // Печатаем линию
  writeln('| Угол ', '|   1/sin(x) ', // Печатаем шапку таблицы
          '|   1/cos(x) ', '| 1/(sin(x)*cos(x)) |');
  writeln(line);                    // Печатаем линию
  for ind := 0 to n do              // Крутим цикл от нуля до n
    begin
      x := ind * k_rad;             // Определяем значение угла на данном цикле в радианах
      zn1 := sin(x);                // Вычисляем знаменатель одной функции
      zn2 := cos(x);                // Вычисляем знаменатель второй функции
      if abs(zn1) < zero then       // Проверяем насколько мала величина знаменателя zn1
        f1 := real.PositiveInfinity // Если мала, то присваиваем функции статус Infinity
        else f1 := 1 / zn1;         // Если не мала, то вычисляем значение функции
      if abs(zn2) < zero then       // Проверяем насколько мала величина знаменателя zn2
        f2 := real.PositiveInfinity // Если мала, то присваиваем функции статус Infinity
        else f2 := 1 / zn2;         // Если не мала, то вычисляем значение функции
      f3 := f1 * f2;                // Вычисляем третью функцию
      x_grad := ang * x / k_rad;    // Аргумент (угол) в градусной мере для вывода в таблицу
      writeln('|  ', x_grad:3,      // Печатаем форматированные строки таблицы
              ' | ', f1:10:6,  ' | ',f2:10:6, ' | ', ' ':3, f3:10:6, ' ':5, '|');
    end;                            // Окончание цикла
    writeln(line);                  // Печатаем линию
end.                                // Окончание программы
Паскаль давно в глаза не видел, так что в мелочах могу ошибаться. Общий принцип передал.
Добавь отработку ситуации когда деление на ноль - сейчас просто тупо пропускается этот шаг и значения переменных остаются прежними. Надо решить каким образом обозначать эту коллизию - деление на ноль. То есть как это показать в таблице на месте той функции, которая не может быть вычислена.

Форматирование при выводе ":21:3" связано с тем, что в некоторых точках функция имеет очень большое значение и столбцы сбиваются. Если это не проблема, то можно уменьшить, скажем до ":5:3" или другое удобное соотношение.
Разобрался почему такие большие значения. Они возникают в результате ограниченной точности вещественных чисел - 15-16 значащих чисел. Поэтому значения функции не улетает в бесконечность при делении единицы. Как с этим быть - решать тебе. Есть несколько вариантов. Формально программа выполняет вычисления и отработку ситуации когда zn1 или zn2 равны нулю, но эта ситуация никогда не возникнет ввиду низкой точности вычислений.
Можно ловить такие значения и считать это случаем когда функция равно нулю, заменяя значение функции нулём.
Разобрался с этим Вашим Pascal ABC. Улучшил программу до финального состояния - можно показывать профессору Обработка коллизий есть и адкекватный вывод в таблицу.
Попозже выложу ещё красивше вариант.
А вот и новый вариант - можно задавать любой предел вычислений (pred_ang) и шаг изменения угла (ang), а также табличка сделана красивее, чем была - настоящая таблица, не придраться
Оставлю пока Pascal ABC - не буду сносить, мало ли что...
Как там у тебя дела?
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.10.2012, 02:03
Помогаю со студенческими работами здесь

Вывести на экран таблицу значений функции y = -2,4 x2 +5 x-3 в диапазоне от -2 до 2 с шагом 0,5
Вывести на экран таблицу значений функции y = -2,4 x2 +5 x-3 в диапазоне от -2 до 2 с шагом 0,5. ...

Вывести на экран таблицу значений функции y=16x^3-36x^2+24x-9
заранее благодарен Написать программу, которая выводит таблицу значений функции y=16x3-36x2+24x-9...

Вывести на экран таблицу значений синуса
Вывести на экран таблицу значений sinX для аргумента, меняющегося от 0 до 30 с шагом 3. прогу...

Вывести на экран таблицу значений аргумента
Вывести на экран таблицу значений аргумента x и функции f(x)=sin^2x-cos2x на отрезке с шагом h. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru