IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Программа расчета харак-тик выходного сигнала электроцепи
Shadow83
сообщение 9.04.2010 21:13
Сообщение #1





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Есть программа:

Program Kursovic;
uses crt;
const
maxind=160;
type
ArrayType=array [1..maxind] of real;
{---------------------------------------------------------}
{Процедура ввода исходной информации}
Procedure DATA(var n:integer;
kl:byte;
tn, tm, tk, Um, Uin2, Uin3, at, bt:real);
begin
Writeln('Введите нужное количество отсчетов сигнала');
Write('n=');
Readln(n);

Writeln('Введите признак kl=1, если хотите вывести результат на монитор');
Writeln('или признак kl=0, если хотите записать результаты в файлы f1 и f2');
Write('kl=');
Readln(kl);

Writeln('Введите ваши исходные данные');
Writeln('Начальный момент наблюдения входного сигнала');
Write('tn=');
Readln(tn);

Writeln('Момент времени, разделяющий две ветви алгоритма');
Writeln('расчета входного сигнала');
Write('tm=');
Readln™;

Writeln('Конечный момент времени наблюдения входного сигнала');
Write('tk=');
Readln(tk);

Writeln('Значение входного напряжения соответствующему моменту времени tm');
Write('Um=');
Readln(Um);

Writeln('Заданный параметр передаточной характеристики');
Write('Uin2=');
Readln(Uin2);
Write('Uin3=');
Readln(Uin3);
Write('a=');
Readln(at);
Write('b=');
Readln(bt);
End;
{---------------------------------------------------------}
{Описание процедуры формирования массива входных отсчетов}
procedure UIN1(var n:integer;
kl:byte;
tn, tm, tk, Um:real;
Uin:ArrayType);
var t, a, b, del:real;
i:integer;
begin
t:=tn;
del:=(tk-tn)/(n-1);
a:=Um/(tm-tn);
b:=Um/(tk-tm);
for i:=1 to n do
begin
if t>tm then Uin[i]:=b*(tk-t)
else Uin[i]:=a*(t-tn);
t:=t+del;
end;
end;
{---------------------------------------------------------}
{Описание процедуры формирования массива выходных отсчетов}
procedure Uout1(var n:integer;
kl:byte;
Uin2, Uin3, at, bt:real;
Uin, Uout:ArrayType);
var i:integer;
begin
for i:=1 to n do
if Uin[i]<=Uin2 then Uout[i]:=(at*Uin2)+bt
else if (Uin2<Uin[i]) and (Uin[i]<=Uin3) then Uout[i]:=(at*Uin[i])+bt
else if Uin[i]>Uin3 then Uout[i]:=(at*Uin3)+bt;
end;
{---------------------------------------------------------}
{Описание функции нахождения макс. значения выходного сигнала}
procedure MAXI(var n:integer;
Uout:Arraytype);
var
max:real;
i:integer;
begin
max:=Uout[i];
for i:=2 to n do
if Uout[i]>max then max:=Uout[i];
max:=MaxInt;
end;
{---------------------------------------------------------}
{Описание процедуры записи массивов входного и выходного сигнала}
{на диск в файлы с именами f1.prn и f2.prn}
procedure WRITEINFO(var n:integer;
uin,uout:ArrayType);
var
f1, f2:text;
i:integer;
begin
assign(f1,'f1.prn');
assign(f2,'f2.prn');
rewrite(f1);
rewrite(f2);
for i:=1 to n do
begin
WriteLn(f1,uin[i]:7:3);
WriteLn(f2,uout[i]:7:3);
end;
close(f1);
close(f2);
end;
{---------------------------------------------------------}
{Процедура вывода на экран результатов работы программы}
procedure REZULT(var n:integer;
kl:byte;
uin, uout:ArrayType);
var
i:integer;
begin
if kl=1 then
begin
WriteLn('Отсчеты входного сигнала');
for i:=1 to n do
WriteLn('uin[',i,']=',uin[i]:7:3);
WriteLn('Отсчеты выходного сигнала');
for i:=1 to n do
WriteLn('uout[',i,']=',uout[i]:7:3);
WriteLn('Макс. значение вых. сигнала=',MAXI(n,uout):7:3);
end
else
begin
WriteLn;
WriteLn;
WriteLn('Программа закончила свою работу. Массивы');
WriteLn('входных и выходных отсчетов сформированы');
WriteLn('и записаны в файлы f1.prn и f2.prn соответственно');
end;
end;
{---------------------------------------------------------}
var
n:integer;
kl:byte;
tn, tm, tk, Um, Uin2, Uin3, at, bt:real;
Uin, Uout:ArrayType;
begin {Main}
Clrscr;
Data(n, kl, tn, tm, tk, Um, Uin2, Uin3, at, bt);
Uin1(n, kl, tn, tm, tk, Um, Uin);
Uout1(n, kl, Uin2, Uin3, Uin, Uout);
Writeinfo(n, uin, uout);
Rezult(n, kl, uin, uout);
Readln;
end.


Вылазят ошибки и не могу их исправить. Помогите пожалуйста! unsure.gif Её уже сдавать надо, а я никак её сделать не могу. Если не использовать процедуру MAXI в процедуре вывода результатов на экран, то вылазит 26 ошибка на 153:32. А если использовать то 143 ошибка на 133:54.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
Client
сообщение 9.04.2010 22:39
Сообщение #2


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


ты выводишь на экран процедуру wacko.gif
WriteLn('Макс. значение вых. сигнала=',MAXI(n,uout):7:3);

Описание - 8 параметров (советую переименовать параметр и переменную at)
procedure Uout1(var n:integer;
kl:byte;
Uin2, Uin3, at, bt:real;
Uin, Uout:ArrayType);

а вызов - 6 параметров
Uout1(n, kl, Uin2, Uin3, Uin, Uout);

Убрав это, хотя бы компилируется
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shadow83
сообщение 10.04.2010 1:05
Сообщение #3





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Цитата(Client @ 9.04.2010 23:39) *

ты выводишь на экран процедуру wacko.gif
WriteLn('Макс. значение вых. сигнала=',MAXI(n,uout):7:3);

Описание - 8 параметров (советую переименовать параметр и переменную at)
procedure Uout1(var n:integer;
kl:byte;
Uin2, Uin3, at, bt:real;
Uin, Uout:ArrayType);

а вызов - 6 параметров
Uout1(n, kl, Uin2, Uin3, Uin, Uout);

Убрав это, хотя бы компилируется

Как хорошо что есть свежая пара глаз, спс!
Uout1(n, kl, Uin2, Uin3, Uin, Uout);

Тут исправил!
WriteLn('Макс. значение вых. сигнала=',MAXI(n,uout):7:3);

У меня не компилируется из-за этого огрызка. Это я выдерал из методички, должно выводится макс. значение. Но оно не проходит! Может я не правильно ищу макс. значение и в методичке ошибка? HELP!
А если просто убрать MAXI(n,uout):7:3, то 200 ошибка.

Сообщение отредактировано: Shadow83 - 10.04.2010 1:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ozzя
сообщение 10.04.2010 7:17
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 220
Пол: Мужской

Репутация: -  16  +


Тебе же сказали ошибку.
{---------------------------------------------------------}
{Описание функции нахождения макс. значения выходного сигнала} {В описании - функция!}
{procedure MAXI(var n:integer;Uout:Arraytype); А здесь процедура!}
function MAXI(var n:integer; Uout:Arraytype):real;
var
max:real;
i:integer;
begin
max:=Uout[1]; {Здесь была ошибка! ДОлжно быть Uout[1]!}
for i:=2 to n do
if Uout[i]>max then max:=Uout[i];
{ max:=MaxInt;} {Это зачем?}
MAXI:=max;
end;



2 Ozzя:
использовать тэги внутри кода - bad idea ))


Сообщение отредактировано: Lapp - 10.04.2010 7:23
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shadow83
сообщение 11.04.2010 11:24
Сообщение #5





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Тут
MAXI:=max;
говорит не хватает скобки.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 11.04.2010 11:28
Сообщение #6


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


причем там скобки? единственная пара скобок в описании заголовка
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.04.2010 11:39
Сообщение #7


Гость






Цитата
Тут исправил!
Не говоришь, КАК исправил - ищи ошибку (которая приводит к RunTime Error 200 в результате) сам. Здесь тебе никто помочь не в силах. Чтобы понять, что у тебя неправильно - надо не только иметь ПОЛНЫЙ текст программы со всеми исправлениями, но еще и входные данные, которыми ты пользуешься. А гадать на киселе - это не сюда, для гадалок есть другие форумы. Гугл знает...

Цитата
говорит не хватает скобки.
Нормальный компилятор такого не говорит. А чем ты пользуешься - ты не рассказал.
 К началу страницы 
+ Ответить 
Shadow83
сообщение 11.04.2010 11:56
Сообщение #8





Группа: Пользователи
Сообщений: 4
Пол: Мужской

Репутация: -  0  +


Turbo Pascal 7.1, брал отсюда tp7.info
Ой, простите unsure.gif я просто не заменил procedure на function.
Ну теперь хоть компилируется, вот исходные данные Тнач=0,5 с, Тм=2,5 с, Ткон=6 с, Uм=20,5 В, Uвх1=10 В, Uвх2=30 В, а=2,5 1/В, b=10 В.
После не долгих махинаций выяснил что в:

a:=Um/(tm-tn);
b:=Um/(tk-tm);


ошибка. Только не пойму откуда здесь берется ноль, что вылазит 200 ошибка.
По химичав снова:

Data(n, kl, tn, tm, tk, Um, Uin2, Uin3, at, bt);
Writeln(n, kl, tn, tm, tk, Um, Uin2, Uin3, at, bt); {Подставил строку}


Результатом её стало, что значение n=4 все же остальные результаты переменных равны 0.0000Е+00

Сообщение отредактировано: Shadow83 - 11.04.2010 16:51
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:38
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"