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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2010, 19:52   #1
Mr.BL@CK
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 27
По умолчанию Задача на массивы в Паскале


Есть вот такая задача
Массив Р я сформировал, получил вот такие значения


Теперь, по условию нужно обменять местами первые 2 элемента, которые отличаются от 0 на Е (Е=1)
Но,как я не пытался, мне выдает все тот же массив
Вот код,может где ошибся, еще до обмена...уже просто не знаю
Код:
Program Labor3b;
Uses Crt;
Const  Nmax = 100;
       eps = 1;
Type  Ar = array[1..Nmax] of real;
Var
       min,
       max,R: real;
       j1,
       j2,
       j,
       i,               { параметр цикла }
       n,
       np,
       m : byte;
       X,Y,Z,P : Ar;          { массивы }
       F : text;        { исходный файл }
{ -------------------------------------------------------- }
Procedure WaitEscape;
{ Приостановка программы до нажатия клавиши Esc }
Var  ch : char;
Begin
  Repeat
    ch:=ReadKey;
  Until ord(ch)=27;
End { WaitEscape };
{ -------------------------------------------------------- }
Procedure ReadArray(Var X:Ar; Var n:byte);
{ Ввод одномерного массива }
Begin
  Reset(F);
  n:=0;
  While not SeekEof(F) do
    Begin
      Inc(n);
      Read(F,X[n]);
    End;
  Close(F);
End { ReadArray };
{ -------------------------------------------------------- }
Procedure WriteArray(S:string; Var X:Ar; n:byte);
{ Вывод на экран одномерного массива }
Var  i,k : byte;
Begin
  Writeln(S,'  n = ',n);
  k:=0;
  For i:=1 to n do
    Begin
      k:=k+1;
      If k<5 then
        Write(x[i]:8:2,'  ')
      Else
        Begin
          k:=0;
          Writeln(x[i]:8:2);
        End
    End;
  If k>0 then
    Writeln;
End { WriteArray };


Begin

{ Ввод и печать исходных данных }
  ClrScr;
  Assign(F,'X.dat');
  ReadArray(X,n);
  WriteArray('Массив  X',x,n);


{ Вычисление элементов массивов Р,Y и Z }
  j:=1;
  For i:=1 to n do
    Begin
         y[i]:=sqr(sin(x[i]))-sqr(cos(sqr(x[i])));
      If (y[i]-0.25-sin(x[i])>eps) then
        z[i]:=ln(sqr(cos(pi/4))*(x[i])+(1/2+1))
      Else
        z[i]:=exp(1+y[i])-exp(ln(abs(y[i]))/3);

         p[j]:=y[i]+z[i];
         p[j+1]:=y[i]-z[i];
         j:=j+2;
    End;


   np:=j-1;
   max:=0; min:=0;
For j:=1 to np do
  Begin
    If (p[j]>min) and (p[j]>0) then if (p[j]>0) and (p[j]<min) then (min):=(p[j]);
  end;
For j:=1 to np do
  Begin
    If (p[j]<max) and (p[j]<0) then if (p[j]<0) and  (p[j]>max) then (max):=(p[j]);
  end;
      Begin
      For j:=1 to np do
      If max=p[j] then j1:=j;
      If min=p[j] then j2:=j;
      End;
   Begin
      R:=p[j2]; p[j2]:=p[j1]; p[j1]:=R;  
    End;

  WriteArray('Массив  Y',y,n);
  WriteArray('Массив  Z',z,n);
  WriteArray('Массив  P',p,np);



{ Приостановка работы программы }
  WaitEscape;
  end.

Помогите пожалуйста...

П.с. в Архиве сам PAS файл и файл Х.dat, в котором указаны значения для массива Х
Вложения
Тип файла: rar Lab.rar (1.2 Кб, 6 просмотров)
Mr.BL@CK вне форума Ответить с цитированием
Старый 18.11.2010, 10:21   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Зачем ты используешь точность eps для
{ Вычисление элементов массивов Р,Y и Z }
Она здесь еще не нужна по-условию задачи.

Ни одно из этих условий никогда не исполнится.
If (p[j]>min) and (p[j]>0) then if (p[j]>0) and (p[j]<min) then (min):=(p[j]);
If (p[j]<max) and (p[j]<0) then if (p[j]<0) and (p[j]>max) then (max):=(p[j]);
min и max у тебя так и останутся по нулям.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 18.11.2010, 17:01   #3
Mr.BL@CK
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 27
По умолчанию

А...с условием накосячил.
Сделал по иному, но толку нету

Цитата:
Ни одно из этих условий никогда не исполнится.
А как тогда обменять ?

Последний раз редактировалось Mr.BL@CK; 18.11.2010 в 17:49.
Mr.BL@CK вне форума Ответить с цитированием
Старый 19.11.2010, 08:30   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
var
 n1,n2,j,k,np : Integer;
 P : array[1..10] of real;
 eps,exch : real;

begin
np := 10;
eps := 0.1;
for j := 1 to 10 do P[j] := -1 + random*2;
writeln;
for j := 1 to np do
 write(P[j],' ');
writeln;

n1 := 0; n2:=0;
For j:=1 to np do
 if abs(P[j]) < eps then
  begin
  n1 := j; // Первый подходищий элемент
  for k := n1+1 to np do
   if abs(P[j]) < eps then
   begin
   n2 := k; break;
   end;
  end;
if (n1 = 0) or (n2 = 0) then
 writeln ('Нет двух подходищих чисел')
else
 begin
 writeln (n1,' ',n2);
 exch := P[n1];
 P[n1] := P[n2];
 P[n2] := exch;
 end;

for j := 1 to np do
 write(P[j],' ');
writeln;

end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 19.11.2010, 16:39   #5
Mr.BL@CK
Пользователь
 
Регистрация: 17.11.2010
Сообщений: 27
По умолчанию

А зачем отдельную программу делать?
А если это не она, я все равно не могу это в свой код ввести
Или это пример?Попробовал сделать по образцу, не вышло

Спасибо что помогли
Разобрался, вот кому может и пригодиться

Код:
Program Labor3b;
Uses Crt;
Const  Nmax = 100;
       eps = 1;
Type  Ar = array[1..Nmax] of real;
Var
       min,
       max,R: real;
       j1,j2:real;
       jmax,jmin:shortint;
       j,
       i,               { параметр цикла }
       n,
       np,
       m : byte;
       X,Y,Z,P : Ar;          { массивы }
       F : text;        { исходный файл }
{ -------------------------------------------------------- }
Procedure WaitEscape;
{ Приостановка программы до нажатия клавиши Esc }
Var  ch : char;
Begin
  Repeat
    ch:=ReadKey;
  Until ord(ch)=27;
End { WaitEscape };
{ -------------------------------------------------------- }
Procedure ReadArray(Var X:Ar; Var n:byte);
{ Ввод одномерного массива }
Begin
  Reset(F);
  n:=0;
  While not SeekEof(F) do
    Begin
      Inc(n);
      Read(F,X[n]);
    End;
  Close(F);
End { ReadArray };
{ -------------------------------------------------------- }
Procedure WriteArray(S:string; Var X:Ar; n:byte);
{ Вывод на экран одномерного массива }
Var  i,k : byte;
Begin
  Writeln(S,'  n = ',n);
  k:=0;
  For i:=1 to n do
    Begin
      k:=k+1;
      If k<5 then
        Write(x[i]:8:2,'  ')
      Else
        Begin
          k:=0;
          Writeln(x[i]:8:2);
        End
    End;
  If k>0 then
    Writeln;
End { WriteArray };


Begin

{ Ввод и печать исходных данных }
  ClrScr;
  Assign(F,'X.dat');
  ReadArray(X,n);
  WriteArray('Массив  X',x,n);


{ Вычисление элементов массивов Р,Y и Z }
  j:=1;
  For i:=1 to n do
    Begin
         y[i]:=sqr(sin(x[i]))-sqr(cos(sqr(x[i])));
      If (y[i]>0.25+sin(x[i])) then
        z[i]:=ln(sqr(cos(pi/4))*(x[i])+(1/2+1))
      Else
        z[i]:=exp(1+y[i])-exp(ln(abs(y[i]))/3);

         p[j]:=y[i]+z[i];
         p[j+1]:=y[i]-z[i];
         j:=j+2;
    End;


   np:=j-1;
   WriteArray('Массив  Y',y,n);
   WriteArray('Массив  Z',z,n);
   WriteArray('Массив  P до обмена',p,np);
   
   max:=-30000;
   min:=30000;
   For j:=1 to np do
   begin
   If (p[j]<0) and (p[j]>max) then
    begin
     max:=p[j];
     jmax:=j ;
     end
     else
  If (p[j]>0) and (p[j]<min) then
   begin
    min:=p[j];
    jmin:=j;
    end;
   end;


  R:=p[jmax]; p[jmax]:=p[jmin]; p[jmin]:=R;  {Обмен элементов }


  WriteArray('Массив  P после обмена',p,np);



{ Приостановка работы программы }
  WaitEscape;

  End.

Последний раз редактировалось Stilet; 24.11.2010 в 09:42.
Mr.BL@CK вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
массивы в паскале афродита Помощь студентам 7 10.04.2010 08:51
Задача в Паскале.Массивы. Deco18 Помощь студентам 6 04.03.2010 08:37
задача на массивы в Паскале=) lotrcorp Помощь студентам 1 30.05.2009 07:49
Задача на двумерные массивы в паскале, нужна помощь GaJIbI4 Помощь студентам 3 15.04.2009 09:31