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

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

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

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

Помогите разобраться с ошибками, пожалуйста

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

bastilio

Новые
Регистрация
30 Май 2011
Сообщения
17
Реакции
0
Баллы
0
Помогите разобраться с ошибками, пожалуйста

вот код программы.

program a1;
uses graph, crt;
const n=9;
var Q:array[1..n] of real;
H:array[1..n] of real;
Hp:array[1..n] of real;
dH:array[1..n] of real;
x:array[1..n] of real;
y:array[1..n] of real;
i,j:integer;
grDriver,grMode:integer;
a,b:real;

procedure sum_count;
var s1,s2,s3,s4: real;
begin
s1:=0;
s2:=0;
s3:=0;
s4:=0;
for i:=1 to n do
begin
s1:=s1+y;
s2:=s2+x;
s3:=s3+x*y;
s4:=s4+sqr(x);
end;
a:=(s1*s2-n*s3)/(sqr(s2)-n*s4);
b:=(s3*s2-s4*s1)/(sqr(s2)-n*s4);
end;

function hr(z:real):real;
var m:real;
begin
m:=a*sqr(z)+b*z;
hr:=m;
end;

BEGIN
clrscr;
writeln('Vvedite znacheniya');
writeln;
for i:=1 to n do
begin
write('Q[',i,']=');
readln(q);
x:=q;
end;
writeln;
for i:=1 to n do
begin
write('H[',i,']=');
readln(h);
y:=h/q;
end;
sum_count;
for i:=1 to n do
begin
Hp:=hr(q);
dH:=abs(Hp-h)/abs(h);
end;

writeln;
textcolor(lightred);
writeln('Rezultati vi4islenii:');
writeln;
textcolor(white);
writeln(' a=',a:8:5);
writeln(' b=',b:8:5);
writeln;
writeln(' |------|-----|---------|---------|---------|');
writeln(' | n | Qi | Hi | Hp | dH |');
writeln(' |------|-----|---------|---------|---------|');
for i:=1 to n do
writeln(' |',i:2,' |',q:3:0,' |',h:8:5,' |',Hp:8:5,' |',dH:8:5,' |');
writeln(' |------|-----|---------|---------|---------|');
readln;

GrDriver:=detect;
initgraph(GrDriver,GrMode,'C:\BP\BGI');
cleardevice;
setcolor(white);
outtextXY(10,10,'Zavisimost_H_ot_Q');
outtextXY(15,50,'H');
outtextXY(205,205,'Q');
{ Dlya naglyadnosti masshtab raven 2:1 }
setcolor(blue);
line(10,50,10,200);
line(10,200,200,200);
for i:=1 to n do
putpixel(trunc(q)*2+10,200-trunc(h)*2,yellow);
setcolor(white);
outtextXY(300,10,'Zavisimost_Hp_ot_Q');
outtextXY(305,50,'Hp');
outtextXY(505,205,'Q');
setcolor(blue);
line(300,50,300,200);
line(300,200,500,200);
for i:=1 to n do
putpixel(300+trunc(q)*2,200-trunc(Hp)*2,yellow);
readln;
closegraph;

END.


помогите с алгоритмами пожалуйста.
Написать:
Алгоритм решения задачи (слова и блок-схема)
Алгоритмы процедур( слова-назначений,формальные параметры,как пользоваться,блок-схема)
 

Вложения

  • IMG_0001.webp
    IMG_0001.webp
    52.3 KB · Просмотры: 85
  • IMG_0002.webp
    IMG_0002.webp
    50 KB · Просмотры: 49
Могу предложить такой (исправленный) вариант программы:
Код:
program a1;
uses graph, crt;
const
 n=9;
 Q:array[1..n] of real=(14.0, 20.5, 35.3, 45.0, 53.8, 62.0, 68.3, 75.2, 82.0);
 H:array[1..n] of real=(3.05, 4.90, 10.4, 15.3, 20.1, 25.4, 29.8, 34.6, 40.0);
var
 Hp,dH,x,y:array[1..n] of real;
 i,j,grDriver,grMode:integer;
 a,b:real;
 s:String;

procedure sum_count;
var s1,s2,s3,s4: real;
begin
 s1:=0;
 s2:=0;
 s3:=0;
 s4:=0;
 for i:=1 to n do
  begin
   s1:=s1+y[i];
   s2:=s2+x[i];
   s3:=s3+x[i]*y[i];
   s4:=s4+sqr(x[i]);
  end;
 a:=(s1*s2-n*s3)/(sqr(s2)-n*s4);
 b:=(s3*s2-s4*s1)/(sqr(s2)-n*s4);
end;

function hr(z:real):real;
var m:real;
begin
 m:=a*sqr(z)+b*z;
 hr:=m;
end;

BEGIN
 clrscr;
 for i:=1 to n do
  begin
   x[i]:=q[i];
   y[i]:=h[i]/q[i];
  end;
 sum_count;
 for i:=1 to n do
  begin
   Hp[i]:=hr(q[i]);
   dH[i]:=abs(Hp[i]-h[i])/abs(h[i]);
  end;

 textcolor(lightred);
 writeln('Rezultati vi4islenii:');
 writeln;
 textcolor(white);
 writeln(' a=',a:8:5);
 writeln(' b=',b:8:5);
 writeln;
 writeln(' |------|-----|---------|---------|---------|');
 writeln(' |  n   | Qi  |    Hi   |   Hp    |    dH   |');
 writeln(' |------|-----|---------|---------|---------|');
 for i:=1 to n do
  writeln(' |  ',i:2,'  | ',q[i]:4:1,'|',h[i]:8:2,' |',Hp[i]:8:5,' |',dH[i]:8:5,' |');
 writeln(' |------|-----|---------|---------|---------|');
 readln;

 GrDriver:=detect;
 initgraph(GrDriver,GrMode,'C:\BP\BGI');
 cleardevice;
 setcolor(white);
 outtextXY(300,10,'Zavisimosti_H_i_Hp_ot_Q');
 setcolor(blue);
 line(100,20,100,440);
 line(100,440,500,440);
 SetTextJustify(RightText,CenterText);
 For i:=1 to 12 do
  begin
   setcolor(blue);
   line(100, 440-35*i, 105, 440-35*i);
   Str(5*i,s);
   setcolor(white);
   If i<12 then
    OutTextXY(95, 440-35*i, s);
  end;
 setcolor(Yellow);
 OutTextXY(80,20,'Hp');
 setcolor(white);
 OutTextXY(88,20,',');
 setcolor(lightred);
 OutTextXY(95,20,' H');
 SetTextJustify(CenterText,TopText);
 For i:=1 to 10 do
  begin
   setcolor(blue);
   line(100+40*i, 440, 100+40*i, 435);
   Str(10*i,s);
   setcolor(white);
   If i<10 then
    OutTextXY(100+40*i, 445, s);
  end;
 OutTextXY(500,445,'Q');
 SetColor(yellow);
 MoveTo(100,440);
 for i:=1 to 1000 do
  LineTo(Round(100+i*0.4),Round(440-Hr(i*0.1)*7));
 SetColor(lightred);
 SetLineStyle(SolidLn,0,ThickWidth);
 for i:=1 to n do
  Circle(Round(100+q[i]*4),Round(440-Hp[i]*7),2);
 ReadKey;
 closegraph;
END.
 
а чем он отличается?)
 
можете помочь с алгоритмами,можно,без блок-схем?
 
а чем он отличается?)
А что, сделать copy-paste да запустить - никак? Ну что же. Основные отличия:
1. Исходные данные записаны в виде констант, чтобы не вводить каждый раз.
2. Выровнена таблица, исправлены форматы.
3. График построен кардинально иначе:
а) Во весь экран.
б) Размечены оси.
в) Расчетная кривая (Hp) проведена с очень мелким шагом, что дает плавную параболу.
г) Табличные точки (Н) нанесены на тот же график - иначе бессмысленно.

P.S. Извините, но всякими там алгоритмами да блок-схемами не занимаюсь.
 

Вложения

  • a1_1.webp
    a1_1.webp
    24.2 KB · Просмотры: 52
  • a1_2.webp
    a1_2.webp
    8.9 KB · Просмотры: 170
а в Паскале АВС это не запустить,только в борланд?)
 
а что такое grDrive и grMod ?
и еще S типа string(какой размер) и что означает?
 
А вы уверены, что сами писали код, приведенный вами в первом сообщении?

Для получения ответов на ваши вопросы загрузите среду программирования и нажмите кнопку F1.
 
а в Паскале АВС это не запустить,только в борланд?)
Абсолютно исключено! "Ваш" код, как и мой, написан для Borland Graphics.
А вы уверены, что сами писали код, приведенный вами в первом сообщении?
Что-то подсказывает мне отрицательный ответ на поставленный вопрос...
 
да нет не сам,я просто пробую вникнуть)
 
а можете еще помочь,мне надо сделать первую процедуру для нахождения А и Б,с параметрами,а то она без них.
и вторую процедуру сделать еще для МАХ погрешности,а то есть только для минимальной, и в конце,что бы она выводила,эти 2 погрешности на экран))
 
да нет не сам,я просто пробую вникнуть)
Ну что ж - уже ценно!
а можете еще помочь,мне надо сделать первую процедуру для нахождения А и Б,с параметрами,а то она без них.
и вторую процедуру сделать еще для МАХ погрешности,а то есть только для минимальной, и в конце,что бы она выводила,эти 2 погрешности на экран))
Как говорил незабвенный Василь Иваныч: "Могу, Петька, могу...". Только уж, извините, для максимальной и минимальной погрешностей заморачиваться с процедурой не стал - просто добавил вычисление и вывод этих параметров.
И еще - на будущее. Делать ли процедуру с параметрами или без таковых - это Ваше, как программиста, право решать. Делайте так, как Вам удобнее, благо Паскаль тут предоставляет широкие возможности. А если препод требует, чтобы непременно были параметры, то таких преподов надо в раннем детстве в ведре топить. Чтобы из них не вырастали преподы.
Код:
program a1;
uses graph, crt;
const
 n=9;
Type
 Ar=Array[1..n] of real;
const
 Q:Ar=(14.0, 20.5, 35.3, 45.0, 53.8, 62.0, 68.3, 75.2, 82.0);
 H:Ar=(3.05, 4.90, 10.4, 15.3, 20.1, 25.4, 29.8, 34.6, 40.0);
var
 Hp,dH,x,y:Ar;
 i,j,grDriver,grMode:integer;
 a,b,dH_min,dH_max:real;
 s:String;

procedure sum_count(Xsc,Ysc:Ar; var Asc:Real; var Bsc:Real);
var s1,s2,s3,s4: real;
begin
 s1:=0;
 s2:=0;
 s3:=0;
 s4:=0;
 for i:=1 to n do
  begin
   s1:=s1+Ysc[i];
   s2:=s2+Xsc[i];
   s3:=s3+Xsc[i]*Ysc[i];
   s4:=s4+sqr(Xsc[i]);
  end;
 Asc:=(s1*s2-n*s3)/(sqr(s2)-n*s4);
 Bsc:=(s3*s2-s4*s1)/(sqr(s2)-n*s4);
end;

function hr(z:real):real;
var m:real;
begin
 m:=a*sqr(z)+b*z;
 hr:=m;
end;

BEGIN
 clrscr;
 for i:=1 to n do
  begin
   x[i]:=q[i];
   y[i]:=h[i]/q[i];
  end;
 sum_count(x,y,a,b);
 dH_min:=1;
 dH_max:=0;
 for i:=1 to n do
  begin
   Hp[i]:=hr(q[i]);
   dH[i]:=abs(Hp[i]-h[i])/abs(h[i]);
   If dH[i]<dH_min then dH_min:=dH[i];
   If dH[i]>dH_max then dH_max:=dH[i];
  end;

 textcolor(lightred);
 writeln('Rezultati vi4islenii:');
 writeln;
 textcolor(white);
 writeln(' a=',a:8:5);
 writeln(' b=',b:8:5);
 writeln;
 writeln(' |------|-----|---------|---------|---------|');
 writeln(' |  n   | Qi  |    Hi   |   Hp    |    dH   |');
 writeln(' |------|-----|---------|---------|---------|');
 for i:=1 to n do
  writeln(' |  ',i:2,'  | ',q[i]:4:1,'|',h[i]:8:2,' |',Hp[i]:8:5,' |',dH[i]:8:5,' |');
 writeln(' |------|-----|---------|---------|---------|');
 writeln;
 writeln('Min dH = ',dH_min:8:5);
 writeln('Max dH = ',dH_max:8:5);
readln;

 GrDriver:=detect;
 initgraph(GrDriver,GrMode,'C:\BP\BGI');
 
 cleardevice;
 setcolor(white);
 outtextXY(300,10,'Zavisimosti_H_i_Hp_ot_Q');
 setcolor(lightblue);
 line(100,20,100,440);
 line(100,440,500,440);
 SetTextJustify(RightText,CenterText);
 For i:=1 to 12 do
  begin
   setcolor(lightblue);
   line(100, 440-35*i, 105, 440-35*i);
   Str(5*i,s);
   setcolor(white);
   If i<12 then
    OutTextXY(95, 440-35*i, s);
  end;
 setcolor(Yellow);
 OutTextXY(80,20,'Hp');
 setcolor(white);
 OutTextXY(88,20,',');
 setcolor(lightred);
 OutTextXY(95,20,' H');
 SetTextJustify(CenterText,TopText);
 For i:=1 to 10 do
  begin
   setcolor(lightblue);
   line(100+40*i, 440, 100+40*i, 435);
   Str(10*i,s);
   setcolor(white);
   If i<10 then
    OutTextXY(100+40*i, 445, s);
  end;
 OutTextXY(500,445,'Q');
 SetColor(yellow);
 MoveTo(100,440);
 for i:=1 to 1000 do
  LineTo(Round(100+i*0.4),Round(440-Hr(i*0.1)*7));
 SetColor(lightred);
 SetLineStyle(SolidLn,0,ThickWidth);
 for i:=1 to n do
  Circle(Round(100+q[i]*4),Round(440-Hp[i]*7),2);
 ReadKey;
 closegraph;
END.
 
согласен насчет препода,такой гад,вообще придирается ко всему)
 
program a1;
uses graph, crt;
const
n=9;
Type
Ar=Array[1..n] of real;
const
Q:Ar=(14.0, 20.5, 35.3, 45.0, 53.8, 62.0, 68.3, 75.2, 82.0);
H:Ar=(3.05, 4.90, 10.4, 15.3, 20.1, 25.4, 29.8, 34.6, 40.0);
var
Hp,dH,x,y:Ar;
i,grDriver,grMode:integer;
a,b,dH_min,dH_max:real;
s:String;

procedure sum_count(Xsc,Ysc:Ar; var Asc:Real; var Bsc:Real);
var s1,s2,s3,s4: real;
begin
s1:=0;
s2:=0;
s3:=0;
s4:=0;
for i:=1 to n do
begin
s1:=s1+Ysc;
s2:=s2+Xsc;
s3:=s3+Xsc*Ysc;
s4:=s4+sqr(Xsc);
end;
Asc:=(s1*s2-n*s3)/(sqr(s2)-n*s4);
Bsc:=(s3*s2-s4*s1)/(sqr(s2)-n*s4);
end;

function hr(z:real):real;
var m:real;
begin
m:=a*sqr(z)+b*z;
hr:=m;
end;

Procedure MinMax(var dH_min,dH_max : real);
var i integer;
begin
dH_min:=1;
dH_max:=0;

for i:=1 to n do
begin
Hp:=hr(q);
dH:=abs(Hp-h)/abs(h);
If dH<dH_min then dH_min:=dH;
If dH>dH_max then dH_max:=dH;
end;
end;

BEGIN
clrscr;
for i:=1 to n do
begin
x:=q;
y:=h/q;
end;
sum_count(x,y,a,b);

MiMax(dH_min, dH_max);

textcolor(lightred);
writeln('Rezultati vi4islenii:');
writeln;
textcolor(white);
writeln(' a=',a:8:5);
writeln(' b=',b:8:5);
writeln;
writeln(' |------|-----|---------|---------|---------|');
writeln(' | n | Qi | Hi | Hp | dH |');
writeln(' |------|-----|---------|---------|---------|');
for i:=1 to n do
writeln(' | ',i:2,' | ',q:4:1,'|',h:8:2,' |',Hp:8:5,' |',dH:8:5,' |');
writeln(' |------|-----|---------|---------|---------|');
writeln;
writeln('Min dH = ',dH_min:8:5);
writeln('Max dH = ',dH_max:8:5);
readln;

GrDriver:=detect;
initgraph(GrDriver,GrMode,'C:\BP\BGI');

cleardevice;
setcolor(white);
outtextXY(300,10,'Zavisimosti_H_i_Hp_ot_Q');
setcolor(lightblue);
line(100,20,100,440);
line(100,440,500,440);
SetTextJustify(RightText,CenterText);
For i:=1 to 12 do
begin
setcolor(lightblue);
line(100, 440-35*i, 105, 440-35*i);
Str(5*i,s);
setcolor(white);
If i<12 then
OutTextXY(95, 440-35*i, s);
end;
setcolor(Yellow);
OutTextXY(80,20,'Hp');
setcolor(white);
OutTextXY(88,20,',');
setcolor(lightred);
OutTextXY(95,20,' H');
SetTextJustify(CenterText,TopText);
For i:=1 to 10 do
begin
setcolor(lightblue);
line(100+40*i, 440, 100+40*i, 435);
Str(10*i,s);
setcolor(white);
If i<10 then
OutTextXY(100+40*i, 445, s);
end;
OutTextXY(500,445,'Q');
SetColor(yellow);
MoveTo(100,440);
for i:=1 to 1000 do
LineTo(Round(100+i*0.4),Round(440-Hr(i*0.1)*7));
SetColor(lightred);
SetLineStyle(SolidLn,0,ThickWidth);
for i:=1 to n do
Circle(Round(100+q*4),Round(440-Hp*7),2);
ReadKey;
closegraph;
END.
 
как вам такой вариант,с процедурой,сойдет?)
 
Назад
Сверху