![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
массив.
Laist © (2003-01-13 18:52:00)Ребята помогите решить задачку, не успеваю, на носу зачет.
Вводится массив. Вынуть элемент, стоящий посередине в массиве и вставить его в начало. Например, если введен массив
5 1 4 6 2 10 8,
результат должен быть:
6 5 1 4 2 10 8
Если длина массива четная, то вынимать элемент, стоящий левее середины. Динамическими массивами не пользоваться.
В первой строке входа дан размер вводимого массива N (1<=N<=100). Затем следуют N элементов массива (целые числа, по одному в каждой строке).
На выход напечатать N чисел, по одному в каждой строке
Neox (2003-01-13 23:21:00) [1]или тогда вообще
var
List: TStringList;
...
List.LoadFromFile();
Palladin (2003-01-13 21:01:00) [2]для Delphi
AssignFile
CloseFile
Fors (2003-01-13 20:35:00) [3]Было бы все хорошо, но конструкцией assign в данной программе использовать нельзя, этим методом я пробовал, поэтому и попросил помощи
var N, c, ps: integer;
F: Text;
Ar: array [0..100] of integer;
begin
Assign(F, "C:\massive.in");
Reset(F);
ReadLn(F, N);
for c:=1 to N do ReadLn(F, Ar[c]);
Close(F);
if N mod 2 <> 0 then ps:=N div 2+1 else ps:=N div 2; //находим центр
Ar[0]:=Ar[ps]; //центральный элемент копируем в свободную ячейку массива
for c:=ps-1 downto 1 do
Ar[c+1]:=Ar[c]; //переставляем эл-ты, что бы не было "дырки"
Ar[1]:=Ar[0]; //"вставляем" центральный элемент на первую позицию
Assign(F, "C:\massive.out");
Rewrite(F);
for c:=1 to N do
WriteLn(F, Ar[c]);
ReadLn;
Close(F);
end.
Neox (2003-01-13 20:11:00) [4]аха...
тогда вот так:
if N mod 2 <> 0 then ps:=N div 2+1 else ps:=N div 2-1;
Palladin (2003-01-13 20:07:00) [5]хм...
а с round(N/2) чем не понравилось...
то же самое только в одну строчку умещается...
тем более в случае четности левый элемент от центра надо а не правый....
Neox (2003-01-13 20:00:00) [6]Неужели так сложно?
var N, c, ps: integer;
F: Text;
Ar: array [0..100] of integer;
begin
Assign(F, "C:\massive.in");
Reset(F);
ReadLn(F, N);
for c:=1 to N do ReadLn(F, Ar[c]);
Close(F);
if N mod 2 <> 0 then ps:=N div 2+1 else ps:=N div 2; //находим центр
Ar[0]:=Ar[ps]; //центральный элемент копируем в свободную ячейку массива
for c:=ps-1 downto 1 do
Ar[c+1]:=Ar[c]; //переставляем эл-ты, что бы не было "дырки"
Ar[1]:=Ar[0]; //"вставляем" центральный элемент на первую позицию
Assign(F, "C:\massive.out");
Rewrite(F);
for c:=1 to N do WriteLn(F, Ar[c]);
Close(F);
end.
Palladin (2003-01-13 19:23:00) [7]может за тебя зачет сдать?
прими мои соболезнования.
Fors (2003-01-13 19:14:00) [8]Sorry, но я не понимаю, а в четверг зачетб времени не хватает вникать, расчитываю на вашу помощь
Palladin (2003-01-13 19:09:00) [9]сорри невнимательно прочитал условие...
idxMiddle:=round(N/2);
oldMiddleValue:=N[idxMiddle];
for i:=idxMiddle downto 2 do N[i]:=N[i-1];
N[1]:=oldMiddleValue;
Palladin (2003-01-13 19:06:00) [10]oops
вместо "N div 2" лучше использовать round(N/2)
Palladin (2003-01-13 19:03:00) [11]остальное надеюсь сам сможешь?
Palladin (2003-01-13 19:02:00) [12]мда...
обмен числами между серединой и началом
M[1]:=M[1]+M[N div 2];
M[N div 2]:=M[1]-M[N div 2];
M[1]:=M[1]-M[N div 2];
M - массив
N - кол элементов