Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > замена элементов массива.


Автор: Tiglon 4.12.2011, 23:45
образовать и вывести одномерный массив. первый положительный элемент поменять местами с максимальным. сделано на паскале.
проблема в том что при выводе получаю в массиве два одинаковых значения.


Код

uses Crt;
var a:array[1..12] of real;
    k : integer; pd,max,e,d,q : real;
begin
   clrscr;
   max:=0;

   pd:=0;
   e:=0;
   for k:=1 to 12 do
   begin
   a[k]:=7*abs(k)+(((2*k+0.2)*cos(4*k)/sin(4*k))/((k+3)*(0.3*k+4)));
   writeln('a(',k,')=', a[k]:4:2);
   if max<a[k] then max:=a[k]; d:=max;
   end;
    for k:=1 to 12 do
   begin             while e=0 do begin
   a[k]:=7*abs(k)+(((2*k+0.2)*cos(4*k)/sin(4*k))/((k+3)*(0.3*k+4)));
   if a[k]>=0 then e:=1; pd:=a[k];  q:=pd;
   end;                   end;
   writeln;
   writeln('--------------');
   writeln;
   for k:=1 to 12 do
   begin
   a[k]:=7*abs(k)+(((2*k+0.2)*cos(4*k)/sin(4*k))/((k+3)*(0.3*k+4)));
   if a[k]=pd then a[k]:=d;
   if a[k]=max then a[k]:=q;
  writeln('a(',k,')=', a[k]:4:2);
   end;
   writeln('max=', max:4:2);
   writeln('pd=', pd:4:2);

   readln;
end.



Автор: 14SatanA88 5.12.2011, 08:22
Tiglon, я не знаю, что вы понаделали...
вот вам рабочий код

Код

program P1;

uses crt;

var a: array[1..12] of real;
    i, imax, ipol: integer; max, temp: real;
begin

  clrscr;

// создаем массив псевдослучайных чисел (заполнить его достаточно один раз)
  randomize;
  for i:=1 to 12 do
    a[i]:=(random(99)-random(99))+(1/random(99)); // так мы получим числа разных знаков и с дробной частью

// вывод массива на экран
  for i:=1 to 12 do
    writeln(a[i]:7:2);
  writeln;

// находим максимальный элемент и его индекс
  max:=-100; // заведомо маленькое число
  imax:=1;
  for i:=1 to 12 do
    if a[i]>max then
    begin
      max:=a[i];
      imax:=i;
    end;
  writeln('max element = ',max:7:2,' i imeet index = ',imax);

// находим первый положительный элемент, а точнее его индекс
  ipol:=1;
  for i:=1 to 12 do
    if a[i]>0 then
    begin
      ipol:=i;
      break; // нашли, прервали цикл
    end;
  writeln('pervij polozitelnij element imeet index = ',ipol);

// замена через промежуточную переменную temp
  temp:=a[imax];
  a[imax]:=a[ipol];
  a[ipol]:=temp;

// вывод массива напоследок
  for i:=1 to 12 do
    writeln(a[i]:7:2);
  writeln;

  readln;
end.

Автор: Tiglon 5.12.2011, 10:26
14SatanA88,  а что у меня не ясно то ?

Добавлено через 2 минуты и 28 секунд
14SatanA88, и спасибо за код.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)