Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 11.05.2016, 20:50   #11 (permalink)
Vera101
Member
 
Регистрация: 11.05.2016
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я кинула, перед вашим сообщением. то что кидала
Vera101 вне форума   Ответить с цитированием

Старый 11.05.2016, 20:50
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

По этим ссылкам содержится нужная вам информация

Проверка
Паскаль. Проверка системы уравнений на совместимость

Старый 11.05.2016, 20:53   #12 (permalink)
Vera101
Member
 
Регистрация: 11.05.2016
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Перед вашим сообщением то. что было кинуто в начале. А предыдущие да, из других задач.
Vera101 вне форума   Ответить с цитированием
Старый 11.05.2016, 21:07   #13 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ага, ну вот это уже дело другое.
Что же, разберем Вашу программу.
1. Величины e и x лучше задать в виде констант. По крайней мере, е.
2. Если Вы в программе задаёте в явном виде х=0.4, то зачем же вы ставите экранное чтение? Абсолютно ни к чему.
3. Вводить отдельный идентификатор для х² не нужно. Можно написать х*х или Sqr(x) - как больше нравится.
4. Формула для вычисления знаменателей членов последовательности неверна.
С учетом всего вышесказанного, рабочий вариант программы можно организовать, например, так:
Код:
const
 e=0.001;
 x=0.4;
var
 n,A:real;
begin
 A:=x;
 N:=1;
 writeln('(a)= ', A:0:5);
 While (A>e) do
  begin
   N:=N+2;
   A:=A*x*x/(N*(N-1));
   writeln('(a)= ', A:0:5);
  end;
 Readln
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.05.2016, 21:14   #14 (permalink)
Vera101
Member
 
Регистрация: 11.05.2016
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Большое спасибо. А с min, max что не так?
Vera101 вне форума   Ответить с цитированием
Старый 11.05.2016, 21:34   #15 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Vera101 Посмотреть сообщение
Большое спасибо. А с min, max что не так?
Теперь по второй программе.
В принципе как таковых ошибок там нет, есть лишь... как бы это сказать... неряшливости и нелепости.
1. Функция Max2 несколько усложнена, можно проще.
2. Расставляя скобки, не следует руководствоваться принципом "чем больше, тем лучше" - просто сами запутаетесь. Ставьте их там, где они необходимы, и лишь иногда - для повышения читабельности текста программы.
3. Выражение Ln(exp(Q)) - бессмысленно, ибо это всегда просто тождественное Q.
4. Поскольку у Вас в программе фигурирует Ln(xy), то хорошим стилем будет поставить защиту от отрицательных и нулевых значений ху при вводе. Напомню, что логарифм бывает ТОЛЬКО от строго положительных величин.
5. Тут не Ваша вина, а скорее некорректность формулировки задания: "выпали" значения ху=2 и ху=3 (точно). Поэтому среднее неравенство я сделал нестрогим.

Итого:
Код:
var
 x,a,y,c,d:Real;

function max2(x1,x2:Real):Real;
begin
 if x1>x2 then max2:=x1 else max2:=x2;
end;

function min3(x1,x2,x3:Real):Real;
var min:Real;
begin
 min:=x1;
 if min<x2 then min:=x2;
 if min<x3 then min:=x3;
 min3:=min;
end;

begin
 Writeln ('vvod x,y,c,d');
 Readln (x,y,c,d);
 if(x*y>3) then
  a:=x*x*x+(c*d)*ln(x*y)/ln(10)
 else
 if (x*y>=2) and (x*y<=3) then
  a:=min3(x,y,max2(c*x,d*y))*3
 else
  a:=exp((c*d)*ln(2))-x;
 Writeln ('a= ', a:0:5);
 Readln;
end.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 11.05.2016, 21:43   #16 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Так, стоп! Во втором ветвлении множитель 3 забыли!!! И Вы, и я. Исправил.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.05.2016, 21:50   #17 (permalink)
Vera101
Member
 
Регистрация: 11.05.2016
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Мне вот не понятно еще по-первому, почему в A:=A*x*x/(N*(N-1)) стоит N-1, а не плюс. И в ответе выводится такое число как 0.00009.
Vera101 вне форума   Ответить с цитированием
Старый 11.05.2016, 22:12   #18 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Vera101 Посмотреть сообщение
Мне вот не понятно еще по-первому, почему в A:=A*x*x/(N*(N-1)) стоит N-1, а не плюс. И в ответе выводится такое число как 0.00009.
А, ну это моя вина. Нет, всё правильно, просто я переменил зачем-то порядок действий (сначала - увеличение N на 2). Как-то так представилось и написалось. Но у Вас тоже правильно, можно и так. Правда, у Вас первый член последовательности выпал, что нехорошо.
А ответ - правильный: x^5/5!=0.00008533333. После округления оно и получается. И в Вашей программе оно выводится. Или Вы о том, что оно "лишнее"? Можно и убрать. Например, так
Код:
const
 e=0.001;
 x=0.4;
var
 n,A:real;
begin
 A:=x;
 N:=1;
 writeln('(a)= ', A:0:5);
 While (A>e) do
  begin
   N:=N+2;
   A:=A*x*x/(N*(N-1));
   if A>e then writeln('(a)= ', A:0:5);
  end;
 Readln
end.
Vladimir_S вне форума   Ответить с цитированием
Старый 11.05.2016, 22:28   #19 (permalink)
Vera101
Member
 
Регистрация: 11.05.2016
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Ясно. Спасибо за помощь.
Vera101 вне форума   Ответить с цитированием
Старый 11.05.2016, 22:30   #20 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Vera101 Посмотреть сообщение
Ясно. Спасибо за помощь.
Да не за что. Обращайтесь, если что.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:58.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.