У меня проблема, есть готовая программа но ее надо разбить на процедуры,программа рабочая.
Моя ася 5515795 заплачу 50р
Сдавать послезавтра !
{ Задание - если имеются нулевые и отрицательные элементы}
{ то отсортировать элементы стоящие между}
{ первым отрицательным и последним нулевым }
{ в порядке возрастания . Если нет нулевых или отрицательных}
{ не сортировать }
{Надо разбить на процедуры :}
{1)Ввод массива }
{2)Вывод массива }
{3)Обработка массива : }
{-Анализ (состоит из поиска нулевого и отрицательного элемента а так } {же флаг }
{Который передает управление дальше или на конец программы) }
{-Выбор элементов для сортировки }
{-Сортировка }
{-Возврат отсортированного массива в начальный }
Program zamuta;
var
i,max,k,x1,x2,n,m,p,n3,tmp,j,z:integer;
a:array [1..100] of integer;
b:array [1..100] of integer;
f1,f2:text;
IncreaseFlag:Boolean;
begin
assign(f1,'in.txt'); {начинаем делать}
assign(f2,'out.txt');
reset(f1);
n:=0;
i:=1;
while not EoF(f1) do {чтение файла}
begin
n:=n+1;
read(f1,a[i]); {перегоняется в массив а(и) }
i:=i+1;
end;
close(f1);
for i:=1 to n do {поиск последнего нулевого}
begin
if a[i]=0 then
m:=i;
x1:=1 {присваиваем ему букву м и х1=1}
end;
for i:=n downto 1 do {поиск первого отрицательного}
begin
if a[i]<0 then
p:=i;
x2:=1 {присваеваем ему букву п и х2=1}
end;
k:=0; {выбор элементов для сортировки}
for i:=p+1 to m-1 do
begin
k:=k+1;
b[k]:=a[i]; {перегоняем в массив б(к) }
end;
n3:=m-p; {считаем колличество чисел в массиве}
{дальше должна идти проверка если}
{ х1 и х2 оба равны единице то флаг принимает true}
{ и мутим дальше,если хотя бы одно ноль - идем на конец файла}
z:=k; {сортировка по возрастанию}
for k:=1 to k do
for j:=1 to z-1 do
if B[j]>B[j+1] then
begin
tmp:=B[j];
B[j]:=B[j+1];
B[j+1]:=tmp;
end;
k:=0 ; {возврат отсортированнного в общий массив а(и) }
for i:=p+1 to m do
begin
k:=k+1;
a[i]:=b[k];
end;
Assign(f2,'out.txt'); {записываем все полученное в файл}
Rewrite(f2);
for i:=1 to n do
Write(f2,A[i]:4);
Close(f2);
end.
А в чем трудность ? это 5-10 минут делов, ты дольше ответа будешь тута ждать, так как это тупо механическая работа =).
Очень нужна помощь !
Добавлено через 2 мин.
Я просто не понимаю как это делается
Варнинг, отредактируй, поставь в теги паскалевские, и сделай редактирование текста, что бы легче читать мона было, тогда я тебе помогу =)
Так ? Плиз хелп
ПОСТАВЬ в паскалевские теги свой код программы, и отредактируй нормально. Я не собираюсь тута пол часа сидеть и пытаться разобрать твой код, мне же не чего не видно, что под чем стоит. Каким ендом какой цикл закрывается и т.д. ! Вот когда сделаешь, тогда я тебе помогу
З.ы. И еще сделай пожалуйста вот так если тебя конечно не затруднит. Это что бы видно было где мне процедуры делать =)
{Здесь сделать процедуру}
.... // какой то код
{здесь конец процедуры}
Я НЕ знаю что значит поставить в теги паскалевские !!!
Разбил и отредактировал, если не так,напиши как надо,я правда не знаю
Когда отвечаешь на пост то вверху есть такая надпись CODE, а там рядом с ней стрелочка. Жмякай на стрелочку, ищи паскаль/делфи, и ставь два тега. Один это начало {code=pas} дальше пишешь код программы тута и потом закрываешь тегом {/code}. ТОлько замени {} на []
{ Задание - если имеются нулевые и отрицательные элементы}
{ то отсортировать элементы стоящие между}
{ первым отрицательным и последним нулевым }
{ в порядке возрастания . Если нет нулевых или отрицательных}
{ не сортировать }
{Надо разбить на процедуры :}
{1)Ввод массива }
{2)Вывод массива }
{3)Обработка массива : дальше идут ПОДПРОЦЕДУРЫ }
{-Анализ (состоит из поиска нулевого и отрицательного элемента а так } {же флаг }
{Который передает управление дальше или на конец программы) }
{-Выбор элементов для сортировки }
{-Сортировка }
{-Возврат отсортированного массива в начальный }
Дело в том что надо сделать именно процедурами,функции не нужны
Program zamuta;
var
i,max,k,x1,x2,n,m,p,n3,tmp,j,z:integer;
a:array [1..100] of integer;
b:array [1..100] of integer;
f1,f2:text;
IncreaseFlag:Boolean;
{Процедура чтения файла}
begin
assign(f1,'in.txt'); {начинаем делать}
assign(f2,'out.txt');
reset(f1);
n:=0;
i:=1;
while not EoF(f1) do {чтение файла}
begin
n:=n+1;
read(f1,a[i]); {перегоняется в массив а(и) }
i:=i+1;
end;
close(f1);
{Закончилась}
{Процедура ОБРАБОТКА}
{Процедура анализ}
for i:=1 to n do {поиск последнего нулевого}
begin
if a[i]=0 then
m:=i;
x1:=1 {присваиваем ему букву м и х1=1}
end;
for i:=n downto 1 do {поиск первого отрицательного}
begin
if a[i]<0 then
p:=i;
x2:=1 {присваеваем ему букву п и х2=1}
end;
{Закончилась}
{Процедура выбор элементов для сортировки}
k:=0; {выбор элементов для сортировки}
for i:=p+1 to m-1 do
begin
k:=k+1;
b[k]:=a[i]; {перегоняем в массив б(к) }
end;
n3:=m-p; {считаем колличество чисел в массиве}
{дальше должна идти проверка если}
{ х1 и х2 оба равны единице то флаг принимает true}
{ и мутим дальше,если хотя бы одно ноль - идем на конец файла}
{Закончилась}
{Процедура сортировка}
z:=k; {сортировка по возрастанию}
for k:=1 to k do
for j:=1 to z-1 do
if B[j]>B[j+1] then
begin
tmp:=B[j];
B[j]:=B[j+1];
B[j+1]:=tmp;
end;
{Закончилась}
{Процедура возврат отсортированного}
k:=0 ; {возврат отсортированнного в общий массив а(и) }
for i:=p+1 to m do
begin
k:=k+1;
a[i]:=b[k];
end;
{Закончилось}
{Закончилась общая процедура ОБРАБОТКА}
{Процедура Вывод}
Assign(f2,'out.txt'); {записываем все полученное в файл}
Rewrite(f2);
for i:=1 to n do
Write(f2,A[i]:4);
Close(f2);
end.
{Закончилась}
Ураааа, хоть это получилось =). Щас сделаю все что в моих силах =) . По хорошему процедуры нужно уметь делать самому =)
Добавлено через 11 мин.
Варнинг, покажи где именно нужно делать процедуры. Те комментарии можешь удалить =), лучше поставь коменты где надо делать процедуры. Потому что там не везде нужны процедуры, в некоторых случаях нужны функции
Добавлено через 13 мин.
Слухай а у тя прога вообще правельно пашет ?
z:=k; {сортировка по возрастанию}
for k:=1 to k do
for j:=1 to z-1 do
САм в шоке
но даже если я меняю k на 10 (тестю и у меня 10 элементов для сортировки получается,все работает)
три раза проверил,пашет
Ну правельно. У тебя ведь там два цикла. Первый вот там де ошибка выполняется один раз если я не ошибаюсь, а второй уже выполняет столько раз сколько тебе нуна !
З.ы. Ща заканчиваю =)
Добавлено через 10 мин.
То что я выделил красным, у мя вопрос. ЗАЧЕМ ТЕБЕ ЭТО ? =)
{1}
Procedure File_Massiv(var f1:text; var a:array [1..100] of integer);
var n,i:integer;
begin
reset(f1);
n:=0;
i:=1;
while not EoF(f1) do {чтение файла}
begin
n:=n+1;
read(f1,a[i]); {перегоняется в массив а(и) }
i:=i+1;
end;
close(f1);
end;
{/1}
{2}
procedure poisk_0(const a:array [1..100] of integer, var M;integer; const n:integer;);
var x1,I:integer;
begin
for i:=1 to n do {поиск последнего нулевого}
begin
if a[i]=0 then
m:=i;
x1:=1 {присваиваем ему букву м и х1=1}
end;
end;
{/2}
{}
Procedure poisk_otr(const a:array [1..100] of integer; var p:integer; const n:integer);
var i,x1:integer;
begin
for i:=n downto 1 do {поиск первого отрицательного}
begin
if a[i]<0 then
p:=i;
x2:=1 {присваиваем ему букву п и х2=1}
end;
end;
{3}
procedure Vibor(const a:array [1..100] of integer; var b:array [1..100] of integer, const p,m:integer);
var k,i:integer;
begin
k:=0; {выбор элементов для сортировки}
for i:=p+1 to m-1 do
begin
k:=k+1;
b[k]:=a[i]; {перегоняем в массив б(к) }
end;
n3:=m-p;
end;
{/3}
{4}
procedure Sort(var b:array [1..100] of integer; const k:integer);
var z,tmp,j:integer;
begin
z:=k; {сортировка по возрастанию}
for k:=1 to k do
for j:=1 to z-1 do
if B[j]>B[j+1] then
begin
tmp:=B[j];
B[j]:=B[j+1];
B[j+1]:=tmp;
end;
{/4}
{5}
procedure Vozvrat(Var a:array [1..100] of integer, const b:array [1..100] of integer; const m,p:ineteger;);
var i,k:integer;
begin;
k:=0 ; {возврат отсортированнного в общий массив а(и) }
for i:=p+1 to m do
begin
k:=k+1;
a[i]:=b[k];
end;
end;
{/5}
{}
procedure zap(var f2:text; const a:array [1..100] of integer; const n:integer;);
var i:integer;
begin
Assign(f2,'out.txt'); {записываем все полученное в файл}
Rewrite(f2);
for i:=1 to n do
Write(f2,A[i]:4);
Close(f2);
end.
{Закончилась}
Спасибо !!! Спасибо !
Попробую доделать
У меня четыре часа ночи)