Помощь - Поиск - Пользователи - Календарь
Полная версия: Перемещение массива в файле
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Gift
Как переместить четные числа в начало, а нечетные в конец не изменяя порядка
следования чисел с одинаковой четностью.
есть
12 7 9 6 -5 -6
4 6 -7 23 -24 9

надо
12 6 -6 7 9 -5
4 6 -24 -7 23 9

Код
uses crt;
const n=9;
type mas=array[1..6] of integer;
var
f:file of mas;
i,x,min,max,num_of_max:integer;
a:mas;
begin
clrscr;
randomize;
assign(f,'000.000');
rewrite(f);
for i:=1 to n do
begin
for x:=1 to n do
begin
 a[x]:=random(99);
 write(a[x]:3);
end;
writeln;
write(f,a);
writeln;
end;
close(f);


Код - в теги !!!
volvo
Ну и что этот код делает?
Кстати, двумя темами ниже есть очень похожее задание, только там нужно переместить нулевые элементы в конец файла.
Вот тут...
Guest
Цитата(volvo @ 4.03.05 21:02)
Ну и что этот код делает?
Кстати, двумя темами ниже есть очень похожее задание, только там нужно переместить нулевые элементы в конец файла.
Вот тут...

Показывает введеные данные.
А как сделать с помощью filesise, filepos, seek?
меня такой метод больше интересует.
volvo
Цитата(Guest @ 4.03.05 22:28)
А как сделать с помощью filesise, filepos, seek?
меня такой метод больше интересует.


А вот сходи по ссылке, которую я дал в предыдущем посте, и вместо закомментированных строк поставь то, что нужно ... Конечно, нужно будет пользоваться filesize, filepos и seek...
Guest
Цитата(volvo @ 4.03.05 23:39)
А вот сходи по ссылке, которую я дал в предыдущем посте, и вместо закомментированных строк поставь то, что нужно ... Конечно, нужно будет пользоваться filesize, filepos и seek...

я не очень понимаю как
помоги плизззззззз
volvo
Guest, ну в крайнем случае тебе придется воспользоваться дополнительным массивом (или файлом).
Guest
Цитата(volvo @ 5.03.05 12:55)
Guest, ну в крайнем случае тебе придется воспользоваться дополнительным массивом (или файлом).

массив должен быть один
а вот переписат можно и вдругой файл
volvo
Ну вот так можно... Правда не очень рационально, но зато без дополнительных массивов и файлов...
Исходный код
const
n = 8;
arr: array[1 .. n] of integer =
(1, 2, 3, 4, 5, 6, 7, 8);

var
f: file of integer;

function good: boolean;
var
x: integer;
res: boolean;
begin
reset(f);
repeat
read(f, x)
until odd(x);

res := true;
while (not eof(f)) and res do
begin
read(f, x);
res := res and odd(x)
end;
good := res
end;

procedure change;
var x, T: integer;
begin
reset(f);
repeat
read(f, x);
until odd(x);

T := x;
while not eof(f) do
begin
read(f, x);
seek(f, filepos(f) - 2);
write(f, x);
seek(f, filepos(f) + 1);
end;
seek(f, filesize(f) - 1);
write(f, T);
end;

var
i: integer;
x: integer;
f_read, f_write: longint;

begin
assign(f, 'test.ttt');
rewrite(f);

for i := 1 to n do
write(f, arr[i]);

{ check }
writeln('before sorting:');
reset(f);
while not eof(f) do
begin
read(f, x);
write(x:5)
end;
writeln;

while not good do
change;

{ check it: }
writeln('after sorting:');
reset(f);
while not eof(f) do
begin
read(f, x);
write(x:5)
end;
writeln;

close(f)
end.
Guest
Всем спасибо за предыдущую задачу. А вот мой вариант:
Исходный код
uses crt;
const n=9;
type mas=array[1..n] of integer;
fmass=file of mas;
var
f: fmass;
i,x:integer;
a:mas;
procedure oddSort(var m:mas);
var x1,t:integer;
begin
x1:=1;
while(x1<n)do
begin
if odd(M[x1]) and not odd(M[x1+1])
then
begin
t:=m[x1];
m[x1]:=m[x1+1];
m[x1+1]:=t;
x1:=x1-1;
if x1<1 then x1:=1;
end
else
x1:=x1+1;
end;
end;
procedure vivod(var f :fmass );
begin
reset(f);
writeln;
while not eof(f) do
begin
read(f,a);
for x:=1 to n do
write(a[x],' ');
writeln;
end;
end;
begin
clrscr;
randomize;
assign(f,'000.000');
{$I-}reset(f);{$I+}
if ioresult<>0 then begin
rewrite(f);
repeat
for i:=1 to n do
a[i]:=random(10);
write(f,a);
writeln('vvesti eshe ?', 'y');
until readkey='n';
close (f);
end;
window(1,1,40,25);
vivod(f);
reset(f);
while not eof(f) do
begin read(f,a);
oddSort(a);
seek(f,filepos(f)-1);
write(f,a);
end;
window(40,1,80, 25);
vivod(f);
readkey;
close(f);
end.



1. создать файл f1, где каждая компонента - матрица nXn. Поменять местами элементы лежащие на главной и побочной диагоналях в каждой компоненте (т. е. матрице) файла. Минимальное значение каждой компоненты записать в файл f2.

2. создать файл f1, где компонента массив из n чисел(n кратно трем). Переставить числа в каждой комбинации таким образом:
есть
123 456 789
321 654 987
Средние числа каждой проссумировать и общую сумму каждой компоненты записать в файл f2,
а в файл f1 преставленные компоненты записать обратно после перестановки. В файле f2 найти максимальное значение и удолить. Вывести файлы на экран.

3. Создать текстовый файл, где каждая строка файла - это предложение. Переставить местами первое и последнее слово каждого предложения. Переставленный текст записать строкой в новый текстовый файл.

У кого какие есть предложения?
Как всегда желательно все узреть наглядно, то есть в исходниках.
volvo
Все-таки, наверное, поиск по форуму сделан для красоты. Или просто лень пользоваться? А самому подумать, как программы написать - тоже лень? Ведь они все однотипные.

Объясните, с чем именно возникает проблема...
Guest
Цитата(volvo @ 9.03.05 18:58)
Все-таки, наверное, поиск по форуму сделан для красоты. Или просто лень пользоваться? А самому подумать, как программы написать - тоже лень? Ведь они все однотипные.

Объясните, с чем именно возникает проблема...

искал но ничего интересного не нашел
просто хоть знать в каком направлениии капать.
Приведенные условия это менее 10% всего условий к задачам.
А я просто выкинул сюда то что меня больше интересует. НЕ все условие.
Так сказать туплю с этими условиями smile.gif
volvo
А "просто выкидывать условия" - бесполезно... Тут могут помочь, но решать все полностью, да еще после того, как на приведенное рещение ты отвечаешь своим - это навряд ли. Значит, умеешь, но не хочешь...
Guest
Цитата(volvo @ 10.03.05 14:54)
А "просто выкидывать условия" - бесполезно... Тут могут помочь, но решать все полностью, да еще после того, как на приведенное рещение ты отвечаешь своим - это навряд ли. Значит, умеешь, но не хочешь...

да мне и помогли с функцией odd, я ее раньше и не знал
я от нее и оттолкнулся+метод Шелла(это там где сортировка)+стандартного ввода ну и пожалуй все

1. мне хоть бы пример как с таким работать, ну скажем просто найти сумму у какойнить диагонали

2. тут вобще в догадках теряюсь

3. знаю как там буквами играть, а со словами лажа получаеться
volvo
Цитата(Guest @ 10.03.05 15:50)
1. ... ну скажем просто найти сумму у какойнить диагонали

FAQ: Матрицы - типичные задачи

Цитата(Guest @ 10.03.05 15:50)
3. знаю как там буквами играть, а со словами лажа получаеться

FAQ: Работа со строками
Guest
Цитата(volvo @ 10.03.05 16:57)

нет, у меня проблема не в этом

у меня проблемы с файлами, как это будет с файлами работать?
в текстовом скорее всего как со стрингами
Код
 kpr:=['.','!','?'];
 ksl:=[' ',':',';'];
 ksl:=ksl+kpr;
 assign(f,'file1');
 rewrite(f);
 write('Enter string: ');
 readln(s);

for i:=1 to length(s) do
   begin
   if not(s[i] in ksl) then inc(kb);
       if (s[i] in kpr) then while not((length(s))-1 in ksl) do inc(kkb);
      copy(s[i], kb);
      copy(length(s)-kkb-1, kkb);


я хоть в правильном направлении мыслю

тоесть пока не первый признак конца слова запоминаем количество букв.
если конец редложения то идем обратно пока не признак конца слова.
выделяем первое и помледнее слова.
как поменять?

в типизированном не знаюю, как там эти filepos, seek, filesize использовать

а как на счет задачи нумбер 2) у меня даже идеи никакой нет
ваши предложения
volvo
Цитата(Guest @ 10.03.05 17:23)
в типизированном не знаюю, как там эти filepos, seek, filesize использовать
И это есть в FAQ.

Цитата
я хоть в правильном направлении мыслю

Если речь об очередном изобретении велосипеда, то отвечаю: "Да, в правильном". Но вот пока этот кусок программы компилироваться не будет. "Несовместимые типы"... А прежде, чем говорить
Цитата(Guest @ 10.03.05 17:23)
нет, у меня проблема не в этом
нужно хотя бы заглянуть по ссылке. Вот по второй ссылке как раз и была функция разбиения текста на строки...

Я так понимаю, Вы хотите, чтобы Вам от и до все сделали? FAQ читать не желаете...
Guest
Цитата(volvo @ 10.03.05 18:53)
И это есть в FAQ.
Если речь об очередном изобретении велосипеда, то отвечаю: "Да, в правильном". Но вот пока этот кусок программы компилироваться не будет. "Несовместимые типы"... А прежде, чем говорить
нужно хотя бы заглянуть по ссылке. Вот по второй ссылке как раз и была функция разбиения текста на строки...

Я так понимаю, Вы хотите, чтобы Вам от и до все сделали? FAQ читать не желаете...

нет, я нехочу от и до, к томуже это не все усовия задач,
я просто хочу понять как с файом работать
volvo
Цитата(Guest @ 10.03.05 18:02)
я просто хочу понять как с файом работать

Тогда Вам сюда: FAQ: Файлы и работа с ними

Закрыто.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.