Форум «Всё о Паскале» _ Задачи _ Помогите вывести результаты программы в виде таблицы
Автор: 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
Помогите, пожалуйста, с кодом программы, а то у меня ничего не получается.
Автор: Krjuger 22.05.2009 17:39
Код
Program ControlWork2; Uses crt; var T,K,Md,Mc,n:real; R,I,U,W,J : real;
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;