Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32

Циклы. Таблица значений с границами изменения и шагом

30.09.2019, 22:33. Показов 3630. Ответов 14

Студворк — интернет-сервис помощи студентам
Напишите код,пожалуйста. Если можно с пояснениями
Миниатюры
Циклы. Таблица значений с границами изменения и шагом  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.09.2019, 22:33
Ответы с готовыми решениями:

Таблица значений квадратного корня на интервале [2;4] с шагом 0.1
Задали написать программу, которая выводит таблицу значений квадратного корня на интервале с шагом 0.1. В программировании вообще не...

Циклы. Repeat.until таблица значений
С помощью операторов цикла repeat ... until составьте программу определения значений функции для каждого из действительных значений x и y...

Рассчитать n значений функции с равномерным шагом изменения аргумента
1. Исходные данные для проектирования Для поставленной задачи: - разработать математический аппарат, дать описание используемого метода...

14
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
01.10.2019, 05:25
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
35
36
37
38
program Project1;
uses
  Math;
var
  y: real;  // Переменная для хранения значения результата вычислений.
  x: real;  // Переменная для хранения значения аргумента.
  step: real;  //  Переменная для хранения значения шага вычислений.
  a: real;  //  Переменная для хранения значения левой границы вычислений.
  b: real;  //  Переменная для хранения значения правой границы вычислений.
  y1,y2: real; // Промежуточные переменные для вычисления выражения.
  flagError: boolean; // Логическая переменная для правильного вывода результата.
begin
 
  a:= 0.5;  // Значение левой границы вычислений.
  b:= 2;    // Значение правой границы вычислений.
  step:= 0.3; //  Значение шага вычислений.
  x:= a;  // Присвоение аргументу значения левой границы.
  writeln('x = ':2,'y = ':8); // Вывод оглавляющей шапки на экран.
  while x < b + step do  // Цикл с условием выхода.
  begin
    flagError:= false;
    y1:= tan(x+7) + ln(x);
    if  (y1 <> 0) then  // Проверка деления на нуль.
      y2:= (x*x*x + cos(5*x))/(tan(x+7) + ln(x))
    else
      flagError:= true;
    if y2 > 0 then    // Проверка положительного значения.
      y:= sqrt(y2) // Вычисление значения функции.
    else
      flagError:= true;
    if flagError then
      writeln(x:3:1,'  Функция при данном значении аргумента не определена.')
    else
      writeln(x:3:1, y:8:4);  // Вывод результатов на экран.
    x:= x + step; // Приращение аргумента на величину шага.
  end;
  Readln;
end.
0
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32
01.10.2019, 12:13  [ТС]
Цитата Сообщение от ValentinNemo Посмотреть сообщение
program Project1;
uses
* Math;
Извините,что я не предупредила,что на Паскаль АВС...
Заменяю тангенс на син/кос,но не идет программа(((

Добавлено через 50 минут
Все,вроде верно все))))))Туплю...

Вы можете мне пояснить
Цитата Сообщение от ValentinNemo Посмотреть сообщение
flagError
Что это за функция? я совсем новичок((((
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 12:34
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
const a=0.5; b=2; h=0.3; eps=1e-19;
var x, y: Real; bErr: Boolean;
begin
  WriteLn('x':8,'y':8);
  x:=a;
  while x<=b do begin
    Write(x:8:1);
    y:=Cos(x+7);
    bErr:=Abs(y)<eps;
    if not bErr then begin
      y:=Sin(x+7)/y+Ln(x);
      bErr:=Abs(y)<eps;
    end;
    if not bErr then begin
      y:=(Sqr(x)*x+Cos(5*x))/y;
      bErr:=y<0;
    end;
    if not bErr then begin
      y:=SqRt(y);
      WriteLn(y:8:4);
    end else WriteLn('n/a':8);
    x:=x+h;
  end;
end.
Добавлено через 1 минуту
Цитата Сообщение от Tatci Посмотреть сообщение
Что это за функция?
Это не функция, это логическая переменная:
Pascal
1
2
var
  flagError: boolean; // Логическая переменная для правильного вывода результата.
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
01.10.2019, 12:35
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
35
36
37
38
39
40
program Project1;
 
var
  y: real;  // Переменная для хранения значения результата вычислений.
  x: real;  // Переменная для хранения значения аргумента.
  step: real;  //  Переменная для хранения значения шага вычислений.
  a: real;  //  Переменная для хранения значения левой границы вычислений.
  b: real;  //  Переменная для хранения значения правой границы вычислений.
  y1,y2: real; // Промежуточные переменные для вычисления выражения.
  flagError: boolean; // Логическая переменная для правильного вывода результата.
begin
 
  a:= 0.5;  // Значение левой границы вычислений.
  b:= 2;    // Значение правой границы вычислений.
  step:= 0.3; //  Значение шага вычислений.
  x:= a;  // Присвоение аргументу значения левой границы.
  writeln('x = ':2,'y = ':8); // Вывод оглавляющей шапки на экран.
  while x < b + step do  // Цикл с условием выхода.
  begin
    flagError:= false;
    if cos(x+7) <> 0 then
      y1:= sin(x+7)/cos(x+7) + ln(x)
    else
      flagError:= true;
    if  (y1 <> 0) then  // Проверка деления на нуль.
      y2:= (x*x*x + cos(5*x))/y1
    else
      flagError:= true;
    if y2 > 0 then    // Проверка положительного значения.
      y:= sqrt(y2) // Вычисление значения функции.
    else
      flagError:= true;
    if flagError then
      writeln(x:3:1,'  Функция при данном значении аргумента не определена.')
    else
      writeln(x:3:1, y:8:4);  // Вывод результатов на экран.
    x:= x + step; // Приращение аргумента на величину шага.
  end;
  Readln;
end.
На участке от 0.5 до 1.7 функция не определена.
x = 2.0 y = 5.4529
x = 2.3 y = 4.2286
Странная табуляция получилась. Может я в чем то ошибся.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 12:54
Цитата Сообщение от ValentinNemo Посмотреть сообщение
x = 2.3 y = 4.2286
Это лишнее значение, в условии до 2.

Добавлено через 1 минуту
Code
1
2
3
4
5
6
7
       x       y
     0.5     n/a
     0.8     n/a
     1.1     n/a
     1.4     n/a
     1.7     n/a
     2.0  5.4529
Добавлено через 4 минуты
Также, чтобы из-за накапливающихся погрешностей не отсечь последнее значение, имеет смысл подстраховаться:
Pascal
6
  while x<b+h/2 do begin
Добавлено через 11 минут
И еще. Хотя для пределов из задания не требуется, но если писать более универсально, можно было бы проверить и аргумент натурального логарифма:
Pascal
9
    bErr:=(Abs(y)<eps) and (x>0);
0
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32
01.10.2019, 16:28  [ТС]
Цитата Сообщение от bormant Посмотреть сообщение
И еще. Хотя для пределов из задания не требуется, но если писать более универсально, можно было бы проверить и аргумент натурального логарифма:
Родные мои,спасибо вам за ответы,но никак не могу уловить полный алгоритм))))
И нет нюансов в том,что мне нужно на Паскаль АВС?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 17:08
Tatci,
спрашивайте, что непонятно.

Общая идея проста.
Поскольку tg(alpha) = sin(alpha) / cos(alpha), а на ноль делить нельзя, посчитаем косинус x+7 и проверим, не ноль ли там.
Поскольку ошибку деления на 0 при дискретном исчислении можно схлопотать при делении на сильно малое, близкое к 0, примем за 0 все, что по модулю меньше eps.
Если получили «ноль» взводим флажок bErr, говорящий об ошибке и о том, что дальше считать бесполезно.
Если bErr не взведен, продолжаем — находим знаменатель и аналогично пооверяем его на близость к нулю.
Если все нормально, находим подкоренное выражение и проверяем его на неотрицательность.
Если все нормально, считаем итоговый результат, выводим; иначе выводим «n/a» — нельзя вычислить.

Все это делаем в цикле, увеличивая x на шаг h, пока не выйдем за последнее значение.
0
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32
01.10.2019, 17:29  [ТС]
Общий математический смысл я поняла, вот только никак не могу вьехать в логическую переменную... Для чего она и что будет, если ее убрать?

И у меня цикл не прекращается. Нужно останавливать.
Миниатюры
Циклы. Таблица значений с границами изменения и шагом   Циклы. Таблица значений с границами изменения и шагом  
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 18:10
Цитата Сообщение от Tatci Посмотреть сообщение
никак не могу вьехать в логическую переменную... Для чего она и что будет, если ее убрать?
Она нужна, чтобы обнаружить ситуацию, когда какая-то часть выражение не имеет смысла -- деление на 0, извлечение корня из отрицательного числа (строго говоря здесь-то можно использовать комплексное исчисление, но по заданию этого не видно, а в действительных числах оно невычислимо). И если такое условие обнаружено, то и выражение в целом не имеет смысла.

Цитата Сообщение от Tatci Посмотреть сообщение
у меня цикл не прекращается. Нужно останавливать.
Там лишняя итерация зачем-то есть. Исправьте строку 19 (или 18 в #5) на
Pascal
18
  while x < b + step/2 do
Или возьмите мой код из сообщения #4.

Цитата Сообщение от Tatci Посмотреть сообщение
что будет, если ее убрать?
Примерно такое будет:
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 18:42
Лучший ответ Сообщение было отмечено Tatci как решение

Решение

Цитата Сообщение от Tatci Посмотреть сообщение
что будет, если ее убрать?
На самом деле, по большому счету, bErr использована только для того, чтобы иметь возможность написать WriteLn('n/a') только в одном месте, а не при каждом обнаружении недопустимого подвыражения, а также понизить уровень вложенности условных операторов. Сравните:
Pascal
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    Write(x:8:1);
    y:=Cos(x+7);
    if Abs(y)>=eps then
    begin
      y:=Sin(x+7)/y+Ln(x);
      if Abs(y)>=eps then
      begin
        y:=(Sqr(x)*x+Cos(5*x))/y;
        if y>=0 then
          WriteLn(SqRt(y):8:4)
        else WriteLn('n/a':8);
      end
      else WriteLn('n/a':8);
    end
    else WriteLn('n/a':8);
0
2374 / 776 / 561
Регистрация: 15.01.2019
Сообщений: 2,394
01.10.2019, 21:54
Лучший ответ Сообщение было отмечено Tatci как решение

Решение

Программа с пояснениями за авторством bormant, без вспомогательных логических переменных.
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
35
36
program Project1;
const
  a = 0.5; // Левая граница вычислений.
  b = 2;   //  Правая граница вычислений.
  h = 0.3;  //  Шаг вычислений.
  eps = 1e-19; //  Точность вычислений.
var
  x: real; // Переменная для хранения значения аргумента функции.
  y: real; // Переменная для хранения значения результата вычислений.
begin
  WriteLn('x':8,'y':8);  // Вывод в консоль шапки таблицы.
  x:= a;                 // Начальное значение аргумента.
  while x <= b do   // Цикл с условием выхода.
  begin
    Write(x:8:1);         // Вывод в консоль значения аргумента.
    y:= Cos(x+7);
    if Abs(y) >= eps then     // Проверка на нулевое значение
    begin                     // (если значение выражения меньше значения точности, значит это нуль)
      y:= Sin(x+7)/y+Ln(x);
      if Abs(y) >= eps then    // Проверка на нулевое значение
      begin
        y:= (Sqr(x)*x+Cos(5*x))/y;
        if y >= 0 then         // Проверка на положительное значение
          WriteLn(SqRt(y):8:4)    //  Вычисление функции и вывод значения в консоль.
        else
          WriteLn('n/a':8);    // Сообщение о неопределимости функции.
      end
      else
        WriteLn('n/a':8);      // Сообщение о неопределимости функции.
    end
    else
      WriteLn('n/a':8);        // Сообщение о неопределимости функции.
     x:= x + h;
  end;
  Readln;
end.
0
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32
01.10.2019, 21:55  [ТС]
Цитата Сообщение от bormant Посмотреть сообщение
const a=0.5; b=2; h=0.3; eps=1e-19;
что такое 1е-19??????

Блииин,какая я
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,159
Записей в блоге: 1
01.10.2019, 22:26
Цитата Сообщение от Tatci Посмотреть сообщение
eps=1e-19
1e-19 = 1 * 10-19 -- та самая условно малая величина
Цитата Сообщение от bormant Посмотреть сообщение
Поскольку ошибку деления на 0 при дискретном исчислении можно схлопотать при делении на сильно малое, близкое к 0, примем за 0 все, что по модулю меньше eps.
В Паскале для записи чисел в экспоненциальной форме вида m*10n принята форма men, регистр e (E) значения не имеет.

Добавлено через 5 минут
Цитата Сообщение от Tatci Посмотреть сообщение
Блииин,какая я
Дорогу осилит идущий.
0
0 / 0 / 0
Регистрация: 30.09.2019
Сообщений: 32
01.10.2019, 23:09  [ТС]
Цитата Сообщение от bormant Посмотреть сообщение
Дорогу осилит идущий
спасибо за разъяснения. Буду учиться и разбираться потихоньку. Главное это потом объяснить преподавателю)))))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2019, 23:09
Помогаю со студенческими работами здесь

Таблица значений функции с шагом - с чего начать решение задачи?
С чего начать решение задачи?

Таблица значений функции с маленьким шагом (не дает чистое значение нуля)
Задача построить таблицу значений функции. Значение начального и конечного аргумента, шага изменения задается пользователем. Задаю...

Найти сумму значений функции, указанной в условии, на отрезке изменения аргумента [a, b] (a<b) с шагом d
Пожалуйсто подскажите как написать код Мне нужно сделать программу в которую водится интервал от 1 числа до 2 числа и шаг числа То...

Составить схему программы и программу для заполнения таблицы значений функции y = f(x) на отрезке с указанным шагом изменения аргумента
помоги, прошу кто может я без понятия заранее спасибо Составить схему программы и программу для заполнения таблицы значений...

Составить схему программы и программу для заполнения таблицы значений функции y = f(x) на отрезке с указанным шагом изменения аргумента
Составить схему программы и программу для заполнения таблицы значений функции y = f(x) на отрезке с указанным шагом изменения аргумента....


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru