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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2016, 15:06   #1
weh
 
Регистрация: 05.06.2016
Сообщений: 6
Восклицание Дана программа (PASCAL). Модифицировать ее так, чтобы...

Дана программа. Модифицировать ее так, чтобы она выводила значение С в порядке возрастания, а те С, для которых нельзя произвести расчет, выводятся в самом начале таблицы (т.е если С нельзя посчитать, то эти значения идут в самом начале, а далее С выводится в порядке возрастания).

Код:
program lab; 
 
var
  a, b, x, p, c: array [1..100] of real; 
  pr: array [1..100] of string; 
  i, n: integer; 
begin
  write('Введите количество пар Х и Р: '); 
  Readln(n); 
  
  for i := 1 to n do 
  begin
    write('Введите значение P: '); 
    Readln(p[i]); 
    
    write('Введите значение X: '); 
    Readln(x[i]); 
    
     if (sqrt(p[i]*p[i]*p[i]) + (x[i]*x[i]) + 4.5) >= 0 then  
   begin                                                                                                  
    if (sin (sqrt(p[i]*p[i]*p[i]) + (x[i]*x[i]) + 4.5)) >= 0                            
    then begin                                                                                        
      a[i] := (sin (sqrt(p[i]*p[i]*p[i]) + (x[i]*x[i]) + 4.5));  
      if (ln(x[i]*x[i]*x[i]) + abs(x[i]*x[i]*x[i]*x[i] - 2*p[i])) >= 0                                                            
      then begin 
        b[i] := (x[i]*x[i] - exp (ln(x[i]*x[i]*x[i]) + abs(x[i]*x[i]*x[i]*x[i] - 2*p[i])));
        if b[i] <> 0              
        then begin    
            c[i] := (a[i])/(b[i]);  
           end                                      
        else writeln ('Ошибка.Знаменатель равен нулю.') end 
       else writeln ('Ошибка.Значение степени меньше нуля.') end 
      else writeln ('Ошибка.Числитель меньше нуля.') end 
    else writeln ('Ошибка.Под корнем стоит число меньше нуля.'); 
  end;
 
  begin
    writeln('X | P | C | Примечания');
    for i := 1 to n do 
    if (pr[i] = '') then 
      writeln(x[i], ' | ', p[i], ' | ', c[i], ' | ')
       else 
      writeln(x[i], ' | ', p[i], ' | ', ' | ', pr[i])   
  end
  
end.
weh вне форума Ответить с цитированием
Старый 05.06.2016, 15:13   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Как звучит оригинал задания?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 05.06.2016, 15:23   #3
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Меня убивает фраза
Код:
if (sqrt(p[i]*p[i]*p[i]) + (x[i]*x[i]) + 4.5) >= 0 then
...
else writeln ('Ошибка.Под корнем стоит число меньше нуля.');
sqrt тут причем?

А что если так:
Код:
if p[i]*p[i]*p[i] >= 0 then
- так правдивее будет!!!

3-е условие
Код:
if (ln(x[i]*x[i]*x[i]) + abs(x[i]*x[i]*x[i]*x[i] - 2*p[i])) >= 0
заменить на
Код:
if x[i]*x[i]*x[i] >= 0 then
- логарифм убрать...
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 05.06.2016 в 15:34.
newerow1989 вне форума Ответить с цитированием
Старый 05.06.2016, 15:27   #4
weh
 
Регистрация: 05.06.2016
Сообщений: 6
Восклицание

Модифицируйте Вашу программу таким образом, чтобы она вводила указанное количество пар значений X и Р, и лишь после этого выполняла расчеты и печатала результаты.

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

Сама программа
Код:
program Lab;       
      
var
  p, x: real;                
  a, b, c: real;             
  
begin                                             
    writeln('Введите значение P');                                          
    Readln(p); 
    
    writeln('Введите значение X');                                          
    Readln(x);                                            
  
  if (sqrt(p*p*p) + (x*x) + 4.5) >= 0 then                                                  
   begin                                                                                                  
    if (sin (sqrt(p*p*p) + (x*x) + 4.5)) >= 0                            
    then begin                                                                                        
      a := (sin (sqrt(p*p*p) + (x*x) + 4.5));  
      if (ln(x*x*x) + abs(x*x*x*x - 2*p)) >= 0                                                            
      then begin 
        b := (x*x - exp (ln(x*x*x) + abs(x*x*x*x - 2*p)));
        if b <> 0              
        then begin    
            c := a/b;                                                                       
            writeln(c); 
           end                                      
        else writeln( 'Ошибка. Знаменатель равен нулю.') end                                    
      else writeln( 'Ошибка. Значение степени меньше нуля.') end                                     
    else writeln('Ошибка. Числитель меньше нуля.') end                                      
  else writeln('Ошибка. Под корнем стоит число меньше нуля.'); 
end.
weh вне форума Ответить с цитированием
Старый 05.06.2016, 15:36   #5
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Аналогично:

Код:
if (sqrt(p*p*p) + (x*x) + 4.5) >= 0 then
на
Код:
if p*p*p >= 0 then
_______________________________
Код:
if (ln(x*x*x) + abs(x*x*x*x - 2*p)) >= 0 then
на
Код:
if x*x*x >= 0 then
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 05.06.2016, 15:41   #6
weh
 
Регистрация: 05.06.2016
Сообщений: 6
По умолчанию

Зачем? В задании даны примеры и их нельзя изменять.
weh вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так,чтобы программа ничего не делала? Мой повелитель Общие вопросы C/C++ 3 21.03.2016 13:53
Дана матрица, преобразовать так, чтобы в начале были положительные числа, а потом отрицательные(с сохранением порядка) Non_stop Общие вопросы C/C++ 2 23.11.2014 18:01
Сделать так, чтобы программа на заканчивалась aleko05 Помощь студентам 6 04.11.2012 20:44
Пвивет как зделат так чтобы так чтобы в edit...... vmilyoshin Помощь студентам 9 23.09.2011 02:48