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

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

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

 
 Ответить  Открыть новую тему 
> Программа расчета харак-тик выходного сигнала электроцепи
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


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


Профи
****

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

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


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


Гость






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

Цитата
говорит не хватает скобки.
Нормальный компилятор такого не говорит. А чем ты пользуешься - ты не рассказал.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 25.04.2024 2:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name