Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2009, 13:12   #1
pavel42
Пользователь
 
Регистрация: 06.04.2009
Сообщений: 95
Вопрос Удалить первый положительный элемент после максимального

подскажите почему не рабит ?

Код:
program zd6;
uses crt;
type mass=array[1..20] of integer;
var x:mass; n,i,k,m,max:integer;

procedure massiv(var n:integer; var x:mass);
          begin
          write('‚ўҐ¤ЁвҐ Є®«ЁзҐбвў® Ґ«Ґ¬Ґ*в®ў n=');
          readln(n);
          for i:=1 to n do
          readln(x[i]);
          end;
procedure Poisk_max(n:integer; x:mass; var max,k:integer);
          begin
          k:=1;
          max:=x[k];
          for i:=1 to n do
          if max<x[i] then
          begin
          max:=x[i];
          k:=i;
          end;
          end;
procedure delete(n,max,k:integer; x:mass);
          begin
          i:=k;
          while x[i]>0 do
          m:=i;
          begin
          i:=i+1;
          end;
          begin
          for i:=m to n do
          x[i]:=x[i+1];
          end;
          end;
procedure vivod(n:integer; x:mass);
          begin
          writeln('Massiv posle preobrazovaniya');
          for i:=1 to n do
          writeln(x[i]);
          end;
begin
clrscr;
massiv(n,x);
poisk_max(n,x,max,k);
delete(n,max,k,x);
vivod(n,x);
readln
end.
pavel42 вне форума Ответить с цитированием
Старый 25.05.2009, 15:07   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

В функции delete косяки.

Код:
program zd6;
uses crt;
type mass=array[1..20] of integer;
var x:mass; n,i,k,m,max:integer;

procedure massiv(var n:integer; var x:mass);
          begin
          write('‚¢¥¤¨â¥ ª®«¨ç¥á⢮ ¥«¥¬¥*⮢ n=');
          readln(n);
          for i:=1 to n do
           readln(x[i]);
          end;

procedure Poisk_max(n:integer; x:mass; var max,k:integer);
          begin
          k:=1;
          max:=x[k];
          for i:=1 to n do
           if max<x[i] then
            begin
            max:=x[i];
            k:=i;
            end;
          end;

procedure delete(var n : integer; max,k:integer; var x:mass);
var m : integer;
begin
m:=k+1;
while x[m]<=0 do
 inc(m);
dec(n);
for i:=m to n do
 x[i]:=x[i+1];
end;

procedure vivod(n:integer; x:mass);
begin
writeln('Massiv posle preobrazovaniya');
for i:=1 to n do
 writeln(x[i]);
end;

begin
clrscr;
massiv(n,x);
poisk_max(n,x,max,k);
delete(n,max,k,x);
vivod(n,x);
readln;
end.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 25.05.2009, 15:21   #3
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Попробуйте так
Код:
procedure delete(max,k:integer; var n: integer; x:mass);
         var b : boolean;
          begin
          if k<n then i:=k+1 {если максимальный элемент не последний}
                   else exit; {удалять нечего}  
          b:= true;  
         while  b and (i<=n)  do {перебираем элементы пока не найдём >0 или до конца масива}
          begin
           if x[i]<=0 then 
             begin
             b:=false;
             m:=i;
             dec(n);
             end;
           i:=i+1;
          end;
          if not b then
            for i:=m to n do
              x[i]:=x[i+1];
          end;
Sazary
Всё таки я считаю, что необходимо проверять на конец масива. Иначе можем получить ошибку во время выполнения
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 25.05.2009 в 15:27.
Anatole вне форума Ответить с цитированием
Старый 25.05.2009, 15:30   #4
pavel42
Пользователь
 
Регистрация: 06.04.2009
Сообщений: 95
По умолчанию

спс ))) все работает ))
pavel42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить первый элемент с заданным значением. Сдвинуть массив циклически на К элементов в право GydZu Паскаль, Turbo Pascal, PascalABC.NET 10 17.05.2009 16:38
Первый нечетный элемент каждой строки удвоить (предполагается, что в каждой строке есть нечетный элемент Галина002 Помощь студентам 1 18.03.2009 06:30
заменить любой минимальный элемент максимальным и сменить знак максимального элемента противоположным Рітка-кулеметчиця Паскаль, Turbo Pascal, PascalABC.NET 2 26.01.2009 17:45
Вставить первую строку после строки, в которой находится первый встреченный максимальный элемент. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 4 03.12.2008 12:13
Задачка про массив - Из массива удалить четные элементы, стоящие после максимального Crookers Общие вопросы C/C++ 4 23.09.2008 19:35