Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с упорядоченным массивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Райдер
ребят, такая же фигня. в Паскале надо решить такую задачу:
Цитата
вставить число в упорядоченный массив. Вновь образованный массив вывести на экран.

Завтра в универе будет грустно без этой задачи. А в Паскале и вообще в программировании не понимаю НИЧЕГО. вообще дуб дубом. задача то наверное для вас детская, но кто поможет тому МЕГА респект и спасибо! smile.gif :molitva: :molitva: :molitva:

Добавлено (21.12.04 9:55):
сорри, забыл, массив одномерный.
klem4
Код
uses crt;
const n=5;
var x:array[1..n] of extended;
   i:integer;
   p:extended;

Begin
  clrscr;
  writeln('Vvedite elementi massiva');
  for i:=1 to n do
   readln(x[i]);
  writeln('Vvedite nomer elementa,kotori hotite izmenit');
   readln(i);
  writeln('Vvedite  znachenie, kotoroe hotite prisvoit elementy s nomerom ',i);
   readln(p);
   writeln;

   x[i]:=p;
  for i:=1 to n do
   writeln(x[i]:2:3);
   readln;
   end.
mithquessir
klem4
Вообще-то элемент нужно было вставить, а не заменять. :yes:
Код

const
 n = 5;
 a:array[1..n+1] of integer = (1,2,3,4,5,0);
var
 new,i,pos:integer;
begin
 WriteLn('Введите индекс вставляемого элемента');
 ReadLn(pos);
 WriteLn('Введите вставляемый элемент');
 ReadLn(new);
 for i := n+1 downto pos do
   a[i] := a[i-1];
 a[pos] := new;
 for i := 1 to n+1 do
   Write(a[i]:2);
end.
Райдер
спасибо ребят огромное, тут есть еще одна задача, если поможете,будет мне счастье в жизни. rolleyes.gif
"Найти макс. элемент двумерного массива А(n,m) и вычесть его из элементов столбца в котором он находится."
еще раз спасибо.
mithquessir
Код

const
 n = 3;
 m =3;
 a:array[1..n,1..m] of integer = ((1,-2,3),(-3,2,-1),(2,-1,3));
var
 max,i,j,ind:integer;

begin
 max := -maxint;
 for i := 1 to n do
   for j := 1 to m do
     if a[i,j] > max then
       begin
         max := a[i,j];
         ind :=j;
       end;
 for i := 1 to n do
   dec(a[i,ind],max);
 for i := 1 to n do
   begin
     WriteLn;
     for j := 1 to m do
       Write(a[i,j]:3);
   end;
end.
klem4
Извиняюсь, неправильно понял условие.
klem4
Может я конечно чо-то не понимаю, но у тебя пропадает один из элементов в конце, тебе не кажется ? :D

По моему правильнее так :

Код
uses crt;
const n=6;
var x:array[1..n] of integer;
   i,new,newi,p:integer;

Begin
  clrscr;
  randomize;
  for i:=1 to n-1 do
   begin
      x[i]:=random(6);
      write(x[i]);
      write(' ');
   end;
   writeln;
   readln(newi);
   writeln;
   readln(new);
   writeln;

   for i:=n downto new do
    begin
       p:=x[i-1];
       x[i]:=p;
    end;
    x[newi]:=new;

   writeln;
   for i:=1 to n do
    begin
       write(x[i]);
       write(' ');
    end;

   readln;
   end.
mithquessir
klem4
Массив я описываю константой, потому что так быстрее, а 0 в конце - просто пустой элемент - это то же самое, что ты объявил массив из n элементов, а заполнил его весь, кроме последнего элемента.
klem4
У тебя массив из_6_элементов (1,2,3,4,5,0)
в конечном массиве одни из элементов у тебя пропадает, у меня массив становится на 1 элемент больше
ЗАДАЧА в массив ВСТАВИТЬ элемент ,все элементы которые были, должны остаться.

поставь вот это в начале и сравник с конечным массивом, все эелементы на месте ?
Код


{****************************}
for i:=1 to n+1 do
 begin
    write(a[i]);
    write(' ');
 end;
readln;
{****************************}
volvo
klem4
Цитата
У тебя массив из_6_элементов

А у тебя тоже массив из 6-ти элементов, но инициализируешь ты почему-то только 5... Логичнее делать так, как сделал mithquessir:
Код

const
n = 5;
a:array[1..n+1] of integer = (1,2,3,4,5,0);

при n = 5 описать массив на 1 элемент больше, и использовать лишний элемент для расширения...

P.S. Если уж об этом зашел разговор, то сделать так, чтобы массив действительно менял размер, невозможно без использования динамической памяти...
mithquessir
volvo
Согласен. :yes:
Код

type
 ArrElem = integer;
 ArrType = array[1..1] of ArrElem;
 TArr = object
   Arr:^ArrType;
   private
     ArrSize:word;
   public
       constructor Create;
       destructor Destroy;
       procedure SetArrSize(size:word);
       procedure Enter;
       procedure Print;
       procedure Insert(pos:word,num:integer);
       procedure IncArrSize;
   end;

 constructor TArr.Create;
 begin
   GetMem(Arr,ArrSize * SizeOf(ArrElem));
 end;

 destructor TArr.Destroy;
 begin
   FreeMem(Arr,ArrSize * SizeOf(ArrElem));
 end;

 procedure TArr.SetArrSize(size:word);
 begin
   ArrSize := size;
 end;

 procedure TArr.Enter;
 var
   i:integer;
 begin
   WriteLn('Vvodite elementy postrochno');
   for i := 1 to ArrSize do
   begin
     Write('[',i,']=');
     Read(Arr^[i]);
   end;
 end;

 procedure TArr.Print;
 var
   i:integer;
 begin
   WriteLn('Massiv:');
   for i := 1 to ArrSize do
   WriteLn('[',i,']=',Arr^[i]);
 end;

 procedure TArr.Insert(pos:word,num:integer);
 var
   i:integer;
 begin
  IncArrSize;
  for i := ArrSize downto pos do
    Arr^[i] := Arr^[i-1];
  Arr^[pos] := num;
 end;

 procedure TArr.IncArrSize;
 var
   b:array[1..1000] of ArrElem;
   i,oldsize:integer;
 begin
   for i := 1 to ArrSize do
     b[i] := Arr^[i];
   oldsize := ArrSize;
   SetArrSize(ArrSize+1);
   Create;
   for i := 1 to oldsize do
     arr^[i] := b[i];
 end;

var
 a:TArr;
begin
 a.SetArrSize(5);
 a.Create;
 a.Enter;
 a.Insert(2,0);
 a.Print;
 a.Destroy;
end.
volvo
mithquessir
Если бы ты еще ФАК посмотрел, то нашел бы там уже готовый модуль, который реализует динамический массив... rolleyes.gif
mithquessir
volvo
Смотрел, это же святая святых. smile.gif :D lol.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.