Приветствую Вас Гость | RSS

Delphi заготовки

Среда, 27.11.2024, 03:03
Главная » 2012 » Апрель » 6 » функции для работы с Одномерными массивами
07:53
функции для работы с Одномерными массивами
Одномерный массив
Задача.

Переместить минимальные элементы в начало, сдвинув остальные элементы вправо.



исходник для работы с одномерным массивом на pascal / delphi
const ncount=25; // размер массива

var a:array [1..ncount] of integer; // массив элементов

procedure CreateArray;
var i:integer;
begin
randomize;// инициализация
  for i:=1 to ncount-1 do  a[i]:=random(150);
end;
// функция поиска минимального элемента
Function GetMin:integer;
var i:integer; // переменная
    MinA:integer;
begin
  MinA:=a[1];
  for i:=1 to ncount-1 do
     if MinA>a[i] then MinA:=a[i];
  result:=MinA;
end;
// возвращает index минимального элемента
Function GetMinIndex:integer;
var i:integer; // переменная
    MinA:integer;
begin
  MinA:=a[1];
  result:=1;
  for i:=1 to ncount-1 do
     if MinA>a[i] then begin MinA:=a[i];result:=i; end;
end;

procedure move_right(index:integer);
var i:integer;
begin
 for i:=ncount-2 downto index do  a[i+1]:=a[i];

end;

procedure move_left(index:integer);
var i:integer;
begin
 for i:=index to ncount-1 do  a[i]:=a[i+1];

end;
// выводим строку в виде элементов через запятую
Function ShowArray:string;
var s:string;
    i:integer;
begin
s:='';
 for i:=1 to ncount-1 do
 if s='' then s:=s+inttostr(a[i])
 else
  s:=s+','+inttostr(a[i]);
  result:=s;
end;

var mina // значения минимального элемента
,x:integer; // временная переменая хранит индес мин. элемента
begin

   CreateArray; // заполняем массив
   writeln(ShowArray); // выводим исходный массив
   x:=GetMinIndex; // получем индекс минимальго элемента
   mina:=a[x]; // получаем знаяения мин. элемента
   move_left(x); // сдвигаем массив в лево  / затираем минимальный элемент массива
   move_right(1); // сдвигаем массив вправо с первого элемента
   a[1]:=mina; // выставляем значения минимального элемента в начало
   writeln(ShowArray); // выводим полученный массив

end.

http://www.programmersforum.ru/showthread.php?t=194899

http://netsoftware.ucoz.ru/Program2.pas

Просмотров: 2670 | Добавил: NetSoftWare | Рейтинг: 0.0/0
Всего комментариев: 1
1 NetSoftWare  
0
{
Составить процедуру (или функцию), которая переставляет первые k элементов массива A в конец
(число k задается пользователем):
A[k+1], A[k+2], …, A[n], A[1], A[2], …, A[k].
Следующие действия должны выполняться
отдельными процедурами (и/или функциями):
1) заполнение массива случайными числами из заданного интервала;
2) вывод массива на экран;
3) заполнение массива нулями (инициализация);

4) сохранение массива в текстовый файл;
5) чтение массива из текстового файла;

6) удаление нескольких элементов из указанного места (со сдвигом);
7) добавление нескольких элементов в указанное место (со сдвигом).
Процедуры (и/или функции) должны работать с массивами как с параметрами, но не как с глобальными переменными.
}
uses crt;
const MaxNcount=1000; // размер массива
type
TarrayInt=array [1..MaxNcount] of integer;

var b:TArrayInt; // массив элементов
Bcount:integer;

//1) заполнение массива случайными числами из заданного интервала;
procedure CreateArray(var a:TArrayInt;Ncount:integer);
var i:integer;
begin
randomize;// инициализация
for i:=1 to ncount do a[i]:=1+random(20);
end;
//2) вывод массива на экран;
Function ShowArray(const a:TArrayInt;Ncount:integer):string;
var s:string;
i:integer;
begin
s:='';
for i:=1 to ncount do
if s='' then s:=s+inttostr(a[i])
else
s:=s+','+inttostr(a[i]);
result:=s;
end;
//3) заполнение массива нулями (инициализация);
procedure CreateArrayInit(var a:TArrayInt;Ncount:integer);
var i:integer;
begin
randomize;// инициализация
for i:=1 to ncount do a[i]:=0;
end;
// 4) сохранение массива в текстовый файл;
Procedure SaveArrayToFile(const a:TArrayInt;Ncount:integer;FileName:string);
var F:file of integer;
x:integer;
begin
assign(f,FileName);
rewrite(f);
for x:=1 to ncount do
write(f,a[x]);
close(F);
end;
//5) чтение массива из текстового файла;
Procedure LoadArrayFromFile(var a:TArrayInt;var Ncount:integer;FileName:string);
var F:file of integer;
y:integer;
s:integer;
begin
Y:=1;
assign(f,filename);
reset(f);
repeat
read(f,s);
a[y]:=s;
y:=y+1;
until eof(f);
close(F);
Ncount:=y;
end;

//6) удаление нескольких элементов из указанного места (со сдвигом);
procedure move_left(var a:TArrayInt;Ncount:integer; index:integer);
var i:integer;
begin
for i:=index to ncount do a[i]:=a[i+1];
end;
//7) добавление нескольких элементов в указанное место (со сдвигом).
procedure move_right(var a:TArrayInt;Ncount:integer;index:integer);
var i:integer;
begin
for i:=ncount downto index do a[i+1]:=a[i];
a[index]:=0;
end;
// двигаем первые к элементов в конец списка и сдигаем списк
procedure MovCountElementToEnd(var a:TArrayInt;var Ncount:integer; k:integer);
var t,X:integer;
begin
for x:=1 to k do begin
t:=a[1];
move_left(a,ncount,1);
a[Ncount]:=t;
end;
end;
var k:integer;
begin
clrscr;
writeln('Введите размер массива ');
readln(Bcount);
if (Bcount>MaxNcount) and (Bcount>0) then begin
Writeln('кол-во элементов должно быть меньще ',MaxNcount,' и больше 0');
exit;
end;
CreateArray(b,Bcount);
write('Исходный массив ');
Writeln(ShowArray(b,Bcount));
// SaveArrayToFile(b,bcount,'c:\1input.txt');
// LoadArrayFromFile(b,bcount,'c:\1input.txt');
// Writeln('всего элементов массива из файла ',bcount-1);
// Writeln(ShowArray(b,Bcount));


writeln('Введите кол-во элементв который необходимо сдвинуть в конец списка (k) ');
readln(k);
if (k>bcount) and (K>0) then begin
Writeln('номер элементов должно быть меньще ',bcount+1,' и больше 0');
exit;
end;
MovCountElementToEnd(b,bcount,k);
write('Полуеный массив ');
Writeln(ShowArray(b,Bcount));
end.

Имя *:
Email *:
Код *: