Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Разбитие на процедуры(СРОЧНО)

Автор: warning777 27.05.2008 1:59

У меня проблема, есть готовая программа но ее надо разбить на процедуры,программа рабочая.
Моя ася 5515795 заплачу 50р smile.gif
Сдавать послезавтра !

Автор: warning777 27.05.2008 2:23

{ Задание - если имеются нулевые и отрицательные элементы}
{ то отсортировать элементы стоящие между}
{ первым отрицательным и последним нулевым }
{ в порядке возрастания . Если нет нулевых или отрицательных}
{ не сортировать }

{Надо разбить на процедуры :}
{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.

Автор: sintanial 27.05.2008 2:26

А в чем трудность ? это 5-10 минут делов, ты дольше ответа будешь тута ждать, так как это тупо механическая работа =).

Автор: warning777 27.05.2008 2:26

Очень нужна помощь !

Добавлено через 2 мин.
Я просто не понимаю как это делается

Автор: sintanial 27.05.2008 2:49

Варнинг, отредактируй, поставь в теги паскалевские, и сделай редактирование текста, что бы легче читать мона было, тогда я тебе помогу =)

Автор: warning777 27.05.2008 2:59

Так ? Плиз хелп smile.gif

Автор: sintanial 27.05.2008 3:07

ПОСТАВЬ в паскалевские теги свой код программы, и отредактируй нормально. Я не собираюсь тута пол часа сидеть и пытаться разобрать твой код, мне же не чего не видно, что под чем стоит. Каким ендом какой цикл закрывается и т.д. ! Вот когда сделаешь, тогда я тебе помогу

З.ы. И еще сделай пожалуйста вот так если тебя конечно не затруднит. Это что бы видно было где мне процедуры делать =)


{Здесь сделать процедуру}
.... // какой то код
{здесь конец процедуры}


Автор: warning777 27.05.2008 3:20

Я НЕ знаю что значит поставить в теги паскалевские !!!
Разбил и отредактировал, если не так,напиши как надо,я правда не знаю

Автор: sintanial 27.05.2008 3:25

Когда отвечаешь на пост то вверху есть такая надпись CODE, а там рядом с ней стрелочка. Жмякай на стрелочку, ищи паскаль/делфи, и ставь два тега. Один это начало {code=pas} дальше пишешь код программы тута и потом закрываешь тегом {/code}. ТОлько замени {} на []

Автор: warning777 27.05.2008 3:26


{ Задание - если имеются нулевые и отрицательные элементы}
{ то отсортировать элементы стоящие между}
{ первым отрицательным и последним нулевым }
{ в порядке возрастания . Если нет нулевых или отрицательных}
{ не сортировать }

{Надо разбить на процедуры :}
{1)Ввод массива }
{2)Вывод массива }
{3)Обработка массива : дальше идут ПОДПРОЦЕДУРЫ }
{-Анализ (состоит из поиска нулевого и отрицательного элемента а так } {же флаг }
{Который передает управление дальше или на конец программы) }
{-Выбор элементов для сортировки }
{-Сортировка }
{-Возврат отсортированного массива в начальный }

Дело в том что надо сделать именно процедурами,функции не нужны sad.gif

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.
{Закончилась}


Автор: sintanial 27.05.2008 3:27

Ураааа, хоть это получилось =). Щас сделаю все что в моих силах =) . По хорошему процедуры нужно уметь делать самому =)

Добавлено через 11 мин.
Варнинг, покажи где именно нужно делать процедуры. Те комментарии можешь удалить =), лучше поставь коменты где надо делать процедуры. Потому что там не везде нужны процедуры, в некоторых случаях нужны функции

Добавлено через 13 мин.
Слухай а у тя прога вообще правельно пашет ?


z:=k; {сортировка по возрастанию}
for k:=1 to k do
for j:=1 to z-1 do



Как это так ? сначало k:=1 а потом делаем цикл до k. Он все время вроде будет выполняться один раз. Если я ошибаюсь то поправь =) !

Автор: warning777 27.05.2008 4:00

САм в шоке smile.gif
но даже если я меняю k на 10 (тестю и у меня 10 элементов для сортировки получается,все работает)
три раза проверил,пашет smile.gif

Автор: sintanial 27.05.2008 4:03

Ну правельно. У тебя ведь там два цикла. Первый вот там де ошибка выполняется один раз если я не ошибаюсь, а второй уже выполняет столько раз сколько тебе нуна !

З.ы. Ща заканчиваю =)

Добавлено через 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.
{Закончилась}



Добавлено через 2 мин.
Основную программу думаю ты сам сделаешь. И еще , так как я писал тута, и уже час ночи( сам понимаешь), то ошибак там не мало =) . Де то end; пропустил в процедуре, де то не описал переменную, де то точку забыл. Подредактируй =)

Автор: warning777 27.05.2008 4:19

Спасибо !!! Спасибо !
Попробую доделать smile.gif
У меня четыре часа ночи)