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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.02.2012, 11:03   #1
Sanginow
Пользователь
 
Регистрация: 29.11.2011
Сообщений: 10
Лампочка (Pascal ABC) Функция с условиями

Вычислить и вывести на экране значения функции F на интервале от Хнач. до Хкон. с шагом dx.

F= -ax-c при c<0 и x<>0
F= (x-a)/-с при c>0 и x=0
F= bx/(с-a) в остальных случаях ,где а,в,с действительные числа

Написал пока,вот что
Код:
Program N1;
Uses crt;
Var
  a,b,c,dx,Xn,Xk,x,n,i:real;

  BEGIN
    Write('Введите a ');Readln(a);
    Write('Введите b ');Readln(b);
    Write('Введите c ');Readln(c);
    Write('Введите dx ');Readln(dx);
    Write('Введите Xn ');Readln(Xn);
    Write('Введите Xk ');Readln(Xk);
  x:=(Xk-Xn)/dx;
While i=1 do x:=(Xk-Xn)/dx;
    begin
 If (c<0) and ( x<>0) then
    Writeln( 'F=',-a*x-c:2:2)
  Else
     Writeln('F=',b*x/(c-a):2:2);
    end;
While i=1 do x:=(Xk-Xn)/dx;
    begin
If (c>0) and (x=0) then
      Writeln('F=', (x-a)/(c):2:2)
           else
     Writeln('F=',b*x/(c-a):2:2);
     end;
END.
Но все равно есть сомнения,не так должна работать программа,что нужно в ней добавить,подправить или вообще заново надо её переписывать.
Sanginow вне форума Ответить с цитированием
Старый 15.02.2012, 11:44   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Я думаю так:
Код:
Var
  a,b,c,dx,Xn,Xk,x,n:real;
  i:integer;

BEGIN
  Write('Введите a ');Readln(a);
  Write('Введите b ');Readln(b);
  Write('Введите c ');Readln(c);
  Write('Введите dx ');Readln(dx);     //шаг
  Write('Введите Xn ');Readln(Xn);     //начальное
  Write('Введите Xk ');Readln(Xk);     //конечное
  x:=Xn;
  i:=1;
While x<Xk do// x:=(Xk-Xn)/dx;
  begin
    If (c<0) and ( x<>0) then
      Writeln('F(X',i,')=',-a*x-c:2:2);
    if (c>0) and (x=0) then
      Writeln('F(X',i,')=',(x-a)/-c:2:2)
    Else
      Writeln('F(X',i,')=',(b*x)/(c-a):2:2);
    inc(i);
    x:=x+dx;
  end;
  x:=Xk;
  If (c<0) and ( x<>0) then
    Writeln('F(X',i,')=',-a*x-c:2:2);
  if (c>0) and (x=0) then
    Writeln('F(X',i,')=',(x-a)/-c:2:2)
  Else
    Writeln('F(X',i,')=',(b*x)/(c-a):2:2);
 
{While i=1 do x:=(Xk-Xn)/dx;
    begin
If (c>0) and (x=0) then
      Writeln('F=', (x-a)/(c):2:2)
           else
     Writeln('F=',b*x/(c-a):2:2);
     end;}
readln
END.
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 15.02.2012, 11:48   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Sanginow, нет. вы написали НЕВЕРНО.

нужно примерно так:
Код:
Program N1;
Var
  a,b,c,dx,Xn,Xk,x:real;

BEGIN
  Write('Введите a ');Readln(a);
  Write('Введите b ');Readln(b);
  Write('Введите c ');Readln(c);
  Write('Введите dx ');Readln(dx);
  Write('Введите Xn ');Readln(Xn);
  Write('Введите Xk ');Readln(Xk);

  x:=Xn; {присвоили начальное значение X}
  while x<=Xk do begin
    If (c<0) and ( x<>0 ) then
       Writeln( 'F=',-a*x-c:2:2)
    Else
     if (c>0) and ( x=0 )  then
       Writeln('F=', (x-a)/(c):2:2)
     else
       Writeln('F=',b*x/(c-a):2:2);
    
   x := x + dx;
  end;

  readln; {ожидание нажатия Enter, 
           чтобы окно программы сразу не закрылось}
END.

кстати, третья формула не может быть вычислена при a = c. а это нигде не проверяется!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2012, 19:44   #4
Sanginow
Пользователь
 
Регистрация: 29.11.2011
Сообщений: 10
По умолчанию

Спасибо что помогли.Я дополнил программу,учел все замечания ну и вот получилось
Код:
Program N1;
Uses crt;
Var
  a,b,c,dx,Xn,Xk,x:real;
  i:integer;

BEGIN
ClrScr;
CRTWindowSize(80,40);
repeat
  ClrScr;
  Write('Введите a ');Readln(a);
  Write('Введите c ');Readln(c);
until c<>a;
  Write('Введите b ');Readln(b);
  Write('Введите dx ');Readln(dx);
  Write('Введите Xn ');Readln(Xn);
  Write('Введите Xk ');Readln(Xk);
  x:=Xn;
  i:=1;
writeln;
writeln('|F(x) |значения|');
writeln('|--------------');
While x<Xk do
  begin
    If (c<0) and ( x<>0) then
      Writeln('|F(X',i,')| ','X=',x,' ',-a*x-c:2:2);
    if (c>0) and (x=0) then
      Writeln('|F(X',i,')| ','X=',x,' ',(x-a)/-c:2:2)
    Else
      Writeln('|F(X',i,')| ','X=',x,' ',(b*x)/(c-a):2:2);
    inc(i);
    x:=x+dx;
  end;
  x:=Xk;
  If (c<0) and ( x<>0) then
    Writeln('|F(X',i,')| ','X=',x,' ',-a*x-c:2:2);
  if (c>0) and (x=0) then
    Writeln('|F(X',i,')| ','X=',x,' ',(x-a)/-c:2:2)
  Else
    Writeln('|F(X',i,')| ','X=',x,' ',(b*x)/(c-a):2:2);
 writeln('|---------------');
 writeln;
END.
Sanginow вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программы в Pascal, среда pascal ABC. Лабораторные работы Одинокая Волчица Фриланс 8 10.02.2012 20:09
до каких чисел округляет функция round в Паскале ABC& Настяyu Помощь студентам 5 28.12.2011 18:18
Неудобство ABC Pascal и глюк Borland Pascal proser93 Помощь студентам 0 19.11.2011 19:01
Turbo Pascal or Pascal ABC Ikram Паскаль, Turbo Pascal, PascalABC.NET 0 27.04.2010 13:44
функция Perim(Ax,Ay,Bx,By,Cx,Cy) вещественного типа, находящая периметр треугольника ABC lucky Паскаль, Turbo Pascal, PascalABC.NET 8 23.12.2008 20:19