• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите соединить две задачи на Паскале

  • Автор темы Автор темы FPS
  • Дата начала Дата начала

FPS

Новые
Регистрация
11 Ноя 2010
Сообщения
17
Реакции
0
Баллы
0
Помогите соединить две задачи на Паскале

Всем доброго времени суток, очень нужна помощь с контрольной по программированию, завтра сдавать.. Уже есть 2 программы, их нужно както соединить в одну и ещё подредактировать первую, там почемуто после ввода чисел пишет ошибку =(

Вот как звучит задание:
10169868.webp

Вот код первой программы:
program z21;
Uses crt;
var x1,x2,x,dx,l:integer;
y1,y2,z:real;
begin
clrscr;
L:=0;
Writeln('vvedite x1, x2 and dx');
Readln(x1,x2,dx);
for x:=x1 to x2 do
begin
l:=l+1;
If (l=dx) then
begin
if (x<2) then
y1:=(3*x*x+2*x+5)/2*exp(-x)
else
if (x>=2)and(x<6) then
y1:=x+cos(x)
else
begin
Writeln(' Error input x ');
exit;
end;
y2:=2*y1+x*x;
z:=2*sqr(y1)+y2;
Writeln('output: z=',z:5:2);
l:=0;
end;
end;
readln;
end.
Вот вторая:
program z22;
uses crt;
var i,n:integer;
A:array[1..100] of real;
b:array[1..100] of real ;
begin
clrscr;
Writeln('vvedite dlinu massiva');
readln(n);
if (n<=0) then
begin
Writeln ('Error');
exit;
end;
Writeln('vvodite');
for i:=1 to n do
Readln(a);
Writeln('outpet');
For i:=1 to n do
if a<0 then
b:=abs(a)
else
b:=a;
For i:=1 to n do
Writeln(b);
readln;
end.
 
Нет, первый код - категорически никуда не годится! Кто Вам сказал, что переменная х может принимать только целочисленные значения? Потому что так проще цикл программировать? Не пойдет. В задании дана вещественная функция вещественного аргумента, и нечего тут упрощать. Решить задачку можно, например, так:
Код:
VAR
 Xmin,Xmax,Dx,x:Real;
 i,N:Integer;

Function Y1(x1:Real):Real;
begin
 if x1<2 then Y1:=(x1*x1*3+x1*2+5)/2/Exp(-x1)
 else Y1:=x1+Cos(x1);
end;

Function Y2(x2:Real):Real;
 begin
  Y2:=Y1(x2)*2+x2*x2;
 end;

Function Z(x3:Real):Real;
 begin
  Z:=Y1(x3)*2+SQR(x3);
 end;

BEGIN
 Write('Xmin = ');
 ReadLn(Xmin);
 Write('Xmax (<6) = ');
 ReadLn(Xmax);
 Write('Dx = ');
 ReadLn(Dx);
 N:=ROUND((Xmax-Xmin)/Dx);
 For i:=0 to N do
  begin
   x:=Xmin+Dx*i;
   WriteLn(x:5:2, Z(x):12:3);
  end;
 ReadLn;
END.

Что касается второй программы, то вроде явных ошибок там нет, но сделана она просто безобразно неряшливо и неудобно. Особенно с оператором exit - вообще ни в какие ворота не лезет. Потому предлагаю такой вариант:
Код:
program z22;
uses crt;
var
 i,n:integer;
 A:array[1..100] of real;
 b:array[1..100] of real ;
begin
 clrscr;
 Repeat
  Write('Vvedite dlinu massiva ');
  readln(n);
  if (n<=0) or (n>100) then
  Writeln ('Error!');
 Until (n>0) and (n<101);
 Writeln('Vvodite:');
 for i:=1 to n do
  begin
   Write('a[',i:2,']= ');
   Readln(a[i]);
  end;
 Writeln('Input:');
 for i:=1 to n do
  Write(a[i]:8:3);
 Writeln;
 Writeln('Output:');
 for i:=1 to n do
  b[i]:=abs(a[i]);
 for i:=1 to n do
  Write(b[i]:8:3);
 Writeln;
 readln;
end.

Что касается объединения программ - решительно не понимаю, зачем и кому это нужно: они ведь никак не связаны. Ну сделайте из них две процедуры без параметров и поставьте в начале запрос, какую из двух запускать, а потом ветвление. Можно, конечно...
 
Спасибо Вам большое :tehnari_ru_288: С этой контрольной помогли, ещё и денег хотели содрать) А на счёт объединения, препод зачемто требует) буду пробовать =)
 
Назад
Сверху