Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Решение задач на Pascal. Форум 2
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]
Модераторы: paradise, KMA
  

KMA



Долгожитель

Ошибка может быть еще в том, какой тип ты используешь. Вообще, если ты пользуешься real, то это только учебный процесс, т. к. реально он сам по себе (этот тип данных глючный). Используй для всех тип extended. Тогда и посмотрим что получиться. Поменяй, потом скажи о результатах.

А собствено у тебя же куб косинуса, так? А было написано, что это косинус произведения 3 на разность счетчика итерации и 2, 5, извини разница есть. В постановке задачи одно, а в программе другое, поэтому я и написал, что не улавливаю логики. Собственно, со стремлением записать все в одну формулу возникают проблемы, т. к. сложность вычислений ТАКОГО дела очень большая. Я бы вообще сделал так:

Code Sample:
 
for i:=1 to l do
begin
  buf:=cos (i-2,5);
  W[ i ]:=5*ln(0.1*i)+12*buf*buf*buf;
  write(W[ i ]:4:2,' ':2)
end;


Во всяком случае это упростило бы задачу.

По поводу ошибок не удивляйся. Это нормально ошибаться для каждого человека. И на первых этапах у многих такие типовые ошибки возникают. Но благодаря этому и формируется опыт... Поэтому все нормально. Главное не терять боевого духа.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 14 нояб. 2007 22:20 | IP
snakeq



Новичок

Помогите пожайлуста с этой задачей.

Помогите пожайлуста дополнить её удалением и так же проверить правильноли она написанна
Использовать подпрограммы (ввода, вывода, обрабатывающей части). Дан массив целых чисел А[M,N], где M,N<=10. Удалить все столбцы, в которых нет нулевого элемента.

Code Sample:
program lab4; 
const
k=10;
var
A:array [1..10, 1..10] of integer;
M,N:integer;
procedure inputArray;
var
i,j:integer;
           begin
           write ('M=');
           readln (M);
           if M>10 then
              begin
              writeln ('M must be <=10');
              N:=0; M:=0;
              exit;
              end;

              write ('?N=');
              readln (N);
              if N>10 then
                 begin
                 writeln ('N must be <=10');
                 N:=0; M:=10;
                 exit;
                 end;

                 for i:=1 to M do
                     begin
                     write ('?A[',i,',',',j]=');
                     readln (A[i,j]);
                     end;

           end;

procedure printArray;
var
i,j:integer;
begin
writeln ('A=');
if (N>0) and (M>0) then
  begin
  for i:=1 to M do
      begin
      write (A[i,j]);
      end;
      writeln;
  end;
end;
procedure ydalenia;

end;
   begin
   inputArray;
   printArray;
   vstav;
   printArray;
   end.







(Сообщение отредактировал snakeq 14 нояб. 2007 23:21)

Всего сообщений: 6 | Присоединился: ноябрь 2007 | Отправлено: 14 нояб. 2007 23:20 | IP
bekas


Долгожитель

Для начала: циклы ввода и печати массива A должны быть двойными (кто j будет менять?)...

Всего сообщений: 379 | Присоединился: январь 2006 | Отправлено: 15 нояб. 2007 0:41 | IP
Zheka



Новичок

to KMA: Попробовал записать по-твоему, то же самое получается. А когда поменял тип real на extended  выдало  в условии: (A[ i ]>0) вот такую ошибку: "Must be 8087 mode to compile this".


(Сообщение отредактировал Zheka 15 нояб. 2007 2:00)

Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 15 нояб. 2007 2:59 | IP
KMA



Долгожитель

To Zheka.

Компилировал BP 7.0 на третьем пеньке. Исходник проги:

Code Sample:
program Lb9; 
CONST n=8;
     m=10;
     l=4;
TYPE massiv=array[1..n] of real;
VAR X,Y,Z,W: massiv;
   Dobutok, maxY, maxZ, maxW, buf:real;
   i:integer;

procedure maxInArray(A: massiv; const k: byte; var max: real);
Var i, j:integer;
Begin
    j:=1;
    while A[ j ]>=0 do
     inc (j);
    max:=A[ j ];
    for i:=j to k do
     if (max<A[ i ]) and (A[ i ]<0)
        then max:=A[ i ];
    if (max=A[ n ]) and (A[ n ]>=0)
       then max:=1;
End;

function Dob(b,c,d:real): real;
Var P:real;
Begin
   P:=b*c*d;
   Dob:=P;
End;

BEGIN
    writeln(' ':10,'MASSIV  X ');
    for i:=1 to n do
     begin
      X[ i ]:=2*sqr(i)-10*(5-i);
      write(X[ i ]:4:2,' ':4);
     end;
    writeln;
    writeln;
    writeln(' ':10,'MASSIV  Y ');
    for i:=1 to n do
     begin
      Y[ i ]:=4*sin(2*i)+6*exp(i-5);
      write(Y[ i ]:4:2,' ':4);
     end;
    writeln;
    writeln;
    writeln(' ':10, 'MASSIV  Z ');
    for i:=1 to m do
     begin
      Z[ i ]:=8*(i-4)+3*sqr(sin(1.5*i));
      write(Z[ i ]:4:2,' ':2);
     end;
    writeln;
    writeln;
    writeln(' ':10, 'MASSIV  W ');
    for i:=1 to 10 do
     begin
      buf:=cos (i-2.5);
      W[ i ]:=5*ln(0.1*i)+12*buf*buf*buf;
      write(W[ i ]:4:2,' ':2)
     end;
    writeln;
    writeln;
    MaxInArray(Y,n,maxY);
    MaxInArray(Z,m,maxZ);
    MaxInArray(W,l,maxW);
    Dobutok:=Dob(maxY,maxZ,maxW);
    writeln('maxY=',maxY:4:2,'; ','maxZ=',maxZ:4:2,'; ','maxW=',maxW:4:2,'; ');
    writeln('Dobutok=',Dobutok:4:2);
    readLn;
END.


Программа выдала следующее:



MASSIV X
-38.00  -22.00  -2.00  22.00  50.00  82.00  118.00  158.00

MASSIV Y
3.75  -2.73  -0.31  6.16  3.82  14.16  48.30  119.36

MASSIV Z
-21.02  -15.94  -5.13  0.23  10.64  16.51  26.32  32.86  41.94  49.27

MASSIV W
-11.51  0.06  2.09  -4.58  -9.64  -12.41  -1.90  3.16

maxY=-0.31; maxZ=-5.31; maxW=-1.90;
Dobutok=-2.97



Думаю, это правильное решение. Напиши, все ли получилось потом.


(Сообщение отредактировал KMA 15 нояб. 2007 16:06)


(Сообщение отредактировал KMA 16 нояб. 2007 21:47)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 15 нояб. 2007 16:06 | IP
KMA



Долгожитель

Как сказал bekas.

Code Sample:
 
procedure inputArray;
var
     i,j:integer;
Begin
      write ('M=');
      readln (M);
      if M>10 then
         begin
           writeln ('M must be <=10');
            N:=0; M:=0;
            exit;
         end;

         write ('?N=');
         readln (N);
         if N>10 then
             begin
               writeln ('N must be <=10');
                N:=0; M:=10;
                exit;
              end;
         for i:=1 to M do
          for j:=1 to N do
           begin
             write ('?A[',i,',',',j]=');
              readln (A[i,j]);
            end;

End;



Аналогично и для prinArray;

Как сделаешь, пиши...

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 15 нояб. 2007 16:16 | IP
snakeq



Новичок

а как сделать удаление столбца ввод и вывод у меня работают

Всего сообщений: 6 | Присоединился: ноябрь 2007 | Отправлено: 15 нояб. 2007 16:37 | IP
KMA



Долгожитель

Смотря что ты понимаешь под удалением столбца. Обычно дают имеют ввиду затирание значений элементов 0.

Можно сделать просто сдвиг, на другой столбик, а потом просто не выводить последние, т. е. такого типа:

1 0 6                    0 6                          0 6 6
2 3 5     a стало   3 5  хотя реально  3 5  5
3 6 0                    6 0                          6 0 0

Т. е. такого типа. Выбирай любой! Попробуй реализовать, что не получиться, помогу.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 15 нояб. 2007 19:39 | IP
snakeq



Новичок

Я делал по второму типу но возникает ошибка
Code Sample:
program z11111; 
const k=10;
var a:array[1..10,1..10] of integer;
   m,n,i,j,p:integer;
procedure InputArray;
begin
  write('m=');readln(m);
  if m>10 then
     begin
        writeln('m must be <=10');readln;
        n:=0;m:=0;
        exit;
     end;
  write('n=');readln(n);
  if n>10 then
     begin
        writeln('n must be <=10');readln;
        n:=0;m:=0;
        exit;
     end;
  for i:=1 to m do
      for j:=1 to n do
         begin
            write('a[',i,',',j,']=');readln(a[i,j]);
         end;
  for i:=1 to m do
      begin
         for j:=1 to n do
            write(a[i,j]:3);
            writeln;
      end;readln;
end;
procedura ydalenia;
var
m,n,t,a:integer;
i,j:byte;
begin
          for i:=t to n-1 do
             for j:=1 to m do
                if a[i,j]<>0 then  
          for i:=1 to m do a[n,i]:=0
end;
begin
 InputArray;
end.


Всего сообщений: 6 | Присоединился: ноябрь 2007 | Отправлено: 15 нояб. 2007 22:12 | IP
Zheka



Новичок

to KMA: Скопировал твою программу, странно, но у меня опять выдаёт ошибку, если l сделать равным 15, как в условии задачи. Причём пробовал компилировать как на Turbo так и на Borland Паскале, выдаёт одно и то же.

Всего сообщений: 19 | Присоединился: октябрь 2007 | Отправлено: 16 нояб. 2007 15:49 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 ]

Форум работает на скрипте © Ikonboard.com