Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.05.2008, 20:38   #11
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Дайте мне точное условие задачи и я попрбую оформить ее как надо, а так я не могу ничем вам помочь.
puporev вне форума Ответить с цитированием
Старый 30.05.2008, 20:39   #12
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Где полное, без изменений с внешней стороны, условие задачи?
Откуда мы знаем что должна делать программа?!? По коду, в работе которого неможет разобраться даже тот кто его написать, понять что нужно очень сложно...
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 31.05.2008, 15:51   #13
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Вот полное задание (из методички) без сокращений.

1). Вычислить и записать в двумерном массиве значения функции f(b, x) при х, изменяющемся от Xmin до Хmах с шагом dx, и b, изменяющемся в пределах от а-В до а+В с шагом db. Вывести содержимое массива на экран.
Функция: f(a, x) =(0,96 + x/cos(x - 4,42)) / (x-arctg(a+x)), при а = 4.06.
Это задание сделано (сообщение #8) и зачтено преподователем.

2). Доработать задачу предыдущего семестра (1), дополнив выводом результатов в файл с целью импорта в Math CAD. Результат работы программы - файл, состоящий из строк (по х) и столбцов (по Ь) значений функции. Файлы текстовые. Во всех файлах разделителями между числами могут быть пробелы, табуляции и переносы строк.
file вне форума Ответить с цитированием
Старый 01.06.2008, 20:51   #14
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Ну, что поможите?
file вне форума Ответить с цитированием
Старый 01.06.2008, 23:35   #15
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Целый вечер разбирался с твоей программой. То, что ты ее сдал, это не значит, что она нормально работает. Она выкидывает кучу чисел, и невозможно определить правильно она работает или нет. Я ее немного переделал, она сейчас выводит в виде таблицы значения х,bm и F.
Сразу стали видны ошибки. Хотя с одной не разобрался, при некоторых значениях ничего не выводит ни на экран ни в файл. Завтра еще поковыряюсь.
Цитата:
Результат работы программы - файл, состоящий из строк (по х) и столбцов (по Ь) значений функции. Файлы текстовые. Во всех файлах разделителями между числами могут быть пробелы, табуляции и переносы строк.
Из условий никак не могу понять, как нужно выводить. Ты нарисуй таблицу, как надо и приложи в файле сюда, я попробую сделать как надо. Еще в условии файлы во множественном числе, их что не один надо.
Пока черновой вариант.
Код:
Uses crt;
Const A=4.06;
Var
   Xmin, Xmax,X,dX,B,bm,dB,F:real; i,j,S,P,n: integer;
   V: array[1..100,1..100] of integer;
   tf:text;
begin
   Clrscr;
   assign(tf,'table.txt');
   rewrite(tf);
   Writeln ('Vvedite znachenie Xmin ');
   Read (Xmin);
   Writeln ('Vvedite znachenie Xmax ');
   Read (Xmax);
   Writeln ('Vvedite znachenie dX ');
   Read (dX);
   Writeln ('Vvedite znachenie B ');
   Read (B);
   Writeln ('Vvedite znachenie dB ');
   Read (dB);
   clrscr;
   S:=trunc((Xmax-Xmin)/dX);
   P:=trunc(((A+B)-(A-B))/dB);
   X:=Xmin;
   For i:=1 To S+1 do
       begin
         bm:=a-B;
         For j:=1 To P do
             begin
               F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X));
               Writeln('x=',x:6:2,'  bm=',bm:6:2,'  F=',F:6:2);
               Writeln(tf,'x=',x:6:2,'  bm=',bm:6:2,'  F=',F:6:2);
               bm:=bm+dB;
               if j=p then readln;
             end;
         X:=X+dX;
       end;
   close(tf);
   Writeln ('Enter ');
   Readkey
end.
puporev вне форума Ответить с цитированием
Старый 02.06.2008, 09:21   #16
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Кажется разобрался, я просто не привык, что табуляция задается динамически, обычно указывают диапазоны и шаг табуляции, а здесь посложней.
По программе:
1 вариант: встроке bm, в столбце X. Чувствую не то сделал, но пусть остается, вдруг пригодится.
Значения Xmin,Xmax,dX можешь задавать любые, т.к. количеством строк мы не ограничены. Длина же строки не более 255 символов, поэтому при тестировании программы я установил, что при шаге dB=0.5 максимально В=2,5, при шаге dB=1.0 максимально В=3,5. Иначе в строку не вмещается и строка наползает на строку. Короче сам все посмотришь. Основа есть, а если что-то не устраивает, то уже легко поправить. Если сам не справишься, пиши в личные сообщения, я скорее узнаю, мне на почту сообщения приходят. С форума тоже приходят, но по заголовку часто не вспомнишь от кого.
Код:
Uses crt;
Const A=4.06;
Var
   Xmin, Xmax,X,dX,B,bm,dB,F:real;
   i,j,S,P,n: integer;
   {V: array[1..100,1..100] of integer;}
   g:text;
begin
   Clrscr;
   Writeln ('Vvedite znachenie Xmin ');
   Read (Xmin);
   Writeln ('Vvedite znachenie Xmax ');
   Read (Xmax);
   Writeln ('Vvedite znachenie dX ');
   Read (dX);
   Writeln ('Vvedite znachenie B ');
   Read (B);
   Writeln ('Vvedite znachenie dB ');
   Read (dB);
   S:=trunc((Xmax-Xmin)/dX);
   P:=trunc(((A+B)-(A-B))/dB);
   X:=Xmin;bm:=a-B;
   assign(g,'Table.txt');
   rewrite(g);
   clrscr;
   writeln('Rezultat vycislenij po formele:');
   writeln(g,'Rezultat vycislenij po formule:');
   writeln('F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X))');
   writeln(g,'F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X))');
   writeln('pri Xnin=',Xmin:0:1,' Xmax=',Xmax:0:1,' dx=',dx:0:1,' B=',B:0:1,' db=',db:0:1);
   writeln(g,'pri Xnin=',Xmin:0:1,' Xmax=',Xmax:0:1,' dx=',dx:0:1,' B=',B:0:1,' db=',db:0:1);
   writeln;
   writeln(g,'');
   write('|___X___|');
   write(g,'|___X___|');
   for i:=1 to P+1 do
      begin
       write('_bm=',bm+db*(i-1):0:2,'_|');
       write(g,'_bm=',bm+db*(i-1):0:2,'_|');
      end;
       writeln;
       writeln(g,'');
   For i:=1 To S+1 do
      begin
        write(x:8:2);
        write(g,x:8:2);
        For j:=1 To P+1 do
           begin
             bm:=bm+db;
             F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X));
             write(F:10:4);
             write(g,F:10:4);
           end;
        X:=X+dX;
        Writeln;
        writeln(g,'');
        if i mod round(xmax)=0 then readln;
      end;
   writeln;
   Writeln ('Нажмите Enter для выхода из программы');
   Readln;
   close(g);
end.
2 вариант: X в строку, bm в столбец(по моему это надо).
Значения B,dB можешь задавать любые, значения Xmin,Xmax,dX исходя из длины строки, подберешь эмпирически.
Код:
Uses crt;
Const A=4.06;
Var
   Xmin, Xmax,X,dX,B,bm,dB,F:real;
   i,j,S,P,n: integer;
   g:text;
begin
   Clrscr;
   Writeln ('Vvedite znachenie Xmin ');
   Read (Xmin);
   Writeln ('Vvedite znachenie Xmax ');
   Read (Xmax);
   Writeln ('Vvedite znachenie dX ');
   Read (dX);
   Writeln ('Vvedite znachenie B ');
   Read (B);
   Writeln ('Vvedite znachenie dB ');
   Read (dB);
   S:=trunc((Xmax-Xmin)/dX);
   P:=trunc(((A+B)-(A-B))/dB);
   X:=Xmin;bm:=a-B;
   assign(g,'Table.txt');
   rewrite(g);
   clrscr;
   writeln('Rezultat vycislenij po formule:');
   writeln(g,'Rezultat vycislenij po formule:');
   writeln('F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X))');
   writeln(g,'F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X))');
   writeln('pri Xnin=',Xmin:0:1,' Xmax=',Xmax:0:1,' dx=',dx:0:1,' B=',B:0:1,' db=',db:0:1);
   writeln(g,'pri Xnin=',Xmin:0:1,' Xmax=',Xmax:0:1,' dx=',dx:0:1,' B=',B:0:1,' db=',db:0:1);
   writeln;
   writeln(g,'');
   write('|___bm___|');
   write(g,'|___bm___|');
   for i:=1 to S+1 do
      begin
       write('__x=',x+dx*(i-1):1:2,'_|');
       write(g,'__x=',x+dx*(i-1):1:2,'_|');
      end;
       writeln;
       writeln(g,'');
   For i:=1 To P+1 do
      begin
        write(bm:8:2);
        write(g,x:8:2);
        For j:=1 To S+1 do
           begin
             x:=x+dx;
             F:=(0.96+X/COS(X-4.42))/(X-arctan(bm+X));
             write(F:10:4);
             write(g,F:10:4);
           end;
        bm:=bm+db;
        Writeln;
        writeln(g,'');
        if i mod 9=0 then readln;
      end;
   writeln;
   Writeln ('Ќ*¦¬ЁвҐ Enter ¤«п ўл室* Ё§ Їа®Ја*¬¬л');
   Readln;
   close(g);
end.

Последний раз редактировалось puporev; 02.06.2008 в 11:45.
puporev вне форума Ответить с цитированием
Старый 02.06.2008, 12:27   #17
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Только, что узнал у преподаватель, как выводить результаты.
1). Вывод результатов в файл с целью импорта в Math CAD, т.е. там должны быть только числа.
2). Оказывается, что в строке должно быть S значений функции, а в столбце P значений функции, это они в методичке так написали.
file вне форума Ответить с цитированием
Старый 02.06.2008, 12:43   #18
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Сам поправишь программу, или что-то сделать надо?
S и P сами по себе ничего не значат, это просто размеры матрицы по строкам(S) и по столбцам(Р) какие значения должны быть по строкам и столбцам, т.е. 1 вариант или второй?
puporev вне форума Ответить с цитированием
Старый 02.06.2008, 13:53   #19
file
Пользователь
 
Регистрация: 29.05.2008
Сообщений: 25
По умолчанию

Как выводилась на экран так должна выводиться в файл, т.е. по строкам S и по столбцам P значений функции.
file вне форума Ответить с цитированием
Старый 02.06.2008, 14:06   #20
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Ничего не понял, что нужно выводить. Я сделал два варианта вывода в файл, который из них тебе нужен и что переделать. Если тебе нужно чтобы выводило твой первый вариант, то везде, где есть write или writeln, добавь ввод в файл(write(g, что-то) или writeln(g,что-то)).
Там у тебя еще зачем-то в три столбика еще было, вообще не понимаю для чего.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите исправить ошибку в задаче Vladislav_87 Паскаль, Turbo Pascal, PascalABC.NET 4 04.07.2008 12:27
Вопрос по задаче Freeman12 Помощь студентам 5 26.05.2008 17:40
Помогите исправить ошибку в задаче VANOLORD Паскаль, Turbo Pascal, PascalABC.NET 9 19.05.2008 22:16
Объяснение к задаче коммивояжер. enik pi Помощь студентам 2 14.06.2007 00:54