Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите вывести результаты программы в виде таблицы

Автор: Smartic 18.05.2009 12:28

Нужно было составить программу для расчета статического и динамического моментов электродвигателя. У меня вот что получилось:

Program ControlWork2;
Uses crt;
Const
R=2,9; {soprotivlenie}
I=4,3; {sila toka}
U=220; {napryazhenie}
w=157; {chastota}
J=0,04; {moment inercii}
name='C:\workdir\out.txt';
Var
t,K,Md,Mc:real;
fout:text;
Function Md:real; {moment dvizheniya}
Begin
K:=(U-I*R)/w;
Md:=K*U/R-K*w/R;
End;
Function Mc:real; {moment staticheskij}
Write('Vvedite vremya t:');
Readln(t);
Mc:=J-w/t+Md;
End;
End.

А мне еще надо вывести Md,Mc,w,t в виде таблицы, а также записать файл исходных данных. Как это сделать? Подскажите, пожалуйста. Заранее огромное спасибо!

М
Тегами для подсветки синтаксиса пользоваться не забывай...


Автор: volvo 18.05.2009 12:40

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

Ты программу-то свою компилировать пробовал? Кто ж запятой пользуется в вещественных числах? Вообще-то для этого есть точка. Кто дает одинаковые имена функции и переменной? Паскаль такого не позволяет...

Автор: Smartic 19.05.2009 2:25

Сори за ошибки, просто плохо разбираюсь в программировании. Немного исправил код:

Код

Program ControlWork2;
Uses crt;
Const
R=2.9; {soprotivlenie}
I=4.3; {sila toka}
U=220; {napryazhenie}
w=157; {chastota}
J=0.04; {moment inercii}
Var
t,K,Md,Mc,n:real;
Function D(K:real):real; {moment dvizheniya}
Begin
K:=(U-I*R)/w;
Md:=K*U/R-K*w/R;
End;
Function S(w:real):real; {moment staticheskij}
Begin
Mc:=w*J;
End;
begin
t:=J*W/(D(K)-S(w));
writeln (t:6:4, '|', W:8:1, '|', D(K):8:4, '|', S(w):8:4;);
End;
End.

Теперь при компиляции курсор останавливается на 3-й снизу строке и выходит следующее сообщение: error: 89 ")" expected. В чем ошибки?

Автор: Ozzя 19.05.2009 13:15

Цитата
S(w):8:4;);

Тебе же прямо, честно и откровенно говорят: "Скобку хочу!" А ты ему (компилятору) ; подсовываешь.

Автор: Smartic 19.05.2009 13:53

Я убрал ту точку с запятой, но компилятор все равно выдает эту же ошибку (error: 89 ")" expected) и подчеркивает вот это место:
writeln (t:6:4, '|', W:8:1, '|', D(K):8:4, '|', S(w):8:4);

Автор: -Lapp- 19.05.2009 14:24

Цитата(Smartic @ 19.05.2009 9:53) *

Я убрал ту точку с запятой, но компилятор все равно выдает эту же ошибку (error: 89 ")" expected) и подчеркивает вот это место:
writeln (t:6:4, '|', W:8:1, '|', D(K):8:4, '|', S(w):8:4);
У тебя переменная W - целая. У целой переменной только один формат. Убери ":1".

Автор: Lapp 19.05.2009 14:38

извиняюсь - не переменная, а константа W

Автор: Smartic 19.05.2009 14:49

Действительно, вот в таком виде программа уже компилируется:

Код

Program ControlWork2;
Uses crt;
Const
R=2.9; {soprotivlenie}
I=4.3; {sila toka}
U=220; {napryazhenie}
w=157; {chastota}
J=0.04; {moment inercii}
Var
t,K,Md,Mc,n:real;
Function D(K:real):real; {moment dvizheniya}
Begin
K:=(U-I*R)/w;
Md:=K*U/R-K*w/R;
End;
Function S(w:real):real; {moment staticheskij}
Begin
Mc:=w*J;
End;
begin
t:=J*W/(D(K)-S(w));
writeln (t:6:4, '|', W:8, '|', D(K):8:4, '|', S(w):8:4);
End.

Что теперь еще нужно сделать, чтобы результаты величин t, w, Mc, Md выводились на экран в виде таблицы? Кроме того, необходимо записать файл исходных данных (в формате txt).

Автор: Krjuger 20.05.2009 16:37

Ну чтобы записать исходные дадные для начала:
1) надо создать этот файл и исходными данными.
2)инициализировать его в программе.
Assign(имя фалла,'путь к файлу');
3)Открыть для чтрения
Reset(имя файла);
4) Считывать из файла твои данные и записывать в твои переменные.
5)и наконец закрыть файл.

А вообще я бы на твоем месте создал бы двухмерный массив и запихнул бы туда все и сразу,а потом просто распечатал бы массив.
P.s.Обычно имя файла берут fin,если входной и fout,если для вывода в файл.И fin и fout внутренние текстовые файлы,поэтому путь надо указывать с названием самого файла, где храняться данные.
Например;
asign(fin,'C:\Tpascal\test1.txt');
в само программе ты будеш работать с fin а исходный файл будет не тронут.
(грубо говоря ты все данные из теста переписываеш в фин и с ними работаеш,чтоб не испортить исходный файл)

Автор: Smartic 22.05.2009 1:16

Помогите, пожалуйста, с кодом программы, а то у меня ничего не получается. sad.gif

Автор: Krjuger 22.05.2009 17:39

Код

Program ControlWork2;
Uses crt;
var
T,K,Md,Mc,n:real;
R,I,U,W,J : real;

Procedure readfile(var R,I,U,W,J :real;var fin : text);
begin
   read(fin,R); {soprotivlenie}
   read(fin,I); {sila toka}
   read(fin,U); {napryazhenie}
   read(fin,w); {chastota}
   read(fin,J); {moment inercii}
   readln(fin);
end;

Function MomentDv(U,I,R:real):real; {moment dvizheniya}
Begin
K:=(U-I*R)/w;
MomentDv:=K*U/R-K*w/R;
End;

Function MomentStat(W,J:real):real; {moment staticheskij}
Begin
MomentStat:=W*J;
End;

Procedure Create(var fin,fout:text);
begin
  while not eof(fin) do begin
    readfile(R,I,U,W,J,fin);
    Md:=MomentDv(U,I,R);
    Mc:=MomentStat(W,J);
    T:=J*W/(Md-Mc);
    writeln (fout,T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
    writeln (T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
  end;
{Основная прога}
begin
assign(fin,'C:\Tpascal\test.txt');{входной файл}
assign(fout,'C:\Tpascal\test1.txt');{выходной файл}
reset(fin);
rewrite(fout);
Create(fin,fout);
close(fin);
close(fout);
end.

Если я все правильно понял,а вообще посмотри на свои функции и заново прочитай о них факи.потому что зачем тебе в функции Д входной параметр К если ты его внутри функции и считаеш,Вообще функции у тебя абсолютно неверные.Такое ощущение,что ты не понимаеш,что это такое,так про прочитай заново.То что я написал выводит и на экран и в файл.
R,I,U,W,J должны четко присутствовать в файле в заданном порядке.и каждые новые данные должны вводится с новой строки в том же порядке.

Автор: Smartic 22.05.2009 23:37

Большое спасибо! Действительно, пока плохо понимаю в программировании. Буду разбираться.

Автор: Smartic 29.05.2009 0:28

А почему при компиляции этой программы

Код
Program ControlWork2;
Uses crt;
var
T,K,Md,Mc,n:real;
R,I,U,W,J : real;

Procedure readfile(var R,I,U,W,J :real;var fin : text);
begin
   read(fin,R); {soprotivlenie}
   read(fin,I); {sila toka}
   read(fin,U); {napryazhenie}
   read(fin,w); {chastota}
   read(fin,J); {moment inercii}
   readln(fin);
end;

Function MomentDv(U,I,R:real):real; {moment dvizheniya}
Begin
K:=(U-I*R)/w;
MomentDv:=K*U/R-K*w/R;
End;

Function MomentStat(W,J:real):real; {moment staticheskij}
Begin
MomentStat:=W*J;
End;

Procedure Create(var fin,fout:text);
begin
  while not eof(fin) do begin
    readfile(R,I,U,W,J,fin);
    Md:=MomentDv(U,I,R);
    Mc:=MomentStat(W,J);
    T:=J*W/(Md-Mc);
    writeln (fout,T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
    writeln (T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
  end;
{Основная прога}
begin
assign(fin,'C:\Tpascal\test.txt');{входной файл}
assign(fout,'C:\Tpascal\test1.txt');{выходной файл}
reset(fin);
rewrite(fout);
Create(fin,fout);
close(fin);
close(fout);
end.

курсор останавливается на последнем "end" и выходит ошибка 85 "Ожидается ;" ?

Автор: Client 29.05.2009 1:26

Procedure Create(var fin,fout:text);
begin
while not eof(fin) do begin
readfile(R,I,U,W,J,fin);
Md:=MomentDv(U,I,R);
Mc:=MomentStat(W,J);
T:=J*W/(Md-Mc);
writeln (fout,T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
writeln (T:6:4, '|', W:8, '|', Md:8:4, '|', Mc:8:4);
end;
end; //<-------не хватает
{Основная прога}

Автор: Smartic 29.05.2009 1:37

Теперь пишет следующее, указывая на "fin":

Код
{Основная прога}
begin
assign(fin,'C:\Tpascal\test.txt');{входной файл}
assign(fout,'C:\Tpascal\test1.txt');{выходной файл}
reset(fin);
rewrite(fout);
Create(fin,fout);
close(fin);
close(fout);
end.

Ошибка 3 "Unknown edintifier".

Автор: Client 29.05.2009 1:42

Ты его не описал нигде, вот те и ошибка